|
47715
|
MailOnAPI by @Drew_Fitzgerald | Stardance
|
Drew_Fitzgerald
|
1
|
38.79
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T02:16:59Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve made an email server, email client and an IMAP server to allow it to be used in external email clients. The IMAP server is quite feature ful to 2003 standards, um not recent standards it is a custom implementation of RFC3501 which is from 2003 but it was only made obsolete in 2022 and is still used by gmail for it’s IMAP so it’s still very well supported. Right now I’m using Resend as the email service to send out emails but the implementation makes it very easy to support more.", "repo": "https://github.com/Sheep26/MailOnAPI", "demo": "https://mail.drewfitzgerald.co.nz"}]...
|
[{"post_id": 76982, "ts": "202 [{"post_id": 76982, "ts": "2026-10-05T08:08:31Z", "hours": 2.9119, "text": "Many improvements to the code and WE GOT ATTACHMENTS WORKING IN IMAP."}, {"post_id": 75043, "ts": "2026-09-28T23:50:28Z", "hours": 6.8733, "text": "We added the search command and improved the code quite signifigantly."}, {"post_id": 68380, "ts": "2026-09-15T01:06:50Z", "hours": 0.3844, "text": "Today we finished TLS WOOO. Now we actually have a secure IMAP server."}, {"post_id": 68002, "ts": "2026-09-14T11:09:28Z", "hours": 0.9003, "text": "We’ve pretty much finished our IMAP integration, we’ve added copy and expunge today and fixed our idle handler."}, {"post_id": 67889, "ts": "2026-09-14T05:57:27Z", "hours": 5.5586, "text": "I reworked the way we manage things listening in to the socket to add a proper listener module instead of having it all in the handle command function. The handle command function worked until now but now that we want commands that expect more data than just one line we do need to expand it to something more streamlined. Commands can now register listeners on the feed from the socket and remove them as they please in order for them to get the required data. We also added a few commands and Idling which allows email clients to idle instead of just sit and poll the server for new mail. I kinda changed the process buffer function so that it can dynamicly figure out if the newline is crlf or lf instead of guess and so it includes that in it’s output. Because we now have listeners we can now add the append command and it will recieve a stream of data from the listener."}, {"post_id": 66332, "ts": "2026-09-12T03:17:30Z", "hours": 1.1906, "text": "I allowed our IMAP parser to be able to understand parenthasis WOO, i had to change a little bit with our fetch function because it didn’t expect that and I added some more IMAP commands our command repertoire now looks like this."}, {"post_id": 65220, "ts": "2026-09-10T06:12:50Z", "hours": 2.4739, "text": "Users can now change their username, we also made many changes to the fetch function in the IMAP server to make it work properly. haha"}, {"post_id": 62680, "ts": "2026-09-06T05:13:18Z", "hours": 2.9642, "text": "IMAP Server WOOOOO! Today I made an IMAP server for the email server/client so it can be used with say Thunderbird. Now there’s a very very basic implementation but it’s there and you can read emails. WOO."}, {"post_id": 62050, "ts": "2026-09-05T08:47:23Z", "hours": 2.3347, "text": "I significantly improved the code for mailboxes. Now we have table for mailboxes and I also made it more clear which mailbox you’re currently in. This makes it easier for me to eventually implement IMAP."}, {"post_id": 61913, "ts": "2026-09-05T02:45:11Z", "hours": 1.6956, "text": "We have mailboxes now, you can move mail there and yeah."}, {"post_id": 55453, "ts": "2026-08-27T09:38:18Z", "hours": 1.2, "text": "We added custom mailboxes, you can now add and remove maliboxes but we can’t move emails there or setup filters."}, {"post_id": 53642, "ts": "2026-08-24T09:33:11Z", "hours": 1.5769, "text": "Today I completely revamped the way emails are stored in the database to make it better. I also added seen checking to mark emails as read. I added mail boxes as well instead of just inbox and sent so users can have custom mailboxes."}, {"post_id": 48724, "ts": "2026-08-17T07:52:59Z", "hours": 0.6217, "text": "We got replies working WOO, we can send emails, reply, recieve replies and continue on reply chains."}, {"post_id": 48056, "ts": "2026-08-16T10:34:05Z", "hours": 0.9753, "text": "We got attachments working WOOO"}, {"post_id": 47918, "ts": "2026-08-16T05:57:14Z", "hours": 0.6972, "text": "We got viewing our sent emails working"}, {"post_id": 47403, "ts": "2026-08-15T09:57:02Z", "hours": 1.4622, "text": "We can send emails from a ui now WOOO"}, {"post_id": 47337, "ts": "2026-08-15T06:53:01Z", "hours": 0.6708, "text": "We can read our emails now."}, {"post_id": 47304, "ts": "2026-08-15T05:25:04Z", "hours": 1.8989, "text": "We’ve started building the inbox, we can view our emails and see when they were sent to us."}, {"post_id": 46833, "ts": "2026-08-14T11:05:59Z", "hours": 1.3553, "text": "We added the Database, AND GOT RECIEVING EMAILS WORKING WOOOO"}, {"post_id": 46799, "ts": "2026-08-14T09:39:53Z", "hours": 1.11, "text": "We got sending emails, WOOO. No accounts yet but we can send emails over stmp."}]...
|
Title: MailOnAPI by @Drew_Fitzgerald | Stardance
Title: MailOnAPI by @Drew_Fitzgerald | Stardance
Devlogs:
We got sending emails, WOOO. No accounts yet but we can send emails over stmp.
We added the Database, AND GOT RECIEVING EMAILS WORKING WOOOO
We’ve started building the inbox, we can view our emails and see when they were sent to us.
We can read our emails now.
We can send emails from a ui now WOOO
We got viewing our sent emails working
We got attachments working WOOO
We got replies working WOO, we can send emails, reply, recieve replies and continue on reply chains.
Today I completely revamped the way emails are stored in the database to make it better. I also added seen checking to mark emails as read. I added mail boxes as well instead of just inbox and sent so users can have custom mailboxes.
We added custom mailboxes, you can now add and remove maliboxes but we can’t move emails there or setup filters.
We have mailboxes now, you can move mail there and yeah.
I significantly improved the code for mailboxes. Now we have table for mailboxes and I also made it more clear which mailbox you’re currently in. This makes it easier for me to eventually implement IMAP.
IMAP Server WOOOOO! Today I made an IMAP server for the email server/client so it can be used with say Thunderbird. Now there’s a very very basic implementation but it’s there and you can read emails. WOO.
Users can now change their username, we also made many changes to the fetch function in the IMAP server to make it work properly. haha
I allowed our IMAP parser to be able to understand parenthasis WOO, i had to change a little bit with our fetch function because it didn’t expect that and I added some more IMAP commands our command repertoire now looks like this.
I reworked the way we manage things listening in to the socket to add a proper listener module instead of having it all in the handle command function. The handle command function worked until now but now that we want commands that expect more data than just one line we do need to expand it to something more streamlined. Commands can now register listeners on the feed from the socket and remove them as they please in order for them to get the required data. We also added a few commands and Idling which allows email clients to idle instead of just sit and poll the server for new mail. I kinda changed the process buffer function so that it can dynamicly figure out if the newline is crlf or lf instead of guess and so it includes that in it’s output. Because we now have listeners we can now add the append command and it will recieve a stream of data from the listener.
We’ve pretty much finished our IMAP integration, we’ve added copy and expunge today and fixed our idle handler.
Today we finished TLS WOOO. Now we actually have a secure IMAP server.
We added the search command and improved the code quite signifigantly.
Many improvements to the code and WE GOT ATTACHMENTS WORKING IN IMAP.
Ships:
I’ve made an email server, email client and an IMAP server to allow it to be used in external email clients. The IMAP server is quite feature ful to 2003 standards, um not recent standards it is a custom implementation of RFC3501 which is from 2003 but it was only made obsolete in 2022 and is still used by gmail for it’s IMAP so it’s still very well supported. Right now I’m using Resend as the email service to send out emails but the implementation makes it very easy to support more....
|
1793145328.4923775
|
1793231728.4923775
|
|
17783
|
PepperPeople by @ThatFairyFijia | Stardance
|
ThatFairyFijia
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T00:39:39Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first blog– PepperPeople! I’m really proud of this being my first fully fleshed out ship, and while it may not look the prettiest sometimes, it’s something I’ve poured heart, soul, and interest into and finished until the end. Maybe I’ll even keep up the project later on. Though please note, the gardening tips sections are still works in progress for later on. This ship is primarily for the work I’ve done on the home page and pepper species.", "repo": "https://github.com/ZoomingLightningbugGirl/PepperBlog", "demo": "https://zoominglightningbuggirl.github.io/PepperBlog/"}]...
|
[{"post_id": 75410, "ts": "202 [{"post_id": 75410, "ts": "2026-09-30T00:35:41Z", "hours": 0.9111, "text": "Primarily quality of life fixes, as I’ve been working on improving my home page and landing page"}, {"post_id": 22573, "ts": "2026-07-05T03:05:09Z", "hours": 3.3794, "text": "Essentially, this is a website I made while I was still fresh as a developer. I’ve primarily been going through this old site and debugging it and replacing it with more sophisticated coding practices. I also intend to make it more robust and styled better (my color palette picking was NOT the best, back then). I anticipate I will also apply some JavaScript into this project. So far, I’ve replaced non-semantic elements like with more semantic elements like to help with screen readers and SEO. I also have been deleting all the elements I put in while I didn’t know what the margin attribute was… yikes O.O I also coded an image carousel that I’ll be implementing on some of the variety pages soon, and I’m looking to code a new feature that creates a drop-down on the maintenance page for each topic. This would be mainly organizational."}]...
|
Title: PepperPeople by @ThatFairyFijia | Stardance Title: PepperPeople by @ThatFairyFijia | Stardance
Devlogs:
Essentially, this is a website I made while I was still fresh as a developer. I’ve primarily been going through this old site and debugging it and replacing it with more sophisticated coding practices. I also intend to make it more robust and styled better (my color palette picking was NOT the best, back then). I anticipate I will also apply some JavaScript into this project. So far, I’ve replaced non-semantic elements like with more semantic elements like to help with screen readers and SEO. I also have been deleting all the elements I put in while I didn’t know what the margin attribute was… yikes O.O I also coded an image carousel that I’ll be implementing on some of the variety pages soon, and I’m looking to code a new feature that creates a drop-down on the maintenance page for each topic. This would be mainly organizational.
Primarily quality of life fixes, as I’ve been working on improving my home page and landing page
Ships:
I made my first blog– PepperPeople! I’m really proud of this being my first fully fleshed out ship, and while it may not look the prettiest sometimes, it’s something I’ve poured heart, soul, and interest into and finished until the end. Maybe I’ll even keep up the project later on. Though please note, the gardening tips sections are still works in progress for later on. This ship is primarily for the work I’ve done on the home page and pepper species....
|
1793145331.540866
|
1793231731.540866
|
|
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!!...
|
1793145333.3192992
|
1793231733.3192992
|
|
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....
|
1793145335.3682477
|
1793231735.3682477
|
|
47789
|
Whats-the-tea by @Zemra | Stardance
|
Zemra
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T13:46:38Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Slack bot called “What’s the Tea?” ☕️ I originally wanted it to fetch news and this is the first version of that idea. The challenging part was setting up the Slack app and figuring out how everything worked. This was also my first time working with JavaScript, so there was definitely a lot of learning and figuring things out along the way. I’m most proud of actually getting something to work and shipping my first project. This is my first ship and even though it’s a small project, going from an idea to something I could actually run in Slack feels really good. The current version is a prototype, so the news-fetching feature isn’t implemented yet though you can still try it on Slack.", "repo": "https://github.com/av-arch-bit/Whats-the-tea", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 63827, "ts": "202 [{"post_id": 63827, "ts": "2026-09-07T19:59:27Z", "hours": 0.4058, "text": "A bot that gives you news so you stay updated"}]...
|
Title: Whats-the-tea by @Zemra | Stardance
Devlog Title: Whats-the-tea by @Zemra | Stardance
Devlogs:
A bot that gives you news so you stay updated
Ships:
I made a Slack bot called “What’s the Tea?” ☕️ I originally wanted it to fetch news and this is the first version of that idea. The challenging part was setting up the Slack app and figuring out how everything worked. This was also my first time working with JavaScript, so there was definitely a lot of learning and figuring things out along the way. I’m most proud of actually getting something to work and shipping my first project. This is my first ship and even though it’s a small project, going from an idea to something I could actually run in Slack feels really good. The current version is a prototype, so the news-fetching feature isn’t implemented yet though you can still try it on Slack....
|
1793145337.1719255
|
1793231737.1719255
|
|
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....
|
1793145338.9517605
|
1793231738.9517605
|
|
42948
|
Space-Os by @joelj | Stardance
|
joelj
|
1
|
26.08
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T03:25:53Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Space themed Operating system .(or aleast tried to 😅) It features a : - Welcome page : introduces the os -Space notes : a notes app based on actual nasa apollo framework - Orbital rader: a visual representation of our dear solar system with a small description for each planet - Custom cursor : a small cute rocket Main problems : The hacktime setup : this was the problem that took the longest . The standard WakaTime extension out of the box was attempting to sync with official WakaTime proprietary servers rather than the specialized Hackatime endpoints, resulting in broke communication loops. Small bugs for each feature : Its always there , its expected and we can solve them -The curser problem : The custom cursor was only apearng in the main html and not the iframes Things i learned : -How to use html and code a site Mastered divs -Used css a lot Most importantly : Persistence and determination", "repo": "https://github.com/Johan-jim123/JJ-OS", "demo": "https://johan-jim123.github.io/Space-Os/"}]...
|
[{"post_id": 76617, "ts": "202 [{"post_id": 76617, "ts": "2026-10-04T06:01:35Z", "hours": 2.1844, "text": "Devlog#5😁: -Added the music feature ( now you will be able to listenspace ambience) -Added a button to activate it -My codespace is back to copied my code from pycharm to there🥳🥳"}, {"post_id": 74339, "ts": "2026-09-27T06:16:59Z", "hours": 0.6183, "text": "Devlog #4😎😎 : -Made different themes : Using css variables theme-color and theme-glow , changed the look of all elemtns based on the theme . Added the Mode//button to change the theme -Added a special theme button to the notes app so u can miss-match theme combos"}, {"post_id": 73835, "ts": "2026-09-26T03:46:58Z", "hours": 3.56, "text": "Devlog#3 : -added a login-page 😁😁 -my free codespaces ended , so switched to pycharmm used the localstorage to save ur username and password"}, {"post_id": 69711, "ts": "2026-09-17T16:56:22Z", "hours": 4.4192, "text": "Devlog#2: -added localStorage: Bascially u store ur data locally so that when u refresh ur window or clsoe it it doesnt dissapear Added this feature to my Space notes , now u guys r able to add more logs TOO MUCH DEBUGING😭😭"}, {"post_id": 66586, "ts": "2026-09-12T13:05:32Z", "hours": 5.2986, "text": "Rewrote the entire css and made base for the new apps"}, {"post_id": 63321, "ts": "2026-09-07T02:36:26Z", "hours": 0.8678, "text": "Devlog#8: Made a visual representation of our solar system added all our planets (srry pluto) -visualised them with the glowing circle -Made a CUSTOM curser (the little rocket) -with particles that follow it Guys this marks the end of my WebOS 1. thanks for all your support that pushed me this far . See you on WebOs2"}, {"post_id": 62705, "ts": "2026-09-06T06:08:41Z", "hours": 1.4828, "text": "Devlog#7🥳: worked on my space notes app designed it based on real nasa notes and framework😎 -added 4 logs containing actual notes from the apollo and other renowned missions -Made the new log button , helping the user to create their own logs"}, {"post_id": 62025, "ts": "2026-09-05T07:34:54Z", "hours": 1.8303, "text": "Devlog#6👍: Made a new app ( Space notes)😎 -Added it to the desktop with a animated icon -Created a window for the app -Created functions to make the selected window come front -Solved bugs that came with it😭"}, {"post_id": 61361, "ts": "2026-09-04T07:29:35Z", "hours": 1.5322, "text": "Devlog#5😁:(spend a lot more time than i expected) Made the window draggable (by the heading) -Added the close and open buttons ( nasa themed😎 Made the class for those buttons -solved the bugs that came with each step"}, {"post_id": 60919, "ts": "2026-09-03T16:05:51Z", "hours": 0.9767, "text": "Devlog #4 😎: Make the destop of the Os and added my welcome page to it -customized the welcome page by finding this cool bg and added different styles to my div (8 to be precise 😭 ) and solved the bugs that came with it Make the clock and customized it with the Courier New font"}, {"post_id": 60323, "ts": "2026-09-02T16:35:01Z", "hours": 0.3964, "text": "Devlog #4 : - Made a working demo link , started with the Live Server extension by Ritwick Dey. But the link doesn’t work when the codespace is offline 😭. - Then i decided to make a github page which provided as a vaiable solution and allowed to run the website even without the codespace being online 😎."}, {"post_id": 59603, "ts": "2026-09-01T14:52:17Z", "hours": 0.9997, "text": "Worked on these neon pop up texts and found a good bg . Solved many bugs (that’s why it took soo loong 😭)"}, {"post_id": 59018, "ts": "2026-08-31T16:30:05Z", "hours": 0.4831, "text": "Added a coulourful bg , and worked wiht different fonts and colours 😎😎"}, {"post_id": 58182, "ts": "2026-08-30T15:18:00Z", "hours": 1.7658, "text": "Yoo started working on the project 😎. Finally figured out the hacktime in codespace😅. hope to create something speciall!"}]...
|
Title: Space-Os by @joelj | Stardance
Devlogs:
Yo Title: Space-Os by @joelj | Stardance
Devlogs:
Yoo started working on the project 😎. Finally figured out the hacktime in codespace😅. hope to create something speciall!
Added a coulourful bg , and worked wiht different fonts and colours 😎😎
Worked on these neon pop up texts and found a good bg . Solved many bugs (that’s why it took soo loong 😭)
Devlog #4 : - Made a working demo link , started with the Live Server extension by Ritwick Dey. But the link doesn’t work when the codespace is offline 😭. - Then i decided to make a github page which provided as a vaiable solution and allowed to run the website even without the codespace being online 😎.
Devlog #4 😎: Make the destop of the Os and added my welcome page to it -customized the welcome page by finding this cool bg and added different styles to my div (8 to be precise 😭 ) and solved the bugs that came with it Make the clock and customized it with the Courier New font
Devlog#5😁:(spend a lot more time than i expected) Made the window draggable (by the heading) -Added the close and open buttons ( nasa themed😎 Made the class for those buttons -solved the bugs that came with each step
Devlog#6👍: Made a new app ( Space notes)😎 -Added it to the desktop with a animated icon -Created a window for the app -Created functions to make the selected window come front -Solved bugs that came with it😭
Devlog#7🥳: worked on my space notes app designed it based on real nasa notes and framework😎 -added 4 logs containing actual notes from the apollo and other renowned missions -Made the new log button , helping the user to create their own logs
Devlog#8: Made a visual representation of our solar system added all our planets (srry pluto) -visualised them with the glowing circle -Made a CUSTOM curser (the little rocket) -with particles that follow it Guys this marks the end of my WebOS 1. thanks for all your support that pushed me this far . See you on WebOs2
Rewrote the entire css and made base for the new apps
Devlog#2: -added localStorage: Bascially u store ur data locally so that when u refresh ur window or clsoe it it doesnt dissapear Added this feature to my Space notes , now u guys r able to add more logs TOO MUCH DEBUGING😭😭
Devlog#3 : -added a login-page 😁😁 -my free codespaces ended , so switched to pycharmm used the localstorage to save ur username and password
Devlog #4😎😎 : -Made different themes : Using css variables theme-color and theme-glow , changed the look of all elemtns based on the theme . Added the Mode//button to change the theme -Added a special theme button to the notes app so u can miss-match theme combos
Devlog#5😁: -Added the music feature ( now you will be able to listenspace ambience) -Added a button to activate it -My codespace is back to copied my code from pycharm to there🥳🥳
Ships:
I made a Space themed Operating system .(or aleast tried to 😅) It features a : - Welcome page : introduces the os -Space notes : a notes app based on actual nasa apollo framework - Orbital rader: a visual representation of our dear solar system with a small description for each planet - Custom cursor : a small cute rocket Main problems : The hacktime setup : this was the problem that took the longest . The standard WakaTime extension out of the box was attempting to sync with official WakaTime proprietary servers rather than the specialized Hackatime endpoints, resulting in broke communication loops. Small bugs for each feature : Its always there , its expected and we can solve them -The curser problem : The custom cursor was only apearng in the main html and not the iframes Things i learned : -How to use html and code a site Mastered divs -Used css a lot Most importantly : Persistence and determination...
|
1793145341.024388
|
1793231741.024388
|
|
36389
|
Cyberdeck by @sn3ak | Stardance
|
sn3ak
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T19:01:42Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my cyberdeck. Its powered by a raspberry pi 5 and has a 5 inch touchscreen. it is also equipped with a touch pad and keyboard (yes the keyboard says keyboard on it). This is my first hardware project, I have learnt many new things like how to 3d design and how to use a 3d printer. Stardance has really motivated me to complete this project as before it was just an idea in my head that would probably never see the light of day.", "repo": "https://github.com/sn3ak14/Cyberdeck", "demo": ""}]...
|
[{"post_id": 74960, "ts": "202 [{"post_id": 74960, "ts": "2026-09-28T18:13:56Z", "hours": 2.6008, "text": "I finished! After a lot of work and tears a I have finished my cyberdeck! I am ready to ship my project thank you all for the support and good luck with your projects."}, {"post_id": 65499, "ts": "2026-09-10T18:01:27Z", "hours": 2.0503, "text": "New prototype design. I took a break from the project but I’m back now and have decided to take a different approach to the design, rather than putting it inside of a pelican case I’m making its own outer shell this new design should be a lot smaller and easier to work with it is currently a very crude and basic design but this will change, don’t worry. I plan on printing it very soon."}, {"post_id": 37751, "ts": "2026-07-30T17:42:09Z", "hours": 0.5, "text": "Printed the base for my Cyberdeck. I finely was able to print the bottom half of the deck and it went well! the keyboard hole was to small and I haven’t ordered the trackpad yet so I don’t know if it fits. My biggest problem right now is I cant 3d print parts all the time and usually have to wait days between designs this is because I have to travel to use the 3D printer and it also is a shared printer so I cant always use it making time between prints take ages hopefully when I ship my project I will be able to get a 3d printer it would make all of my future projects so much easier to do. Next I plan on printing MK2 for the top half of the design and after I iron out all of the problems I can start to make the deck look amazing."}, {"post_id": 34777, "ts": "2026-07-25T19:24:27Z", "hours": 0.2836, "text": "MK2 Cyberdeck panel. I re-model MK1 to have a better fit for all of the components and rearranged them a bit however the Cyberdeck is looking empty and boring I am thinking of adding switches or possibly another screen but can think of what they will do, my plan is by the next model to decide what the theme should be by making some kind of mood board and then add things accordingly if you have any ideas please let me know in the comments."}, {"post_id": 34201, "ts": "2026-07-24T18:36:07Z", "hours": 0.3325, "text": "Fixing old keyboard. the wires were broken near the connection points I performed a temporary twist and splice on the exposed wired I plan to solder a new cable later but for now it works!"}, {"post_id": 34148, "ts": "2026-07-24T17:25:45Z", "hours": 0.2844, "text": "2 updates to the project, I 3d printed the MK1 top piece with varying success and modelled the MK1 base panel. after ages of waiting for the 3d printer I rent to be free I printed it, it fits the case and the components well (although the screen hole was a lot bigger than it needed to be) however I encountered 2 major errors 1. the dowels I used to connect the two half’s were to big and made gaps in the model, and 2. I may or may not have forgotten to turn supports on witched caused the model to sag a bit but it turned out ok in the end. Next I plan on printing the base panel and re-modelling the top panel."}, {"post_id": 30752, "ts": "2026-07-18T16:10:06Z", "hours": 0.2533, "text": "Cut the panel in half, added dowels to connect them. next I plan on printing it and seeing what i can do to improve it"}, {"post_id": 30099, "ts": "2026-07-17T12:30:05Z", "hours": 0.5225, "text": "MK1 the first test design for the top panel of my cyber deck very early design and will be subject to change. one problem I’m facing is the 3d printer that is available to me (its not mine its kinda like a rental) is to small to fit the whole panel so I will have to print it in separate parts and figure out a way to connect them."}]...
|
Title: Cyberdeck by @sn3ak | Stardance
Devlogs:
M Title: Cyberdeck by @sn3ak | Stardance
Devlogs:
MK1 the first test design for the top panel of my cyber deck very early design and will be subject to change. one problem I’m facing is the 3d printer that is available to me (its not mine its kinda like a rental) is to small to fit the whole panel so I will have to print it in separate parts and figure out a way to connect them.
Cut the panel in half, added dowels to connect them. next I plan on printing it and seeing what i can do to improve it
2 updates to the project, I 3d printed the MK1 top piece with varying success and modelled the MK1 base panel. after ages of waiting for the 3d printer I rent to be free I printed it, it fits the case and the components well (although the screen hole was a lot bigger than it needed to be) however I encountered 2 major errors 1. the dowels I used to connect the two half’s were to big and made gaps in the model, and 2. I may or may not have forgotten to turn supports on witched caused the model to sag a bit but it turned out ok in the end. Next I plan on printing the base panel and re-modelling the top panel.
Fixing old keyboard. the wires were broken near the connection points I performed a temporary twist and splice on the exposed wired I plan to solder a new cable later but for now it works!
MK2 Cyberdeck panel. I re-model MK1 to have a better fit for all of the components and rearranged them a bit however the Cyberdeck is looking empty and boring I am thinking of adding switches or possibly another screen but can think of what they will do, my plan is by the next model to decide what the theme should be by making some kind of mood board and then add things accordingly if you have any ideas please let me know in the comments.
Printed the base for my Cyberdeck. I finely was able to print the bottom half of the deck and it went well! the keyboard hole was to small and I haven’t ordered the trackpad yet so I don’t know if it fits. My biggest problem right now is I cant 3d print parts all the time and usually have to wait days between designs this is because I have to travel to use the 3D printer and it also is a shared printer so I cant always use it making time between prints take ages hopefully when I ship my project I will be able to get a 3d printer it would make all of my future projects so much easier to do. Next I plan on printing MK2 for the top half of the design and after I iron out all of the problems I can start to make the deck look amazing.
New prototype design. I took a break from the project but I’m back now and have decided to take a different approach to the design, rather than putting it inside of a pelican case I’m making its own outer shell this new design should be a lot smaller and easier to work with it is currently a very crude and basic design but this will change, don’t worry. I plan on printing it very soon.
I finished! After a lot of work and tears a I have finished my cyberdeck! I am ready to ship my project thank you all for the support and good luck with your projects.
Ships:
This is my cyberdeck. Its powered by a raspberry pi 5 and has a 5 inch touchscreen. it is also equipped with a touch pad and keyboard (yes the keyboard says keyboard on it). This is my first hardware project, I have learnt many new things like how to 3d design and how to use a 3d printer. Stardance has really motivated me to complete this project as before it was just an idea in my head that would probably never see the light of day....
|
1793145346.2920566
|
1793231746.2920566
|
|
15258
|
My Website About my life by @citunek22 | Stardance
|
citunek22
|
1
|
2.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T18:08:40Z", "hours": 2.0, "multiplier": 1.11, "payout": 2, "blessing": "neutral", "text": "So like i said before it is a website but more of a linktree website instead of a portfolio. I have my tiktok, two of my instagrams and Youtube there so i would be grateful if you would follow me also its hosted on vercel and this is how it looks like", "repo": "https://github.com/citunek22/Raise-Your-Builder-Page", "demo": "https://raise-your-builder-page.vercel.app/"}]...
|
[{"post_id": 66101, "ts": "202 [{"post_id": 66101, "ts": "2026-09-11T18:04:44Z", "hours": 0.5967, "text": "ok so i remade the whole website because i dont like it as much as before and now i added links instead of something and i actually hosted this site trough vercel. This is how it looks like"}, {"post_id": 12677, "ts": "2026-06-20T18:26:47Z", "hours": 0.6553, "text": "Today i was quite lazy and i still dont know which tutorials to use but still i added a background and font color"}, {"post_id": 12117, "ts": "2026-06-19T19:53:10Z", "hours": 0.5567, "text": "Like i said a website about the info i can and want to share like today instead of i wrote which is snake in czech and my mistakes are mistyping z and y because they are switched on czech and english. And if somebody understands czech they know what i wrote. Dont worry its not anything vulgar or explicit."}]...
|
Title: My Website About my life by @citunek22 | St Title: My Website About my life by @citunek22 | Stardance
Devlogs:
Like i said a website about the info i can and want to share like today instead of i wrote which is snake in czech and my mistakes are mistyping z and y because they are switched on czech and english. And if somebody understands czech they know what i wrote. Dont worry its not anything vulgar or explicit.
Today i was quite lazy and i still dont know which tutorials to use but still i added a background and font color
ok so i remade the whole website because i dont like it as much as before and now i added links instead of something and i actually hosted this site trough vercel. This is how it looks like
Ships:
So like i said before it is a website but more of a linktree website instead of a portfolio. I have my tiktok, two of my instagrams and Youtube there so i would be grateful if you would follow me also its hosted on vercel and this is how it looks like...
|
1793145348.3700671
|
1793231748.3700671
|
|
16472
|
DuckyPaste by @ZiggyZonko | Stardance
|
ZiggyZonko
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-11T04:34:16Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple clipboard tool that is backed up by a .json file to prevent loss of entries. The app features a pinning, searching and deleting system to not only store pasted content, but manage them. I created this to categorise and sort my pasted content rather than the usual windows / linux clipboard ( which I actually didn’t know existed prior 😿 ). The sorting by topic is coming in a future update…. The Qol improvements I created: Pinning of entries to help hold on to important content. Deletion of entries, I’m unsure if there is a simple way to delete clipboard entries within the built-in clipboards. Easy to find (as I had no idea about Windows+V). All backed up in a stored .json file in the /db folder, meaning you can easily sort through that if data the application stops. Additionally, the searching of entries helps be organised with your entries, locating important content quickly.", "repo": "https://github.com/ZiggyZonko/DuckyPaste", "demo": "https://github.com/ZiggyZonko/DuckyPaste/releases/tag/1.0"}]...
|
[{"post_id": 8642, "ts": "2026 [{"post_id": 8642, "ts": "2026-06-14T11:22:05Z", "hours": 0.5542, "text": "Implemented a tray icon with a show and quit button, so it runs in the background and picks up on your clipboard when it’s merely running as a task. I also fixed the pinning button, so when pinned, the entry adds a pin emoji 📌 and places it at the top of the list. Release 1.0 is being shipped soon…."}, {"post_id": 8019, "ts": "2026-06-13T11:45:29Z", "hours": 0.555, "text": "Added a working delete button and fixed a few bugs associated with the search bar and the history array, soon to be finalised"}, {"post_id": 7452, "ts": "2026-06-12T12:46:53Z", "hours": 1.0428, "text": "Created a json saving and loading system so you can close down the application and still have the clipboard saved. Added a search bar and pinning button, search bar functionality is added while pinning is not. More to come!"}, {"post_id": 6773, "ts": "2026-06-11T10:50:23Z", "hours": 1.0197, "text": "I created the basis of the clipboard, overiding duplicates, adding a nice aesthetic and consolidating the foundation of DuckyPaste."}]...
|
Title: DuckyPaste by @ZiggyZonko | Stardance
Devl Title: DuckyPaste by @ZiggyZonko | Stardance
Devlogs:
I created the basis of the clipboard, overiding duplicates, adding a nice aesthetic and consolidating the foundation of DuckyPaste.
Created a json saving and loading system so you can close down the application and still have the clipboard saved. Added a search bar and pinning button, search bar functionality is added while pinning is not. More to come!
Added a working delete button and fixed a few bugs associated with the search bar and the history array, soon to be finalised
Implemented a tray icon with a show and quit button, so it runs in the background and picks up on your clipboard when it’s merely running as a task. I also fixed the pinning button, so when pinned, the entry adds a pin emoji 📌 and places it at the top of the list. Release 1.0 is being shipped soon….
Ships:
I made a simple clipboard tool that is backed up by a .json file to prevent loss of entries. The app features a pinning, searching and deleting system to not only store pasted content, but manage them. I created this to categorise and sort my pasted content rather than the usual windows / linux clipboard ( which I actually didn’t know existed prior 😿 ). The sorting by topic is coming in a future update…. The Qol improvements I created: Pinning of entries to help hold on to important content. Deletion of entries, I’m unsure if there is a simple way to delete clipboard entries within the built-in clipboards. Easy to find (as I had no idea about Windows+V). All backed up in a stored .json file in the /db folder, meaning you can easily sort through that if data the application stops. Additionally, the searching of entries helps be organised with your entries, locating important content quickly....
|
1793145350.1880214
|
1793231750.1880214
|
|
47841
|
EpicSquirrelWare by @Epicninja3 | Stardance
|
Epicninja3
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T22:48:49Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a WarioWare-style videogame featuring a squirrel collecting acorns on Godot! There are 3 levels, a platformer, a clicker, and a custom game where you dodge asteroids! I also added my own death and win screens and created my own sprites for the character and a few other features.", "repo": "https://github.com/epicninja3/EpicWare", "demo": "https://epicninja3.itch.io/epicsquirrelware"}]...
|
[{"post_id": 63848, "ts": "202 [{"post_id": 63848, "ts": "2026-09-07T20:34:16Z", "hours": 0.9986, "text": "Finished the last level!!! Space Squirrel got himself a spaceship (don’t ask) and has to navigate through asteroids to collect acorns! Use W/Up and S/Down to move up and down to collect the acorns! I animated the spaceship booster and drew out the asteroids. I’m planning on making the asteroids rotate as they move across the screen. Next Steps: I’m going to make it look a bit cooler, maybe change a few backgrounds. Refine some of the code Ship it!"}, {"post_id": 63263, "ts": "2026-09-07T00:06:04Z", "hours": 7.1731, "text": "Mostly finished working on the Platformer Minigame and the Clicker minigame! Our amazing Space Squirrel is collecting acorns floating in space! I am now going to work on the third minigame as well as the title and ending screens."}]...
|
Title: EpicSquirrelWare by @Epicninja3 | Stardance Title: EpicSquirrelWare by @Epicninja3 | Stardance
Devlogs:
Mostly finished working on the Platformer Minigame and the Clicker minigame! Our amazing Space Squirrel is collecting acorns floating in space! I am now going to work on the third minigame as well as the title and ending screens.
Finished the last level!!! Space Squirrel got himself a spaceship (don’t ask) and has to navigate through asteroids to collect acorns! Use W/Up and S/Down to move up and down to collect the acorns! I animated the spaceship booster and drew out the asteroids. I’m planning on making the asteroids rotate as they move across the screen. Next Steps: I’m going to make it look a bit cooler, maybe change a few backgrounds. Refine some of the code Ship it!
Ships:
I made a WarioWare-style videogame featuring a squirrel collecting acorns on Godot! There are 3 levels, a platformer, a clicker, and a custom game where you dodge asteroids! I also added my own death and win screens and created my own sprites for the character and a few other features....
|
1793145354.0113332
|
1793231754.0113332
|
|
4906
|
spot-electricity-display by @viivi | Stardance
|
viivi
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T11:25:22Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "spot-electricity-display It’s a small ESP-8266 project for displaying the current spot electricity price. I used Arduino IDE for coding the code to fetch and update the data displayed on the screen. I also 3D modelled a case for it with Tinkercad but I haven’t tried to actually print or build it because I don’t have a 3D printer or materials for it. The first photo is an edited demonstration photo how it could look like (perspectives failed). The second photo shows what I actually have. I made this because it could make life easier. Instead of opening an app it would be much easier to check this to see the price. It wasn’t easy to make this because I felt like everything was against me. Libraries weren’t the easiest to use, the screen tweaked all the time and there isn’t many guides for this specific board because it’s quite rare.", "repo": "https://github.com/ViLP357/spot-electricity-display", "demo": ""}]...
|
[{"post_id": 70552, "ts": "202 [{"post_id": 70552, "ts": "2026-09-19T11:11:43Z", "hours": 0.4169, "text": "#4 devlog I guessed it rght, on the next day it worked again. One possible reason it didn’t work then was that the text wasn’t set to white, though it should be white as default. I finished readme and filmed a short demo video."}, {"post_id": 55666, "ts": "2026-08-27T17:01:57Z", "hours": 1.4514, "text": "#3 devlog Today I… tried to add timing for API requests, and I think it works but now my oled screen won’t display anything. There’s 50/50 chance it works tomorrow with exact same code :(. Finished 3D modelling by making a back plate for the case. Wrote something to the README"}, {"post_id": 33636, "ts": "2026-07-23T18:27:06Z", "hours": 2.0792, "text": "#2 devlog Coding Lot of time, no progress. I spent quite a long time trying to make buttons on my board work with my code. I couldn’t make them work :) . Instead of buttons I might make text change with specific a frequence. 3D-modelling I started making box case for simple electronics (the board and battery case). I used Tinkercad for modelling. I had used Tinkercad before but it’s been long time since I used it last time. I really liked that Tinkercad has ready models of electronics even though it didn’t have the ones I’m using. That’s why I had to use components as close as possible to my actual components."}, {"post_id": 9143, "ts": "2026-06-15T09:47:02Z", "hours": 0.9778, "text": "#1 devlog, days 1-2 This project has now officially started. Git and github are set up and the core feature works! Currently the arduino (it’s actually Wemos, not arduino) is able to show current price. I use free API to get spot electricity price (it’s price in Finland). https://api.spot-hinta.fi/JustNow The board I use is Lolin D1 mini Pro V2.0.0 My plan for this project: make the screen display current spot electricity price design and maybe build box/casing for electronics add leds to indicate how cheap or expensive electricity is now add buttons for scrolling future prices"}]...
|
Title: spot-electricity-display by @viivi | Starda Title: spot-electricity-display by @viivi | Stardance
Devlogs:
#1 devlog, days 1-2 This project has now officially started. Git and github are set up and the core feature works! Currently the arduino (it’s actually Wemos, not arduino) is able to show current price. I use free API to get spot electricity price (it’s price in Finland). https://api.spot-hinta.fi/JustNow The board I use is Lolin D1 mini Pro V2.0.0 My plan for this project: make the screen display current spot electricity price design and maybe build box/casing for electronics add leds to indicate how cheap or expensive electricity is now add buttons for scrolling future prices
#2 devlog Coding Lot of time, no progress. I spent quite a long time trying to make buttons on my board work with my code. I couldn’t make them work :) . Instead of buttons I might make text change with specific a frequence. 3D-modelling I started making box case for simple electronics (the board and battery case). I used Tinkercad for modelling. I had used Tinkercad before but it’s been long time since I used it last time. I really liked that Tinkercad has ready models of electronics even though it didn’t have the ones I’m using. That’s why I had to use components as close as possible to my actual components.
#3 devlog Today I… tried to add timing for API requests, and I think it works but now my oled screen won’t display anything. There’s 50/50 chance it works tomorrow with exact same code :(. Finished 3D modelling by making a back plate for the case. Wrote something to the README
#4 devlog I guessed it rght, on the next day it worked again. One possible reason it didn’t work then was that the text wasn’t set to white, though it should be white as default. I finished readme and filmed a short demo video.
Ships:
spot-electricity-display It’s a small ESP-8266 project for displaying the current spot electricity price. I used Arduino IDE for coding the code to fetch and update the data displayed on the screen. I also 3D modelled a case for it with Tinkercad but I haven’t tried to actually print or build it because I don’t have a 3D printer or materials for it. The first photo is an edited demonstration photo how it could look like (perspectives failed). The second photo shows what I actually have. I made this because it could make life easier. Instead of opening an app it would be much easier to check this to see the price. It wasn’t easy to make this because I felt like everything was against me. Libraries weren’t the easiest to use, the screen tweaked all the time and there isn’t many guides for this specific board because it’s quite rare....
|
1793145356.0350528
|
1793231756.0350528
|
|
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....
|
1793145358.0949302
|
1793231758.0949302
|
|
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....
|
1793145361.1614337
|
1793231761.1614337
|
|
47889
|
sorting algs by @Lumethra | Stardance
|
Lumethra
|
1
|
16.0
|
212
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T19:32:31Z", "hours": 16.0, "multiplier": 13.53, "payout": 212, "blessing": "neutral", "text": "A 3d sorting algorithm visualizer with NextJS and ThreeJS. Also its made with luve and happiness.", "repo": "https://github.com/Lumethra/sorting-algs", "demo": "https://lumethra-sorting-algs.vercel.app/"}]...
|
[{"post_id": 73291, "ts": "202 [{"post_id": 73291, "ts": "2026-09-24T19:30:47Z", "hours": 0.4911, "text": "I wrote my readme in this session, so nothing really to say. It was just typing typing typing and finishing this beautiful readme to be able to submit this project."}, {"post_id": 73279, "ts": "2026-09-24T18:57:15Z", "hours": 0.4069, "text": "Implemented pause logic. I implemented pause logic and added an indicator, which shows, which sorting algorithm is currently active. The pause logic was quite painful, cause it just didnt want to stop. Neither with break, nor with return. After a long long long trouble shooting session, I found out, that I forgot .current and it just wont detect correctly, what a stupid bug to troubleshoot 20 min for. Also I fixed an edge case in the demo vid xD"}, {"post_id": 73266, "ts": "2026-09-24T18:19:33Z", "hours": 2.58, "text": "FINALLYYYY Today was the final coding session. I finally got the UI right and am okay with it. Its not the best, but its acceptable. I decided to only use icons, to keep it clean, but I ran into the problem, that the icons arent clear enough to showcase the specific sorting algorithm. So I decided on making a tooltip. But the build in HTML tooltip is too ugly and the delay is annoying. I did some research and found a W3Schools tutorial, they are the goat ( here it is ). I didnt expect front end being so time intensive, but I did need to adjust every value so it looks good, which is very hard to do :(. Ah, I also fixed the bug that when there is the minimal amount of pillars, it will be weird while shuffling (that wasnt proper english). Also the icons changes depending if we are shuffling or sorting and the disables and reinables, which is cool. Uhh, I remembered sth, I need to implement canceling while sorting. Also the vid is one fix old, i did fix the typo in the sorting alg."}, {"post_id": 72326, "ts": "2026-09-22T17:49:27Z", "hours": 1.4453, "text": "Thats enough, Ima do CSS tomorrow. Today I added a slider style and 2 other sliders for the shuffling and sorting speed. Then I hid those 2 and the remove and adding pillar buttons. Also added some CSS for flex, justify content, space between, to seperate the drop down, which I added too. I tried to add a scrolling drop down thing, but failed, uhh, I also adjusted the pillar speed and camera angle. Also I found out, that I can call functions from an array, so I can store a function in an array and then call it like that, thats weird, but also huge. Dont wanna write too much today, cause I still have stuff to do. Ah, also added prevention of shuffling while sorting."}, {"post_id": 71209, "ts": "2026-09-20T13:27:14Z", "hours": 1.2819, "text": "Slider!! Today I added a slider that controls the adding and removing of pillars. I had some minor problems. (No, they were huge, but I feel better saying that they were minor ). First of all, I needed to figure out how to set default values. Normally its just value=””, but this doesnt work for a input type range. After some research I found out that its simply defaultValue, I feel dumb. Then I tried to add/remove pillars with useEffect and monitor the changes of the slider. This worked, but also didnt. I needed to manually update the pillars. It didnt do it automatically. Then my brain suggested something genius. Using onChange. But now I need to do an extra function for it. I thought, maybe I use a while loop once. While the number array is smaller run add function and while its bigger, the remove function. This was uhh, not that good, because it somehow resulted into an infinite while loop, because js is asynchronous. I also tried with a for loop. This threw the error, that I set the 2 useState too often. After some experimenting I ended up with my current solution. I also added 2 useState variables for the sorting delay and shuffling delay. I am still searching for a great mathematical, anti-proportional, linear function to adjust it corresponding to the pillars count. Ahh and I also updated the camera adjusting logic a bit."}, {"post_id": 70217, "ts": "2026-09-18T18:42:46Z", "hours": 1.0872, "text": "HOLY WAS THIS A STRUGGLE !! In this session I implemented adding and removing numbers for a slider in the future (hopefully tomorrow). THIS WAS A PAIN. Especially the camera handling. The very very basic adding and removing function was quite easy, since its only adding numbers or splicing numbers from the array (stack overflow my goat). The camera thing was quite hard though. When I add enough numbers it could make the pillars taller than the viewheight, making them sticking “off screen”. The fix was zooming out. But the fix on stack overflow needed to let it be a JSX element, which somehow didnt work. Finding the fix was one problem. The other problem is, that after finding the fix, it still didnt work and the camera “fell” down. After a long debugging session with various console.logs, I finally found the problem and it was one of the stupid ones. I used z, where it should have been y, thats dumb, but eyy, here we go. There were also a few other bugs, like having an infinite while loop when only having one pillar and shuffling. This was fixed by making the minimum number 2. The other bug was, weird camera behaviors happen, when reducing the number while its shuffled. Fixing it with an instant sort before reducing the number of pillars was my approach. Ya, that was about it. I am done for today."}, {"post_id": 70112, "ts": "2026-09-18T14:17:37Z", "hours": 1.1447, "text": "Better Shuffling logic!!! Before the refinement of the shuffling logic today I just simply randomized the numbers in the array, so that there are new numbers. That introduced one problem, actually two. Numbers could dupe!! I tried to fix it while using numbers with one decimal. The other problem was I could not add an animation anywhere. This is why I decided to make a brand new shuffling logic today. I first tried to fix the duping problem, by checking if this number already exists. This took a while, because I need to figure out how to only watch an array to a specific point, to ignore the upcoming numbers. This resulted in a growing or shrinking animation, which wasnt what I wanted. Then I thought, maybe I can shuffle in another way. Not by changing the value, rather by swapping numbers randomly. Just like in a deck of cards. So I loop through each digit and randomly choose a number in the whole array and then swapping those. This ensures every place got changed. Now there was another problem. It sometimes changed with it self causing it not to do anything. This was fixed by adding a while loop which generates new positions if the position is the own position. While writing this devlog I also thought of another problem. When the total count of numbers is very low, this shuffling method might not shuffle it enough, so I am looping it 2 times, if there are less then 10 numbers in it. Ya, thats about it. Now lets get to the slider which increases the blocks."}, {"post_id": 67381, "ts": "2026-09-13T14:07:06Z", "hours": 1.6225, "text": "Finally something after a long time. I was on vacation during that time, so I needed to use some time to understand what I have done before that. Then I implemented another sorting algorithm!! Selection Sort!! If you take a look inside my commits, you can see it being committed. After implementing selection sort I took a small break and didnt devlog, cause it didnt even took that long. After the break I decided to add a little highlighting animation, that changes the color of the pillars, that are being swapped. That took waay longer that expected, but was the easiest thing to do. I just had to save the 2 values being swapped and somehow pass it inside and get the colors changed. After the highlighting, I decided its time for another sorting alg. The Insertion Sort. That somehow took longer that selection sort. Due to it being almost the exact opposite of bubble sort, I always fell back to it. While researching for insertion sort, I found this great website and quite liked its finishing animation. I also felt that the selecting animation is kinda off for insertion sort. It shouldnt be 2 pillars that are selected. It should be 3 or 1, since one pillar is inserted between 2 other ones and not 2 pillars being swapped. So I made a highlighting version with only one pillar being highlighted and created an if statement of doom inside the meshStandartMaterial. I thought this version was also better for bubble sort than the selection one and switched it too. Ya, that was all of it, I think, Have a great day though :)"}, {"post_id": 48929, "ts": "2026-08-17T14:21:47Z", "hours": 1.9594, "text": "AHHHHHHHHHHHHHHHHHHHHHH Sorting algorithm was made today. I decided on the most basic bubble sort. It is basically just 2 nested for-loops. This wikipedia article ( https://en.wikipedia.org/wiki/Bubble_sort ) has a great code example for it. It was relative easy. But the hard part was to get the animation going. The second part of the vid shows how it was without the fix for the animation. Finding out what the error was, was the first major problem. Fixing it was also hard, because I needed to save the target position after the box was created. This doesnt work, because you cannot call things after a return. Then after a good half hour of struggling and no progress, I asked my father for help. He is a full time developer aaand I hoped, that we could fix this together. He did gave some good calls, but the coding is still done by myself. After some together struggling, that lasted around 30 to 40 min, he proposed something genius. Save a version of the array of numbers, before every sorting step. That meant we need to compare the 2 arrays to get the difference and how the numbers got moved. I then said we could use some complicated for loops and then comparing stuff. He smiled and let me do. After some programming it was finally done and worked. But it wasnt optimized at all and was a bit laggy. Then he couldnt hold on anymore, laughed and told me that there is a dedicated js function just for that. I almost crashed out . Ya, that was todays session. I only implemented the dedicated js function instead of that. Ahh and before asking my father I also found out that js async is weird and that we need to use useEffect, kinda an event listener to see when the useState value changes. Ya, now that was it. See u later or tmrw."}, {"post_id": 48190, "ts": "2026-08-16T14:16:24Z", "hours": 1.0175, "text": "Shuffle mechanism Today was very successful day. The two major breakthroughs are creating the boxes dynamically and shuffle the height by math.random. I am happy that I remembered, that I could use useState to make an array and use the Array.prototype.map() function to simultaneously create the different boxes. And I can change the order of the boxes with changing the order of the components in the array, sooooo, that should be quite easy to archive. The random shuffle thingi was also quite successful. I just Math.random’ed some value and floor it to 2 decimals. Then I do that for every place of the numbers array and set it as new numbers array. This will update the numbers array, because of useState and let React-Three-Fiber rerender the boxes, resulting in a shuffling. The sorting will need an async function though, or else it will be instant sorting, which isnt the goal of this sorting thing. Enough yap, back to coding, eventually, maybe."}, {"post_id": 47505, "ts": "2026-08-15T13:45:14Z", "hours": 1.2922, "text": "After messing around abit and finding out that it is possible to have multiple meshes, I finally started with the actual project and made a Box func. While making it I decided on doing it with an Interface to be able to learn that (the whole point of this proj was to learn ThreeJS and NextJS). This Box func can be reused and the properties of this box can also be parsed inside. Soo every Box is the same and makes animating easier. I also added a simple moving animation. Then the quest was to level the boxes on the bottom. After a whole 5 min of struggling, I found a random post saying I could do scale / 2, which also worked. The moving the box was the hard part, because NextJS requires me to use useState, or else it wont get updated. This took me very long, very very very long to get right. The moving seems abit laggy in the vid, but in real life its smooth, i dunno why, but ya. The last part, was centering this whole thing, because the camera always points to [0, 0, 0] which is strange, but whatever, so i needed to move the boxes collectively somewhere else. So I tried alot of stuff, but finally found out that groups have props too, so I can group them and move them to the left and down. This was great !! Later I need to find out how to do this automatically, but thats not present-me problem, its a future-me problem."}, {"post_id": 47096, "ts": "2026-08-14T18:50:47Z", "hours": 1.3286, "text": "First devlog My friend @Leon gave me this idea to work with ThreeJS in NextJS, so I can get familiar with both at the same time. And I said, fine whatever. I had the idea to do a sorting algorithm showcaser with pillars of different heights. And code different sorting methods to sort these pillars. Soo I created a Next instance like my personal site aaaand messed up. So I had to delete it and install again, WITHOUT TailwindCSS. Finally having a working NextJS instance I installed ThreeJS, but then I ran into the problem that ThreeJS didnt like pnpm, soo I reinstalled the whole shit with npm, which obviously didnt work. So I debugged the whole shit and every reddit post and stackoverflow post said to reinstall it again, so the installer cleanly installs the JSX module that was missing, which it didnt. So I decided to just paste the whole error message into google and there it was. The holy stackoverflow post that gave me a command to reinstall the dependencies and advised me to reload my vscode window to prevent cache. THIS WORKED!!! My next task was to read and follow the React Three Fiber docs, which is threejs but in better for react, so also for nextjs. I followed it (which was very hard, since its written unclearly, but I think when you know the normal threejs it should be fine, which I obviously am not familiar with) and after some time got an overall idea how this thing works. Then I found a task in this doc and it is to create a spinning cube. I took it seriously and made it todays goal. And here we are. To be fair, it was okay to finish, since there was already a sample code written in vite or whatever it was. I just needed to rewrite that for my nextjs instance. Ya that was todays progress. I think when I got the motivation to continue later, it will be waay easier to do, since I know the basics now. Holy yap, bye, see u later, maybe, well, bye"}]...
|
Title: sorting algs by @Lumethra | Stardance
Devl Title: sorting algs by @Lumethra | Stardance
Devlogs:
First devlog My friend @Leon gave me this idea to work with ThreeJS in NextJS, so I can get familiar with both at the same time. And I said, fine whatever. I had the idea to do a sorting algorithm showcaser with pillars of different heights. And code different sorting methods to sort these pillars. Soo I created a Next instance like my personal site aaaand messed up. So I had to delete it and install again, WITHOUT TailwindCSS. Finally having a working NextJS instance I installed ThreeJS, but then I ran into the problem that ThreeJS didnt like pnpm, soo I reinstalled the whole shit with npm, which obviously didnt work. So I debugged the whole shit and every reddit post and stackoverflow post said to reinstall it again, so the installer cleanly installs the JSX module that was missing, which it didnt. So I decided to just paste the whole error message into google and there it was. The holy stackoverflow post that gave me a command to reinstall the dependencies and advised me to reload my vscode window to prevent cache. THIS WORKED!!! My next task was to read and follow the React Three Fiber docs, which is threejs but in better for react, so also for nextjs. I followed it (which was very hard, since its written unclearly, but I think when you know the normal threejs it should be fine, which I obviously am not familiar with) and after some time got an overall idea how this thing works. Then I found a task in this doc and it is to create a spinning cube. I took it seriously and made it todays goal. And here we are. To be fair, it was okay to finish, since there was already a sample code written in vite or whatever it was. I just needed to rewrite that for my nextjs instance. Ya that was todays progress. I think when I got the motivation to continue later, it will be waay easier to do, since I know the basics now. Holy yap, bye, see u later, maybe, well, bye
After messing around abit and finding out that it is possible to have multiple meshes, I finally started with the actual project and made a Box func. While making it I decided on doing it with an Interface to be able to learn that (the whole point of this proj was to learn ThreeJS and NextJS). This Box func can be reused and the properties of this box can also be parsed inside. Soo every Box is the same and makes animating easier. I also added a simple moving animation. Then the quest was to level the boxes on the bottom. After a whole 5 min of struggling, I found a random post saying I could do scale / 2, which also worked. The moving the box was the hard part, because NextJS requires me to use useState, or else it wont get updated. This took me very long, very very very long to get right. The moving seems abit laggy in the vid, but in real life its smooth, i dunno why, but ya. The last part, was centering this whole thing, because the camera always points to [0, 0, 0] which is strange, but whatever, so i needed to move the boxes collectively somewhere else. So I tried alot of stuff, but finally found out that groups have props too, so I can group them and move them to the left and down. This was great !! Later I need to find out how to do this automatically, but thats not present-me problem, its a future-me problem.
Shuffle mechanism Today was very successful day. The two major breakthroughs are creating the boxes dynamically and shuffle the height by math.random. I am happy that I remembered, that I could use useState to make an array and use the Array.prototype.map() function to simultaneously create the different boxes. And I can change the order of the boxes with changing the order of the components in the array, sooooo, that should be quite easy to archive. The random shuffle thingi was also quite successful. I just Math.random’ed some value and floor it to 2 decimals. Then I do that for every place of the numbers array and set it as new numbers array. This will update the numbers array, because of useState and let React-Three-Fiber rerender the boxes, resulting in a shuffling. The sorting will need an async function though, or else it will be instant sorting, which isnt the goal of this sorting thing. Enough yap, back to coding, eventually, maybe.
AHHHHHHHHHHHHHHHHHHHHHH Sorting algorithm was made today. I decided on the most basic bubble sort. It is basically just 2 nested for-loops. This wikipedia article ( https://en.wikipedia.org/wiki/Bubble_sort ) has a great code example for it. It was relative easy. But the hard part was to get the animation going. The second part of the vid shows how it was without the fix for the animation. Finding out what the error was, was the first major problem. Fixing it was also hard, because I needed to save the target position after the box was created. This doesnt work, because you cannot call things after a return. Then after a good half hour of struggling and no progress, I asked my father for help. He is a full time developer aaand I hoped, that we could fix this together. He did gave some good calls, but the coding is still done by myself. After some together struggling, that lasted around 30 to 40 min, he proposed something genius. Save a version of the array of numbers, before every sorting step. That meant we need to compare the 2 arrays to get the difference and how the numbers got moved. I then said we could use some complicated for loops and then comparing stuff. He smiled and let me do. After some programming it was finally done and worked. But it wasnt optimized at all and was a bit laggy. Then he couldnt hold on anymore, laughed and told me that there is a dedicated js function just for that. I almost crashed out . Ya, that was todays session. I only implemented the dedicated js function instead of that. Ahh and before asking my father I also found out that js async is weird and that we need to use useEffect, kinda an event listener to see when the useState value changes. Ya, now that was it. See u later or tmrw.
Finally something after a long time. I was on vacation during that time, so I needed to use some time to understand what I have done before that. Then I implemented another sorting algorithm!! Selection Sort!! If you take a look inside my commits, you can see it being committed. After implementing selection sort I took a small break and didnt devlog, cause it didnt even took that long. After the break I decided to add a little highlighting animation, that changes the color of the pillars, that are being swapped. That took waay longer that expected, but was the easiest thing to do. I just had to save the 2 values being swapped and somehow pass it inside and get the colors changed. After the highlighting, I decided its time for another sorting alg. The Insertion Sort. That somehow took longer that selection sort. Due to it being almost the exact opposite of bubble sort, I always fell back to it. While researching for insertion sort, I found this great website and quite liked its finishing animation. I also felt that the selecting animation is kinda off for insertion sort. It shouldnt be 2 pillars that are selected. It should be 3 or 1, since one pillar is inserted between 2 other ones and not 2 pillars being swapped. So I made a highlighting version with only one pillar being highlighted and created an if statement of doom inside the meshStandartMaterial. I thought this version was also better for bubble sort than the selection one and switched it too. Ya, that was all of it, I think, Have a great day though :)
Better Shuffling logic!!! Before the refinement of the shuffling logic today I just simply randomized the numbers in the array, so that there are new numbers. That introduced one problem, actually two. Numbers could dupe!! I tried to fix it while using numbers with one decimal. The other problem was I could not add an animation anywhere. This is why I decided to make a brand new shuffling logic today. I first tried to fix the duping problem, by checking if this number already exists. This took a while, because I need to figure out how to only watch an array to a specific point, to ignore the upcoming numbers. This resulted in a growing or shrinking animation, which wasnt what I wanted. Then I thought, maybe I can shuffle in another way. Not by changing the value, rather by swapping numbers randomly. Just like in a deck of cards. So I loop through each digit and randomly choose a number in the whole array and then swapping those. This ensures every place got changed. Now there was another problem. It sometimes changed with it self causing it not to do anything. This was fixed by adding a while loop which generates new positions if the position is the own position. While writing this devlog I also thought of another problem. When the total count of numbers is very low, this shuffling method might not shuffle it enough, so I am looping it 2 times, if there are less then 10 numbers in it. Ya, thats about it. Now lets get to the slider which increases the blocks.
HOLY WAS THIS A STRUGGLE !! In this session I implemented adding and removing numbers for a slider in the future (hopefully tomorrow). THIS WAS A PAIN. Especially the camera handling. The very very basic adding and removing function was quite easy, since its only adding numbers or splicing numbers from the array (stack overflow my goat). The camera thing was quite hard though. When I add enough numbers it could make the pillars taller than the viewheight, making them sticking “off screen”. The fix was zooming out. But the fix on stack overflow needed to let it be a JSX element, which somehow didnt work. Finding the fix was one problem. The other problem is, that after finding the fix, it still didnt work and the camera “fell” down. After a long debugging session with various console.logs, I finally found the problem and it was one of the stupid ones. I used z, where it should have been y, thats dumb, but eyy, here we go. There were also a few other bugs, like having an infinite while loop when only having one pillar and shuffling. This was fixed by making the minimum number 2. The other bug was, weird camera behaviors happen, when reducing the number while its shuffled. Fixing it with an instant sort before reducing the number of pillars was my approach. Ya, that was about it. I am done for today.
Slider!! Today I added a slider that controls the adding and removing of pillars. I had some minor problems. (No, they were huge, but I feel better saying that they were minor ). First of all, I needed to figure out how to set default values. Normally its just value=””, but this doesnt work for a input type range. After some research I found out that its simply defaultValue, I feel dumb. Then I tried to add/remove pillars with useEffect and monitor the changes of the slider. This worked, but also didnt. I needed to manually update the pillars. It didnt do it automatically. Then my brain suggested something genius. Using onChange. But now I need to do an extra function for it. I thought, maybe I use a while loop once. While the number array is smaller run add function and while its bigger, the remove function. This was uhh, not that good, because it somehow resulted into an infinite while loop, because js is asynchronous. I also tried with a for loop. This threw the error, that I set the 2 useState too often. After some experimenting I ended up with my current solution. I also added 2 useState variables for the sorting delay and shuffling delay. I am still searching for a great mathematical, anti-proportional, linear function to adjust it corresponding to the pillars count. Ahh and I also updated the camera adjusting logic a bit.
Thats enough, Ima do CSS tomorrow. Today I added a slider style and 2 other sliders for the shuffling and sorting speed. Then I hid those 2 and the remove and adding pillar buttons. Also added some CSS for flex, justify content, space between, to seperate the drop down, which I added too. I tried to add a scrolling drop down thing, but failed, uhh, I also adjusted the pillar speed and camera angle. Also I found out, that I can call functions from an array, so I can store a function in an array and then call it like that, thats weird, but also huge. Dont wanna write too much today, cause I still have stuff to do. Ah, also added prevention of shuffling while sorting.
FINALLYYYY Today was the final coding session. I finally got the UI right and am okay with it. Its not the best, but its acceptable. I decided to only use icons, to keep it clean, but I ran into the problem, that the icons arent clear enough to showcase the specific sorting algorithm. So I decided on making a tooltip. But the build in HTML tooltip is too ugly and the delay is annoying. I did some research and found a W3Schools tutorial, they are the goat ( here it is ). I didnt expect front end being so time intensive, but I did need to adjust every value so it looks good, which is very hard to do :(. Ah, I also fixed the bug that when there is the minimal amount of pillars, it will be weird while shuffling (that wasnt proper english). Also the icons changes depending if we are shuffling or sorting and the disables and reinables, which is cool. Uhh, I remembered sth, I need to implement canceling while sorting. Also the vid is one fix old, i did fix the typo in the sorting alg.
Implemented pause logic. I implemented pause logic and added an indicator, which shows, which sorting algorithm is currently active. The pause logic was quite painful, cause it just didnt want to stop. Neither with break, nor with return. After a long long long trouble shooting session, I found out, that I forgot .current and it just wont detect correctly, what a stupid bug to troubleshoot 20 min for. Also I fixed an edge case in the demo vid xD
I wrote my readme in this session, so nothing really to say. It was just typing typing typing and finishing this beautiful readme to be able to submit this project.
Ships:
A 3d sorting algorithm visualizer with NextJS and ThreeJS. Also its made with luve and happiness....
|
1793145363.1937933
|
1793231763.1937933
|
|
37708
|
WinFlow by @Advay-CMD | Stardance
|
Advay-CMD
|
1
|
44.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T19:07:15Z", "hours": 44.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Windows is incomplete, incoherent, and Microslop copyrights every code and then doesn’t listen to their consumers. I am here to change this. Fix windows from the disasterous state, where you own the operating system, Microsoft doesn’t. Colors, textures - everything is just Microsoft’ed. Privacy doesn’t exist, it is like giving your life’s data to Microsoft to have convinence in return. I am here to prove that privacy and convinence can co-exist. Windows is long way, and STILL, Microsoft has to bring more SLOP. Let’s fix this. Lets fix it, how things should be… WinFlow is a massive productivity and beautified UI/UX app suite. It helps you have productivity, convenience and neat UI/UX all adapted for people who work a LOT and complain about simple things in comp and also for people who have a candyeye. It aims 4 fundmentals: Functionality: How well the users problem is solved? Polish: How good is the UI/UX of the app? Simplicity: How simple is the app to use? Speed: How FAST is it? All of them combine to create WinFlow!", "repo": "https://github.com/Advay-CMD/WinFlow/", "demo": "https://github.com/Advay-CMD/WinFlow/releases"}]...
|
[{"post_id": 67602, "ts": "202 [{"post_id": 67602, "ts": "2026-09-13T19:02:29Z", "hours": 0.7736, "text": "WinFlow -> Devlog 6 Finally done. Its DONE! I know, shipwrights would call this AI, maybe. But really, I can’t belive that I coded the whole UI, only learning concepts of css from Duckduckgo and Gemini. I always thought this project will have a lot of AI, but no. I have finally mastered my CSS, and HTML. I love it! I am at least proud of the app, and even though its a simple home screen, it shows a glimpse of a full app, that is usable, and loved by people! Any suggestions can be made to make this project better! Please do give suggestions! It will make this project better! Thanks for the attention."}, {"post_id": 67280, "ts": "2026-09-13T10:54:56Z", "hours": 10.0781, "text": "WinFlow -> Devlog 5 Finally, I am somewhere, my project is FINALLY usable!! I have File and Folder linked to the backend working independently, and it works. Somehow there is some errors in system, I have no idea why… But, it still creates the folder! Let’s go! Good right? And now I am just creating the readme, and after that I guess, I will be ready to publish my thing. Any suggestions you guys want to give, you can! I will try my best to improve my UI/backend. Until then, take care! Even after the release, the WinFlow Explorer will STILL be very experimental. Unusable for normal use, due to very less features. But, just wait. Just wait. Probably later I will make more UI elements, make it better!"}, {"post_id": 53925, "ts": "2026-08-24T17:02:50Z", "hours": 8.6008, "text": "WinFlow -> Devlog 4 Oh, yes, time = 8h 36min, which is ~516min, and, I don’t want to spam seconds. Let me be frank. It is a pain to devlop the simple-simple goody app WinFlow Explorer. It is a headache a little…. I still gotta do MORE AND MORE WIDGETS!!! HONEST! But I promise you they are not going to be microsoft ads and Xbox promotion and all that crap. In the UI part, I have GELLED major components, made it according to my set of rules for UI called TrueUI, and a LOT of components are liqidised(made in variables, ready to be changed). I still gotta make components more liquid tho, like for cards, tabs, almost everything, so that the user has UNLIMITED customizablity. Yes, for all of the people who are crazy meniacs like in my class boys, you can PINK AND BLACK and ASSIGN ANY COLOR TO COMPONENTS! YES!!! You can! Unlimited Customisability is one of the features… I am going to do pixel anim in the future, but future. Right now I have A LOOOOOTT of widgets to make. Oh btw, I have STILL NOT DONE MY OTHER FILES IN GENERAL UI STUFF . Anyway I will implement and don’t worry boys, or girls, we can black the ui, pink the ui, and (my fav color) blue the UI. It is kindda in testing so, it is not THAT pretty sight, but the amount of hardwork it takes…. I think it will take time to realise. I have to sit and finetune the values until perfect, and that IS NOT easy. It is immensly hard and feels very rubbish. But whatever. Part of software devlopment. I also hope I get a SuperStar, tho that somehow feels highly unlikely. Anyway, I don’t care if I get that or not, I just want user satisfaction. I want the user to be immensly pleased. And I swear if someone from the shipwrights say: “This is fully vibecoded”. I swear I will feel like choke them….. I hate people who have one glance and say “Extremely Likely Used AI”. Honestly, I have used AI 1%-2%, not for UI, but for the latter backend… I still gotta make UI better, somehow it feels plain and boring. idk why… If you have some UI ideas, tell me, I can then improve my app~ I would love if you follow me for more devlogs and keep up with my journey though: Dark and Difficult things lie ahead…"}, {"post_id": 40835, "ts": "2026-08-04T16:50:25Z", "hours": 7.7931, "text": "WinFlow -> Devlog 3 YES! YES!!!! *, I KNOW, you would be screaming WHY ADVAY?? WHY DON’T YOU POST ANOTHER DEVLOG!!?? IT IS 7H 44MIN DONE!!! I know. I know. Sorry, just get too carried away with the code… ehh So, what am I done with? Am I supossed to dance? NO! This is a very complex project. Honest. Even the home page, EVEN AFTER ~21H, is NOT YET completed. But look at the vid! neat result. My journey to making a software, so complex and so pleasing at same time is TOOO hard. And ppl, I am only 13y, a normal child studing in school, kind of sneaking time to code! 😭 Lets look at the different aspects that I coded Backend Yes, backend, I made lsa, “testmodel1” is the nickname. And it is sucessful, so I am merging with ls, and making current ls, lsa. TestModel1 has MFT(Master Boot Record) scan, which ofc requires admin permissions, but see the speed. You might not notice it, but when you have ~a LOT A LOT of files to list, TestModel1 cruises and litrally halves the time. In search model, this would be EXTREMELY USEFUL. Scan the MFT and then find the file. It is that simple. (Not at ALL simple to code. HONEST. It is a risk with the disk. One thing coded wrong, I am cooked. But don’t worry, it works, and AI also helped and tested.) Frontend You can see the vid for yourself(special bonus… pls watch) That’s it. Follow if you want me to keep working on this and give motivation. Also like, and YES! if you think this can be a super star project write “superstar” in comments(tho i am not making for the sake of earning superstar, it is to rectify windows.)"}, {"post_id": 35772, "ts": "2026-07-27T12:32:07Z", "hours": 10.2056, "text": "WinFlow -> Devlog 2 I was soooo into coding, I forgot all about my time. Now the 9min I coded are LOST. Sorry, Hackclub staff! 😭 Pls give me that! Anyway, I have coded WinFlow UI in tauri with html and css, an explorer -> I have also added gradients, fresh and unique to my explorer… What else? I have also implemented in the files area a drag selection box, neat animation wrapped in good color and border-radius. Honestly, this HAS been a BIG learning experience in css, I used to go away when I heard CSS, now, I kindda got the hang. Loving it! Anyway, here is the progress img > And PLS, some of you in the stardance said that it is created using AI, but PLEASE, believe me, I didn’t. Any proof, pls check the hackatime. Pls Follow, it will make me more motivated to complete this project(right now, to create this, I was on a emotional burnout😭) Any suggetions pls comment. (few bugs like , recents and fav is selected. and the 2,3,4. pls forgive me for that…)"}, {"post_id": 32477, "ts": "2026-07-21T17:59:38Z", "hours": 6.3036, "text": "WinFlow -> Devlog 1 I am making a project called WinFlow WinFlow => App that makes your workspace more fluent buttery with awsome UI. Tech stack: Tauri(RUST, html, css, js) C++(Rust IPC) I am building a litral file explorer called WinFlow Explorer , but for that I have to do CLI part. I implemented a prototype, well commented code, and here is the result. I will then begin by rust IPC and then start buiding the app and the UI. My app is also better and faster than microsoft, because the explorer is not made by microsoft, it’s made by me (secret: I use recursive method, while windows struggles to calculate the estimated time :))"}]...
|
Title: WinFlow by @Advay-CMD | Stardance
Devlogs: Title: WinFlow by @Advay-CMD | Stardance
Devlogs:
WinFlow -> Devlog 1 I am making a project called WinFlow WinFlow => App that makes your workspace more fluent buttery with awsome UI. Tech stack: Tauri(RUST, html, css, js) C++(Rust IPC) I am building a litral file explorer called WinFlow Explorer , but for that I have to do CLI part. I implemented a prototype, well commented code, and here is the result. I will then begin by rust IPC and then start buiding the app and the UI. My app is also better and faster than microsoft, because the explorer is not made by microsoft, it’s made by me (secret: I use recursive method, while windows struggles to calculate the estimated time :))
WinFlow -> Devlog 2 I was soooo into coding, I forgot all about my time. Now the 9min I coded are LOST. Sorry, Hackclub staff! 😭 Pls give me that! Anyway, I have coded WinFlow UI in tauri with html and css, an explorer -> I have also added gradients, fresh and unique to my explorer… What else? I have also implemented in the files area a drag selection box, neat animation wrapped in good color and border-radius. Honestly, this HAS been a BIG learning experience in css, I used to go away when I heard CSS, now, I kindda got the hang. Loving it! Anyway, here is the progress img > And PLS, some of you in the stardance said that it is created using AI, but PLEASE, believe me, I didn’t. Any proof, pls check the hackatime. Pls Follow, it will make me more motivated to complete this project(right now, to create this, I was on a emotional burnout😭) Any suggetions pls comment. (few bugs like , recents and fav is selected. and the 2,3,4. pls forgive me for that…)
WinFlow -> Devlog 3 YES! YES!!!! *, I KNOW, you would be screaming WHY ADVAY?? WHY DON’T YOU POST ANOTHER DEVLOG!!?? IT IS 7H 44MIN DONE!!! I know. I know. Sorry, just get too carried away with the code… ehh So, what am I done with? Am I supossed to dance? NO! This is a very complex project. Honest. Even the home page, EVEN AFTER ~21H, is NOT YET completed. But look at the vid! neat result. My journey to making a software, so complex and so pleasing at same time is TOOO hard. And ppl, I am only 13y, a normal child studing in school, kind of sneaking time to code! 😭 Lets look at the different aspects that I coded Backend Yes, backend, I made lsa, “testmodel1” is the nickname. And it is sucessful, so I am merging with ls, and making current ls, lsa. TestModel1 has MFT(Master Boot Record) scan, which ofc requires admin permissions, but see the speed. You might not notice it, but when you have ~a LOT A LOT of files to list, TestModel1 cruises and litrally halves the time. In search model, this would be EXTREMELY USEFUL. Scan the MFT and then find the file. It is that simple. (Not at ALL simple to code. HONEST. It is a risk with the disk. One thing coded wrong, I am cooked. But don’t worry, it works, and AI also helped and tested.) Frontend You can see the vid for yourself(special bonus… pls watch) That’s it. Follow if you want me to keep working on this and give motivation. Also like, and YES! if you think this can be a super star project write “superstar” in comments(tho i am not making for the sake of earning superstar, it is to rectify windows.)
WinFlow -> Devlog 4 Oh, yes, time = 8h 36min, which is ~516min, and, I don’t want to spam seconds. Let me be frank. It is a pain to devlop the simple-simple goody app WinFlow Explorer. It is a headache a little…. I still gotta do MORE AND MORE WIDGETS!!! HONEST! But I promise you they are not going to be microsoft ads and Xbox promotion and all that crap. In the UI part, I have GELLED major components, made it according to my set of rules for UI called TrueUI, and a LOT of components are liqidised(made in variables, ready to be changed). I still gotta make components more liquid tho, like for cards, tabs, almost everything, so that the user has UNLIMITED customizablity. Yes, for all of the people who are crazy meniacs like in my class boys, you can PINK AND BLACK and ASSIGN ANY COLOR TO COMPONENTS! YES!!! You can! Unlimited Customisability is one of the features… I am going to do pixel anim in the future, but future. Right now I have A LOOOOOTT of widgets to make. Oh btw, I have STILL NOT DONE MY OTHER FILES IN GENERAL UI STUFF . Anyway I will implement and don’t worry boys, or girls, we can black the ui, pink the ui, and (my fav color) blue the UI. It is kindda in testing so, it is not THAT pretty sight, but the amount of hardwork it takes…. I think it will take time to realise. I have to sit and finetune the values until perfect, and that IS NOT easy. It is immensly hard and feels very rubbish. But whatever. Part of software devlopment. I also hope I get a SuperStar, tho that somehow feels highly unlikely. Anyway, I don’t care if I get that or not, I just want user satisfaction. I want the user to be immensly pleased. And I swear if someone from the shipwrights say: “This is fully vibecoded”. I swear I will feel like choke them….. I hate people who have one glance and say “Extremely Likely Used AI”. Honestly, I have used AI 1%-2%, not for UI, but for the latter backend… I still gotta make UI better, somehow it feels plain and boring. idk why… If you have some UI ideas, tell me, I can then improve my app~ I would love if you follow me for more devlogs and keep up with my journey though: Dark and Difficult things lie ahead…
WinFlow -> Devlog 5 Finally, I am somewhere, my project is FINALLY usable!! I have File and Folder linked to the backend working independently, and it works. Somehow there is some errors in system, I have no idea why… But, it still creates the folder! Let’s go! Good right? And now I am just creating the readme, and after that I guess, I will be ready to publish my thing. Any suggestions you guys want to give, you can! I will try my best to improve my UI/backend. Until then, take care! Even after the release, the WinFlow Explorer will STILL be very experimental. Unusable for normal use, due to very less features. But, just wait. Just wait. Probably later I will make more UI elements, make it better!
WinFlow -> Devlog 6 Finally done. Its DONE! I know, shipwrights would call this AI, maybe. But really, I can’t belive that I coded the whole UI, only learning concepts of css from Duckduckgo and Gemini. I always thought this project will have a lot of AI, but no. I have finally mastered my CSS, and HTML. I love it! I am at least proud of the app, and even though its a simple home screen, it shows a glimpse of a full app, that is usable, and loved by people! Any suggestions can be made to make this project better! Please do give suggestions! It will make this project better! Thanks for the attention.
Ships:
Windows is incomplete, incoherent, and Microslop copyrights every code and then doesn’t listen to their consumers. I am here to change this. Fix windows from the disasterous state, where you own the operating system, Microsoft doesn’t. Colors, textures - everything is just Microsoft’ed. Privacy doesn’t exist, it is like giving your life’s data to Microsoft to have convinence in return. I am here to prove that privacy and convinence can co-exist. Windows is long way, and STILL, Microsoft has to bring more SLOP. Let’s fix this. Lets fix it, how things should be… WinFlow is a massive productivity and beautified UI/UX app suite. It helps you have productivity, convenience and neat UI/UX all adapted for people who work a LOT and complain about simple things in comp and also for people who have a candyeye. It aims 4 fundmentals: Functionality: How well the users problem is solved? Polish: How good is the UI/UX of the app? Simplicity: How simple is the app to use? Speed: How FAST is it? All of them combine to create WinFlow!...
|
1793145366.443574
|
1793231766.443574
|
|
47907
|
Supra Tooler Custom Shortcut MacOS Application by Supra Tooler Custom Shortcut MacOS Application by @SaathvikSowmyanarayanan | Stardance...
|
SaathvikSowmyanarayanan
|
1
|
7.4
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-14T23:46:27Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom python shortcuts application. Using simple shortucts, this application is meant for those on MacOS devices who use a external keyboard. If you don’t know the function keys, and some others are glitched out and don’t properly work on external keyboards on mac. There for I created simple cursor-moving shortucts that give the function keys a use. Thanks so much for reviewing my project.", "repo": "https://github.com/SupraSilvr/Gold-Shell", "demo": "https://github.com/SupraSilvr/Gold-Shell/releases/tag/v2.1.0"}]...
|
[{"post_id": 72429, "ts": "202 [{"post_id": 72429, "ts": "2026-09-22T22:41:16Z", "hours": 0.4047, "text": "Fixed changes that the reviews asked me to do. I fixed the broken images in my github README file, and I changed the banner image of my project to the icon."}, {"post_id": 68340, "ts": "2026-09-14T23:43:00Z", "hours": 0.3264, "text": "Made the 3 shortcuts that my application was designed to run. After that, I packaged my python script as a MacOS Application using Pyinstaller. I tested if it works, it does :). Lastly I posted a release on github and updated all of the files. I’m so happy for the end of this project. It was so fun and I hoped you enjoyed watching my journey. I wasn’t able to focus on this project as much as I wanted to, but I finished it. With that, I saw thanks. Thank you so much, Stardance for giving me this opportunity. :)"}, {"post_id": 65147, "ts": "2026-09-10T02:46:43Z", "hours": 0.8206, "text": "I found out the error in the bug. It was the little piece of code, that was to try to run the shortcuts. It was not indented properly into a function. After fixing it, I created 3 working functions, one that goes to the top bar, to see the battery, the volume, and the time. The hotkey for this is the function 1 key. The second functions, goes to the bottom of your screen where you can easily chose an app. This is fun from pressing function 2. The third and last function moves your mouse to the area with the options to close, minimize, and go into the application. I am very happy with my work today. Also renamed the file to da1.9.py (development application 1.9) :)"}, {"post_id": 61226, "ts": "2026-09-04T01:51:57Z", "hours": 0.4469, "text": "Worked on dividing on the pynput syntax to test the bug. I had a lot of trouble with the yanking with vim. If you don’t know yanking is copying in vim. Vim told me that the yanking was successful, but it didn’t paste the correct lines. I managed to find the bug. It says keyboard is not defined, which indicates some missing definition for the class. I will fix this bug soon, now that I have found the error. :)"}, {"post_id": 60567, "ts": "2026-09-03T00:01:52Z", "hours": 0.2567, "text": "After much trouble shooting, I determined that the bug is not from pyautogui ( the library that moves your mouse). Its from the pynput input recognition. Thats about all of the work I did today. I do want to talk about my coding editor. I use a editor called vim. It’s a terminal based editor that is very fast and has many shortcuts to optimize your coding experience. I am not a experianced dev, but I’m practicing it. Hope you give it a try too. :) Link to Vim https://www.vim.org"}, {"post_id": 59911, "ts": "2026-09-01T22:52:35Z", "hours": 0.7111, "text": "I realized the SupraTooler1.0.py file didn’t actually work. It seems that the terminal lost the accesability permisions or the syntax was changed. I started debuging this and temporarily disabled the startup sequence function when I develop. I’m not going to update the github repo until I fixed this bug. I also created new line of code so that if i delete a line it removes disables the startup sequence. This can be useful in the future when bugs occur. the image below is the function and the code to disable it."}, {"post_id": 47124, "ts": "2026-08-14T19:42:53Z", "hours": 4.0639, "text": "Supra Tooler 1.0 has been released. This is the first version of the python script. It has keyboard shortcuts that move the mousecursor to useful locations like top info bar on Mac to check the time. Also has other life changing features. Must be run in terminal, since I haven’t packaged it with pyinstaller yet. It may or may not run, if this problem occurs, run with sudo access or check system settings. There go to input monitering and accessibility settings and approve both for the terminal. I didn’t package this version as an application because the starting screen was still in development and would not run in terminal if it was an app. The file to look at is SupraTooler1.0.py. The other supra.py file is the development stage of SupraTooler2.0. I’m planning on adding a popup when you start the application in customtkinter, but i found out that macos isn’t fully supporting it anymore and can remove it in any update so i want to use pygame. This is a lot more difficult and has unnecessary features but should still work. Also I am adding other shortcuts. So yeah, that wraps it up. Thanks for looking at my project, feel free to try it out. :)"}]...
|
Title: Supra Tooler Custom Shortcut MacOS Applicat Title: Supra Tooler Custom Shortcut MacOS Application by @SaathvikSowmyanarayanan | Stardance
Devlogs:
Supra Tooler 1.0 has been released. This is the first version of the python script. It has keyboard shortcuts that move the mousecursor to useful locations like top info bar on Mac to check the time. Also has other life changing features. Must be run in terminal, since I haven’t packaged it with pyinstaller yet. It may or may not run, if this problem occurs, run with sudo access or check system settings. There go to input monitering and accessibility settings and approve both for the terminal. I didn’t package this version as an application because the starting screen was still in development and would not run in terminal if it was an app. The file to look at is SupraTooler1.0.py. The other supra.py file is the development stage of SupraTooler2.0. I’m planning on adding a popup when you start the application in customtkinter, but i found out that macos isn’t fully supporting it anymore and can remove it in any update so i want to use pygame. This is a lot more difficult and has unnecessary features but should still work. Also I am adding other shortcuts. So yeah, that wraps it up. Thanks for looking at my project, feel free to try it out. :)
I realized the SupraTooler1.0.py file didn’t actually work. It seems that the terminal lost the accesability permisions or the syntax was changed. I started debuging this and temporarily disabled the startup sequence function when I develop. I’m not going to update the github repo until I fixed this bug. I also created new line of code so that if i delete a line it removes disables the startup sequence. This can be useful in the future when bugs occur. the image below is the function and the code to disable it.
After much trouble shooting, I determined that the bug is not from pyautogui ( the library that moves your mouse). Its from the pynput input recognition. Thats about all of the work I did today. I do want to talk about my coding editor. I use a editor called vim. It’s a terminal based editor that is very fast and has many shortcuts to optimize your coding experience. I am not a experianced dev, but I’m practicing it. Hope you give it a try too. :) Link to Vim https://www.vim.org
Worked on dividing on the pynput syntax to test the bug. I had a lot of trouble with the yanking with vim. If you don’t know yanking is copying in vim. Vim told me that the yanking was successful, but it didn’t paste the correct lines. I managed to find the bug. It says keyboard is not defined, which indicates some missing definition for the class. I will fix this bug soon, now that I have found the error. :)
I found out the error in the bug. It was the little piece of code, that was to try to run the shortcuts. It was not indented properly into a function. After fixing it, I created 3 working functions, one that goes to the top bar, to see the battery, the volume, and the time. The hotkey for this is the function 1 key. The second functions, goes to the bottom of your screen where you can easily chose an app. This is fun from pressing function 2. The third and last function moves your mouse to the area with the options to close, minimize, and go into the application. I am very happy with my work today. Also renamed the file to da1.9.py (development application 1.9) :)
Made the 3 shortcuts that my application was designed to run. After that, I packaged my python script as a MacOS Application using Pyinstaller. I tested if it works, it does :). Lastly I posted a release on github and updated all of the files. I’m so happy for the end of this project. It was so fun and I hoped you enjoyed watching my journey. I wasn’t able to focus on this project as much as I wanted to, but I finished it. With that, I saw thanks. Thank you so much, Stardance for giving me this opportunity. :)
Fixed changes that the reviews asked me to do. I fixed the broken images in my github README file, and I changed the banner image of my project to the icon.
Ships:
I made a custom python shortcuts application. Using simple shortucts, this application is meant for those on MacOS devices who use a external keyboard. If you don’t know the function keys, and some others are glitched out and don’t properly work on external keyboards on mac. There for I created simple cursor-moving shortucts that give the function keys a use. Thanks so much for reviewing my project....
|
1793145367.6115007
|
1793231767.6115007
|
|
12432
|
SlackyssaLiu - Slack Bot by @AidenHammy | Stardanc SlackyssaLiu - Slack Bot by @AidenHammy | Stardance...
|
AidenHammy
|
1
|
7.39
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T12:42:18Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Started as a standard “first Slack bot” with catfacts, jokes, quotes, the usual starter-project stuff. It was redesigned into something actually worth using. A space-themed bot that tracks the ISS in real time, counts down to the next rocket launch, posts NASA’s daily astronomy photo (with zero effort on your part) and pulls random Mars rover photos on demand. It also remembers things now. SQLite-backed mission logs per channel and custom callsigns per user and shows up uninvited with scheduled posts instead of only responding when poked. Built with Node.js + Slack Bolt (Socket Mode, no public URL needed), SQLite for persistence, node-cron for scheduling and free APIs (Open Notify, NASA, Launch Library 2) for the live data. Deployed and running 24/7 on Hack Club Nest.", "repo": "https://github.com/AidenHammy/SlackyssaLiu", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 67226, "ts": "202 [{"post_id": 67226, "ts": "2026-09-13T08:58:32Z", "hours": 3.3922, "text": "Devlog 3: Three Hours of My Life I’m Never Getting Back (And Slack’s Media Renderer Can Thank Me For It) The false confidence I thought the bot was done. I really did. The commands worked, the database was syncing, the cron jobs were firing. It was a fully functional space bot. I sat down to do what I thought would be a 15-min final polish before shipping. Three hours later, I was found questioning my reality and whether I should just delete the folder and take up farming. What started as a quick polish turned into a full-blown war against dead community APIs, Slack’s deeply picky Block Kit renderer and the absolute garbage fire that is Node.js DNS resolution on free hosting platforms. The dead API saga First, /skl-mars completely died. Not a graceful failure. Not a friendly JSON error. It just silently redirected to a GitHub Pages 404 HTML page. Axios, bless its optimistic little heart, tried to parse that HTML as JSON, choked and took the whole bot down with it. I made the executive decision to ditch that entirely. The rover is probably tired of taking photos anyway. I swapped it out for NASA’s EPIC API, which takes photos of Earth from the DSCOVR satellite. But EPIC had its own trap. If you just ask for the “most recent” photos, it returns a tiny array of about 13 photos from the last active day. The bot kept spamming the exact same image of Earth. I had to rewrite the endpoint to fetch the archive of all available dates, shuffle the entire history of the satellite and pull a random day from the past just to get some variety. Then, the Open Notify API (used for ISS location and crew data) went offline too. Same GitHub 404 redirect. I had to write nested try/catch fallbacks with 5-second timeouts to route requests to wheretheiss.at just to keep the telemetry commands alive. It was a war of attrition against community-run infrastructure. Slack Block Kit & the APOD nightmare Getting the APOD (/skl-apod) to actually render in the chat was an absolute nightmare. Originally, the bot just dropped a raw URL into the chat. Slack looked at it and said “Cool link, not displaying it” so I rebuilt the command using Slack’s Block Kit image block. That fixed images. But.. a video? Because of course, if you pass an .mp4 URL into an image block, Slack silently drops the message entirely. I had to write logic to check the media_type: if it was a YouTube link, I parsed the URL and rendered it using Slack’s native video block. If it was a raw .mp4, I had to stream the video file directly into Slack using filesUploadV2 so it would embed and play right in the chat. And to prevent the bot from OOM-crashing the server on large videos, I had to use responseType: \"stream\" so it chunked the download instead of loading a 50MB video into RAM all at once. The Nest hosting quirk Right when I thought I was victorious, APOD and Earth started failing with getaddrinfo ENOTFOUND api.nasa.gov . After staring at my screen wondering if I had forgotten how URLs work, I learned that Node.js 17+ defaults to IPv6 for DNS resolution and the hosting platform (Nest) doesn’t fully support IPv6 routing. The server literally couldn’t find NASA. Adding dns.setDefaultResultOrder('ipv4first') to the top of the service file fixed it instantly. Extremely normal behavior, I love computers. The actual architecture shift Amidst all the API firefighting, I also ripped out the hardcoded .env channel routing. Making someone edit a .env file just to move a bot to a new channel is a crime. I moved the scheduled announcements to a SQLite-backed system with /skl-setup and /skl-unset commands so the bot could support multiple servers dynamically without touching environment variables. What started as a simple script turned into a much more reliable bot with backup APIs, saved data, scheduled posts and the ability to handle images and videos directly in Slack. It was hella exhausting, my brain is completely fried but atleast it’s done."}, {"post_id": 64173, "ts": "2026-09-08T12:10:49Z", "hours": 2.9514, "text": "Devlog: SlackyssaLiu Went to Space (and I Forgot to Write Any of This Down) The itch SlackyssaLiu started as a pretty standard first Slack bot. Slash commands, a few API wrappers, the usual suspects: catfacts, jokes, quotes, echo, ping, some sneeze/wave filler commands for personality. It worked fine. It also looked exactly like every other “my first slackbot” project out there because it basically followed the same recipe everyone does. Integrate a joke API, integrate a weather-adjacent API, call it done. I wanted to know how to make it stand out so I asked around for ideas. The answer was pretty obvious in hindsight. Stop building the demo everyone builds and build something around an actual theme with actual state instead of a stateless command list wrapped around whatever free API came up first. I bounced between a few themes.. figure skating (RIP, no usable free API), medieval history (also no API, just Wikipedia scraping, hard pass) and space. Space won because it had exactly what I needed. Solid free APIs with no bureaucracy (Open Notify needs zero auth, NASA’s API just needs a free key) and enough surface area to build something that actually feels alive instead of just answering when poked. What actually changed This ended up being a full redesign not a patch job. Rough shape of it (RIP to /skl-achoo, you were doing your best). Killed the old command set! No more catfact/joke/quote/echo/achoo/wave. None of it fit the new direction and it was the generic stuff I was trying to get away from in the first place. A moment of silence for the bot that could sneeze but not tell you when a rocket was launching. New space-themed commands: /skl-iss and /skl-crew (Open Notify, no key needed), /skl-launch (Launch Library 2, with an actual countdown for maximum dramatic tension), /skl-apod and /skl-mars (NASA’s API, APOD + random Curiosity rover photos the rover did not consent to being featured but also cannot complain). Added actual persistence. SQLite via better-sqlite3. This was the real shift. The old bot had the memory of a goldfish with amnesia. It never remembered anything between requests. Now it tracks mission logs per channel, user callsigns and which launches it’s already announced (so it doesn’t spam the same countdown twice like an overeager intern). Added scheduled behavior. node-cron jobs that post NASA’s picture of the day every morning and ping the channel when a launch is within the hour. This is the part I think actually makes it feel like a running thing instead of a command list. It does stuff without being asked which is more initiative than I show most mornings. I gave it an actual personality module! pulled every joke/flavor line out of the command handlers and centralized them in personality.js. Went through two tone passes because apparently I couldn’t decide if the bot should sound like a stoic AI from a space movie or like it’s been on Twitter since 2019. It landed somewhere in between and honestly that’s a personality a lot of people have. Having it centralized meant the whole voice-swap was a single-file change instead of hunting through every command like a raccoon going through someone’s trash. Fixed real bugs from the original file along the way, typos that would’ve crashed the bot. cool, cool, very cool, glad I caught that before it caught me. Why I forgot to log any of this Short version, I was moving fast across a lot of files at once. db setup, service wrappers, command rewiring, personality, scheduler and treated it like “just get it working” instead of “document as I go”. I was working on a lot of projects at the same time and this was something I did just after finding about Stardance so I barely remembered to ship it. But I’m doing so now, several weeks late, riding in on a horse made of retroactive commit messages. I barely had any brainpower left for side projects at 1am because of my “awesome” uni."}, {"post_id": 5868, "ts": "2026-06-09T20:22:36Z", "hours": 1.3881, "text": "Devlog 1 — Building SlackyssaLiu (Slack Bot) What I set out to build: Create a simple Slack bot that can respond to slash commands in real time and make interactions inside a workspace more dynamic and useful. How I approached it: I started by following Stardance’s mission guide to understand how Slack apps connect to a backend and handle real-time events. After setting up the base bot with Socket Mode and environment variables, I focused on implementing slash commands and structuring them in a clean and scalable way. What I built: A deployed Slack bot running 24/7 with real-time command handling A working Slack bot using Node.js and the Bolt framework Multiple slash commands such as: /skl-ping for latency checking /skl-echo for message reflection /skl-time and /skl-date for utility /skl-help for command discovery API integrations: Cat facts using an external API Random jokes Inspirational quotes Basic error handling for API failures A consistent command-response structure using async functions Deployment: The bot is deployed and runs continuously 24/7, allowing it to respond to Slack commands in real time without requiring a local environment. This helped me understand how to keep services running beyond development and make the bot usable in a live workspace. What I learned: How Slack’s Bolt framework handles commands and events The importance of ack() in Slack interactions How to structure asynchronous command handlers How to integrate external APIs into a Node.js application How to handle failures gracefully using try-catch Challenges I faced: Understanding how Slack’s command lifecycle works Managing async responses correctly without breaking Slack’s timing requirements Debugging API responses and ensuring consistent formatting What I improved beyond the mission guide: While the initial setup followed Stardance’s mission guide, I expanded the bot by adding multiple custom commands and integrating external APIs to make it more interactive and useful. Future improvements: Add command history or logging Introduce smarter responses or context awareness Improve response formatting for better readability Expand the command set with more utility features Final thoughts: This project helped me understand how real-time systems work and how to build something that interacts with users in a live environment. It started with guided steps and evolved into a customizable and extendable Slack bot."}]...
|
Title: SlackyssaLiu - Slack Bot by @AidenHammy | S Title: SlackyssaLiu - Slack Bot by @AidenHammy | Stardance
Devlogs:
Devlog 1 — Building SlackyssaLiu (Slack Bot) What I set out to build: Create a simple Slack bot that can respond to slash commands in real time and make interactions inside a workspace more dynamic and useful. How I approached it: I started by following Stardance’s mission guide to understand how Slack apps connect to a backend and handle real-time events. After setting up the base bot with Socket Mode and environment variables, I focused on implementing slash commands and structuring them in a clean and scalable way. What I built: A deployed Slack bot running 24/7 with real-time command handling A working Slack bot using Node.js and the Bolt framework Multiple slash commands such as: /skl-ping for latency checking /skl-echo for message reflection /skl-time and /skl-date for utility /skl-help for command discovery API integrations: Cat facts using an external API Random jokes Inspirational quotes Basic error handling for API failures A consistent command-response structure using async functions Deployment: The bot is deployed and runs continuously 24/7, allowing it to respond to Slack commands in real time without requiring a local environment. This helped me understand how to keep services running beyond development and make the bot usable in a live workspace. What I learned: How Slack’s Bolt framework handles commands and events The importance of ack() in Slack interactions How to structure asynchronous command handlers How to integrate external APIs into a Node.js application How to handle failures gracefully using try-catch Challenges I faced: Understanding how Slack’s command lifecycle works Managing async responses correctly without breaking Slack’s timing requirements Debugging API responses and ensuring consistent formatting What I improved beyond the mission guide: While the initial setup followed Stardance’s mission guide, I expanded the bot by adding multiple custom commands and integrating external APIs to make it more interactive and useful. Future improvements: Add command history or logging Introduce smarter responses or context awareness Improve response formatting for better readability Expand the command set with more utility features Final thoughts: This project helped me understand how real-time systems work and how to build something that interacts with users in a live environment. It started with guided steps and evolved into a customizable and extendable Slack bot.
Devlog: SlackyssaLiu Went to Space (and I Forgot to Write Any of This Down) The itch SlackyssaLiu started as a pretty standard first Slack bot. Slash commands, a few API wrappers, the usual suspects: catfacts, jokes, quotes, echo, ping, some sneeze/wave filler commands for personality. It worked fine. It also looked exactly like every other “my first slackbot” project out there because it basically followed the same recipe everyone does. Integrate a joke API, integrate a weather-adjacent API, call it done. I wanted to know how to make it stand out so I asked around for ideas. The answer was pretty obvious in hindsight. Stop building the demo everyone builds and build something around an actual theme with actual state instead of a stateless command list wrapped around whatever free API came up first. I bounced between a few themes.. figure skating (RIP, no usable free API), medieval history (also no API, just Wikipedia scraping, hard pass) and space. Space won because it had exactly what I needed. Solid free APIs with no bureaucracy (Open Notify needs zero auth, NASA’s API just needs a free key) and enough surface area to build something that actually feels alive instead of just answering when poked. What actually changed This ended up being a full redesign not a patch job. Rough shape of it (RIP to /skl-achoo, you were doing your best). Killed the old command set! No more catfact/joke/quote/echo/achoo/wave. None of it fit the new direction and it was the generic stuff I was trying to get away from in the first place. A moment of silence for the bot that could sneeze but not tell you when a rocket was launching. New space-themed commands: /skl-iss and /skl-crew (Open Notify, no key needed), /skl-launch (Launch Library 2, with an actual countdown for maximum dramatic tension), /skl-apod and /skl-mars (NASA’s API, APOD + random Curiosity rover photos the rover did not consent to being featured but also cannot complain). Added actual persistence. SQLite via better-sqlite3. This was the real shift. The old bot had the memory of a goldfish with amnesia. It never remembered anything between requests. Now it tracks mission logs per channel, user callsigns and which launches it’s already announced (so it doesn’t spam the same countdown twice like an overeager intern). Added scheduled behavior. node-cron jobs that post NASA’s picture of the day every morning and ping the channel when a launch is within the hour. This is the part I think actually makes it feel like a running thing instead of a command list. It does stuff without being asked which is more initiative than I show most mornings. I gave it an actual personality module! pulled every joke/flavor line out of the command handlers and centralized them in personality.js. Went through two tone passes because apparently I couldn’t decide if the bot should sound like a stoic AI from a space movie or like it’s been on Twitter since 2019. It landed somewhere in between and honestly that’s a personality a lot of people have. Having it centralized meant the whole voice-swap was a single-file change instead of hunting through every command like a raccoon going through someone’s trash. Fixed real bugs from the original file along the way, typos that would’ve crashed the bot. cool, cool, very cool, glad I caught that before it caught me. Why I forgot to log any of this Short version, I was moving fast across a lot of files at once. db setup, service wrappers, command rewiring, personality, scheduler and treated it like “just get it working” instead of “document as I go”. I was working on a lot of projects at the same time and this was something I did just after finding about Stardance so I barely remembered to ship it. But I’m doing so now, several weeks late, riding in on a horse made of retroactive commit messages. I barely had any brainpower left for side projects at 1am because of my “awesome” uni.
Devlog 3: Three Hours of My Life I’m Never Getting Back (And Slack’s Media Renderer Can Thank Me For It) The false confidence I thought the bot was done. I really did. The commands worked, the database was syncing, the cron jobs were firing. It was a fully functional space bot. I sat down to do what I thought would be a 15-min final polish before shipping. Three hours later, I was found questioning my reality and whether I should just delete the folder and take up farming. What started as a quick polish turned into a full-blown war against dead community APIs, Slack’s deeply picky Block Kit renderer and the absolute garbage fire that is Node.js DNS resolution on free hosting platforms. The dead API saga First, /skl-mars completely died. Not a graceful failure. Not a friendly JSON error. It just silently redirected to a GitHub Pages 404 HTML page. Axios, bless its optimistic little heart, tried to parse that HTML as JSON, choked and took the whole bot down with it. I made the executive decision to ditch that entirely. The rover is probably tired of taking photos anyway. I swapped it out for NASA’s EPIC API, which takes photos of Earth from the DSCOVR satellite. But EPIC had its own trap. If you just ask for the “most recent” photos, it returns a tiny array of about 13 photos from the last active day. The bot kept spamming the exact same image of Earth. I had to rewrite the endpoint to fetch the archive of all available dates, shuffle the entire history of the satellite and pull a random day from the past just to get some variety. Then, the Open Notify API (used for ISS location and crew data) went offline too. Same GitHub 404 redirect. I had to write nested try/catch fallbacks with 5-second timeouts to route requests to wheretheiss.at just to keep the telemetry commands alive. It was a war of attrition against community-run infrastructure. Slack Block Kit & the APOD nightmare Getting the APOD (/skl-apod) to actually render in the chat was an absolute nightmare. Originally, the bot just dropped a raw URL into the chat. Slack looked at it and said “Cool link, not displaying it” so I rebuilt the command using Slack’s Block Kit image block. That fixed images. But.. a video? Because of course, if you pass an .mp4 URL into an image block, Slack silently drops the message entirely. I had to write logic to check the media_type: if it was a YouTube link, I parsed the URL and rendered it using Slack’s native video block. If it was a raw .mp4, I had to stream the video file directly into Slack using filesUploadV2 so it would embed and play right in the chat. And to prevent the bot from OOM-crashing the server on large videos, I had to use responseType: "stream" so it chunked the download instead of loading a 50MB video into RAM all at once. The Nest hosting quirk Right when I thought I was victorious, APOD and Earth started failing with getaddrinfo ENOTFOUND api.nasa.gov . After staring at my screen wondering if I had forgotten how URLs work, I learned that Node.js 17+ defaults to IPv6 for DNS resolution and the hosting platform (Nest) doesn’t fully support IPv6 routing. The server literally couldn’t find NASA. Adding dns.setDefaultResultOrder('ipv4first') to the top of the service file fixed it instantly. Extremely normal behavior, I love computers. The actual architecture shift Amidst all the API firefighting, I also ripped out the hardcoded .env channel routing. Making someone edit a .env file just to move a bot to a new channel is a crime. I moved the scheduled announcements to a SQLite-backed system with /skl-setup and /skl-unset commands so the bot could support multiple servers dynamically without touching environment variables. What started as a simple script turned into a much more reliable bot with backup APIs, saved data, scheduled posts and the ability to handle images and videos directly in Slack. It was hella exhausting, my brain is completely fried but atleast it’s done.
Ships:
Started as a standard “first Slack bot” with catfacts, jokes, quotes, the usual starter-project stuff. It was redesigned into something actually worth using. A space-themed bot that tracks the ISS in real time, counts down to the next rocket launch, posts NASA’s daily astronomy photo (with zero effort on your part) and pulls random Mars rover photos on demand. It also remembers things now. SQLite-backed mission logs per channel and custom callsigns per user and shows up uninvited with scheduled posts instead of only responding when poked. Built with Node.js + Slack Bolt (Socket Mode, no public URL needed), SQLite for persistence, node-cron for scheduling and free APIs (Open Notify, NASA, Launch Library 2) for the live data. Deployed and running 24/7 on Hack Club Nest....
|
1793145368.8166556
|
1793231768.8166556
|
|
16233
|
See-TreePiO by @Aryana | Stardance
|
Aryana
|
1
|
142.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T06:32:43Z", "hours": 142.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a project that can detect tree/plant species and temperature to determine whether it is dead or not. It displays the result on an LCD in the back, and will start the process of scanning a tree/plant once a button is pressed. The wiring is enclosed in a 3D printed prototype. The most difficult thing I did in this project was likely trying to fit it all in the enclosure. There were a lot of wires here and there, and the button was also quite difficult to fit in, as I needed to solder it on. However, this project was really fun to do, as it helped me gain knowledge about the environment around me, and I got to practice my software and hardware skills. I am really proud of myself, as I completed this project from start to finish, and didn’t give up. To test my project, all you have to do is plug in the battery pack, wait for a minute or so, point the prototype at the tree you want to scan, press the button, and wait for the results. Sometimes, it will take a little longer to get the results, resulting from a difficulty figuring out either the temperature or species of that particular plant/tree.", "repo": "https://github.com/dawinner395/tree-health-scanner", "demo": ""}]...
|
[{"post_id": 69981, "ts": "202 [{"post_id": 69981, "ts": "2026-09-18T05:40:56Z", "hours": 0.35, "text": "I completed the prototype by combining the enclosure with the prototype. I encased the sensors and the LCD. The prototype is finally complete!"}, {"post_id": 69965, "ts": "2026-09-18T04:18:13Z", "hours": 1.5167, "text": "I combined the parts in the bottom half of the prototype, and fit it in the encolsure."}, {"post_id": 67575, "ts": "2026-09-13T18:30:05Z", "hours": 1.3167, "text": "I researched the different types of prevalent trees in California and their temperatures during different seasons. I plan to add this to my database, as I hadn’t previously done this. I used many websites, but Our City Forest was the most helpful."}, {"post_id": 66887, "ts": "2026-09-12T20:45:05Z", "hours": 0.9333, "text": "I fixed the issues that the prototype was facing. I also added a button. The main thing I did was make the prototype able to function without the computer nearby, which can make it so that anyone in the world can use it with a battery pack."}, {"post_id": 64447, "ts": "2026-09-08T20:39:44Z", "hours": 12.0014, "text": "I 3D printed the top half of the housing for the prototype. Next, I will print the bottom half."}, {"post_id": 48288, "ts": "2026-08-16T16:26:44Z", "hours": 10.6833, "text": "I build a CAD of the structure that will house the prototype. I left holes for all the different parts, and will print it later today."}, {"post_id": 36195, "ts": "2026-07-28T03:59:06Z", "hours": 1.7667, "text": "I connected the database to the Raspberry Pi, and tested it out using a house plant. It worked really well, and the next step is to test it outside with a real tree."}, {"post_id": 35375, "ts": "2026-07-26T18:41:48Z", "hours": 1.8333, "text": "I researched about how to use the specific PlantNet API database with the Raspberry Pi and hook that database to a Machine Learning algorthim. I am finally ready to actually make the Machine Learning algorithm and get my hands dirty now that I have the information I need to continue on with the project."}, {"post_id": 32105, "ts": "2026-07-21T01:22:30Z", "hours": 0.3333, "text": "I researched more about the tree datasets, and I found one that has plenty of accurate information: PlantNet API."}, {"post_id": 31560, "ts": "2026-07-20T02:06:06Z", "hours": 0.6333, "text": "I researched the different datasets I can use for the project, as well as the amount of tree data each have in them. I still need to do some more research, but as of now, creating a dataset is the best option if I want to get a wide, accurate range of data. I haven’t found any datasets that match the amount of data I can collect by myself in my neighborhood."}, {"post_id": 29878, "ts": "2026-07-17T01:24:55Z", "hours": 0.6, "text": "I tested the camera and battery pack that came. They both worked really well. Now, I can start inputting the ML algrothm."}, {"post_id": 28665, "ts": "2026-07-15T01:45:42Z", "hours": 3.7747, "text": "I fiinshed the Machine Learning book."}, {"post_id": 28079, "ts": "2026-07-14T03:24:59Z", "hours": 1.0333, "text": "I read Chapters 14 and 15 of the Machine Learning book. The parts will come tomorrow."}, {"post_id": 27961, "ts": "2026-07-13T22:13:23Z", "hours": 0.6833, "text": "I read Chapter 13 of the Machine Learning book."}, {"post_id": 27279, "ts": "2026-07-12T18:33:41Z", "hours": 1.65, "text": "I planned the way I am going to connect the ArduCam to the Raspberry Pi with the thermal sensor. I realized I might have to solder some wires together so that more than one wire can fit on one pin on the Pi. I planned the way the wires are going to connect to the Pi and how I am going to integrate ML into the Pi using the camera and thermal sensor."}, {"post_id": 26242, "ts": "2026-07-10T22:09:55Z", "hours": 1.7667, "text": "I researched more about using the ArduCam with the Raspberry Pi 5. I found troubleshooting techniques and what I need to do after I get the camera (the setup)."}, {"post_id": 25652, "ts": "2026-07-10T02:04:39Z", "hours": 1.6847, "text": "I read Chapters 11 and 12 of the Machine Learning book."}, {"post_id": 25543, "ts": "2026-07-09T21:16:12Z", "hours": 1.5167, "text": "I watched a video about using the ArduCam with the Raspberry Pi 5."}, {"post_id": 25481, "ts": "2026-07-09T19:38:18Z", "hours": 1.2369, "text": "I read Chapters 9 and 10 of the Machine Learning book."}, {"post_id": 25077, "ts": "2026-07-09T01:30:27Z", "hours": 0.4, "text": "I read Chapter 8 of the Machine Learning book. I will stop watching the AI on the Edge videos because they are not accessible on YouTube after Lesson 31. The parts will come day after tomorrow, so I plan to finish reading this book by then."}, {"post_id": 24895, "ts": "2026-07-08T19:02:48Z", "hours": 2.1167, "text": "I watched Lesson 31 of the AI on the Edge videos."}, {"post_id": 24517, "ts": "2026-07-08T03:43:40Z", "hours": 2.1914, "text": "I watched Lesson 30 of the AI on the Edge videos."}, {"post_id": 24471, "ts": "2026-07-08T01:31:47Z", "hours": 1.9167, "text": "I watched Lesson 29 of the AI on the Edge videos."}, {"post_id": 24422, "ts": "2026-07-07T23:28:04Z", "hours": 3.2, "text": "I watched Lesson 28 of the AI on the Edge videos."}, {"post_id": 24308, "ts": "2026-07-07T19:58:17Z", "hours": 2.1003, "text": "I watched Lesson 27 of the AI on the Edge videos."}, {"post_id": 23795, "ts": "2026-07-06T23:03:10Z", "hours": 2.7667, "text": "I watched Lesson 26 of the AI on the Edge videos."}, {"post_id": 23280, "ts": "2026-07-06T04:18:00Z", "hours": 2.3625, "text": "I watched Lesson 25 of the AI on the Edge videos."}, {"post_id": 23236, "ts": "2026-07-06T01:55:59Z", "hours": 3.1667, "text": "I watched Lesson 24 of the AI on the Edge videos."}, {"post_id": 23150, "ts": "2026-07-05T22:46:20Z", "hours": 0.9167, "text": "I read chapters 6 and 7 of the Machine Learning book. I’m just reading and watching the videos until the parts arrive in three or four days. Then, I will work on the technical aspect of the prototype. I have some free time now, so I thought I would learn about Machine Learning and using the Raspberry Pi in the time I have instead of wasting it."}, {"post_id": 22461, "ts": "2026-07-04T22:37:08Z", "hours": 2.0494, "text": "I watched Lesson 23 of the AI on the Edge videos."}, {"post_id": 22380, "ts": "2026-07-04T20:34:29Z", "hours": 3.2, "text": "I watched Lesson 22 of the AI on the Edge videos."}, {"post_id": 21779, "ts": "2026-07-03T21:41:25Z", "hours": 1.5, "text": "I watched Lesson 21 of the AI on the Edge videos."}, {"post_id": 21716, "ts": "2026-07-03T20:11:28Z", "hours": 1.9, "text": "I watched Lesson 20 of the AI on the Edge videos."}, {"post_id": 21285, "ts": "2026-07-03T04:02:15Z", "hours": 2.8383, "text": "I watched Lesson 19 of the AI on the Edge videos."}, {"post_id": 21215, "ts": "2026-07-03T01:11:38Z", "hours": 2.3, "text": "I watched Lesson 18 of the AI on the Edge videos."}, {"post_id": 21101, "ts": "2026-07-02T21:55:09Z", "hours": 3.7, "text": "I watched Lesson 17 of the AI on the Edge videos."}, {"post_id": 20495, "ts": "2026-07-02T03:07:09Z", "hours": 1.9072, "text": "I watched Lesson 16 of the AI on the Edge videos."}, {"post_id": 20442, "ts": "2026-07-02T01:11:45Z", "hours": 2.3333, "text": "I watched Lesson 15 of the AI on the Edge videos."}, {"post_id": 20318, "ts": "2026-07-01T21:43:50Z", "hours": 3.6667, "text": "I watched Lesson 14 of the AI on the Edge videos."}, {"post_id": 19770, "ts": "2026-07-01T04:50:30Z", "hours": 2.7167, "text": "I watched Lesson 13 of the AI on the Edge videos."}, {"post_id": 19679, "ts": "2026-07-01T02:07:59Z", "hours": 1.4167, "text": "I watched Lesson 12 of the AI on the Edge videos."}, {"post_id": 19634, "ts": "2026-07-01T00:35:15Z", "hours": 1.6167, "text": "I read chapters 5 and 6 of the Machine Learning book."}, {"post_id": 19586, "ts": "2026-06-30T22:40:26Z", "hours": 1.6167, "text": "I watched Lesson 11 of the AI on the Edge videos."}, {"post_id": 19523, "ts": "2026-06-30T21:02:23Z", "hours": 1.0494, "text": "I watched Lesson 10 of the AI on the Edge videos."}, {"post_id": 19468, "ts": "2026-06-30T19:58:25Z", "hours": 2.1, "text": "I watched Lesson 9 of the AI on the Edge videos."}, {"post_id": 19018, "ts": "2026-06-30T05:48:49Z", "hours": 2.7, "text": "I watched Lesson 8 of the AI on the Edge videos."}, {"post_id": 18914, "ts": "2026-06-30T03:06:50Z", "hours": 0.75, "text": "I finished reading Chapter 4 of the Machine Learning book. I am also taking more notes on the book now."}, {"post_id": 18878, "ts": "2026-06-30T02:18:01Z", "hours": 0.9, "text": "I sent an email to Ms. Mint (the one I met previosuly) asking if we could meet again for some feedback on my project idea. I also converted my paper plan onto a document and calendar so I can keep track of any deadlines I might have for the project."}, {"post_id": 18760, "ts": "2026-06-29T23:18:51Z", "hours": 4.0, "text": "I watched Lesson 7 of the AI on the Edge videos."}, {"post_id": 17910, "ts": "2026-06-28T20:55:18Z", "hours": 1.2, "text": "I watched Lesson 6 of the AI on the Edge videos."}, {"post_id": 17840, "ts": "2026-06-28T19:40:59Z", "hours": 1.0667, "text": "I watched Lesson 5 of AI on the Edge. In the previous DevLog about the AI on the Edge videos, I actually watched Lesson 4, not Lesson 3."}, {"post_id": 17786, "ts": "2026-06-28T18:35:28Z", "hours": 1.7667, "text": "I made a plan on how to spend my time during this summer, as a lot of time will be dedicated to the ML aspect of my project."}, {"post_id": 17345, "ts": "2026-06-28T02:58:04Z", "hours": 2.0833, "text": "I watched Lesson 3 of the AI on the Edge videos."}, {"post_id": 17217, "ts": "2026-06-27T22:37:39Z", "hours": 3.05, "text": "I finished the 3rd lesson of the AI on the Edge."}, {"post_id": 17106, "ts": "2026-06-27T19:33:57Z", "hours": 1.5667, "text": "I watched the Lesson 2 of the AI on the Edge Raspberry Pi videos."}, {"post_id": 16603, "ts": "2026-06-27T00:34:57Z", "hours": 1.5, "text": "I watched a video about using the Raspberry Pi 5 with ML. Though the Machine Learning book is helpful (and I will keep reading it), I felt that it was not enough to help me with this specific project."}, {"post_id": 16000, "ts": "2026-06-25T23:50:46Z", "hours": 0.9333, "text": "I researched exactly what camera and battery pack to buy (to power the Raspberry Pi). I added them to the cart and will buy it as soon as possible to further develop the prototype. I can’t wait to see how it works with the thermal sensor!"}, {"post_id": 15917, "ts": "2026-06-25T21:22:07Z", "hours": 1.0667, "text": "I just researched about how to combine a thermal sensor with a camera. I found a helpful video and took notes on that video. I also found the specific type of camera I can use, which is a standard Raspberry Pi Camera Module, as well as the connector."}, {"post_id": 15877, "ts": "2026-06-25T20:08:12Z", "hours": 0.6167, "text": "Instead of physically testing the prototypes out (because my dog accidentally stepped on the ultrasonic sensor prototype), I just researched a bit more about the two sensors. I researched the benefits and downsides of each sensor, as well as how accurae they are at specifcally detecting dead trees. I found that people have used ultrasonic sensors before to detect dead trees, but no one has used thermal sensors in the way that I am before to do so. Therefore, I will stick with using a thermal sensor for this prototype. I will have to do more research about the actual pairing between a thermal sensor, a camera, and ML, but the book will help me a lot in the coding of the ML portion."}, {"post_id": 15231, "ts": "2026-06-24T18:49:08Z", "hours": 0.5333, "text": "I compared the 2 prototypes to see which sensor is more accurate (with research, not actual testing). I found that the thermal sensor is more accurate, especially when paired with a camera and an ML algorithm. However, the pairing will be new to me because of the Raspberry Pi. I am more used to working with Aruinos, but through research and practice, I will be able to implement ML. Also, the book I am reading is going to help increase my knowledge on ML. In a future DevLog, I might just test this research just to be sure the thermal sensor is the right choice."}, {"post_id": 14069, "ts": "2026-06-23T01:29:08Z", "hours": 2.3667, "text": "I created the new prototype using the ultrasonic sensor. I coded it, and it successfully functions properly. However, when I tested it with a tree, it didn’t detect it correctly (it said it was dead, not healthy). When I tested it a few more times, it showed accurate readings. I still need to compare the two prototypes together."}, {"post_id": 13982, "ts": "2026-06-22T23:01:27Z", "hours": 0.7219, "text": "I started taking notes on how to work with a thermal sensor, a camera, and ML. I found that it might be hard to integrate all 3 of these things, so I started looking in a different path. I found that I could use ultrasonic distance sensors to detect the unique ultrasonic waves emitted from trees. Therefore, I will start creating a prototype using the ultrasonic sensor and compare the 2 prototypes together."}, {"post_id": 13915, "ts": "2026-06-22T20:24:35Z", "hours": 1.6833, "text": "I copied the code from Command Prompt to GitHub so I have a way to store it somewhere safe. I also double-checkked that the code was correct, and fixed any errors."}, {"post_id": 13555, "ts": "2026-06-22T06:01:12Z", "hours": 3.0333, "text": "I interviewed a tree expert, Ms. Mint, who works at a local farm. She brought up some interesting points, and helped me narrow down what sensors I want to use for my project. She said that using a thermal sensor would be a good idea becuase of its accuracy and easy use. However, when I interviewed her, I had to record the video on my phone instead of on this Hackatime. Therefore, I screen recorded the video and that is the video shown here on this Devlog. I was also with a few other people interested in Ms. Mint’s work, so it wasn’t a one-on-one session, more of a broader overview with a lot of Q-and-A. Overall, this experience was really nice because I got to meet a curator of a nature center, feel the nature all around me, see the difference between dead and healthy trees, and get feedback on my idea."}, {"post_id": 13494, "ts": "2026-06-22T02:51:43Z", "hours": 1.1878, "text": "I wired the thermal sensor, the LCD, the Raspberry Pi, and the LCD backpack. At first, the wiring was not working, so I switched to planning the wiring on paper. Once I finished that, I used a soldering iron to combine two wires to fit in one slot. This is the completed wiring."}, {"post_id": 13467, "ts": "2026-06-22T01:34:43Z", "hours": 0.4833, "text": "I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML."}, {"post_id": 13450, "ts": "2026-06-22T01:01:41Z", "hours": 2.55, "text": "I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML."}, {"post_id": 13342, "ts": "2026-06-21T21:15:14Z", "hours": 0.4833, "text": "I have started reading a book about Machine Learning, its history, and how to train/use it to the best of my ability. I have been taking some notes and answering some questions presented in the book. I have gotten through the first 2 chapters so far and plan to finish the book in the next few weeks. This book will really help me use ML in my project, as well as use it in other projects that I may decide to pursue."}, {"post_id": 12793, "ts": "2026-06-20T22:25:53Z", "hours": 0.8169, "text": "I created the code for the basic part of the prototype. The code makes the prototype able to detect the thermal signature of a Redwood Tree and determine whether it is dead or healthy. In the future, I wil re-make the code to incorporate a camera and a Machine Learning algorithm that can be used for more accurate and broader readings, not just for Redwood trees."}, {"post_id": 12756, "ts": "2026-06-20T21:19:55Z", "hours": 1.4667, "text": "Researched about the different techniques and sensors I could use for this project. I found that using a thermal sensor with Machine Learning algorithms and a camera would be the best for my project."}, {"post_id": 12708, "ts": "2026-06-20T19:07:36Z", "hours": 0.6164, "text": "Testing and editing the code and the wiring of the prototype"}]...
|
Title: See-TreePiO by @Aryana | Stardance
Devlogs Title: See-TreePiO by @Aryana | Stardance
Devlogs:
Testing and editing the code and the wiring of the prototype
Researched about the different techniques and sensors I could use for this project. I found that using a thermal sensor with Machine Learning algorithms and a camera would be the best for my project.
I created the code for the basic part of the prototype. The code makes the prototype able to detect the thermal signature of a Redwood Tree and determine whether it is dead or healthy. In the future, I wil re-make the code to incorporate a camera and a Machine Learning algorithm that can be used for more accurate and broader readings, not just for Redwood trees.
I have started reading a book about Machine Learning, its history, and how to train/use it to the best of my ability. I have been taking some notes and answering some questions presented in the book. I have gotten through the first 2 chapters so far and plan to finish the book in the next few weeks. This book will really help me use ML in my project, as well as use it in other projects that I may decide to pursue.
I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML.
I continued reading the Machine Learning book and got to Chapter 4. The book is really interesting and I already feel like I have some knowledge (not a lot, but some) about ML.
I wired the thermal sensor, the LCD, the Raspberry Pi, and the LCD backpack. At first, the wiring was not working, so I switched to planning the wiring on paper. Once I finished that, I used a soldering iron to combine two wires to fit in one slot. This is the completed wiring.
I interviewed a tree expert, Ms. Mint, who works at a local farm. She brought up some interesting points, and helped me narrow down what sensors I want to use for my project. She said that using a thermal sensor would be a good idea becuase of its accuracy and easy use. However, when I interviewed her, I had to record the video on my phone instead of on this Hackatime. Therefore, I screen recorded the video and that is the video shown here on this Devlog. I was also with a few other people interested in Ms. Mint’s work, so it wasn’t a one-on-one session, more of a broader overview with a lot of Q-and-A. Overall, this experience was really nice because I got to meet a curator of a nature center, feel the nature all around me, see the difference between dead and healthy trees, and get feedback on my idea.
I copied the code from Command Prompt to GitHub so I have a way to store it somewhere safe. I also double-checkked that the code was correct, and fixed any errors.
I started taking notes on how to work with a thermal sensor, a camera, and ML. I found that it might be hard to integrate all 3 of these things, so I started looking in a different path. I found that I could use ultrasonic distance sensors to detect the unique ultrasonic waves emitted from trees. Therefore, I will start creating a prototype using the ultrasonic sensor and compare the 2 prototypes together.
I created the new prototype using the ultrasonic sensor. I coded it, and it successfully functions properly. However, when I tested it with a tree, it didn’t detect it correctly (it said it was dead, not healthy). When I tested it a few more times, it showed accurate readings. I still need to compare the two prototypes together.
I compared the 2 prototypes to see which sensor is more accurate (with research, not actual testing). I found that the thermal sensor is more accurate, especially when paired with a camera and an ML algorithm. However, the pairing will be new to me because of the Raspberry Pi. I am more used to working with Aruinos, but through research and practice, I will be able to implement ML. Also, the book I am reading is going to help increase my knowledge on ML. In a future DevLog, I might just test this research just to be sure the thermal sensor is the right choice.
Instead of physically testing the prototypes out (because my dog accidentally stepped on the ultrasonic sensor prototype), I just researched a bit more about the two sensors. I researched the benefits and downsides of each sensor, as well as how accurae they are at specifcally detecting dead trees. I found that people have used ultrasonic sensors before to detect dead trees, but no one has used thermal sensors in the way that I am before to do so. Therefore, I will stick with using a thermal sensor for this prototype. I will have to do more research about the actual pairing between a thermal sensor, a camera, and ML, but the book will help me a lot in the coding of the ML portion.
I just researched about how to combine a thermal sensor with a camera. I found a helpful video and took notes on that video. I also found the specific type of camera I can use, which is a standard Raspberry Pi Camera Module, as well as the connector.
I researched exactly what camera and battery pack to buy (to power the Raspberry Pi). I added them to the cart and will buy it as soon as possible to further develop the prototype. I can’t wait to see how it works with the thermal sensor!
I watched a video about using the Raspberry Pi 5 with ML. Though the Machine Learning book is helpful (and I will keep reading it), I felt that it was not enough to help me with this specific project.
I watched the Lesson 2 of the AI on the Edge Raspberry Pi videos.
I finished the 3rd lesson of the AI on the Edge.
I watched Lesson 3 of the AI on the Edge videos.
I made a plan on how to spend my time during this summer, as a lot of time will be dedicated to the ML aspect of my project.
I watched Lesson 5 of AI on the Edge. In the previous DevLog about the AI on the Edge videos, I actually watched Lesson 4, not Lesson 3.
I watched Lesson 6 of the AI on the Edge videos.
I watched Lesson 7 of the AI on the Edge videos.
I sent an email to Ms. Mint (the one I met previosuly) asking if we could meet again for some feedback on my project idea. I also converted my paper plan onto a document and calendar so I can keep track of any deadlines I might have for the project.
I finished reading Chapter 4 of the Machine Learning book. I am also taking more notes on the book now.
I watched Lesson 8 of the AI on the Edge videos.
I watched Lesson 9 of the AI on the Edge videos.
I watched Lesson 10 of the AI on the Edge videos.
I watched Lesson 11 of the AI on the Edge videos.
I read chapters 5 and 6 of the Machine Learning book.
I watched Lesson 12 of the AI on the Edge videos.
I watched Lesson 13 of the AI on the Edge videos.
I watched Lesson 14 of the AI on the Edge videos.
I watched Lesson 15 of the AI on the Edge videos.
I watched Lesson 16 of the AI on the Edge videos.
I watched Lesson 17 of the AI on the Edge videos.
I watched Lesson 18 of the AI on the Edge videos.
I watched Lesson 19 of the AI on the Edge videos.
I watched Lesson 20 of the AI on the Edge videos.
I watched Lesson 21 of the AI on the Edge videos.
I watched Lesson 22 of the AI on the Edge videos.
I watched Lesson 23 of the AI on the Edge videos.
I read chapters 6 and 7 of the Machine Learning book. I’m just reading and watching the videos until the parts arrive in three or four days. Then, I will work on the technical aspect of the prototype. I have some free time now, so I thought I would learn about Machine Learning and using the Raspberry Pi in the time I have instead of wasting it.
I watched Lesson 24 of the AI on the Edge videos.
I watched Lesson 25 of the AI on the Edge videos.
I watched Lesson 26 of the AI on the Edge videos.
I watched Lesson 27 of the AI on the Edge videos.
I watched Lesson 28 of the AI on the Edge videos.
I watched Lesson 29 of the AI on the Edge videos.
I watched Lesson 30 of the AI on the Edge videos.
I watched Lesson 31 of the AI on the Edge videos.
I read Chapter 8 of the Machine Learning book. I will stop watching the AI on the Edge videos because they are not accessible on YouTube after Lesson 31. The parts will come day after tomorrow, so I plan to finish reading this book by then.
I read Chapters 9 and 10 of the Machine Learning book.
I watched a video about using the ArduCam with the Raspberry Pi 5.
I read Chapters 11 and 12 of the Machine Learning book.
I researched more about using the ArduCam with the Raspberry Pi 5. I found troubleshooting techniques and what I need to do after I get the camera (the setup).
I planned the way I am going to connect the ArduCam to the Raspberry Pi with the thermal sensor. I realized I might have to solder some wires together so that more than one wire can fit on one pin on the Pi. I planned the way the wires are going to connect to the Pi and how I am going to integrate ML into the Pi using the camera and thermal sensor.
I read Chapter 13 of the Machine Learning book.
I read Chapters 14 and 15 of the Machine Learning book. The parts will come tomorrow.
I fiinshed the Machine Learning book.
I tested the camera and battery pack that came. They both worked really well. Now, I can start inputting the ML algrothm.
I researched the different datasets I can use for the project, as well as the amount of tree data each have in them. I still need to do some more research, but as of now, creating a dataset is the best option if I want to get a wide, accurate range of data. I haven’t found any datasets that match the amount of data I can collect by myself in my neighborhood.
I researched more about the tree datasets, and I found one that has plenty of accurate information: PlantNet API.
I researched about how to use the specific PlantNet API database with the Raspberry Pi and hook that database to a Machine Learning algorthim. I am finally ready to actually make the Machine Learning algorithm and get my hands dirty now that I have the information I need to continue on with the project.
I connected the database to the Raspberry Pi, and tested it out using a house plant. It worked really well, and the next step is to test it outside with a real tree.
I build a CAD of the structure that will house the prototype. I left holes for all the different parts, and will print it later today.
I 3D printed the top half of the housing for the prototype. Next, I will print the bottom half.
I fixed the issues that the prototype was facing. I also added a button. The main thing I did was make the prototype able to function without the computer nearby, which can make it so that anyone in the world can use it with a battery pack.
I researched the different types of prevalent trees in California and their temperatures during different seasons. I plan to add this to my database, as I hadn’t previously done this. I used many websites, but Our City Forest was the most helpful.
I combined the parts in the bottom half of the prototype, and fit it in the encolsure.
I completed the prototype by combining the enclosure with the prototype. I encased the sensors and the LCD. The prototype is finally complete!
Ships:
I made a project that can detect tree/plant species and temperature to determine whether it is dead or not. It displays the result on an LCD in the back, and will start the process of scanning a tree/plant once a button is pressed. The wiring is enclosed in a 3D printed prototype. The most difficult thing I did in this project was likely trying to fit it all in the enclosure. There were a lot of wires here and there, and the button was also quite difficult to fit in, as I needed to solder it on. However, this project was really fun to do, as it helped me gain knowledge about the environment around me, and I got to practice my software and hardware skills. I am really proud of myself, as I completed this project from start to finish, and didn’t give up. To test my project, all you have to do is plug in the battery pack, wait for a minute or so, point the prototype at the tree you want to scan, press the button, and wait for the results. Sometimes, it will take a little longer to get the results, resulting from a difficulty figuring out either the temperature or species of that particular plant/tree....
|
1793145370.0283284
|
1793231770.0283284
|
|
12938
|
PetTrack by @szabence | Stardance
|
szabence
|
1
|
72.63
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T14:24:17Z", "hours": 71.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PetTrack! A beautiful Pet Monitoring system that upcycles old smartphones into IP-cameras that you can use to see your small pet I made this project because I took in a Rabbit in May 2026 and I didn’t know what she was doing when i wasn’t home, so I decided to code this app that you can install on any Android 7+ / iPhone 6s or newer device, and use it to check on your pet, with a beautiful UI, Zone tracking, replays, medicine and vaccine tracking, and a lot more :) The hardest part was, getting used to writing Flutter. I have never used Flutter in the past, but I read about it and I liked the mentality and the mechanics of the code or how should I say, and I decided to give it a go. I love it. Simple but effective, and I can use this 1 codebase on the web, on my iPhone, on my Android and even on my WearOS smartwatch :) The project is working, and you can check it by the bottom below, select language, select Client and press Demo mode, it will show the UI. You can see it working in action on the screenshots. Check the README, and thank you for reading this!", "repo": "https://github.com/szbnce/PetTrack", "demo": "https://pettrackdemo.szabence.com"}]...
|
[{"post_id": 68851, "ts": "202 [{"post_id": 68851, "ts": "2026-09-15T21:18:20Z", "hours": 1.6314, "text": "PetTrack reship no.2 Hey guys, I have shipped the project last week, but I got rejected because I’ve used the project logo as banner and not a screenshot… Anyways, I fixed some bugs that Ive seen since shipping, which was the Notification, on both iOS and Android and Web, it wasn’t working correctly anywhere, but because of lack of time at the moment, I have removed the Notification option. on iOS it will never work self-hosted, because it requires apple dev account and the app to be on the app store or have a real backend behind it, or something like that I’ve read. I also removed the Sync with watch button from the iOS builds and Web builds, since there is only WearOS build. Google play! I have started the process to put the app on the Google Play. I was originally against this, as y’all have read in one of the first devlogs, but I thought, 25 bucks once isn’t that much, so PetTrack will be on the Play store soon, but by the looks of things, only after Stardance has already finished. WearOS I started school once again, and I couldn’t always get to my phone so I have made a minimalist app to use on the watch, it’s not that full, you can only see 1 frame / 5 seconds, and you can’t edit anything, only check the live feed, check the Monitors battery percentage and the last seen in X zone. I will ship my project once again, thank you for reading! EDIT: I did not know I just need recertification instead of a full reship lol"}, {"post_id": 62924, "ts": "2026-09-06T13:52:19Z", "hours": 5.8556, "text": "PetTrack has been released! Hello guys! I’m not going to mess around with Markdown for this last devlog, I have been testing the project for 2 weeks now, and it is working great. I fixed up minor bugs that I found, added 5 AI-translated languages for more multilang support, though Hungarian and English has been translated by me, so those are definetly correct :) I changed on the UI a bit, removed the last seen and most seen cards from the dashboard and changed it to a diagram about the Zone visits, and changed the Medical UI cards a bit. Also made the resolution in the app better, now you can make pictures from the app, and instantly share them, replays work now on both iOS and Android. The first release of PetTrack has been finally published on GitHub, so please go and check it out! https://github.com/szbnce/PetTrack/releases/tag/1.0.0 Thank you everybody who has been though this journey over 3 months with me. Thank you!"}, {"post_id": 53494, "ts": "2026-08-24T02:11:25Z", "hours": 5.7447, "text": "PetTrack Demo is finally here! I haven’t worked on PetTrack in the past 1,5 months, mostly because I just couldn’t bring myself to code, and I am going on vacation as I am writing this, and I figured, omg, if i come home, it will be already september, and besides school, i will definetly not finish this, and then, what was I working for for days on end? So, I got my sxit together, and started working on the project. Sadly, because of the time, I had to use AI so I will finish until I leave for vacation. I almost did not. It’s 3:45 AM, I left 2 hours ago, and I set up the server 15 whole minutes before leaving my house. So it was calculated, but I managed. Unified Flutter codebase: I merged the pettrack_client , pettrack_montior and pettrack_web , into one package, and is written in Flutter. The app is entirely in Flutter, I kept designs of the Client so it won’t look very different. Deployment & OS Support: The new one app method is Docker compatible, so the project will offer a Docker option, and a non-docker MacOS and Linux native installer, and a Windows installer aswell, without docker :) Branching: The one where I used AI has been moved to a new branch \"allFlutter\" . iOS Support: I initally did not want to make an iOS version because I don’t really agree with the yearly 100 usd developer program payment, and I don’t really agree with Google Play 25usd purchase aswell, but that’s very much more manageable than a yearly model, on a FOSS app. Anyways, I will publish the .ipa file, and do what you want with it :) If you have the courage and understanding, you can jailbreak and install it indefinetly, or you can sideload it, though you will have to renew it every week. If you don’t want to do that, you can of course use the Web version in a browser, it will work the exact same way, they are the same codebase under. Web support: This was my original plan to make PetTrack work on iOS devices, but then, I decided why not make it fully work on any browser? One codebase, the Webapp, the Android app and iOS app will work the EXACT SAME WAY! if you want to install a full app, you may, but if you don’t, you have all options. Medical panel: I think I have made a devlog about that, or mentioned that, but I will write it once again. We have a Medical tab now, where you will be able to track Medications and get notifications to give them to your pet, and the Vaccines tab, where you can track what the pet has gotten, when, and when its next Due. You can also set more colors. Replay: You can now replay movement. Currently for some reason, It does not work (I started implementing it at 0:30 AM, left at 1:30 so I could’ve expected that), or atleast it does not work from the browser. If i log into the server, and check it, the videos are there, and visible. It records a few seconds before and after the movement. Demo! Now you can check out PetTrack at: 👉 https://pettrackdemo.szabence.com How to access: Select language (colors are broken i know) Select Viewer For IP write asd or something, just dont leave it empty For password, write 8068 Press next, and you will see it asking if you want to go into Demo Press yes, and you are in! Its a quite basic demo, its the same codebase, just no server behind. You can add medications, test zones, etc. After you close the tab, everything will be deleted. I will test the project as I am going about my week, fix errors at night, and I will ship the project next week. Have a great week guys, and thank you for watching the project."}, {"post_id": 40217, "ts": "2026-08-03T16:58:52Z", "hours": 4.8564, "text": "Hey guys.. Its been 17 days since the last Devlog, I dont even know what I “upgraded” or didn’t. I wont’t try to make it a big devlog or anything, really i just want to get the hours logged so I can start fresh. I’ve decided to ditch all 3 (pettrack_monitor, pettrack_client and pettrack_web) codebases and rewrite everything as one flutter app. Making sure 4 sections of the app written in 3 different languages wasn’t easy on my level so I decided to ditch all and write one “pettrack_app” codebase. It will work on Android, iOS and Web, and for iOS users also PWA app, so you don’t have to install anything, and it will all work under one codebase, so everything will be the same across all devices. So. I don’t know when I will finish or anything, or write the next devlog, because I have so many things to do this month, soo…"}, {"post_id": 30037, "ts": "2026-07-17T09:22:29Z", "hours": 6.6725, "text": "The Flutter apps and the Server is 99% done until shipping! This is rather a bigger devlog, I didn’t make a more smaller ones, but let’s see what I’ve done: Easier pairing : Now instead of using a qr code (which in the Docker terminal is unreliable), you get a 4 number pairing code, which you can use to communicate the 64 char JWT token. It’s much easier, and much more reliable. Docker : I implemented Docker, but it seems like at the moment that it only really works on MacOS, i might phase Docker out and make setup commands for each, maybe a oneliner with curl, or something like that. Bugfixes : Lots of bugfixes in those 6,5 hours, I can’t even list all of them, connectivity issues, pairing issues, camera issues, UI Cleanup : I removed developer overlays from the web e.g Eruda mobile console overlay. I will be focusing a lot more on the Mock API for the demo site, and polishing for Shipping EXCEPT for one feature that I still want to add, and that would be insanely good. Bye guys!"}, {"post_id": 27994, "ts": "2026-07-13T23:20:55Z", "hours": 4.0786, "text": "🚀 WebClient is getting ready! I’ve done multiple things with the WebClient over the last 4 hours, and we are getting closer and closer to shipping! Here is a quick rundown of the progress: 🛠️ Key Features & Updates Unified Multi-Mode: You can now choose whether you want to use a device as a Client (Viewer) or a Monitor (Camera). Zone Management: Zone adding now works! (Showing current zones is still slightly broken, but we are getting there). Event Tracking: Zone enter/exit detection is fully functional. Dashboard Stats: Added panels to show “Last seen” and “Most seen” locations. Pet Profiles: You can now edit your pet’s profile directly from the Settings tab. Settings Reset: Added the ability to wipe all local settings if you want a fresh start. 🎨 UI & UX Polish Dark Mode: Synced theme with Client, dark and light mode aswell. Cleaned up the UI: Removed all unnecessary buttons. P.S. Berci got vaccinated today! 💉🐇 So now he’s immune to both physical viruses and mental breakdowns over JavaScript!"}, {"post_id": 27081, "ts": "2026-07-12T10:04:49Z", "hours": 5.1319, "text": "now i understand why web developers are all bald and angry… Okkkay so, little bit of a backgound here, I do not agree on the fact that I should pay for FOSS apps to be put on the play store and app store, that for one company i should pay 25 bucks once and then i can put my app on the app store and i have to pay 100 BUCKS YEARLY TO APPLE. So, instead of creating an app for iOS, since you can’t really sideload (there are ways for people in Europe and you can jailbreak bla bla bla…) and this app is made for ordinary people. Not developers. So, as a last resort, I am making a WebClient and WebMonitor, so the apps are able to run without even installing anything. Obviously the installed apps will run better and feel better, but then no iOS support, which I did not want. So, I started working with AI on a WebClient and WebMonitor and started learning JavaScript, but that…. Dart next to Javascript is a kids game honestly, very hard, I tried to make it easier for me by using TailwindCSS which I have some experience in, but it wasn’t that easy. To eliminate AI slop, I have a great Web developer friend (became bald at the bold age of 30), and he’ll monitor the code and check if it is alright for “prod”…"}, {"post_id": 25564, "ts": "2026-07-09T21:53:54Z", "hours": 4.0792, "text": "🛠️ BUGFIXES! BUGFIXES! I didn’t really add any new features this time, but rather focused on fixing and polishing already existing features. 🔒 Security and Stability Token Generation: I removed hardcoded “placeholder” tokens; the system now creates a new API token seamlessly. Storage Limits: Added a maximum 500 picture limit on the server, so it doesn’t fill up the storage if the cleanup task fails. Syntax Fixes: Fixed a broken dictionary on the server which threw garbage JSON. ✨ UI and Usability Notification Cooldown: Added a 1-minute cooldown between notifications to prevent spam. Better Statistics: Now the Activities tab shows 50 events instead of 5 for more accurate data. Dynamic Names: Removed fallback placeholder names (no more hardcoded fake names). 100% Localization: Removed all hardcoded UI strings and moved absolutely everything into l10n and .arb dictionaries. 🏗️ Architecture Hardware JPEG Streaming: Switched to native hardware JPEG streaming for faster picture taking, completely replacing the heavy RepaintBoundary method. 🚧 IN THE WORKS: WebSocket migration! I will tackle that tomorrow to achieve real-time streaming. Here is a picture showing git graph (lol) and Berci as I was fixing up issues. Bye guys!"}, {"post_id": 25297, "ts": "2026-07-09T14:26:21Z", "hours": 6.7308, "text": "More seamless Setup! I have edited the Setups, so now, it is more seamless: When you Install the server, it spits out a QR-code, which you have to scan while setting up the Client app, they connect, and you have to set up the profile of the pet, and a 4 digit pin code, which will be for the WebClient that I am planning to make. After that, the phone spits out another QR code, which you have to scan with the Monitor, and it will connect automatically, and only then will the app let you in. Also, I added E2EE to the server - client connection, to make it more secure, and I also did some bugfixes. I will start to Polish the apps, make it so easy to set up that even somebody who doesn’t use technology day-to-day would be able to set it up perfectly. Bye guys!"}, {"post_id": 24346, "ts": "2026-07-07T21:10:21Z", "hours": 4.4408, "text": "Monitor ready, server working, Client UI is mostly done, we are shipping soon! I made a few adjustments today: Monitor: Synced theme with Client Fixed alignment issues Added Auto reconnect and Auto capture Monitor is basically finished, I don’t think I will add anything to the monitor before shipping now. New README.md: I completly redesigned the README, now in my opinion its almost perfect. Tomorrow, I will start to make a webpage for the project, and I might make a WebUI before the project ships, and add some more tests, but I will sleep on that. Bye guys!"}, {"post_id": 22216, "ts": "2026-07-04T16:05:40Z", "hours": 3.8428, "text": "Frontend Changes to PetTrack! Today I worked a lot on PetTrack, and I made a few small but nice changes: Zone Notifications: You now get notified if a pet enters or exits a zone. Battery Alerts: Get notifications if the monitor’s battery is low (can be set between 5% and 50%). Camera Placeholder: Added a placeholder picture for when the camera is offline. Pet Types: You can now set the type of pet you have. I’ve added a few common ones, but I can add more if needed! Dynamic Live Badge: Fixed the hardcoded “Live” text on the dashboard. Now it shows exactly when the picture was taken (e.g., “30 seconds ago”), and if it’s under 10 seconds, it will say “Live”. “Continuous” Video: It’s still using pictures, but instead of updating every 30 seconds, it now updates roughly every 2 seconds. UI Cleanup: Removed the zoom buttons from the Zones screen since they were unnecessary. Custom Zones & Icons: When adding a new zone, you can now assign it a category (play area, toilet, food, water, bed) with matching icons. I’ll add a fully customizable option later! Bug Fixes: Fixed some minor layout issues. That’s all I think. Bye guys!"}, {"post_id": 21821, "ts": "2026-07-03T23:05:28Z", "hours": 3.5933, "text": "Miscellaneous Updates to PetTrack! Hey guys! I know I haven’t posted in almost 2 weeks at this point. I needed a break from coding and doing work at the PC/PetTrack. We have a few miscellaneous updates to share: Custom Monitor IDs : You can now set a custom Monitor ID, and it will show up properly in the PetTrack app as well, instead of just defaulting to “Main Monitor”. Battery Status : You can now see the battery percentage and whether it’s charging directly in the app! I plan to add a feature later that will send a notification to the PetTrack Client app when the monitor phone’s battery is running low. Backend Testing : Added testing to the PetTrack server for both the WebSocket and REST API, so you can easily check if the API and WS are working correctly. I will put more effort and hours into the project soon, but I have a lot of other things going on besides this project, and I don’t want to risk burning out. Bye! P.S: This is Berci from a few days ago and I pushed everything to GH!"}, {"post_id": 12162, "ts": "2026-06-19T21:23:36Z", "hours": 5.9286, "text": "Hey guys! I haven’t posted a devlog in a few days now, I have been working on some stuff here, and I have to say that I have some very good news! We finally have a Client app! It is a work in progress, but it is something! I don’t remember everything I have changed in the code, but: API adjusted, added a layer of security, because the API wasn’t secured. Added zones to pettrack_server, and added an API to edit it, Added Database (maybe mentioned in last devlog) Takes pictures every 2 seconds, only saves every 30 seconds for 12 hours (will add a replay mode or something like that) pettrack_monitor almost fully done, only need to add some stuff here and there. pettrack_server is in an MVP state now, it works beautifully but some features are still missing before shipping pettrack_client has been made (not pushed to GH yet), works well, though I am pretty fking shyt in UI design, so I made the UI with stitch.withgoogle.com and coded some of it with Gemini, though it still needs a lot of work. Live camera somewhat works (TODO: need to add when watching in the app to show the new pictures (that are taken every 2 seconds and not the 30 seconds saved)) Shows which zone was the most used- Shows last interaction (movement) Last 15 activities (entered zone, left zone, will add more later ? (NEED IDEAS!)) You can add zones (see the live camera and set it via adding points on the picture) You can set a picture and name for your pet in the client app- Always changing welcome greetings No logo / face for the program yet, and no website, will start working on that later The Client app seems very stable for now, no issues found, pettrack_monitor has issues with focusing, server seems stable aswell. I am soon looking for testers for the program, before shipping I want to make sure that this is functional and useful for small pet owners, and what might work for me in my use case, it might not for somebody else, and I want to make it as stable as I am able to. Everything is opensource, available on https://github.com/szbnce/PetTrack (will push everything to GH tomorrow!), DM me on Slack if interested, currently only available for Android. I will start working on the UI and fix the bugs, and get back to you guys soon! Here are some pictures of the UI!"}, {"post_id": 10248, "ts": "2026-06-16T21:39:22Z", "hours": 2.5683, "text": "Hey guys! It’s been a long day, once again, but I have some good news! I have started working on PetTrack Client, started writing the UI and the functions of the app, but that’s when I realised that I still have no way of storing the data, analyzing the data and I don’t have any API routes where I could check or see the NON EXISTENT DATA! so, I left pettrack_client and started working on the backend, it’s getting somewhere, but I have not pushed changes to GH yet, because I haven’t finished it yet and it would not run in this state. I will try to finish changes with the backend tomorrow so I can start working on the frontend / client with real, actual data. Until then, here is a picture of PetTrack Monitor running on a somewhat low end Android 8.0 device and my IDE :D"}, {"post_id": 8371, "ts": "2026-06-13T22:29:10Z", "hours": 2.42, "text": "Good day everybody! It’s been a long day. I have done a lot of things today, mainly with pettrack_monitor. Basically: Firstly, I did a git rebase and made my last few commits make a bit more sense. There were commits that weren’t that useful or had the wrong name; it’s always better to have a good commit history. Next, I finally installed the app on a real device, and let’s just say, there were some problems. The flashlight was on while taking pictures, which is what I fixed first. It was quite easy, just one line: await _controller.setFlashMode(FlashMode.off); Afterward, it dawned on me that most people (including me) will use this app in Landscape mode, not Portrait. I fixed that issue next, but that itself came with a batch of new problems. The layout broke, like, fully. I couldn’t use the app at all, so I had to rewrite the whole layout with flexes and SizedBoxes; it was a pain in the a**. After this issue, instead of showing the SetupScreen every time the app opens, I made it a one-time thing and added a Settings menu and an About page. There were some issues with overflowing, but I fixed that as well. Now the app is fully functional. However, there is an issue I haven’t gotten around to fixing yet: when I exit the SetupScreen and go into MonitorScreen, the Xiaomi Camera API kills itself for whatever reason. I tried fixing it, but to no avail. It’s currently 12:30 AM, and I am very tired now. Tomorrow, I hope I will fix all remaining issues with the Monitor app and move onto the Server-side logic, zones, database, etc. And while doing that, I will start working on the Client-side app (at least an MVP) so I can start testing the app and server together. Berci is also looking forward to testing the app! (And don’t ask why he is there he is there because he wants to I have no idea why that’s good for him) Peace out!"}, {"post_id": 7131, "ts": "2026-06-11T22:16:46Z", "hours": 1.8947, "text": "We finally have the server in Docker up and running! I haven’t had much time to work on the project yesterday and today, but I started working on the Docker and Dockerfile, and well this is still whichcraft for me :p But, we are developing and we are getting ahead, and I hope that after the MVP for the server is working, I can start working on the client side MVP of the app, and we can start implementing features from there. I am very tired, and I have a long day tomorrow. Until then, there is another picture of Berci! P.S: Tomorrow I hope I can show some of the actual project!"}, {"post_id": 5844, "ts": "2026-06-09T19:49:41Z", "hours": 3.1944, "text": "Hey! Welcome to my project, PetTrack, this is the first Devlog of the project. I just recently got a rabbit, and while in school, I don’t know what she’s doing. And I assume a lot of animal parents face the same issue, or not an issue but just an uncomfortable feeling, maybe she/he got out, maybe they are doing something wrong, maybe they are not doing well, etc. This is what PetTrack aims to solve, so this uncomfortable feeling goes away, and you can be sure that your pet is safe and sound, while you are away. It uses an old phone as a “Monitor”, which will be attached to for example the cage of a pet, and connected to external power. Originally I wanted to make it so that there is no “central” computing, but after thinking about this for some time, and figuring that most of the people who are going to use this are going to use a close to min requirement phone (assuming low range old phone, and not a new flagship/new anything basically) and the issues with if the monitor dies for some issue, I decided on using a “central server” and using FastAPI with WebSockets to make the usage more seamless. It will be a simple Docker image that you will need to compose and run on a RPI or your server. The Client will be the “main” app, the one you will use the most, the one you’ll use daily. This is my last priority at the moment, let’s get the data first (Monitor), analyze and make use of the data (Server/backend), and the last is to see the data (Client). I’m open to any and all feedback on the project, any tips, help with Py/Flutter, would appreciate! Thanks for reading! Pic Description: My rabbit, named Berci, and an MVP of the server and Monitor."}]...
|
Title: PetTrack by @szabence | Stardance
Devlogs: Title: PetTrack by @szabence | Stardance
Devlogs:
Hey! Welcome to my project, PetTrack, this is the first Devlog of the project. I just recently got a rabbit, and while in school, I don’t know what she’s doing. And I assume a lot of animal parents face the same issue, or not an issue but just an uncomfortable feeling, maybe she/he got out, maybe they are doing something wrong, maybe they are not doing well, etc. This is what PetTrack aims to solve, so this uncomfortable feeling goes away, and you can be sure that your pet is safe and sound, while you are away. It uses an old phone as a “Monitor”, which will be attached to for example the cage of a pet, and connected to external power. Originally I wanted to make it so that there is no “central” computing, but after thinking about this for some time, and figuring that most of the people who are going to use this are going to use a close to min requirement phone (assuming low range old phone, and not a new flagship/new anything basically) and the issues with if the monitor dies for some issue, I decided on using a “central server” and using FastAPI with WebSockets to make the usage more seamless. It will be a simple Docker image that you will need to compose and run on a RPI or your server. The Client will be the “main” app, the one you will use the most, the one you’ll use daily. This is my last priority at the moment, let’s get the data first (Monitor), analyze and make use of the data (Server/backend), and the last is to see the data (Client). I’m open to any and all feedback on the project, any tips, help with Py/Flutter, would appreciate! Thanks for reading! Pic Description: My rabbit, named Berci, and an MVP of the server and Monitor.
We finally have the server in Docker up and running! I haven’t had much time to work on the project yesterday and today, but I started working on the Docker and Dockerfile, and well this is still whichcraft for me :p But, we are developing and we are getting ahead, and I hope that after the MVP for the server is working, I can start working on the client side MVP of the app, and we can start implementing features from there. I am very tired, and I have a long day tomorrow. Until then, there is another picture of Berci! P.S: Tomorrow I hope I can show some of the actual project!
Good day everybody! It’s been a long day. I have done a lot of things today, mainly with pettrack_monitor. Basically: Firstly, I did a git rebase and made my last few commits make a bit more sense. There were commits that weren’t that useful or had the wrong name; it’s always better to have a good commit history. Next, I finally installed the app on a real device, and let’s just say, there were some problems. The flashlight was on while taking pictures, which is what I fixed first. It was quite easy, just one line: await _controller.setFlashMode(FlashMode.off); Afterward, it dawned on me that most people (including me) will use this app in Landscape mode, not Portrait. I fixed that issue next, but that itself came with a batch of new problems. The layout broke, like, fully. I couldn’t use the app at all, so I had to rewrite the whole layout with flexes and SizedBoxes; it was a pain in the a**. After this issue, instead of showing the SetupScreen every time the app opens, I made it a one-time thing and added a Settings menu and an About page. There were some issues with overflowing, but I fixed that as well. Now the app is fully functional. However, there is an issue I haven’t gotten around to fixing yet: when I exit the SetupScreen and go into MonitorScreen, the Xiaomi Camera API kills itself for whatever reason. I tried fixing it, but to no avail. It’s currently 12:30 AM, and I am very tired now. Tomorrow, I hope I will fix all remaining issues with the Monitor app and move onto the Server-side logic, zones, database, etc. And while doing that, I will start working on the Client-side app (at least an MVP) so I can start testing the app and server together. Berci is also looking forward to testing the app! (And don’t ask why he is there he is there because he wants to I have no idea why that’s good for him) Peace out!
Hey guys! It’s been a long day, once again, but I have some good news! I have started working on PetTrack Client, started writing the UI and the functions of the app, but that’s when I realised that I still have no way of storing the data, analyzing the data and I don’t have any API routes where I could check or see the NON EXISTENT DATA! so, I left pettrack_client and started working on the backend, it’s getting somewhere, but I have not pushed changes to GH yet, because I haven’t finished it yet and it would not run in this state. I will try to finish changes with the backend tomorrow so I can start working on the frontend / client with real, actual data. Until then, here is a picture of PetTrack Monitor running on a somewhat low end Android 8.0 device and my IDE :D
Hey guys! I haven’t posted a devlog in a few days now, I have been working on some stuff here, and I have to say that I have some very good news! We finally have a Client app! It is a work in progress, but it is something! I don’t remember everything I have changed in the code, but: API adjusted, added a layer of security, because the API wasn’t secured. Added zones to pettrack_server, and added an API to edit it, Added Database (maybe mentioned in last devlog) Takes pictures every 2 seconds, only saves every 30 seconds for 12 hours (will add a replay mode or something like that) pettrack_monitor almost fully done, only need to add some stuff here and there. pettrack_server is in an MVP state now, it works beautifully but some features are still missing before shipping pettrack_client has been made (not pushed to GH yet), works well, though I am pretty fking shyt in UI design, so I made the UI with stitch.withgoogle.com and coded some of it with Gemini, though it still needs a lot of work. Live camera somewhat works (TODO: need to add when watching in the app to show the new pictures (that are taken every 2 seconds and not the 30 seconds saved)) Shows which zone was the most used- Shows last interaction (movement) Last 15 activities (entered zone, left zone, will add more later ? (NEED IDEAS!)) You can add zones (see the live camera and set it via adding points on the picture) You can set a picture and name for your pet in the client app- Always changing welcome greetings No logo / face for the program yet, and no website, will start working on that later The Client app seems very stable for now, no issues found, pettrack_monitor has issues with focusing, server seems stable aswell. I am soon looking for testers for the program, before shipping I want to make sure that this is functional and useful for small pet owners, and what might work for me in my use case, it might not for somebody else, and I want to make it as stable as I am able to. Everything is opensource, available on https://github.com/szbnce/PetTrack (will push everything to GH tomorrow!), DM me on Slack if interested, currently only available for Android. I will start working on the UI and fix the bugs, and get back to you guys soon! Here are some pictures of the UI!
Miscellaneous Updates to PetTrack! Hey guys! I know I haven’t posted in almost 2 weeks at this point. I needed a break from coding and doing work at the PC/PetTrack. We have a few miscellaneous updates to share: Custom Monitor IDs : You can now set a custom Monitor ID, and it will show up properly in the PetTrack app as well, instead of just defaulting to “Main Monitor”. Battery Status : You can now see the battery percentage and whether it’s charging directly in the app! I plan to add a feature later that will send a notification to the PetTrack Client app when the monitor phone’s battery is running low. Backend Testing : Added testing to the PetTrack server for both the WebSocket and REST API, so you can easily check if the API and WS are working correctly. I will put more effort and hours into the project soon, but I have a lot of other things going on besides this project, and I don’t want to risk burning out. Bye! P.S: This is Berci from a few days ago and I pushed everything to GH!
Frontend Changes to PetTrack! Today I worked a lot on PetTrack, and I made a few small but nice changes: Zone Notifications: You now get notified if a pet enters or exits a zone. Battery Alerts: Get notifications if the monitor’s battery is low (can be set between 5% and 50%). Camera Placeholder: Added a placeholder picture for when the camera is offline. Pet Types: You can now set the type of pet you have. I’ve added a few common ones, but I can add more if needed! Dynamic Live Badge: Fixed the hardcoded “Live” text on the dashboard. Now it shows exactly when the picture was taken (e.g., “30 seconds ago”), and if it’s under 10 seconds, it will say “Live”. “Continuous” Video: It’s still using pictures, but instead of updating every 30 seconds, it now updates roughly every 2 seconds. UI Cleanup: Removed the zoom buttons from the Zones screen since they were unnecessary. Custom Zones & Icons: When adding a new zone, you can now assign it a category (play area, toilet, food, water, bed) with matching icons. I’ll add a fully customizable option later! Bug Fixes: Fixed some minor layout issues. That’s all I think. Bye guys!
Monitor ready, server working, Client UI is mostly done, we are shipping soon! I made a few adjustments today: Monitor: Synced theme with Client Fixed alignment issues Added Auto reconnect and Auto capture Monitor is basically finished, I don’t think I will add anything to the monitor before shipping now. New README.md: I completly redesigned the README, now in my opinion its almost perfect. Tomorrow, I will start to make a webpage for the project, and I might make a WebUI before the project ships, and add some more tests, but I will sleep on that. Bye guys!
More seamless Setup! I have edited the Setups, so now, it is more seamless: When you Install the server, it spits out a QR-code, which you have to scan while setting up the Client app, they connect, and you have to set up the profile of the pet, and a 4 digit pin code, which will be for the WebClient that I am planning to make. After that, the phone spits out another QR code, which you have to scan with the Monitor, and it will connect automatically, and only then will the app let you in. Also, I added E2EE to the server - client connection, to make it more secure, and I also did some bugfixes. I will start to Polish the apps, make it so easy to set up that even somebody who doesn’t use technology day-to-day would be able to set it up perfectly. Bye guys!
🛠️ BUGFIXES! BUGFIXES! I didn’t really add any new features this time, but rather focused on fixing and polishing already existing features. 🔒 Security and Stability Token Generation: I removed hardcoded “placeholder” tokens; the system now creates a new API token seamlessly. Storage Limits: Added a maximum 500 picture limit on the server, so it doesn’t fill up the storage if the cleanup task fails. Syntax Fixes: Fixed a broken dictionary on the server which threw garbage JSON. ✨ UI and Usability Notification Cooldown: Added a 1-minute cooldown between notifications to prevent spam. Better Statistics: Now the Activities tab shows 50 events instead of 5 for more accurate data. Dynamic Names: Removed fallback placeholder names (no more hardcoded fake names). 100% Localization: Removed all hardcoded UI strings and moved absolutely everything into l10n and .arb dictionaries. 🏗️ Architecture Hardware JPEG Streaming: Switched to native hardware JPEG streaming for faster picture taking, completely replacing the heavy RepaintBoundary method. 🚧 IN THE WORKS: WebSocket migration! I will tackle that tomorrow to achieve real-time streaming. Here is a picture showing git graph (lol) and Berci as I was fixing up issues. Bye guys!
now i understand why web developers are all bald and angry… Okkkay so, little bit of a backgound here, I do not agree on the fact that I should pay for FOSS apps to be put on the play store and app store, that for one company i should pay 25 bucks once and then i can put my app on the app store and i have to pay 100 BUCKS YEARLY TO APPLE. So, instead of creating an app for iOS, since you can’t really sideload (there are ways for people in Europe and you can jailbreak bla bla bla…) and this app is made for ordinary people. Not developers. So, as a last resort, I am making a WebClient and WebMonitor, so the apps are able to run without even installing anything. Obviously the installed apps will run better and feel better, but then no iOS support, which I did not want. So, I started working with AI on a WebClient and WebMonitor and started learning JavaScript, but that…. Dart next to Javascript is a kids game honestly, very hard, I tried to make it easier for me by using TailwindCSS which I have some experience in, but it wasn’t that easy. To eliminate AI slop, I have a great Web developer friend (became bald at the bold age of 30), and he’ll monitor the code and check if it is alright for “prod”…
🚀 WebClient is getting ready! I’ve done multiple things with the WebClient over the last 4 hours, and we are getting closer and closer to shipping! Here is a quick rundown of the progress: 🛠️ Key Features & Updates Unified Multi-Mode: You can now choose whether you want to use a device as a Client (Viewer) or a Monitor (Camera). Zone Management: Zone adding now works! (Showing current zones is still slightly broken, but we are getting there). Event Tracking: Zone enter/exit detection is fully functional. Dashboard Stats: Added panels to show “Last seen” and “Most seen” locations. Pet Profiles: You can now edit your pet’s profile directly from the Settings tab. Settings Reset: Added the ability to wipe all local settings if you want a fresh start. 🎨 UI & UX Polish Dark Mode: Synced theme with Client, dark and light mode aswell. Cleaned up the UI: Removed all unnecessary buttons. P.S. Berci got vaccinated today! 💉🐇 So now he’s immune to both physical viruses and mental breakdowns over JavaScript!
The Flutter apps and the Server is 99% done until shipping! This is rather a bigger devlog, I didn’t make a more smaller ones, but let’s see what I’ve done: Easier pairing : Now instead of using a qr code (which in the Docker terminal is unreliable), you get a 4 number pairing code, which you can use to communicate the 64 char JWT token. It’s much easier, and much more reliable. Docker : I implemented Docker, but it seems like at the moment that it only really works on MacOS, i might phase Docker out and make setup commands for each, maybe a oneliner with curl, or something like that. Bugfixes : Lots of bugfixes in those 6,5 hours, I can’t even list all of them, connectivity issues, pairing issues, camera issues, UI Cleanup : I removed developer overlays from the web e.g Eruda mobile console overlay. I will be focusing a lot more on the Mock API for the demo site, and polishing for Shipping EXCEPT for one feature that I still want to add, and that would be insanely good. Bye guys!
Hey guys.. Its been 17 days since the last Devlog, I dont even know what I “upgraded” or didn’t. I wont’t try to make it a big devlog or anything, really i just want to get the hours logged so I can start fresh. I’ve decided to ditch all 3 (pettrack_monitor, pettrack_client and pettrack_web) codebases and rewrite everything as one flutter app. Making sure 4 sections of the app written in 3 different languages wasn’t easy on my level so I decided to ditch all and write one “pettrack_app” codebase. It will work on Android, iOS and Web, and for iOS users also PWA app, so you don’t have to install anything, and it will all work under one codebase, so everything will be the same across all devices. So. I don’t know when I will finish or anything, or write the next devlog, because I have so many things to do this month, soo…
PetTrack Demo is finally here! I haven’t worked on PetTrack in the past 1,5 months, mostly because I just couldn’t bring myself to code, and I am going on vacation as I am writing this, and I figured, omg, if i come home, it will be already september, and besides school, i will definetly not finish this, and then, what was I working for for days on end? So, I got my sxit together, and started working on the project. Sadly, because of the time, I had to use AI so I will finish until I leave for vacation. I almost did not. It’s 3:45 AM, I left 2 hours ago, and I set up the server 15 whole minutes before leaving my house. So it was calculated, but I managed. Unified Flutter codebase: I merged the pettrack_client , pettrack_montior and pettrack_web , into one package, and is written in Flutter. The app is entirely in Flutter, I kept designs of the Client so it won’t look very different. Deployment & OS Support: The new one app method is Docker compatible, so the project will offer a Docker option, and a non-docker MacOS and Linux native installer, and a Windows installer aswell, without docker :) Branching: The one where I used AI has been moved to a new branch "allFlutter" . iOS Support: I initally did not want to make an iOS version because I don’t really agree with the yearly 100 usd developer program payment, and I don’t really agree with Google Play 25usd purchase aswell, but that’s very much more manageable than a yearly model, on a FOSS app. Anyways, I will publish the .ipa file, and do what you want with it :) If you have the courage and understanding, you can jailbreak and install it indefinetly, or you can sideload it, though you will have to renew it every week. If you don’t want to do that, you can of course use the Web version in a browser, it will work the exact same way, they are the same codebase under. Web support: This was my original plan to make PetTrack work on iOS devices, but then, I decided why not make it fully work on any browser? One codebase, the Webapp, the Android app and iOS app will work the EXACT SAME WAY! if you want to install a full app, you may, but if you don’t, you have all options. Medical panel: I think I have made a devlog about that, or mentioned that, but I will write it once again. We have a Medical tab now, where you will be able to track Medications and get notifications to give them to your pet, and the Vaccines tab, where you can track what the pet has gotten, when, and when its next Due. You can also set more colors. Replay: You can now replay movement. Currently for some reason, It does not work (I started implementing it at 0:30 AM, left at 1:30 so I could’ve expected that), or atleast it does not work from the browser. If i log into the server, and check it, the videos are there, and visible. It records a few seconds before and after the movement. Demo! Now you can check out PetTrack at: 👉 https://pettrackdemo.szabence.com How to access: Select language (colors are broken i know) Select Viewer For IP write asd or something, just dont leave it empty For password, write 8068 Press next, and you will see it asking if you want to go into Demo Press yes, and you are in! Its a quite basic demo, its the same codebase, just no server behind. You can add medications, test zones, etc. After you close the tab, everything will be deleted. I will test the project as I am going about my week, fix errors at night, and I will ship the project next week. Have a great week guys, and thank you for watching the project.
PetTrack has been released! Hello guys! I’m not going to mess around with Markdown for this last devlog, I have been testing the project for 2 weeks now, and it is working great. I fixed up minor bugs that I found, added 5 AI-translated languages for more multilang support, though Hungarian and English has been translated by me, so those are definetly correct :) I changed on the UI a bit, removed the last seen and most seen cards from the dashboard and changed it to a diagram about the Zone visits, and changed the Medical UI cards a bit. Also made the resolution in the app better, now you can make pictures from the app, and instantly share them, replays work now on both iOS and Android. The first release of PetTrack has been finally published on GitHub, so please go and check it out! https://github.com/szbnce/PetTrack/releases/tag/1.0.0 Thank you everybody who has been though this journey over 3 months with me. Thank you!
PetTrack reship no.2 Hey guys, I have shipped the project last week, but I got rejected because I’ve used the project logo as banner and not a screenshot… Anyways, I fixed some bugs that Ive seen since shipping, which was the Notification, on both iOS and Android and Web, it wasn’t working correctly anywhere, but because of lack of time at the moment, I have removed the Notification option. on iOS it will never work self-hosted, because it requires apple dev account and the app to be on the app store or have a real backend behind it, or something like that I’ve read. I also removed the Sync with watch button from the iOS builds and Web builds, since there is only WearOS build. Google play! I have started the process to put the app on the Google Play. I was originally against this, as y’all have read in one of the first devlogs, but I thought, 25 bucks once isn’t that much, so PetTrack will be on the Play store soon, but by the looks of things, only after Stardance has already finished. WearOS I started school once again, and I couldn’t always get to my phone so I have made a minimalist app to use on the watch, it’s not that full, you can only see 1 frame / 5 seconds, and you can’t edit anything, only check the live feed, check the Monitors battery percentage and the last seen in X zone. I will ship my project once again, thank you for reading! EDIT: I did not know I just need recertification instead of a full reship lol
Ships:
PetTrack! A beautiful Pet Monitoring system that upcycles old smartphones into IP-cameras that you can use to see your small pet I made this project because I took in a Rabbit in May 2026 and I didn’t know what she was doing when i wasn’t home, so I decided to code this app that you can install on any Android 7+ / iPhone 6s or newer device, and use it to check on your pet, with a beautiful UI, Zone tracking, replays, medicine and vaccine tracking, and a lot more :) The hardest part was, getting used to writing Flutter. I have never used Flutter in the past, but I read about it and I liked the mentality and the mechanics of the code or how should I say, and I decided to give it a go. I love it. Simple but effective, and I can use this 1 codebase on the web, on my iPhone, on my Android and even on my WearOS smartwatch :) The project is working, and you can check it by the bottom below, select language, select Client and press Demo mode, it will show the UI. You can see it working in action on the screenshots. Check the README, and thank you for reading this!...
|
1793145372.4601498
|
1793231772.4601498
|
|
47952
|
Valorant Prime Vandal by @colgation | Stardance
|
colgation
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T03:02:35Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Prime Vandal from Valorant in real life! It shoots foam darts, takes standard nerf magazines, and is easy to make. All the files and build instructions are available in the github source. It is made to be as accessible as possible, so even A1 mini printers can print it. It only takes up around ~500g of filament. All you need is a printer and Nerf Retaliator (easy to find anywhere, especially in second hand stores for less than 3 dollars). Go make your own one!", "repo": "https://github.com/194500-cpu/Prime-Vandal", "demo": ""}]...
|
[{"post_id": 61339, "ts": "202 [{"post_id": 61339, "ts": "2026-09-04T06:35:10Z", "hours": 1.0839, "text": "Today I painted the gold trims on my Prime Vandal. Once it dries, the rough model should be complete, after I add smoothing and finishing touches with an acrylic pen."}, {"post_id": 57065, "ts": "2026-08-29T04:45:31Z", "hours": 1.3, "text": "Spray painted the parts using gloss spray paint. Took me some time to set up, and will let dry. My Valorant Prime Vandal will be ready soon!"}, {"post_id": 50719, "ts": "2026-08-20T01:53:34Z", "hours": 0.6303, "text": "#4: Created the top of the prime vandal build. This one was a bit easier to make as all I needed to do was fill the bottom. Anyways, print underway!"}, {"post_id": 50664, "ts": "2026-08-19T22:54:31Z", "hours": 0.3, "text": "#3: Prime Vandal resemblance Finally managed to create both the muzzle and stock. I just made the priming bolt and its underway. I’m planning to paint it later on, as well as glue panels to the main body."}, {"post_id": 47361, "ts": "2026-08-15T08:05:23Z", "hours": 1.6167, "text": "Created the barrel! All that is left is making the shell to cover the main body. It took a long time to make it, since I had to remake the barrel to match nerf bullet sizes."}, {"post_id": 47250, "ts": "2026-08-15T01:39:15Z", "hours": 0.3, "text": "#2 Disassembled the nerf gun to fix internals and make it ready. Problem: I just finished 3dprinting and realised that the inside was filled in a lightning pattern (very weak)."}, {"post_id": 47210, "ts": "2026-08-14T23:40:42Z", "hours": 0.8553, "text": "Making a Prime Vandal Shell for Nerf retaliator! #1: Made the stock and sent it to print! As a side note, I am planning to share the .blend files as well so anyone can make it at home. the end product should fire nerf darts, have a swappable magazine and more! Follow this project to support me and keep up?"}]...
|
Title: Valorant Prime Vandal by @colgation | Stard Title: Valorant Prime Vandal by @colgation | Stardance
Devlogs:
Making a Prime Vandal Shell for Nerf retaliator! #1: Made the stock and sent it to print! As a side note, I am planning to share the .blend files as well so anyone can make it at home. the end product should fire nerf darts, have a swappable magazine and more! Follow this project to support me and keep up?
#2 Disassembled the nerf gun to fix internals and make it ready. Problem: I just finished 3dprinting and realised that the inside was filled in a lightning pattern (very weak).
Created the barrel! All that is left is making the shell to cover the main body. It took a long time to make it, since I had to remake the barrel to match nerf bullet sizes.
#3: Prime Vandal resemblance Finally managed to create both the muzzle and stock. I just made the priming bolt and its underway. I’m planning to paint it later on, as well as glue panels to the main body.
#4: Created the top of the prime vandal build. This one was a bit easier to make as all I needed to do was fill the bottom. Anyways, print underway!
Spray painted the parts using gloss spray paint. Took me some time to set up, and will let dry. My Valorant Prime Vandal will be ready soon!
Today I painted the gold trims on my Prime Vandal. Once it dries, the rough model should be complete, after I add smoothing and finishing touches with an acrylic pen.
Ships:
I made a Prime Vandal from Valorant in real life! It shoots foam darts, takes standard nerf magazines, and is easy to make. All the files and build instructions are available in the github source. It is made to be as accessible as possible, so even A1 mini printers can print it. It only takes up around ~500g of filament. All you need is a printer and Nerf Retaliator (easy to find anywhere, especially in second hand stores for less than 3 dollars). Go make your own one!...
|
1793145374.7327204
|
1793231774.7327204
|
|
70872
|
fpv freestyle drone by @Tito_decorazon | Stardance
|
Tito_decorazon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: fpv freestyle drone by @Tito_decorazon | St Title: fpv freestyle drone by @Tito_decorazon | Stardance...
|
1792630021.785868
|
1793234821.785868
|
|
70873
|
Shattered Crown by @ebollinger117 | Stardance
|
ebollinger117
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Shattered Crown by @ebollinger117 | Stardan Title: Shattered Crown by @ebollinger117 | Stardance...
|
1792630022.6296515
|
1793234822.6296515
|
|
9139
|
GILLES by @gilles | Stardance
|
gilles
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: GILLES by @gilles | Stardance
|
1792630024.442039
|
1793234824.442039
|
|
16919
|
SmoothActions by @Jinsu | Stardance
|
Jinsu
|
0
|
4.68
|
0
|
[]
|
[{"post_id": 11611, "ts": "202 [{"post_id": 11611, "ts": "2026-06-18T22:05:33Z", "hours": 3.1322, "text": "H1 Fixed downdload all images so it actually downloads all images on the page. May add download all videos but thats gonna take a hot minute i guess. im gonna work on that. Also might add a iframe browser or scramjet browser if possible!"}, {"post_id": 7195, "ts": "2026-06-12T00:41:27Z", "hours": 1.5503, "text": "Today I started building the first real feature for SmoothActions: Copy All Code Blocks. The goal was simple — click a button in the extension popup and instantly grab every code example from any webpage. ( ̄y▽ ̄)╭ Ohohoho….. What I built I wired up the popup UI and wrote the first version of the script that searches the page for and elements. The popup could run scripts on the active tab, and the alert showed up correctly. The problem When I tested it on MDN, it didn’t copy the code examples. Instead, it copied random labels like: Code for condition continue break At first I thought the selector was wrong, but the real issue was that MDN doesn’t use normal or tags for its examples. Some code is inside custom containers, some inside shadow DOM, and some duplicated in the sidebar. The fix I rewrote the feature to: scan normal and blocks scan MDN‑specific classes like .notranslate and .language-js scan inside shadow DOM elements return all code blocks as one combined string Once I injected the script properly using chrome.scripting.executeScript with a separate file, everything worked. The extension now successfully copies all code examples from the MDN Loops & Iteration page. o(  ̄ ▽ ̄)ブ pluh…"}]...
|
Title: SmoothActions by @Jinsu | Stardance
Devlog Title: SmoothActions by @Jinsu | Stardance
Devlogs:
Today I started building the first real feature for SmoothActions: Copy All Code Blocks. The goal was simple — click a button in the extension popup and instantly grab every code example from any webpage. ( ̄y▽ ̄)╭ Ohohoho….. What I built I wired up the popup UI and wrote the first version of the script that searches the page for and elements. The popup could run scripts on the active tab, and the alert showed up correctly. The problem When I tested it on MDN, it didn’t copy the code examples. Instead, it copied random labels like: Code for condition continue break At first I thought the selector was wrong, but the real issue was that MDN doesn’t use normal or tags for its examples. Some code is inside custom containers, some inside shadow DOM, and some duplicated in the sidebar. The fix I rewrote the feature to: scan normal and blocks scan MDN‑specific classes like .notranslate and .language-js scan inside shadow DOM elements return all code blocks as one combined string Once I injected the script properly using chrome.scripting.executeScript with a separate file, everything worked. The extension now successfully copies all code examples from the MDN Loops & Iteration page. o(  ̄ ▽ ̄)ブ pluh…
H1 Fixed downdload all images so it actually downloads all images on the page. May add download all videos but thats gonna take a hot minute i guess. im gonna work on that. Also might add a iframe browser or scramjet browser if possible!...
|
1792630025.297317
|
1793234825.297317
|
|
34419
|
AWD by @nanon_jirapongsuwan | Stardance
|
nanon_jirapongsuwan
|
0
|
2.78
|
0
|
[]
|
[{"post_id": 28062, "ts": "202 [{"post_id": 28062, "ts": "2026-07-14T02:44:40Z", "hours": 2.7786, "text": "Set up the Flask backend database"}]...
|
Title: AWD by @nanon_jirapongsuwan | Stardance
De Title: AWD by @nanon_jirapongsuwan | Stardance
Devlogs:
Set up the Flask backend database...
|
1792630026.2185626
|
1793234826.2185626
|
|
26098
|
My awesome macropad! by @NAP | Stardance
|
NAP
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @NAP | Stardance
|
1792630027.773417
|
1793234827.773417
|
|
17591
|
Untitled by @anusha | Stardance
|
anusha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @anusha | Stardance
|
1792630028.6210093
|
1793234828.6210093
|
|
10816
|
A real world event management system by @AYUSH_ARJ A real world event management system by @AYUSH_ARJUN_RACHALWAR | Stardance...
|
AYUSH_ARJUN_RACHALWAR
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A real world event management system by @AY Title: A real world event management system by @AYUSH_ARJUN_RACHALWAR | Stardance...
|
1792630029.4775832
|
1793234829.4775832
|
|
10049
|
calender by @ewdsfsfdsdfdfsfdsfds | Stardance
|
ewdsfsfdsdfdfsfdsfds
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: calender by @ewdsfsfdsdfdfsfdsfds | Stardan Title: calender by @ewdsfsfdsdfdfsfdsfds | Stardance...
|
1792630030.3297334
|
1793234830.3297334
|
|
3274
|
TODO Macropad by @arjun_puninchittaya | Stardance
|
arjun_puninchittaya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: TODO Macropad by @arjun_puninchittaya | Sta Title: TODO Macropad by @arjun_puninchittaya | Stardance...
|
1792630031.667554
|
1793234831.667554
|
|
35393
|
Untitled by @rushilverse1 | Stardance
|
rushilverse1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @rushilverse1 | Stardance
|
1792630032.5208707
|
1793234832.5208707
|
|
11907
|
Untitled by @sree_guru_alla | Stardance
|
sree_guru_alla
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @sree_guru_alla | Stardance
|
1792630033.947236
|
1793234833.947236
|
|
7015
|
ttygrid by @justMedansh | Stardance
|
justMedansh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ttygrid by @justMedansh | Stardance
|
1792630034.840918
|
1793234834.840918
|
|
1601
|
The House App by @OrigamiKing3612 | Stardance
|
OrigamiKing3612
|
0
|
43.9
|
0
|
[]
|
[{"post_id": 8860, "ts": "2026 [{"post_id": 8860, "ts": "2026-06-14T19:08:14Z", "hours": 18.5153, "text": "I kinda forgot about this…. I have been working on a few things. I migrated the app to use Vite+ and oxlint and oxfmt. I didn’t have a formatter or linter on the frontend because i didn’t like eslint. So its nice to have those now. I also finally fixed the issue where on login everything was fetched twice. I also made the whole announcements page better. They now live update and have cool animations. If you are in the app when a announcement is posted a notification shows up that you can click. I also added paging so it doesn’t fetch every announcement from the whole year… I just started working on fixing my login system to better handle actions that need to be completed, like setting up MFA or changing a one time password."}, {"post_id": 3876, "ts": "2026-06-06T23:19:50Z", "hours": 6.3253, "text": "I just finished this curtain type thing for hiding the standings during a game. This is meant to build suspense or let the game manager reveal the winner how ever they want. It uses a websocket for the live updates so i just made a message type for hiding and showing. Next up is actually saving the hidden state and making sure users joining have theirs hidden too. Im also trying to figure out a way to prevent inspecting to figure out the winner. Right now i just use a v-if to get rid of the points container when its hidden. I also did a lot of cleaning up my code and fixing smaller bugs"}, {"post_id": 2880, "ts": "2026-06-05T19:37:43Z", "hours": 12.9314, "text": "I have been working on fixing bugs and cleaning up The House App server. I also finished a “makeover” of the announcements. I cleaned up this page and added editing support. I also added another websocket for the announcements so now they live update. There is still some stuff i want to do but this is what i have so far."}, {"post_id": 1129, "ts": "2026-06-02T23:26:44Z", "hours": 3.7261, "text": "Ive been working on this new presentation mode. When the app was being presented on a bigger screen i noticed it was really hard to use. So this should help fix it, along with making the points font size bigger. I really like the animations"}, {"post_id": 368, "ts": "2026-06-01T18:24:43Z", "hours": 2.3994, "text": "I just finishing migrating all of my emails to templ files instead of html files embedded in variables with go embed. I did this because i wanted typechecking for each email so I never missed a parameter. I like this so much better because I don’t need so much extra code just to use use them."}]...
|
Title: The House App by @OrigamiKing3612 | Stardan Title: The House App by @OrigamiKing3612 | Stardance
Devlogs:
I just finishing migrating all of my emails to templ files instead of html files embedded in variables with go embed. I did this because i wanted typechecking for each email so I never missed a parameter. I like this so much better because I don’t need so much extra code just to use use them.
Ive been working on this new presentation mode. When the app was being presented on a bigger screen i noticed it was really hard to use. So this should help fix it, along with making the points font size bigger. I really like the animations
I have been working on fixing bugs and cleaning up The House App server. I also finished a “makeover” of the announcements. I cleaned up this page and added editing support. I also added another websocket for the announcements so now they live update. There is still some stuff i want to do but this is what i have so far.
I just finished this curtain type thing for hiding the standings during a game. This is meant to build suspense or let the game manager reveal the winner how ever they want. It uses a websocket for the live updates so i just made a message type for hiding and showing. Next up is actually saving the hidden state and making sure users joining have theirs hidden too. Im also trying to figure out a way to prevent inspecting to figure out the winner. Right now i just use a v-if to get rid of the points container when its hidden. I also did a lot of cleaning up my code and fixing smaller bugs
I kinda forgot about this…. I have been working on a few things. I migrated the app to use Vite+ and oxlint and oxfmt. I didn’t have a formatter or linter on the frontend because i didn’t like eslint. So its nice to have those now. I also finally fixed the issue where on login everything was fetched twice. I also made the whole announcements page better. They now live update and have cool animations. If you are in the app when a announcement is posted a notification shows up that you can click. I also added paging so it doesn’t fetch every announcement from the whole year… I just started working on fixing my login system to better handle actions that need to be completed, like setting up MFA or changing a one time password....
|
1792630035.65965
|
1793234835.65965
|
|
25550
|
Fokus Timer by @Schmidt_x64 | Stardance
|
Schmidt_x64
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Fokus Timer by @Schmidt_x64 | Stardance
|
1792630036.5912387
|
1793234836.5912387
|
|
3101
|
Untitled by @Javiisthere | Stardance
|
Javiisthere
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Javiisthere | Stardance
|
1792630037.436508
|
1793234837.436508
|
|
6792
|
Untitled project by @GoodJobCoder | Stardance
|
GoodJobCoder
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @GoodJobCoder | Stardan Title: Untitled project by @GoodJobCoder | Stardance...
|
1792630038.268089
|
1793234838.268089
|
|
11523
|
My awesome macropad! by @arnavnemade1 | Stardance
|
arnavnemade1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @arnavnemade1 | Sta Title: My awesome macropad! by @arnavnemade1 | Stardance...
|
1792630039.125958
|
1793234839.125958
|
|
16402
|
My awesome macropad! by @maddyson | Stardance
|
maddyson
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @maddyson | Stardan Title: My awesome macropad! by @maddyson | Stardance...
|
1792630039.9932246
|
1793234839.9932246
|
|
19178
|
Aera Studia by @timotheyknezi | Stardance
|
timotheyknezi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Aera Studia by @timotheyknezi | Stardance
|
1792630040.8634844
|
1793234840.8634844
|
|
43116
|
X-Revenant by @nejenabinupa | Stardance
|
nejenabinupa
|
1
|
49.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-06T17:17:01Z", "hours": 49.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this model is finished now all of the details are in the readme how you like it", "repo": "https://github.com/binupax6699/X-REVENANT-3D-MODLE", "demo": "https://sketchfab.com/3d-models/x-revenant-d105edc6008d4e148df14087eecc2355"}]...
|
[{"post_id": 77351, "ts": "202 [{"post_id": 77351, "ts": "2026-10-06T17:11:44Z", "hours": 1.4131, "text": "finished up all and its ready now"}, {"post_id": 43397, "ts": "2026-08-08T16:48:16Z", "hours": 6.4225, "text": "Finally finished baking the textures to the body"}, {"post_id": 42499, "ts": "2026-08-07T08:42:02Z", "hours": 9.8578, "text": "I did the texturing for the all and I make the interior and put weapons that come out from openings, next will be backing the texture and sum small details to make it perfect."}, {"post_id": 41340, "ts": "2026-08-05T14:27:20Z", "hours": 10.5606, "text": "I added small details and sum small changes to the topology and cut out opening to add this that come out and I add the landing gear and it was the most complex part today and i even animated it and it look so perfect."}, {"post_id": 40203, "ts": "2026-08-03T16:38:36Z", "hours": 10.9303, "text": "Did so much changes and I think this is the final model I can get, maybe little more changes and textures I can add in next devlog, it’s looking good i think I did a great job to get to here and make it much more my style and better over time"}, {"post_id": 39555, "ts": "2026-08-02T16:15:05Z", "hours": 10.265, "text": "Took so long to make the based mash and it was good enough to work ok and need to make it perfect and make some small small changes along the way."}]...
|
Title: X-Revenant by @nejenabinupa | Stardance
De Title: X-Revenant by @nejenabinupa | Stardance
Devlogs:
Took so long to make the based mash and it was good enough to work ok and need to make it perfect and make some small small changes along the way.
Did so much changes and I think this is the final model I can get, maybe little more changes and textures I can add in next devlog, it’s looking good i think I did a great job to get to here and make it much more my style and better over time
I added small details and sum small changes to the topology and cut out opening to add this that come out and I add the landing gear and it was the most complex part today and i even animated it and it look so perfect.
I did the texturing for the all and I make the interior and put weapons that come out from openings, next will be backing the texture and sum small details to make it perfect.
Finally finished baking the textures to the body
finished up all and its ready now
Ships:
this model is finished now all of the details are in the readme how you like it...
|
1793148441.4466455
|
1793234841.4466455
|
|
6579
|
My awesome macropad! by @ | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @ | Stardance
|
1792630041.7099106
|
1793234841.7099106
|
|
20088
|
My awesome macropad! by @helzinki | Stardance
|
helzinki
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @helzinki | Stardan Title: My awesome macropad! by @helzinki | Stardance...
|
1792630042.5557964
|
1793234842.5557964
|
|
36669
|
My own site! by @sanjana_sanagavarapu | Stardance
|
sanjana_sanagavarapu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @sanjana_sanagavarapu | Sta Title: My own site! by @sanjana_sanagavarapu | Stardance...
|
1792630043.389603
|
1793234843.389603
|
|
32602
|
Magpie, my first slack bot! by @charr2028 | Starda Magpie, my first slack bot! by @charr2028 | Stardance...
|
charr2028
|
0
|
0.36
|
0
|
[]
|
[{"post_id": 24953, "ts": "202 [{"post_id": 24953, "ts": "2026-07-08T20:42:58Z", "hours": 0.3608, "text": "I added my first slash command! /magpie-ping checks the latency of the bot and gives a different message for different speeds. It’s very simple, and honestly this is mostly just the code that the mission had me copy and paste. But I’m learning! Now I know how easy it is to add commands to Magpie, and I will hopefully have a much more exciting second devlog. I’m planning to add: a help command a command for giving presents to magpie a command for giving snacks to magpie a coin flip or dice rolling command a command for magpie trivia maybe more! This is very fun to me, so I can’t wait to make this bot a full repertoire!"}]...
|
Title: Magpie, my first slack bot! by @charr2028 | Title: Magpie, my first slack bot! by @charr2028 | Stardance
Devlogs:
I added my first slash command! /magpie-ping checks the latency of the bot and gives a different message for different speeds. It’s very simple, and honestly this is mostly just the code that the mission had me copy and paste. But I’m learning! Now I know how easy it is to add commands to Magpie, and I will hopefully have a much more exciting second devlog. I’m planning to add: a help command a command for giving presents to magpie a command for giving snacks to magpie a coin flip or dice rolling command a command for magpie trivia maybe more! This is very fun to me, so I can’t wait to make this bot a full repertoire!...
|
1792630044.2348452
|
1793234844.2348452
|
|
15796
|
blowupthenoobs' website by @blowupthenoobs | S blowupthenoobs' website by @blowupthenoobs | Stardance...
|
blowupthenoobs
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T18:48:48Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Got the main stuff laid out on the home page. Still need to integrate some stuff like the art portfolio widgets and whatnot, but that’s going to come in when my google drive clone thingy is further along in completion. Other stuff like the discord widget and nuggets of wisdom are intended to be further worked on, but it is in a good state for right now I think.", "repo": "https://github.com/blowupthenoobs/PortfolioSite", "demo": "https://blowupthenoobs.dev/"}]...
|
[{"post_id": 63382, "ts": "202 [{"post_id": 63382, "ts": "2026-09-07T05:28:55Z", "hours": 0.995, "text": "Finished the basic mockup and such with a couple working features, so I should hopefully be able to qualify for the pulse mission."}, {"post_id": 63360, "ts": "2026-09-07T04:23:56Z", "hours": 0.9889, "text": "Almost finished the mockup. Added random scrolling thing cuz I saw it in someone else’s personal site, lol (It was a thing I was thinking of putting in anyways though. Scrolling’s a nice touch for it tho.)"}, {"post_id": 63337, "ts": "2026-09-07T03:19:28Z", "hours": 1.8997, "text": "Added a music detection widget (powered by a discord-based api)"}, {"post_id": 63215, "ts": "2026-09-06T21:57:32Z", "hours": 2.135, "text": "Finally got to actually working on the main page, lol."}]...
|
Title: blowupthenoobs' website by @blowuptheno Title: blowupthenoobs' website by @blowupthenoobs | Stardance
Devlogs:
Finally got to actually working on the main page, lol.
Added a music detection widget (powered by a discord-based api)
Almost finished the mockup. Added random scrolling thing cuz I saw it in someone else’s personal site, lol (It was a thing I was thinking of putting in anyways though. Scrolling’s a nice touch for it tho.)
Finished the basic mockup and such with a couple working features, so I should hopefully be able to qualify for the pulse mission.
Ships:
Got the main stuff laid out on the home page. Still need to integrate some stuff like the art portfolio widgets and whatnot, but that’s going to come in when my google drive clone thingy is further along in completion. Other stuff like the discord widget and nuggets of wisdom are intended to be further worked on, but it is in a good state for right now I think....
|
1793148444.4276977
|
1793234844.4276977
|
|
23428
|
My awesome macropad! by @atahalam | Stardance
|
atahalam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @atahalam | Stardan Title: My awesome macropad! by @atahalam | Stardance...
|
1792630045.2505481
|
1793234845.2505481
|
|
12235
|
Untitled project by @RichiEee3 | Stardance
|
RichiEee3
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @RichiEee3 | Stardance
|
1792630046.2101824
|
1793234846.2101824
|
|
43178
|
GamEngine by @bartoszkasyna | Stardance
|
bartoszkasyna
|
1
|
244.34
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T15:49:21Z", "hours": 195.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made GPU driven game engine. It use vulkan 1.4. GTAO and VSM are still little bugged. Project will be still in development. This experimental version. More deatils are in devlogs. If engine or demo crashes on your device please send me generated logs and device specification", "repo": "https://github.com/B4rtekk1/GamEngine", "demo": "https://github.com/B4rtekk1/GamEngine/releases/tag/v0.1.0"}]...
|
[{"post_id": 79106, "ts": "202 [{"post_id": 79106, "ts": "2026-10-12T18:07:52Z", "hours": 10.8381, "text": "I was working on bug fixes and glass system. Glass is not working was I want but it havs some progress. Currently glass is highly unoptimized."}, {"post_id": 78281, "ts": "2026-10-10T08:29:57Z", "hours": 4.4117, "text": "I made custom installer for my engine. Now i willl work on optimatization"}, {"post_id": 74967, "ts": "2026-09-28T18:36:35Z", "hours": 9.7639, "text": "I mainly working on bug fixing. Now VSM and GTAO are fully stable, TAA still needs some love. I was also working on fbx model importer. On the image you can see Amazon Lumberyard Bistro which has 2.7M triangles with 140FPS. I have to work on fps stability while moving camera and make glass shader/object."}, {"post_id": 74396, "ts": "2026-09-27T09:59:55Z", "hours": 9.5208, "text": "I was trying to made my version of DDGI but it was unstable, so I made this disabled. Full DDGI would be impossible for my gpu so I used Brixelizer GI from FidelityFX SDK from AMD. It looks good and stable. Image is capyured on intel sponza which has 2.7M traingles - 13x more than original sponza so my engine scale well."}, {"post_id": 73521, "ts": "2026-09-25T09:34:28Z", "hours": 9.7292, "text": "I was working on Ray Traced Contact Shadows and DDGI. Ray traced shadows works well without droping fps that much. Currently my DDGI is bugged - its very dark. The image is taken with RTCS, DGGI disabled"}, {"post_id": 72555, "ts": "2026-09-23T06:37:29Z", "hours": 5.0792, "text": "Successfully optimized GTAO and VSM, 40FPS gain and more stable 1% low"}, {"post_id": 71260, "ts": "2026-09-20T15:17:19Z", "hours": 7.5197, "text": "I was working on game optimization, editor functionalities and standalone game building. I successfully optimized GTAO and VSM a little. GTAO still have some halo around some objects and VSM are not full stable. I added option build game in editor. I have to optimize editor a little and add some more functionalities. On the first image you can see nvidia nsight graphics profiler and on the second one standalone game build running in 160 after few seconds. This is decent score for rtx 3050."}, {"post_id": 70490, "ts": "2026-09-19T08:46:32Z", "hours": 7.4986, "text": "I was trying to fix shadows but it didint go well, so I gave up and started refactoring code for better readibiliy. On the image you can see broken verin of shadows, dont worry I went back to working ones. I fixed few smaller nearly invisible shadows bugs, so I didint waste myy time. Now I will focus on optimatization and graphics effet"}, {"post_id": 69704, "ts": "2026-09-17T16:43:10Z", "hours": 8.0603, "text": "I started migration to dynamic rendering, so rendering pipeline would be much easier for user. I also made custom title bar. Im in process of improving UI. I found two bugs - in certains camera angle shadows/AO or something doesnt work correctly. Second - some random patterns may occur while looking into sky inside sponza"}, {"post_id": 69075, "ts": "2026-09-16T10:23:21Z", "hours": 5.7283, "text": "I made water system but it look horrible and performance isnt great, so i focused next on large models importing. Big models are now devided into meshlets. On the image you can see very popular benchmark scene, its called crytek sponza. I think that 170FPS in this stage is good"}, {"post_id": 68570, "ts": "2026-09-15T10:28:57Z", "hours": 8.1017, "text": "I am working on water system. I decided to make something diffrent that normal water commonly used in every modern engine. I want to make virtual water system which is inspired by VSM. More technical details I will provide in devlog when I finish my water system. I dont have any working water image so I just upload some engine footage. PS. It might be much more optimize than normal water."}, {"post_id": 67943, "ts": "2026-09-14T08:27:35Z", "hours": 6.5411, "text": "I was working on water system and improving GTAO. While testing I found weird little horizontal strips on shadows. I thought it was my WSM bug so I was trying to fix it. After I checked all possible bugs i realized that I could downgrade GTAO by linear interpolation. I fixed it and now works fine. Water currently has implemented SSR and simple Gernster waves. On the images you can see clip levels and virutal pages shown in shadow debug mode"}, {"post_id": 67159, "ts": "2026-09-13T07:20:53Z", "hours": 7.1444, "text": "I was working on editor optimatization and bug fixes. Editor launch time jumped from ~7seconds to 1.5 seconds if editor has cache, otherwise 4.3 seconds. Launching editor no more cause vulkan errors. I also added IBL and reflects. I also bugged shadows a little."}, {"post_id": 66406, "ts": "2026-09-12T06:58:22Z", "hours": 6.8744, "text": "I was working on finishing render graph. I also optimized editor - in huge scenes it will have more stable 60FPS. I optimized game mode - 1% low are higher now"}, {"post_id": 65853, "ts": "2026-09-11T08:49:16Z", "hours": 8.0272, "text": "I was mainly working on models and textures compression. Textures are now compressed into BC7 format. I also added remdergraph so user dont have to make it manually."}, {"post_id": 65239, "ts": "2026-09-10T07:13:42Z", "hours": 7.9544, "text": "Today I was working on game optimatization and little shadows improvements. I was mainly working on game profiler as you can see in the image"}, {"post_id": 64328, "ts": "2026-09-08T16:49:40Z", "hours": 9.6778, "text": "Last 2 days I was working on editor functionalities. I added built-in powersheell terminal. I also added shadergraph which currently is doesnt want to compile properly"}, {"post_id": 63480, "ts": "2026-09-07T11:14:38Z", "hours": 6.3356, "text": "I was working on UX in editor. Then I found bug which I couldnt fix for 3 hours. Bug was caused my matrix decompose floating point"}, {"post_id": 62420, "ts": "2026-09-05T19:23:52Z", "hours": 5.1811, "text": "Today I was working on optimatization, code quality and better model imports. fps jumped from ~400 to ~430."}, {"post_id": 61744, "ts": "2026-09-04T20:02:01Z", "hours": 8.3261, "text": "I was working on game optimzatization. I made jump from around 200FPS to 400. There is still a lot more things to optimize."}, {"post_id": 59136, "ts": "2026-08-31T19:21:14Z", "hours": 5.6275, "text": "I was working on optimizing grass system. I added wind component and optimized colission with other objects. Thanks to optimatization FPS jumped from ~250 to ~320. I also modified scene saving system - binary file as main file and .terrains failes as terrain data. I added Editor layout to AppData so editor rembeber your last layout"}, {"post_id": 58356, "ts": "2026-08-30T19:03:02Z", "hours": 6.1303, "text": "Today i was adding missing tests. I also updated terrain sculping system - you can now sculp all terrain at once if multiple instances. I added some utils and deleted fps limit in play mode."}, {"post_id": 57564, "ts": "2026-08-29T19:02:32Z", "hours": 4.8972, "text": "Today I was working on better shadow implemenatation. I implemented VSM shadows - smiliar are used in UE5. I think its looks good"}, {"post_id": 56852, "ts": "2026-08-28T20:10:13Z", "hours": 5.6839, "text": "Today I was working on code quality and better terrain sculping tools. I added grass painting. I also added some nice shader to grass - A rolling ball leaves a trail in the grass. Check it out!"}, {"post_id": 56432, "ts": "2026-08-28T06:18:19Z", "hours": 5.745, "text": "I was working on terrain sculping. I was inspired by unity system generator so I wanted to make something smiliar. Now there is only one brush but i will extend possibilities of my system."}, {"post_id": 55427, "ts": "2026-08-27T07:58:03Z", "hours": 4.6125, "text": "Added gltf models importing with editor asset manager. Imported gameobject has his unique mesh collider."}, {"post_id": 54988, "ts": "2026-08-26T12:44:55Z", "hours": 2.9125, "text": "I was fixing my physics system. I fixed some bugs and created new ones. First new bug is sphere bouning up on first contact. 2 bug is cube lifting up another cube. I’m happy that I removed object shaking"}, {"post_id": 54700, "ts": "2026-08-25T19:29:26Z", "hours": 6.6933, "text": "Today I was mainly working on code quality and project refactorization. When I was testing scenes with various of configuration I found some type of physics bug - Objects are shaking for some reason, you can see this in attached video"}, {"post_id": 53759, "ts": "2026-08-24T13:13:25Z", "hours": 1.2175, "text": "last 1.25h I was adding cube physics, imo it look very satisfying."}, {"post_id": 53644, "ts": "2026-08-24T09:33:54Z", "hours": 4.9856, "text": "I was working on realistic sphere physics. I think it looks good enough. I was also working on tests. Fixed bug when ramp after start/stop was changing her location."}, {"post_id": 52942, "ts": "2026-08-23T09:58:18Z", "hours": 3.4753, "text": "I added simple gravity and colliders. I also reorganized code a little - I make high level API so user dont have to use Vulkan and SDL directly."}, {"post_id": 52275, "ts": "2026-08-22T11:51:51Z", "hours": 3.0019, "text": "Added Color picker, and updated window reloading while adding MSAA or new color. Now you can easily change color in editor"}, {"post_id": 51666, "ts": "2026-08-21T13:55:21Z", "hours": 2.4742, "text": "I made object scriptable!"}, {"post_id": 50944, "ts": "2026-08-20T12:37:57Z", "hours": 4.6658, "text": "I messed something up and m editor wasnt responding I couldt click anything. I was trying to fix it almost 5 hours. What I fixed? - vulkan and SDL were recreating while turning MSAA on and GPU was loosing context"}, {"post_id": 49752, "ts": "2026-08-18T17:53:31Z", "hours": 3.2764, "text": "Editor Update The editor has been significantly improved and now looks much better. Cross-Platform Support The editor no longer depends on the Windows API, which means it should work on both Windows and Linux . Technology Stack The original goal was to use only: C++ Vulkan SDK SDL3 GLM These are all standard components that come with a typical Vulkan development setup. After further research, Dear ImGui was also added. It is currently the only third-party dependency . Performance Both the Scene View and Game View are capped at 60 FPS . The Scene View captures the 90th frame of the particle effect so that it remains static. Next Steps Focus will now shift to expanding the editor’s functionality."}, {"post_id": 49441, "ts": "2026-08-18T09:01:45Z", "hours": 1.725, "text": "I made basic editor. Now looks like terrible but I will make it better"}, {"post_id": 49021, "ts": "2026-08-17T16:44:03Z", "hours": 1.5692, "text": "Added movement, you can move by using wasd, scroll and RMB"}, {"post_id": 48153, "ts": "2026-08-16T13:31:10Z", "hours": 4.0589, "text": "Particle System I was trying to add .glb models importer but this is very hard to do without third parties dependencies and i messed up something - Tree looks flat(second attachment). After many failed attempts I decided to start making particle system, as you can see it looks good. It is also optimized. FPS drop which you can see on video is caused by cmake compilation in background. I hope you like my particles :) All of this is made in C++ and the Vulkan SDK."}, {"post_id": 47579, "ts": "2026-08-15T15:41:56Z", "hours": 2.8206, "text": "Progress Update – Last 3 Hours Focused on two main things: Engine Optimization Font Rasterizer – added support for rendering fonts in the HUD Optimizations: Integrated VMA (Vulkan Memory Allocator) Added object instancing Fixed a buffer bug that was causing a memory leak Image: Cube made of 30×30×30 (27 000) smaller cubes + HUD with rendered font. All of this is made in C++ and the Vulkan SDK."}, {"post_id": 47338, "ts": "2026-08-15T06:56:33Z", "hours": 5.75, "text": "Engine Updates Added GPU-driven Hi-Z culling Added canvas — you can now make HUDs Optimized scenes a little Added Scene Serializer Added Asset Manager Added Color class — you no longer have to work with plain vectors Showcase On the image you can see a cube made from 30×30×30 smaller cubes, each one casting a shadow. In the bottom-left corner you can see the canvas. All of this is made in C++ and the Vulkan SDK ."}, {"post_id": 46339, "ts": "2026-08-13T14:18:08Z", "hours": 4.5861, "text": "Added Engine Math based on glm. Optimized multi object drawing. Made better project structure"}, {"post_id": 45817, "ts": "2026-08-12T15:21:12Z", "hours": 2.5969, "text": "Added shadows, game objects, engine vectors and matrixs, standaole camera, position and transforms"}, {"post_id": 40303, "ts": "2026-08-03T18:52:30Z", "hours": 3.1914, "text": "I have reorganized code. I added MSAA and rotaing cube!"}, {"post_id": 39619, "ts": "2026-08-02T18:45:09Z", "hours": 0.8017, "text": "I finished my previus project so now i can have two concurrent - this and c++/cuda custom llm. Successfully rendered triangle :) Its only about ~1000 lines of code. I used offical tutorial for start."}]...
|
Title: GamEngine by @bartoszkasyna | Stardance
De Title: GamEngine by @bartoszkasyna | Stardance
Devlogs:
I finished my previus project so now i can have two concurrent - this and c++/cuda custom llm. Successfully rendered triangle :) Its only about ~1000 lines of code. I used offical tutorial for start.
I have reorganized code. I added MSAA and rotaing cube!
Added shadows, game objects, engine vectors and matrixs, standaole camera, position and transforms
Added Engine Math based on glm. Optimized multi object drawing. Made better project structure
Engine Updates Added GPU-driven Hi-Z culling Added canvas — you can now make HUDs Optimized scenes a little Added Scene Serializer Added Asset Manager Added Color class — you no longer have to work with plain vectors Showcase On the image you can see a cube made from 30×30×30 smaller cubes, each one casting a shadow. In the bottom-left corner you can see the canvas. All of this is made in C++ and the Vulkan SDK .
Progress Update – Last 3 Hours Focused on two main things: Engine Optimization Font Rasterizer – added support for rendering fonts in the HUD Optimizations: Integrated VMA (Vulkan Memory Allocator) Added object instancing Fixed a buffer bug that was causing a memory leak Image: Cube made of 30×30×30 (27 000) smaller cubes + HUD with rendered font. All of this is made in C++ and the Vulkan SDK.
Particle System I was trying to add .glb models importer but this is very hard to do without third parties dependencies and i messed up something - Tree looks flat(second attachment). After many failed attempts I decided to start making particle system, as you can see it looks good. It is also optimized. FPS drop which you can see on video is caused by cmake compilation in background. I hope you like my particles :) All of this is made in C++ and the Vulkan SDK.
Added movement, you can move by using wasd, scroll and RMB
I made basic editor. Now looks like terrible but I will make it better
Editor Update The editor has been significantly improved and now looks much better. Cross-Platform Support The editor no longer depends on the Windows API, which means it should work on both Windows and Linux . Technology Stack The original goal was to use only: C++ Vulkan SDK SDL3 GLM These are all standard components that come with a typical Vulkan development setup. After further research, Dear ImGui was also added. It is currently the only third-party dependency . Performance Both the Scene View and Game View are capped at 60 FPS . The Scene View captures the 90th frame of the particle effect so that it remains static. Next Steps Focus will now shift to expanding the editor’s functionality.
I messed something up and m editor wasnt responding I couldt click anything. I was trying to fix it almost 5 hours. What I fixed? - vulkan and SDL were recreating while turning MSAA on and GPU was loosing context
I made object scriptable!
Added Color picker, and updated window reloading while adding MSAA or new color. Now you can easily change color in editor
I added simple gravity and colliders. I also reorganized code a little - I make high level API so user dont have to use Vulkan and SDL directly.
I was working on realistic sphere physics. I think it looks good enough. I was also working on tests. Fixed bug when ramp after start/stop was changing her location.
last 1.25h I was adding cube physics, imo it look very satisfying.
Today I was mainly working on code quality and project refactorization. When I was testing scenes with various of configuration I found some type of physics bug - Objects are shaking for some reason, you can see this in attached video
I was fixing my physics system. I fixed some bugs and created new ones. First new bug is sphere bouning up on first contact. 2 bug is cube lifting up another cube. I’m happy that I removed object shaking
Added gltf models importing with editor asset manager. Imported gameobject has his unique mesh collider.
I was working on terrain sculping. I was inspired by unity system generator so I wanted to make something smiliar. Now there is only one brush but i will extend possibilities of my system.
Today I was working on code quality and better terrain sculping tools. I added grass painting. I also added some nice shader to grass - A rolling ball leaves a trail in the grass. Check it out!
Today I was working on better shadow implemenatation. I implemented VSM shadows - smiliar are used in UE5. I think its looks good
Today i was adding missing tests. I also updated terrain sculping system - you can now sculp all terrain at once if multiple instances. I added some utils and deleted fps limit in play mode.
I was working on optimizing grass system. I added wind component and optimized colission with other objects. Thanks to optimatization FPS jumped from ~250 to ~320. I also modified scene saving system - binary file as main file and .terrains failes as terrain data. I added Editor layout to AppData so editor rembeber your last layout
I was working on game optimzatization. I made jump from around 200FPS to 400. There is still a lot more things to optimize.
Today I was working on optimatization, code quality and better model imports. fps jumped from ~400 to ~430.
I was working on UX in editor. Then I found bug which I couldnt fix for 3 hours. Bug was caused my matrix decompose floating point
Last 2 days I was working on editor functionalities. I added built-in powersheell terminal. I also added shadergraph which currently is doesnt want to compile properly
Today I was working on game optimatization and little shadows improvements. I was mainly working on game profiler as you can see in the image
I was mainly working on models and textures compression. Textures are now compressed into BC7 format. I also added remdergraph so user dont have to make it manually.
I was working on finishing render graph. I also optimized editor - in huge scenes it will have more stable 60FPS. I optimized game mode - 1% low are higher now
I was working on editor optimatization and bug fixes. Editor launch time jumped from ~7seconds to 1.5 seconds if editor has cache, otherwise 4.3 seconds. Launching editor no more cause vulkan errors. I also added IBL and reflects. I also bugged shadows a little.
I was working on water system and improving GTAO. While testing I found weird little horizontal strips on shadows. I thought it was my WSM bug so I was trying to fix it. After I checked all possible bugs i realized that I could downgrade GTAO by linear interpolation. I fixed it and now works fine. Water currently has implemented SSR and simple Gernster waves. On the images you can see clip levels and virutal pages shown in shadow debug mode
I am working on water system. I decided to make something diffrent that normal water commonly used in every modern engine. I want to make virtual water system which is inspired by VSM. More technical details I will provide in devlog when I finish my water system. I dont have any working water image so I just upload some engine footage. PS. It might be much more optimize than normal water.
I made water system but it look horrible and performance isnt great, so i focused next on large models importing. Big models are now devided into meshlets. On the image you can see very popular benchmark scene, its called crytek sponza. I think that 170FPS in this stage is good
I started migration to dynamic rendering, so rendering pipeline would be much easier for user. I also made custom title bar. Im in process of improving UI. I found two bugs - in certains camera angle shadows/AO or something doesnt work correctly. Second - some random patterns may occur while looking into sky inside sponza
I was trying to fix shadows but it didint go well, so I gave up and started refactoring code for better readibiliy. On the image you can see broken verin of shadows, dont worry I went back to working ones. I fixed few smaller nearly invisible shadows bugs, so I didint waste myy time. Now I will focus on optimatization and graphics effet
I was working on game optimization, editor functionalities and standalone game building. I successfully optimized GTAO and VSM a little. GTAO still have some halo around some objects and VSM are not full stable. I added option build game in editor. I have to optimize editor a little and add some more functionalities. On the first image you can see nvidia nsight graphics profiler and on the second one standalone game build running in 160 after few seconds. This is decent score for rtx 3050.
Successfully optimized GTAO and VSM, 40FPS gain and more stable 1% low
I was working on Ray Traced Contact Shadows and DDGI. Ray traced shadows works well without droping fps that much. Currently my DDGI is bugged - its very dark. The image is taken with RTCS, DGGI disabled
I was trying to made my version of DDGI but it was unstable, so I made this disabled. Full DDGI would be impossible for my gpu so I used Brixelizer GI from FidelityFX SDK from AMD. It looks good and stable. Image is capyured on intel sponza which has 2.7M traingles - 13x more than original sponza so my engine scale well.
I mainly working on bug fixing. Now VSM and GTAO are fully stable, TAA still needs some love. I was also working on fbx model importer. On the image you can see Amazon Lumberyard Bistro which has 2.7M triangles with 140FPS. I have to work on fps stability while moving camera and make glass shader/object.
I made custom installer for my engine. Now i willl work on optimatization
I was working on bug fixes and glass system. Glass is not working was I want but it havs some progress. Currently glass is highly unoptimized.
Ships:
I made GPU driven game engine. It use vulkan 1.4. GTAO and VSM are still little bugged. Project will be still in development. This experimental version. More deatils are in devlogs. If engine or demo crashes on your device please send me generated logs and device specification...
|
1793148447.0568364
|
1793234847.0568364
|