|
23294
|
Togen by @melodelete | Stardance
|
melodelete
|
1
|
8.0
|
12
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T15:19:13Z", "hours": 8.0, "multiplier": 2.91, "payout": 12, "blessing": "neutral", "text": "A background application that provides quick access to a temporary text editor via a configurable global shortcut. Perfect for jotting down quick notes, code snippets, or temporary text that you don’t want to save permanently.", "repo": "https://github.com/melodelete/Togen", "demo": "https://github.com/melodelete/Togen/releases"}]...
|
[{"post_id": 15655, "ts": "202 [{"post_id": 15655, "ts": "2026-06-25T13:41:20Z", "hours": 1.1547, "text": "Currently working on a Demo So Users can try it out without any installation or Users On A different OS, You can currently try it out at https://melodelete.github.io/Togen/"}, {"post_id": 15417, "ts": "2026-06-25T01:52:02Z", "hours": 7.2486, "text": "Working on Different themes and fonts if you dont know what Im making, it is a quick note utility to quickly make changes to text which supports linux so far"}]...
|
Title: Togen by @melodelete | Stardance
Devlogs:
Title: Togen by @melodelete | Stardance
Devlogs:
Working on Different themes and fonts if you dont know what Im making, it is a quick note utility to quickly make changes to text which supports linux so far
Currently working on a Demo So Users can try it out without any installation or Users On A different OS, You can currently try it out at https://melodelete.github.io/Togen/
Ships:
A background application that provides quick access to a temporary text editor via a configurable global shortcut. Perfect for jotting down quick notes, code snippets, or temporary text that you don’t want to save permanently....
|
1793249762.449388
|
1793336162.449388
|
|
23306
|
My very own WebOS by @mohammedsaif | Stardance
|
mohammedsaif
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T00:57:53Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Project Name SaifOS About SaifOS is a browser based operating system built using HTML, CSS, and JavaScript. The project recreates a simple desktop environment inside a web page, allowing users to interact with multiple draggable windows just like on a real computer operating system. The goal of this project was to learn the fundamentals of web development while creating an interactive and customizable user experience. SaifOS includes several built in applications such as an About window, a Notes application for writing and storing text during a session, and a live digital clock that updates in real time. To make the project more unique, additional features were added beyond the basic requirements. Users can switch between different desktop wallpapers and enable Dark Mode for an alternative visual appearance. All windows can be freely moved around the screen, creating a more realistic desktop experience. This project demonstrates core web development concepts including page structure with HTML, styling and layout design with CSS, and interactive functionality with JavaScript. It serves as a beginner friendly introduction to creating dynamic web applications and simulating operating system behavior directly within a browser. Detailed Project Description SaifOS is a custom Web Operating System designed and developed by Mohammed Saif as part of the WebOS 1 challenge. The application provides a desktop style interface where users can open, move, and interact with different windows. Features Draggable Windows Users can click and drag application windows anywhere on the desktop. About Application Displays information about the operating system and project creator. Notes Application Provides a simple text area where users can write notes directly within the operating system. Live Digital Clock Shows the current time and updates automatically every second. Wallpaper Changer Allows users to cycle through multiple desktop backgrounds without reloading the page. Dark Mode Provides an alternative visual theme for improved appearance and accessibility. Taskbar Navigation A taskbar at the bottom of the screen allows quick access to all applications and features. Technologies Used HTML5 CSS3 JavaScript (Vanilla JavaScript) Skills Demonstrated Responsive web design DOM manipulation Event handling Interactive user interface development JavaScript timers and functions Custom desktop environment design Future Improvements Potential future upgrades include: Calculator application Weather widget Music player File explorer simulation Custom desktop icons Window minimize and maximize functionality Local storage for saving notes permanently SaifOS is designed to be lightweight, easy to use, and fully accessible from any modern web browser without requiring installation, accounts, or passwords. It showcases how standard web technologies can be combined to create an engaging desktop-like experience on the web.", "repo": "https://github.com/Mohd-Sa1f/saifos", "demo": "https://mohd-sa1f.github.io/saifos/"}]...
|
[{"post_id": 12893, "ts": "202 [{"post_id": 12893, "ts": "2026-06-21T03:40:43Z", "hours": 0.4164, "text": "i am finally done with webos 1 with some nice tools"}, {"post_id": 12878, "ts": "2026-06-21T03:07:10Z", "hours": 0.2775, "text": "my next step on webos 1"}, {"post_id": 12872, "ts": "2026-06-21T02:38:48Z", "hours": 0.3494, "text": "the basic stuff for html page and styling with css"}]...
|
Title: My very own WebOS by @mohammedsaif | Starda Title: My very own WebOS by @mohammedsaif | Stardance
Devlogs:
the basic stuff for html page and styling with css
my next step on webos 1
i am finally done with webos 1 with some nice tools
Ships:
Project Name SaifOS About SaifOS is a browser based operating system built using HTML, CSS, and JavaScript. The project recreates a simple desktop environment inside a web page, allowing users to interact with multiple draggable windows just like on a real computer operating system. The goal of this project was to learn the fundamentals of web development while creating an interactive and customizable user experience. SaifOS includes several built in applications such as an About window, a Notes application for writing and storing text during a session, and a live digital clock that updates in real time. To make the project more unique, additional features were added beyond the basic requirements. Users can switch between different desktop wallpapers and enable Dark Mode for an alternative visual appearance. All windows can be freely moved around the screen, creating a more realistic desktop experience. This project demonstrates core web development concepts including page structure with HTML, styling and layout design with CSS, and interactive functionality with JavaScript. It serves as a beginner friendly introduction to creating dynamic web applications and simulating operating system behavior directly within a browser. Detailed Project Description SaifOS is a custom Web Operating System designed and developed by Mohammed Saif as part of the WebOS 1 challenge. The application provides a desktop style interface where users can open, move, and interact with different windows. Features Draggable Windows Users can click and drag application windows anywhere on the desktop. About Application Displays information about the operating system and project creator. Notes Application Provides a simple text area where users can write notes directly within the operating system. Live Digital Clock Shows the current time and updates automatically every second. Wallpaper Changer Allows users to cycle through multiple desktop backgrounds without reloading the page. Dark Mode Provides an alternative visual theme for improved appearance and accessibility. Taskbar Navigation A taskbar at the bottom of the screen allows quick access to all applications and features. Technologies Used HTML5 CSS3 JavaScript (Vanilla JavaScript) Skills Demonstrated Responsive web design DOM manipulation Event handling Interactive user interface development JavaScript timers and functions Custom desktop environment design Future Improvements Potential future upgrades include: Calculator application Weather widget Music player File explorer simulation Custom desktop icons Window minimize and maximize functionality Local storage for saving notes permanently SaifOS is designed to be lightweight, easy to use, and fully accessible from any modern web browser without requiring installation, accounts, or passwords. It showcases how standard web technologies can be combined to create an engaging desktop-like experience on the web....
|
1793303576.4371393
|
1793389976.4371393
|
|
23309
|
zzzclip by @nosrep | Stardance
|
nosrep
|
1
|
51.0
|
840
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T21:15:59Z", "hours": 51.0, "multiplier": 19.28, "payout": 840, "blessing": "neutral", "text": "ever since I was a wee lad I’ve never found a clipboard manager that’s fully worked how I wanted it. A lot can’t handle images correctly, and even fewer can handle multiple MIME types (multiple types of content) simultaneously. Not a lot can persist clipboard content properly either; some don’t wait until the program has exited to replace. So, in 2023, I decided to make my own clipboard manager! I wasn’t very good, though, so it never got to a usable state. This year, I picked the project back up, figured out the blockers (lazy persistence is a lot more annoying than it sounds), and finally added all the features needed for a proper clipboard manager. zzzclip can: store your history. hopefully this was obvious. persist clipboard content. another fun fact: the data in your clipboard doesn’t actually exist to your compositor/WM/DE. if a program exits while something is copied from it, that data is GONE unless it was backed up. that’s what zzzclip does! it backs up the clipboard data and “copies” it again once the program providing it exits. represent your clipboard as files. ever find a website that reaallly wants you to upload a file and won’t take your ctrl-v? zzzclip can fix that! zzzclip also has a configurable system to set which MIME types you really care about, so it won’t store the same image 10 times in different formats every time you copy something. THIS IS FOR WAYLAND USERS ON LINUX ONLY. IF YOU ARE NOT A WAYLAND USER ON LINUX (OR, LIKE, BSD, IF YOU CAN FIGURE IT OUT), THIS IS NOT FOR YOU.", "repo": "https://github.com/Osrepnay/zzzclip", "demo": "https://github.com/Osrepnay/zzzclip/releases/tag/v0.1.0"}]...
|
[{"post_id": 22353, "ts": "202 [{"post_id": 22353, "ts": "2026-07-04T19:44:20Z", "hours": 4.4239, "text": "I have no idea how this devlog ended up so long Anyway, I cleaned up some potential crashes/undefined behavior, fixed up the README, and finally tagged a release + published to AUR! Spent a lot of time wrestling with static linking. I remember using old versions of linux before and getting glibc problems so I wanted to link it statically. I first tried using musl-gcc, but I ended up needing too many static versions of libraries so I just made a Dockerfile with alpine (which has static versions of basically everything) and made the binary there. Did you know PKGBUILDs are just bash scripts? I didn’t."}, {"post_id": 21105, "ts": "2026-07-02T21:58:27Z", "hours": 3.8542, "text": "the clipboard-as-files thing is added! I originally wanted to use FUSE/libfuse, but i realized i could just change the storage format to have the data be in a single file. now i’m just using symlinks instead, no dependencies this was relatively easy, ran into a couple of bugs but nothing too crazy. Biggest thing I got hung up on was which directory to put it in ($XDG_STATE_HOME? $XDG_DATA_HOME? ~/clipboard?). I eventually decided on $XDG_RUNTIME_DIR which seems mostly appropriate - the only thing is that it’s kinda annoying to access, but you could just make your own symlink, change the path with $ZZZCLIP_SYMLINK_PATH, or add a bookmark like in the screenshot. Another thing was to add extensions (e.g. .png) to the file, because apps like discord won’t recognize them if they don’t have extensions. I was initially gonna take and process one of the giant lists online, but then i found out most systems have a /etc/mime.types so i parsed that instead."}, {"post_id": 20183, "ts": "2026-07-01T18:49:37Z", "hours": 2.9758, "text": "I added some more options to the CLI, which ended up being a lot more annoying than i expected. Here are the ones I added: added to zzzclip list : -v: verbose mode. Verbose mode also lists the mimetype for a clipboard item. added to zzzclip get : -f: runs in foreground. Here’s something you might not have known: wl-copy starts a background process when you run it. The clipboard contents aren’t owned by the compositor, so a process has to be running to supply the data. I made zzzclip get do the same thing, but like wl-copy I added an option to make it run in the foreground. -s: output summary. It’s basically zzzclip list -v but only for one item. -l: list stored mime types. It lists the mime types for an item. -m : directly prints the data for an item."}, {"post_id": 18165, "ts": "2026-06-29T05:56:47Z", "hours": 3.1797, "text": "big ticket is overhauling the config format. Previously, the index looked like this: 4a93d8d7 6b5d69df 2143c202 Each random string of 8 characters was a label for data under a particular mime type, and each line was a selection (a selection can have multiple mimetypes). Each label had its own file to store the actual clipboard data, with the mimetype included in that file. this worked fine, but I’ve been wanting to implement the feature where the current clipboard contents are accessible via file. If I moved the mimetype out of the data files, I could just use symlinks because each file has exactly the data I need; using the old format, i’d need to use libfuse to make “fake” files without the mimetypes instead. this was a lot more annoying than i expected (thank god for address sanitizer, caught many mistakes), but I eventually got it working. I think i’m nearing the finish line"}, {"post_id": 17963, "ts": "2026-06-28T22:31:36Z", "hours": 4.0781, "text": "lots of minor-ish stuff for this batch of changes. Biggest change is actually adding proper cli parsing and help messages! previously, the cli was extremely bare-bones and just good enough to actually work but didn’t have any decent error handling or help messages. I’ve also ditched the option that runs the selector program (e.g. rofi, fuzzel). I didn’t know about he -nth those programs have, which let you hide data from the selector, so that functionality was kinda redundant. (also the sizes are human-readable now, i.e. in kb/mb/gb instead of just raw bytes)"}, {"post_id": 16987, "ts": "2026-06-27T15:51:35Z", "hours": 6.7522, "text": "the tests were bad. I fixed them and now everything passes. hooray! Anyway, welcome to macro hell! i’ve been working through the todo list and one of the items I wanted to hit was to support the ext-data-control protocol on top of the wlr-data-control protocol. Wayland compositors work on “protocols,” and not every compositor supports every protocol; the *-data-control protocols are what allow clipboard managers to mess with the clipboard. wlr-data-control was first (i think) and is only supported by wlroots-based compositors, but ext-data-control is the standard now. (except the compositor I use, river, doesn’t support it yet…) The problem with supporting both is that C is not a very expressive language. I had to generate wrapper functions for every function supplied by the protocol, which was bad enough, but I also had to write wrapper functions for my own functions that were used in listeners. This part could have been so much worse, but I was able to hide some function pointers in the user data and cut down even more boilerplate. Not fun. 3/10."}, {"post_id": 14809, "ts": "2026-06-24T01:36:55Z", "hours": 3.3247, "text": "there’s always the boring janitorial stuff (e.g. i renamed a few files, moved some stuff around, fixed a mem leak and a potential crash, etc.) the cooler change is that I finally added testing! testing an app like this is infinitely more annoying than something like a chess engine (shameless plug) because it’s built around IO. I followed in fuzzel ’s footsteps and did integration testing in a shell script, which isn’t something i realized is practical until seeing it used there. the very sparse tests actually already did find a bug, but i’ll fix it later…… the testing is to set up more disruptive features i’ll add later, like implementing the ext-data-control protocol on top of wlr-data-control, and I want to make sure they won’t break anything without having to manually test"}, {"post_id": 14166, "ts": "2026-06-23T04:52:15Z", "hours": 1.7025, "text": "two things: finally got rid of libpcre2. For the people that didn’t read the previous devlog, I needed a regex implementation as part of the user-provided mimetype selection, but I didn’t realize POSIX had one in regex.h and pcre seemed like the standard. POSIX regexes should be more than enough, though, so that’s a dependency killed added locking and index refreshing. nothing was locked previously which is Not Good™️, but more importantly, the daemon never refreshed the index of clipboard data, so if i deleted one, the index would get rewritten anyway with the deleted file and corrupt it. Solution was to stop persisting the index and only read it when it’s used."}, {"post_id": 13561, "ts": "2026-06-22T06:20:10Z", "hours": 3.2839, "text": "minor changes for this devlog. spent way more time than is reasonable thinking of the best way to deal with allocation failures… it seems like everyone online has a different opinion on it. I tried doing it “properly” before seeing how many lines of checks that would require for a codepath that would realistically never get hit, so I gave up and just did xmalloc (basically, a wrapper around malloc that exits with an error message when it fails). Also in the theme of error handling, I did a sweep of the code and wrapped (most) of the io functions I missed to check for failure. it seems like overkill… there has to be a better way but maybe this is how it is. Finally, I switched from libpcre2 to posix regex.h. I didn’t realize POSIX had a regex.h and it’s way more than is required for this use-case (matching mimetypes)."}, {"post_id": 12902, "ts": "2026-06-21T04:06:31Z", "hours": 17.6878, "text": "I started this project much earlier than stardance (it’s years old by now), but it’s only recently become usable. think of this devlog as motivation/background the main goal was to make a clipboard manager that could persist clipboard selections after applications closed have configurable mimetype selection Here’s something interesting you might not have known about linux clipboards (both wayland and x11): the data doesn’t actually exist until a client requests it. This is how applications like firefox offer 20 morbillion image types; it’s converting the image on-the-fly. Given this, it’s impractical to request every offered type, so most clipboard managers I’ve found solve this by giving up and only doing text or text+hardcoded image mimetypes. zzzclip has a probably-overcomplicated system that lets you configure which mimetypes it’ll remember and priority between mimetypes (plus regexes). Another feature I want to add eventually is a FUSE clipboard system where it can make a “fake” (meaning it’s backed by the program, not something on disk) file holding the current clipboard contents. (as for what these 17 hours are actually for: it’s just adding config parsing and a load of cleanups.)"}]...
|
Title: zzzclip by @nosrep | Stardance
Devlogs:
I Title: zzzclip by @nosrep | Stardance
Devlogs:
I started this project much earlier than stardance (it’s years old by now), but it’s only recently become usable. think of this devlog as motivation/background the main goal was to make a clipboard manager that could persist clipboard selections after applications closed have configurable mimetype selection Here’s something interesting you might not have known about linux clipboards (both wayland and x11): the data doesn’t actually exist until a client requests it. This is how applications like firefox offer 20 morbillion image types; it’s converting the image on-the-fly. Given this, it’s impractical to request every offered type, so most clipboard managers I’ve found solve this by giving up and only doing text or text+hardcoded image mimetypes. zzzclip has a probably-overcomplicated system that lets you configure which mimetypes it’ll remember and priority between mimetypes (plus regexes). Another feature I want to add eventually is a FUSE clipboard system where it can make a “fake” (meaning it’s backed by the program, not something on disk) file holding the current clipboard contents. (as for what these 17 hours are actually for: it’s just adding config parsing and a load of cleanups.)
minor changes for this devlog. spent way more time than is reasonable thinking of the best way to deal with allocation failures… it seems like everyone online has a different opinion on it. I tried doing it “properly” before seeing how many lines of checks that would require for a codepath that would realistically never get hit, so I gave up and just did xmalloc (basically, a wrapper around malloc that exits with an error message when it fails). Also in the theme of error handling, I did a sweep of the code and wrapped (most) of the io functions I missed to check for failure. it seems like overkill… there has to be a better way but maybe this is how it is. Finally, I switched from libpcre2 to posix regex.h. I didn’t realize POSIX had a regex.h and it’s way more than is required for this use-case (matching mimetypes).
two things: finally got rid of libpcre2. For the people that didn’t read the previous devlog, I needed a regex implementation as part of the user-provided mimetype selection, but I didn’t realize POSIX had one in regex.h and pcre seemed like the standard. POSIX regexes should be more than enough, though, so that’s a dependency killed added locking and index refreshing. nothing was locked previously which is Not Good™️, but more importantly, the daemon never refreshed the index of clipboard data, so if i deleted one, the index would get rewritten anyway with the deleted file and corrupt it. Solution was to stop persisting the index and only read it when it’s used.
there’s always the boring janitorial stuff (e.g. i renamed a few files, moved some stuff around, fixed a mem leak and a potential crash, etc.) the cooler change is that I finally added testing! testing an app like this is infinitely more annoying than something like a chess engine (shameless plug) because it’s built around IO. I followed in fuzzel ’s footsteps and did integration testing in a shell script, which isn’t something i realized is practical until seeing it used there. the very sparse tests actually already did find a bug, but i’ll fix it later…… the testing is to set up more disruptive features i’ll add later, like implementing the ext-data-control protocol on top of wlr-data-control, and I want to make sure they won’t break anything without having to manually test
the tests were bad. I fixed them and now everything passes. hooray! Anyway, welcome to macro hell! i’ve been working through the todo list and one of the items I wanted to hit was to support the ext-data-control protocol on top of the wlr-data-control protocol. Wayland compositors work on “protocols,” and not every compositor supports every protocol; the *-data-control protocols are what allow clipboard managers to mess with the clipboard. wlr-data-control was first (i think) and is only supported by wlroots-based compositors, but ext-data-control is the standard now. (except the compositor I use, river, doesn’t support it yet…) The problem with supporting both is that C is not a very expressive language. I had to generate wrapper functions for every function supplied by the protocol, which was bad enough, but I also had to write wrapper functions for my own functions that were used in listeners. This part could have been so much worse, but I was able to hide some function pointers in the user data and cut down even more boilerplate. Not fun. 3/10.
lots of minor-ish stuff for this batch of changes. Biggest change is actually adding proper cli parsing and help messages! previously, the cli was extremely bare-bones and just good enough to actually work but didn’t have any decent error handling or help messages. I’ve also ditched the option that runs the selector program (e.g. rofi, fuzzel). I didn’t know about he -nth those programs have, which let you hide data from the selector, so that functionality was kinda redundant. (also the sizes are human-readable now, i.e. in kb/mb/gb instead of just raw bytes)
big ticket is overhauling the config format. Previously, the index looked like this: 4a93d8d7 6b5d69df 2143c202 Each random string of 8 characters was a label for data under a particular mime type, and each line was a selection (a selection can have multiple mimetypes). Each label had its own file to store the actual clipboard data, with the mimetype included in that file. this worked fine, but I’ve been wanting to implement the feature where the current clipboard contents are accessible via file. If I moved the mimetype out of the data files, I could just use symlinks because each file has exactly the data I need; using the old format, i’d need to use libfuse to make “fake” files without the mimetypes instead. this was a lot more annoying than i expected (thank god for address sanitizer, caught many mistakes), but I eventually got it working. I think i’m nearing the finish line
I added some more options to the CLI, which ended up being a lot more annoying than i expected. Here are the ones I added: added to zzzclip list : -v: verbose mode. Verbose mode also lists the mimetype for a clipboard item. added to zzzclip get : -f: runs in foreground. Here’s something you might not have known: wl-copy starts a background process when you run it. The clipboard contents aren’t owned by the compositor, so a process has to be running to supply the data. I made zzzclip get do the same thing, but like wl-copy I added an option to make it run in the foreground. -s: output summary. It’s basically zzzclip list -v but only for one item. -l: list stored mime types. It lists the mime types for an item. -m : directly prints the data for an item.
the clipboard-as-files thing is added! I originally wanted to use FUSE/libfuse, but i realized i could just change the storage format to have the data be in a single file. now i’m just using symlinks instead, no dependencies this was relatively easy, ran into a couple of bugs but nothing too crazy. Biggest thing I got hung up on was which directory to put it in ($XDG_STATE_HOME? $XDG_DATA_HOME? ~/clipboard?). I eventually decided on $XDG_RUNTIME_DIR which seems mostly appropriate - the only thing is that it’s kinda annoying to access, but you could just make your own symlink, change the path with $ZZZCLIP_SYMLINK_PATH, or add a bookmark like in the screenshot. Another thing was to add extensions (e.g. .png) to the file, because apps like discord won’t recognize them if they don’t have extensions. I was initially gonna take and process one of the giant lists online, but then i found out most systems have a /etc/mime.types so i parsed that instead.
I have no idea how this devlog ended up so long Anyway, I cleaned up some potential crashes/undefined behavior, fixed up the README, and finally tagged a release + published to AUR! Spent a lot of time wrestling with static linking. I remember using old versions of linux before and getting glibc problems so I wanted to link it statically. I first tried using musl-gcc, but I ended up needing too many static versions of libraries so I just made a Dockerfile with alpine (which has static versions of basically everything) and made the binary there. Did you know PKGBUILDs are just bash scripts? I didn’t.
Ships:
ever since I was a wee lad I’ve never found a clipboard manager that’s fully worked how I wanted it. A lot can’t handle images correctly, and even fewer can handle multiple MIME types (multiple types of content) simultaneously. Not a lot can persist clipboard content properly either; some don’t wait until the program has exited to replace. So, in 2023, I decided to make my own clipboard manager! I wasn’t very good, though, so it never got to a usable state. This year, I picked the project back up, figured out the blockers (lazy persistence is a lot more annoying than it sounds), and finally added all the features needed for a proper clipboard manager. zzzclip can: store your history. hopefully this was obvious. persist clipboard content. another fun fact: the data in your clipboard doesn’t actually exist to your compositor/WM/DE. if a program exits while something is copied from it, that data is GONE unless it was backed up. that’s what zzzclip does! it backs up the clipboard data and “copies” it again once the program providing it exits. represent your clipboard as files. ever find a website that reaallly wants you to upload a file and won’t take your ctrl-v? zzzclip can fix that! zzzclip also has a configurable system to set which MIME types you really care about, so it won’t store the same image 10 times in different formats every time you copy something. THIS IS FOR WAYLAND USERS ON LINUX ONLY. IF YOU ARE NOT A WAYLAND USER ON LINUX (OR, LIKE, BSD, IF YOU CAN FIGURE IT OUT), THIS IS NOT FOR YOU....
|
1793224480.0441208
|
1793310880.0441208
|
|
23322
|
Maze Generator by @COYG_KNGPLCJMS | Stardance
|
COYG_KNGPLCJMS
|
1
|
4.0
|
28
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T20:26:35Z", "hours": 4.0, "multiplier": 6.54, "payout": 28, "blessing": "neutral", "text": "I built a simple website that creates mazes using an algorithm. It includes a dropdown to select an algorithm and it shows it’s creation.", "repo": "https://github.com/KNGPLCJMS/maze", "demo": "https://kngplcjms.github.io/maze/"}]...
|
[{"post_id": 30333, "ts": "202 [{"post_id": 30333, "ts": "2026-07-17T20:06:52Z", "hours": 0.6722, "text": "Added a binary tree algorithm."}, {"post_id": 30216, "ts": "2026-07-17T16:56:52Z", "hours": 1.0372, "text": "I finish adding Wilson’s algorithm to my maze website and also made the starting square green and the ending square red."}, {"post_id": 30178, "ts": "2026-07-17T15:22:07Z", "hours": 0.8642, "text": "Implemented Kruskal’s algorithm and added a input field to change the speed of the algorithm."}, {"post_id": 27860, "ts": "2026-07-13T19:15:16Z", "hours": 0.6333, "text": "Finished making Prim’s Algorithm and made the select algorithm work. I also made the maze generation animated."}, {"post_id": 26923, "ts": "2026-07-12T00:10:58Z", "hours": 1.0939, "text": "In my maze generator website, I plan to make 5 different maze generating algorithms. I built a simple recursive backtracking algorithm and have it render on a canvas."}]...
|
Title: Maze Generator by @COYG_KNGPLCJMS | Stardan Title: Maze Generator by @COYG_KNGPLCJMS | Stardance
Devlogs:
In my maze generator website, I plan to make 5 different maze generating algorithms. I built a simple recursive backtracking algorithm and have it render on a canvas.
Finished making Prim’s Algorithm and made the select algorithm work. I also made the maze generation animated.
Implemented Kruskal’s algorithm and added a input field to change the speed of the algorithm.
I finish adding Wilson’s algorithm to my maze website and also made the starting square green and the ending square red.
Added a binary tree algorithm.
Ships:
I built a simple website that creates mazes using an algorithm. It includes a dropdown to select an algorithm and it shows it’s creation....
|
1792878494.5057075
|
1793742494.5057075
|
|
23329
|
Orbit calculator by @whereami | Stardance
|
whereami
|
1
|
10.0
|
150
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T03:25:21Z", "hours": 10.0, "multiplier": 15.74, "payout": 150, "blessing": "neutral", "text": "I made a website where the user can calculate and visualize an orbit around a planetary object (or the Sun) based on their input parameters. The project actually started in March as a passion project, but I decided to turn it from a Python script to a proper website to make it more useful. Most of the obstacles I have to deal with are related to the calculations, but formatting the UI is also quite challenging. And since I made this website to make science a bit more friendly, the instructions are displayed on the website itself.", "repo": "https://github.com/phong765/Orbit-calculator/", "demo": "https://phong765.github.io/Orbit-calculator/"}]...
|
[{"post_id": 26344, "ts": "202 [{"post_id": 26344, "ts": "2026-07-11T02:34:41Z", "hours": 3.7175, "text": "Devlog #7 I’m close to accomplishing what I want for this project, and I will probably ship it soon. What I have changed I have solved the apogee, perigee problem using the eccentric vector I have added the option to choose which body in the solar system the user wants to orbit around. That means the radius and mass of the orbited object will change to reflect the physics involved. Added the ability to calculate the orbit period. Tidied up the UI What I will work on I think that I will ship it, and if I am suggested to change or add something, I will be very glad to implement it."}, {"post_id": 18967, "ts": "2026-06-30T04:32:39Z", "hours": 1.3783, "text": "Devlog #6 What I have changed: I have added additional information to the users regarding their calculation. When their orbit parameters result in the object either being below the atmosphere or crashing into the surface, a warning will appear in the result section. A warning will also be made if the parameters are invalid for an orbit around the Earth. I have also fixed the scrolling problem. The scrolling function is tied to the calculation button, and when the software hasn’t finished rendering the result image, the scroll function will scroll to the wrong place. Therefore I’ve added a delay to the scroll function so that it can wait for the completion of the rendering process. What I will work on The position of the apogee/perigee problem hasn’t been solved, mainly because it is quite math-heavy. That will be something I will try to solve in the long term, aside from other adjustments that I can carry out immediately."}, {"post_id": 15477, "ts": "2026-06-25T05:06:37Z", "hours": 1.1286, "text": "Devlog #5 What I have changed I have made some adjustments and rearrangements to the layout of the user interface to improve the user experience. I have also added a paragraph to explain how to use it and explain what the result and technical terms mean, and also explain the colors on the graph. Problems I will work on: The z=0 problem: currently, my script uses the z position provided by the user to determine the position of the apogee and perigee relative to the equator; thus, when the input for z is 0, the result isn’t satisfactory. I will probably use the velocity and the direction of rotation relative to the Earth to solve the problem. I will also add additional information to notify the user of the problems with their parameters(for example, their parameters will send the satellite into the ground or the orbit is physically impossible). The scroll function: I want the website to automatically scroll down to the result when the user presses the ”Calculate” button, but it seems like my script can’t detect where to scroll down yet. To fix this, I will try to update my internal JS script."}, {"post_id": 14873, "ts": "2026-06-24T04:32:12Z", "hours": 0.9803, "text": "I have finished transferring the Python code to the website. Now I will be custommizing and improving the user interface."}, {"post_id": 14375, "ts": "2026-06-23T14:13:27Z", "hours": 0.6953, "text": "I’m transferring my Python script to a website so that it’s easier to use, but the process is really messy. I plan to use PyScript, so if anyone knows how to pull this off, please let me know."}, {"post_id": 13510, "ts": "2026-06-22T03:30:26Z", "hours": 1.1094, "text": "I have completed the calculation for the apogee and perigee positions relative to the equator. I have also made some adjustments to the display of the result"}, {"post_id": 13142, "ts": "2026-06-21T14:42:40Z", "hours": 0.5394, "text": "I’m trying to determine the theta position of a given position. This will be a step toward determining where the apogee/perigee are relative to the equator."}]...
|
Title: Orbit calculator by @whereami | Stardance
Title: Orbit calculator by @whereami | Stardance
Devlogs:
I’m trying to determine the theta position of a given position. This will be a step toward determining where the apogee/perigee are relative to the equator.
I have completed the calculation for the apogee and perigee positions relative to the equator. I have also made some adjustments to the display of the result
I’m transferring my Python script to a website so that it’s easier to use, but the process is really messy. I plan to use PyScript, so if anyone knows how to pull this off, please let me know.
I have finished transferring the Python code to the website. Now I will be custommizing and improving the user interface.
Devlog #5 What I have changed I have made some adjustments and rearrangements to the layout of the user interface to improve the user experience. I have also added a paragraph to explain how to use it and explain what the result and technical terms mean, and also explain the colors on the graph. Problems I will work on: The z=0 problem: currently, my script uses the z position provided by the user to determine the position of the apogee and perigee relative to the equator; thus, when the input for z is 0, the result isn’t satisfactory. I will probably use the velocity and the direction of rotation relative to the Earth to solve the problem. I will also add additional information to notify the user of the problems with their parameters(for example, their parameters will send the satellite into the ground or the orbit is physically impossible). The scroll function: I want the website to automatically scroll down to the result when the user presses the ”Calculate” button, but it seems like my script can’t detect where to scroll down yet. To fix this, I will try to update my internal JS script.
Devlog #6 What I have changed: I have added additional information to the users regarding their calculation. When their orbit parameters result in the object either being below the atmosphere or crashing into the surface, a warning will appear in the result section. A warning will also be made if the parameters are invalid for an orbit around the Earth. I have also fixed the scrolling problem. The scrolling function is tied to the calculation button, and when the software hasn’t finished rendering the result image, the scroll function will scroll to the wrong place. Therefore I’ve added a delay to the scroll function so that it can wait for the completion of the rendering process. What I will work on The position of the apogee/perigee problem hasn’t been solved, mainly because it is quite math-heavy. That will be something I will try to solve in the long term, aside from other adjustments that I can carry out immediately.
Devlog #7 I’m close to accomplishing what I want for this project, and I will probably ship it soon. What I have changed I have solved the apogee, perigee problem using the eccentric vector I have added the option to choose which body in the solar system the user wants to orbit around. That means the radius and mass of the orbited object will change to reflect the physics involved. Added the ability to calculate the orbit period. Tidied up the UI What I will work on I think that I will ship it, and if I am suggested to change or add something, I will be very glad to implement it.
Ships:
I made a website where the user can calculate and visualize an orbit around a planetary object (or the Sun) based on their input parameters. The project actually started in March as a passion project, but I decided to turn it from a Python script to a proper website to make it more useful. Most of the obstacles I have to deal with are related to the calculations, but formatting the UI is also quite challenging. And since I made this website to make science a bit more friendly, the instructions are displayed on the website itself....
|
1793278238.4795835
|
1793364638.4795835
|
|
23352
|
My first slack bot! by @sandeep | Stardance
|
sandeep
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T03:36:24Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a feature-packed upgrade to the Slack Bot (Slacky Wacky) featuring: SQLite Conversational Memory for multi-turn chats. Slack Block Kit UI elements for interactive responses. A beautiful, minimal live web dashboard on Nest displaying API latency, uptime, database size, command usage, and system logs. Multimodal vision support (Groq Llama 3.2 11B Vision) to automatically analyze images uploaded to the channel. What was challenging: Correctly escaping client-side template literals embedded inside server-side backticks so they render correctly in the browser. What I’m proud of: Delivering a extremely clean, professional dashboard without typical AI dashboard hype.", "repo": "https://github.com/sandeepkurma9876-del/slacky-wacky", "demo": "https://hackclub.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 13396, "ts": "202 [{"post_id": 13396, "ts": "2026-06-21T22:45:52Z", "hours": 0.8242, "text": "I successfully built and deployed a massive upgrade to Slacky Wacky, adding four powerful new features! Here is exactly how I implemented them: Conversational Memory : I used better-sqlite3 to set up a lightweight database. When a user asks a question, the bot retrieves their last 10 messages so the Groq API has multi-turn context: const db = new Database ( ' chat_history.db ' ); db . exec ( \\ ` CREATE TABLE IF NOT EXISTS messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id TEXT, role TEXT, content TEXT ) \\` ); function getHistory(userId) { return db.prepare('SELECT role, content FROM messages WHERE user_id = ? ORDER BY id DESC LIMIT 10').all(userId).reverse(); } Block Kit UI : I refactored all responses into structured Slack Block Kit elements for a much cleaner look: await respond ({ blocks : [ { type : \" section \" , text : { type : \" mrkdwn \" , text : \\ `*Answer:* \\\\ n \\$ {groqAnswer} \\` } } ] }); Live Web Dashboard & Reverse Proxy : I integrated an Express server into index.js to log system metrics and API latency in real time. I then configured a custom reverse proxy domain ( sandeepkurma.hackclub.app ) inside the dashboard pointing to target port 3000 : app . get ( ' / ' , ( req , res ) => { res . send ( \\ `<h1>Slack Bot Live Dashboard</h1><p>Latest Latency: \\$ {latestLatency} ms</p> \\` ); }); Multimodal Image Support : I added logic to check for image file extensions (jpg, png, etc.) in the user’s message. If found, the bot automatically switches the model to ` llama-3.2-11b-vision-preview ` and formats the request content structure: const modelToUse = containsImage ? ' llama-3.2-11b-vision-preview ' : ' llama-3.3-70b-versatile ' ; Everything is fully verified, tested, and running 24/7 on my container!"}, {"post_id": 13352, "ts": "2026-06-21T21:24:37Z", "hours": 0.6667, "text": "I rigorously tested the active slash commands in Slack. All of them are running successfully on Nest 24/7!Tested:- /slacky-wacky-help -> Lists the commands and their usage successfully.- /slacky-wacky-fact -> Returns a random mind-blowing fun fact.The bot handles everything asynchronously using Socket Mode, and the responses are extremely fast! Everything is ready and fully verified."}, {"post_id": 13319, "ts": "2026-06-21T20:15:58Z", "hours": 1.1031, "text": "I built Slacky-Wacky, a fully custom Slack bot powered by the Llama 3.3 model from Groq! The bot handles interactive Slash commands through Socket Mode including:- /slacky-wacky-ask - An AI Q&A assistant to query Llama 3.3.- /slacky-wacky-status - Check system/bot status.- /slacky-wacky-help - Provide clear usage directions.- /slacky-wacky-joke - Tell funny developer jokes.- /slacky-wacky-fact - Share mind-blowing science & history facts.- /slacky-wacky-define - An interactive dictionary command.I resolved integration quirks like Bolt channel requirements, configured SSH keys for Nest, and successfully logged over 1 hour of development time to Hackatime!"}]...
|
Title: My first slack bot! by @sandeep | Stardance Title: My first slack bot! by @sandeep | Stardance
Devlogs:
I built Slacky-Wacky, a fully custom Slack bot powered by the Llama 3.3 model from Groq! The bot handles interactive Slash commands through Socket Mode including:- /slacky-wacky-ask - An AI Q&A assistant to query Llama 3.3.- /slacky-wacky-status - Check system/bot status.- /slacky-wacky-help - Provide clear usage directions.- /slacky-wacky-joke - Tell funny developer jokes.- /slacky-wacky-fact - Share mind-blowing science & history facts.- /slacky-wacky-define - An interactive dictionary command.I resolved integration quirks like Bolt channel requirements, configured SSH keys for Nest, and successfully logged over 1 hour of development time to Hackatime!
I rigorously tested the active slash commands in Slack. All of them are running successfully on Nest 24/7!Tested:- /slacky-wacky-help -> Lists the commands and their usage successfully.- /slacky-wacky-fact -> Returns a random mind-blowing fun fact.The bot handles everything asynchronously using Socket Mode, and the responses are extremely fast! Everything is ready and fully verified.
I successfully built and deployed a massive upgrade to Slacky Wacky, adding four powerful new features! Here is exactly how I implemented them: Conversational Memory : I used better-sqlite3 to set up a lightweight database. When a user asks a question, the bot retrieves their last 10 messages so the Groq API has multi-turn context: const db = new Database ( ' chat_history.db ' ); db . exec ( \ ` CREATE TABLE IF NOT EXISTS messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id TEXT, role TEXT, content TEXT ) \` ); function getHistory(userId) { return db.prepare('SELECT role, content FROM messages WHERE user_id = ? ORDER BY id DESC LIMIT 10').all(userId).reverse(); } Block Kit UI : I refactored all responses into structured Slack Block Kit elements for a much cleaner look: await respond ({ blocks : [ { type : " section " , text : { type : " mrkdwn " , text : \ `*Answer:* \\ n \$ {groqAnswer} \` } } ] }); Live Web Dashboard & Reverse Proxy : I integrated an Express server into index.js to log system metrics and API latency in real time. I then configured a custom reverse proxy domain ( sandeepkurma.hackclub.app ) inside the dashboard pointing to target port 3000 : app . get ( ' / ' , ( req , res ) => { res . send ( \ `<h1>Slack Bot Live Dashboard</h1><p>Latest Latency: \$ {latestLatency} ms</p> \` ); }); Multimodal Image Support : I added logic to check for image file extensions (jpg, png, etc.) in the user’s message. If found, the bot automatically switches the model to ` llama-3.2-11b-vision-preview ` and formats the request content structure: const modelToUse = containsImage ? ' llama-3.2-11b-vision-preview ' : ' llama-3.3-70b-versatile ' ; Everything is fully verified, tested, and running 24/7 on my container!
Ships:
I built a feature-packed upgrade to the Slack Bot (Slacky Wacky) featuring: SQLite Conversational Memory for multi-turn chats. Slack Block Kit UI elements for interactive responses. A beautiful, minimal live web dashboard on Nest displaying API latency, uptime, database size, command usage, and system logs. Multimodal vision support (Groq Llama 3.2 11B Vision) to automatically analyze images uploaded to the channel. What was challenging: Correctly escaping client-side template literals embedded inside server-side backticks so they render correctly in the browser. What I’m proud of: Delivering a extremely clean, professional dashboard without typical AI dashboard hype....
|
1793141341.697313
|
1793227741.697313
|
|
23359
|
Marias- Music Player by @Lauren_hackalicious | Sta Marias- Music Player by @Lauren_hackalicious | Stardance...
|
Lauren_hackalicious
|
1
|
9.0
|
143
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T23:19:40Z", "hours": 9.0, "multiplier": 15.96, "payout": 143, "blessing": "neutral", "text": "This is a level up from my first website, which was created as a tribute to them. I wanted to make something that I can add onto as long as the band doesn’t break up (I don’t think they will). In this project, I learned what radical gradients are and applied the new “:: has()” element. My favorite album of the two I customized is CINEMA because I really enjoy the warm tones in that section of the website. This ship is 24 hours late because my GitHub deployment wasn’t allowing people to demo my website. I had to CLONE my entire project into a separate project so people can interact with this website. That being said, I hope you all enjoy using my music player! I will be updating this website when their third studio album is released.", "repo": "https://github.com/example0d1n/Music-Player", "demo": "https://example0d1n.github.io/musicplayerfix/"}]...
|
[{"post_id": 19600, "ts": "202 [{"post_id": 19600, "ts": "2026-06-30T23:15:31Z", "hours": 1.3289, "text": "Ship 1!! I added all the tracks to the album, CINEMA, yay. I wanted the playlist to fit the theme of the album itself, so I made a few Google searches for what CSS hex codes would match up well. After my brief research, this is the result. I also added backgrounds to both of the music players because the black background felt too empty. The styling definitely leveled it up. I updated the music player coloring for the Submarine music player because it felt too basic compared to CINEMA. In my second ship, I plan to add The Marías’ third studio album, so stay tuned! 👀"}, {"post_id": 17857, "ts": "2026-06-28T19:59:28Z", "hours": 0.7222, "text": "Update: I added the CINEMA music player ^_^. I absolutely love the linear color gradient I have going on on this music player. I’m thinking about changing the font to a more retro one tbh. All I have to do next is add the music to this file, and I’ll be done! Problem I don’t know how to post a full image of the music player, which is why I have to take two screenshots."}, {"post_id": 17197, "ts": "2026-06-27T22:06:29Z", "hours": 1.4367, "text": "Update Lovely CSS style revamp to the home page of my music player! I customized each album’s background to fit the album’s theme :). I also made the actual music player icon spin. I’m not sure what the deal is with videos on Stardance; I can never see uploaded videos on the website. Hopefully, everyone viewing this devlog can interact with the video to see my update in action!"}, {"post_id": 16423, "ts": "2026-06-26T18:36:41Z", "hours": 1.4072, "text": "I thought of a way to make this project bigger than previously anticipated. Originally, I wanted to make a music player for only the album, Submarine, but I felt unfulfilled when I completed the player. By adding a homepage, I can add as many albums as I like, while sustaining the original music player idea. Update I added a homepage to my music player. It features the freshman and sophomore studio albums from The Marías. I want to add a feature to play a sample of each song, and the album covers redirect a user to the corresponding music player."}, {"post_id": 15388, "ts": "2026-06-25T00:50:48Z", "hours": 0.7597, "text": "Small Update After adding all the songs from the album, Submarine, to the playlist, I got the idea to add floating lyrics of each song adjacent to the music player. I felt that the player by itself was too static on the screen. The lyrics will provide some life to the website! I am currently playing around with the style of the lyrics; I’m thinking about changing the lyric font, but I’m not 100% sure yet. This project has been so fun to code after a long day."}, {"post_id": 14731, "ts": "2026-06-23T22:52:37Z", "hours": 1.0406, "text": "Update - A LOT has happened since the last devlog, which was about 2 days ago. I have implemented a sidebar with a playlist so the user can select any song from the album, Submarine. The user can either click the 3 lines to see this menu or scroll to the right and choose a song of their choice from there. I have added the audio from the songs Ride, Hamptons, Echo, Run Your Mouth, Real Life, and Blur. Future Plans - I want to add their first studio album, CINEMA, to this website. I’m thinking that the back arrow on the top left of the box will redirect the user to a homepage. This homepage will display both playlists, and the user will be able to select either Submarine or CINEMA. If you all have any suggestions, let me know! This journey has been fun so far. Issues I have been having internet troubles, so staying consistent has been hard these past 2 days."}, {"post_id": 13198, "ts": "2026-06-21T16:51:52Z", "hours": 1.2897, "text": "Updated and Polished music player I made the player muchhh bigger and added a box shadow lighter than the linear gradient background colors. I added a play, pause, and progress bar beneath the song title and credits text. Bug - When I click the player button to pause the song, the icon doesn’t switch to the pause icon. Future plans - I want to add the complete Submarine album by The Marías to the music player. I’m not sure how to do that, as I had to follow a JavaScript tutorial to get this far. Since that is my goal, I’ll figure it out by the next devlog."}, {"post_id": 12891, "ts": "2026-06-21T03:37:12Z", "hours": 1.0569, "text": "I remembered the first music project I did as a tribute to the group, “The Marías”. It was super simple and only played the instrumental of the song “Paranoia”. In this project, I want to play a complete album. So far, I have created the foundation of the music player! It will be cleaned up in the next devlog."}]...
|
Title: Marias- Music Player by @Lauren_hackaliciou Title: Marias- Music Player by @Lauren_hackalicious | Stardance
Devlogs:
I remembered the first music project I did as a tribute to the group, “The Marías”. It was super simple and only played the instrumental of the song “Paranoia”. In this project, I want to play a complete album. So far, I have created the foundation of the music player! It will be cleaned up in the next devlog.
Updated and Polished music player I made the player muchhh bigger and added a box shadow lighter than the linear gradient background colors. I added a play, pause, and progress bar beneath the song title and credits text. Bug - When I click the player button to pause the song, the icon doesn’t switch to the pause icon. Future plans - I want to add the complete Submarine album by The Marías to the music player. I’m not sure how to do that, as I had to follow a JavaScript tutorial to get this far. Since that is my goal, I’ll figure it out by the next devlog.
Update - A LOT has happened since the last devlog, which was about 2 days ago. I have implemented a sidebar with a playlist so the user can select any song from the album, Submarine. The user can either click the 3 lines to see this menu or scroll to the right and choose a song of their choice from there. I have added the audio from the songs Ride, Hamptons, Echo, Run Your Mouth, Real Life, and Blur. Future Plans - I want to add their first studio album, CINEMA, to this website. I’m thinking that the back arrow on the top left of the box will redirect the user to a homepage. This homepage will display both playlists, and the user will be able to select either Submarine or CINEMA. If you all have any suggestions, let me know! This journey has been fun so far. Issues I have been having internet troubles, so staying consistent has been hard these past 2 days.
Small Update After adding all the songs from the album, Submarine, to the playlist, I got the idea to add floating lyrics of each song adjacent to the music player. I felt that the player by itself was too static on the screen. The lyrics will provide some life to the website! I am currently playing around with the style of the lyrics; I’m thinking about changing the lyric font, but I’m not 100% sure yet. This project has been so fun to code after a long day.
I thought of a way to make this project bigger than previously anticipated. Originally, I wanted to make a music player for only the album, Submarine, but I felt unfulfilled when I completed the player. By adding a homepage, I can add as many albums as I like, while sustaining the original music player idea. Update I added a homepage to my music player. It features the freshman and sophomore studio albums from The Marías. I want to add a feature to play a sample of each song, and the album covers redirect a user to the corresponding music player.
Update Lovely CSS style revamp to the home page of my music player! I customized each album’s background to fit the album’s theme :). I also made the actual music player icon spin. I’m not sure what the deal is with videos on Stardance; I can never see uploaded videos on the website. Hopefully, everyone viewing this devlog can interact with the video to see my update in action!
Update: I added the CINEMA music player ^_^. I absolutely love the linear color gradient I have going on on this music player. I’m thinking about changing the font to a more retro one tbh. All I have to do next is add the music to this file, and I’ll be done! Problem I don’t know how to post a full image of the music player, which is why I have to take two screenshots.
Ship 1!! I added all the tracks to the album, CINEMA, yay. I wanted the playlist to fit the theme of the album itself, so I made a few Google searches for what CSS hex codes would match up well. After my brief research, this is the result. I also added backgrounds to both of the music players because the black background felt too empty. The styling definitely leveled it up. I updated the music player coloring for the Submarine music player because it felt too basic compared to CINEMA. In my second ship, I plan to add The Marías’ third studio album, so stay tuned! 👀
Ships:
This is a level up from my first website, which was created as a tribute to them. I wanted to make something that I can add onto as long as the band doesn’t break up (I don’t think they will). In this project, I learned what radical gradients are and applied the new “:: has()” element. My favorite album of the two I customized is CINEMA because I really enjoy the warm tones in that section of the website. This ship is 24 hours late because my GitHub deployment wasn’t allowing people to demo my website. I had to CLONE my entire project into a separate project so people can interact with this website. That being said, I hope you all enjoy using my music player! I will be updating this website when their third studio album is released....
|
1793256599.2114465
|
1793342999.2114465
|
|
23374
|
ReactBeat by @DevaanshPathak | Stardance
|
DevaanshPathak
|
1
|
5.0
|
86
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T19:30:10Z", "hours": 5.0, "multiplier": 16.13, "payout": 86, "blessing": "neutral", "text": "Hey guys, I built ReactBeat. ReactBeat is a fully local terminal music visualizer that plays WAV, FLAC, and OGG files, analyzes audio energy in sync with playback, and renders beat-reactive generative art using Unicode braille graphics. The hardest part in this was the maths part. Making equations to get real good visuals for the beats and bass was a really tough part for this project. This currently features 3 modes with 5 styles: Three simulation modes: particles , fluid , and waves . Five runtime styles: ember , aurora , voltage , prism , and ghost . It is a must have for all my music-loving hack clubbers!", "repo": "https://github.com/devaanshpathak/reactbeat", "demo": "https://github.com/DevaanshPathak/ReactBeat/releases"}]...
|
[{"post_id": 13567, "ts": "202 [{"post_id": 13567, "ts": "2026-06-22T06:39:56Z", "hours": 1.4206, "text": "Hey guys, I finally finished building ReactBeat , it was a fun journey where i learnt a lot of new stuff. It was also math heavy for simulations and stuff."}, {"post_id": 13472, "ts": "2026-06-22T01:56:29Z", "hours": 2.6325, "text": "ReactBeat Devlog Built reactbeat into a full local Python TUI music visualizer. The app now opens with a Textual start screen where users can browse folders or reopen recent audio files, then plays local audio while rendering beat-reactive braille graphics. Implemented the core audio pipeline: WAV/FLAC/OGG loading through soundfile, callback-driven playback through sounddevice, playback-position tracking, and a manual NumPy FFT analyzer for bass, broadband energy, intensity, and onset detection. MP3 and external media tools were intentionally avoided to keep the app self-contained. Built the rendering stack from scratch: a custom Unicode braille packer, Rich style spans per cell, and multiple simulation-driven visuals rather than FFT bars. The current modes are: particles: vectorized particle motion with structured spawning and beat forces fluid: coarse Stable Fluids-style density/velocity simulation waves: damped 2D ripple simulation added as a third mode Added five runtime themes: ember, aurora, voltage, prism, and ghost. Styles can be cycled during playback, and modes cycle with m. Improved the TUI flow: single command launch with python -m src.cli, folder picker support, recent files, visible controls/status bar, direct audio-file launch, folder launch, diagnostics, smoke tests, and audio metadata checks. Mouse interaction was experimented with, but removed after it caused lag and didn’t improve the experience enough. Added project docs and validation: README.md, PRD.md, ROADMAP.md, a cross-platform python -m scripts.check command, unit tests for core systems, smoke renders for all modes, and PyInstaller/Linux packaging notes. The latest verification passed with: python -m scripts.check python -m compileall src tests scripts"}, {"post_id": 12916, "ts": "2026-06-21T04:40:00Z", "hours": 1.3419, "text": "reactbeat reactbeat is a local terminal music visualizer. It decodes an audio file, plays it back, analyzes short-time energy in sync with playback, and renders particle or fluid motion as packed braille graphics in a Textual TUI.The visual core is simulation-driven generative art, not FFT bars. Audio, analysis, simulation, and rendering all run locally. Features TUI start screen with Browse and Recent Files choices. Folder browser filtered to supported audio files. Persistent recent-file list for reopening previously selected tracks. Custom braille renderer using Unicode braille cells and Rich styles. Numpy-vectorized particle simulation. Stable Fluids-style density/velocity simulation. Local WAV, FLAC, and OGG decode through soundfile . Callback-driven playback through sounddevice . Manual FFT energy analyzer with adaptive onset detection. Runtime visual styles: ember , aurora , voltage . One-file Linux PyInstaller build with bundled PortAudio and ALSA config. Supported Audio WAV FLAC OGG/Vorbis"}]...
|
Title: ReactBeat by @DevaanshPathak | Stardance
D Title: ReactBeat by @DevaanshPathak | Stardance
Devlogs:
reactbeat reactbeat is a local terminal music visualizer. It decodes an audio file, plays it back, analyzes short-time energy in sync with playback, and renders particle or fluid motion as packed braille graphics in a Textual TUI.The visual core is simulation-driven generative art, not FFT bars. Audio, analysis, simulation, and rendering all run locally. Features TUI start screen with Browse and Recent Files choices. Folder browser filtered to supported audio files. Persistent recent-file list for reopening previously selected tracks. Custom braille renderer using Unicode braille cells and Rich styles. Numpy-vectorized particle simulation. Stable Fluids-style density/velocity simulation. Local WAV, FLAC, and OGG decode through soundfile . Callback-driven playback through sounddevice . Manual FFT energy analyzer with adaptive onset detection. Runtime visual styles: ember , aurora , voltage . One-file Linux PyInstaller build with bundled PortAudio and ALSA config. Supported Audio WAV FLAC OGG/Vorbis
ReactBeat Devlog Built reactbeat into a full local Python TUI music visualizer. The app now opens with a Textual start screen where users can browse folders or reopen recent audio files, then plays local audio while rendering beat-reactive braille graphics. Implemented the core audio pipeline: WAV/FLAC/OGG loading through soundfile, callback-driven playback through sounddevice, playback-position tracking, and a manual NumPy FFT analyzer for bass, broadband energy, intensity, and onset detection. MP3 and external media tools were intentionally avoided to keep the app self-contained. Built the rendering stack from scratch: a custom Unicode braille packer, Rich style spans per cell, and multiple simulation-driven visuals rather than FFT bars. The current modes are: particles: vectorized particle motion with structured spawning and beat forces fluid: coarse Stable Fluids-style density/velocity simulation waves: damped 2D ripple simulation added as a third mode Added five runtime themes: ember, aurora, voltage, prism, and ghost. Styles can be cycled during playback, and modes cycle with m. Improved the TUI flow: single command launch with python -m src.cli, folder picker support, recent files, visible controls/status bar, direct audio-file launch, folder launch, diagnostics, smoke tests, and audio metadata checks. Mouse interaction was experimented with, but removed after it caused lag and didn’t improve the experience enough. Added project docs and validation: README.md, PRD.md, ROADMAP.md, a cross-platform python -m scripts.check command, unit tests for core systems, smoke renders for all modes, and PyInstaller/Linux packaging notes. The latest verification passed with: python -m scripts.check python -m compileall src tests scripts
Hey guys, I finally finished building ReactBeat , it was a fun journey where i learnt a lot of new stuff. It was also math heavy for simulations and stuff.
Ships:
Hey guys, I built ReactBeat. ReactBeat is a fully local terminal music visualizer that plays WAV, FLAC, and OGG files, analyzes audio energy in sync with playback, and renders beat-reactive generative art using Unicode braille graphics. The hardest part in this was the maths part. Making equations to get real good visuals for the beats and bass was a really tough part for this project. This currently features 3 modes with 5 styles: Three simulation modes: particles , fluid , and waves . Five runtime styles: ember , aurora , voltage , prism , and ghost . It is a must have for all my music-loving hack clubbers!...
|
1792878725.0349128
|
1793742725.0349128
|
|
23382
|
PinkGoldMod_MC:26.1.2 by @BeytiKebab | Stardance
|
BeytiKebab
|
1
|
11.0
|
92
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T04:27:26Z", "hours": 11.0, "multiplier": 8.55, "payout": 92, "blessing": "neutral", "text": "I made a minecraft mod based on the custom item Pink Gold. I added items and blocks such as Armor, Tools, Pink Gold Blocks and recepies. The most chanlenging parts were debuging and learning the structure as it was my first time doing such a project. I leaned to trouble shoot large codebases. I am proud that I did not give up on my first illegalArgument exception!", "repo": "https://github.com/alr11118/Minecraft_Mod_PinkGold", "demo": "https://www.curseforge.com/minecraft/mc-mods/pinkgold"}]...
|
[{"post_id": 58650, "ts": "202 [{"post_id": 58650, "ts": "2026-08-31T04:22:38Z", "hours": 0.8033, "text": "Finished armor and tools, ran tests, and published on Modrinth. Overall this was a fun project and learned a lot, especially aboout debuging large codebases…."}, {"post_id": 58440, "ts": "2026-08-30T21:11:18Z", "hours": 2.2939, "text": "added the tools!!!! Next is armour"}, {"post_id": 46713, "ts": "2026-08-14T04:55:47Z", "hours": 0.4433, "text": "Added the recepies!"}, {"post_id": 46696, "ts": "2026-08-14T04:15:06Z", "hours": 1.4644, "text": "Added pink gold block and item, will add recepies and armore soon!"}, {"post_id": 27443, "ts": "2026-07-13T00:38:27Z", "hours": 2.6928, "text": "Managed to figure out how to add blocks!!! (I followed a tutorial for the basics https://youtu.be/aGNswCl7hcU?si=ZWYGGNZZrklFsrB8 was very helpfull). I plan to customise this to my mod next!"}, {"post_id": 14901, "ts": "2026-06-24T06:12:30Z", "hours": 2.5617, "text": "Started learning how to add custom blocks, but somehow my block is showing up this way?? I checked the file names, paths, directories I will look deeper tommorow!"}, {"post_id": 12955, "ts": "2026-06-21T06:29:52Z", "hours": 0.4797, "text": "I finished the intial importing of files and set up of environment. Now just need to look over documentation to get started."}]...
|
Title: PinkGoldMod_MC:26.1.2 by @BeytiKebab | Star Title: PinkGoldMod_MC:26.1.2 by @BeytiKebab | Stardance
Devlogs:
I finished the intial importing of files and set up of environment. Now just need to look over documentation to get started.
Started learning how to add custom blocks, but somehow my block is showing up this way?? I checked the file names, paths, directories I will look deeper tommorow!
Managed to figure out how to add blocks!!! (I followed a tutorial for the basics https://youtu.be/aGNswCl7hcU?si=ZWYGGNZZrklFsrB8 was very helpfull). I plan to customise this to my mod next!
Added pink gold block and item, will add recepies and armore soon!
Added the recepies!
added the tools!!!! Next is armour
Finished armor and tools, ran tests, and published on Modrinth. Overall this was a fun project and learned a lot, especially aboout debuging large codebases….
Ships:
I made a minecraft mod based on the custom item Pink Gold. I added items and blocks such as Armor, Tools, Pink Gold Blocks and recepies. The most chanlenging parts were debuging and learning the structure as it was my first time doing such a project. I leaned to trouble shoot large codebases. I am proud that I did not give up on my first illegalArgument exception!...
|
1793224542.987895
|
1793310942.987895
|
|
23391
|
Filament Drying Box Monitoring System by @phantoml Filament Drying Box Monitoring System by @phantomlegends381 | Stardance...
|
phantomlegends381
|
1
|
1.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-12T17:48:07Z", "hours": 1.0, "multiplier": 5.0, "payout": 3, "blessing": "neutral", "text": "I made an Filament Dry Box Monitoring System for Outpost. This project used DHT11 sensor to monitor the temperature and a case fan for Pico which turns on or off based on humidity conditions inside the case. The project containd 3d prined chassis, electronics container. Also uses an display to show current temperature inside the plastic container.", "repo": "https://github.com/phantomlegends381-max/Filament-DryBox-2026", "demo": ""}]...
|
[{"post_id": 45607, "ts": "202 [{"post_id": 45607, "ts": "2026-08-12T06:42:08Z", "hours": 0.6669, "text": "Finalized Project Details Project Status Current Status: Completed and working fine. Review: Checked for any error difficulty. Time Spent: Took a large amount of time to polish. Overall Rating: A fine beginner hardware project. Areas for Improvement PCB Design: Make the layout cleaner and more efficient. Breadboarding: Build neater pre-test setups before soldering. Tool: Practice and improve skills using KiCad. Future Plans Hardware: Move on to new hardware projects. Application: Focus on flight controllers. Architecture: Use x86 architecture for the next build."}, {"post_id": 28006, "ts": "2026-07-13T23:44:19Z", "hours": 1.3139, "text": "Final Project Done: This project was my first hardware Project to begin with, it taught me a lot of things how does wiring works, raspberry pi machine pin codes and stuff. I agree on the fact that its not polished for display but the main points it works which is important. I tested it for PLA, PLA+, TPU and it worked for most of them . I left them dry inside the box and cooling system worked. While I agree I should have designed the much better built for stands and stuff but it works which is pretty important I think for project like these. IT is not stylish as hackpad or drone since it was an techincal experiment and stuff. And used many of the pieces. Things To Add in Future. I would probably make a better stand for this, a proper attachment for this and enclosure and take many things in account for printing dimension and stuff"}, {"post_id": 22501, "ts": "2026-07-05T00:20:55Z", "hours": 2.3808, "text": "Worked on electronics and breadboard verification for electronic schema Uses a DHT11 Humidity Sensor, OLED O 96 module, Raspberry PI PICO. DC BRUSHLESS FAN for moisture monitoring(which i am still working on to specify which one is better). __________________________________________________________Schematics is fine ( its good it doesn’t need a custom PCB a regular breadboard, but problem is during assembling we have to map things out since my enclosure tub has a vertical cutout for the screen unlike the breadboard which horizontally attached to the screen. __________________________________________________________ The major stuff needed is assembly, the screen updating based on the sensor which currently it does."}, {"post_id": 19019, "ts": "2026-06-30T05:50:59Z", "hours": 2.7061, "text": "Here are Some New Changes made: The orignal electronic enclosure design failed because of the two flaws first one it covering half of 608 bearings. To fix that made some design changes but then space for PI would decrease. So i made a new lid on the one with 4 pillars for electornic enclosure which is a independent box on its own with ample amount fo space for PI and Humidity sensors. In terms of schematics they is really not anything since very basic stuff such as wiring managemnt for sensor and some ventilation holes which need to be made. The following are already 3d printed: SPOOLER_BASE, ENCLOSURE_LID. only the ENCLOSURE ITSELF IS LEFT since I need to double check some PI and OLED screen issue in order to send for 3D printing. Really can’t waste filament . So imported STL files for PI PICO , OLED o 96 to check out somethings. But the Project build is 75% finished around"}, {"post_id": 17379, "ts": "2026-06-28T04:26:19Z", "hours": 1.8342, "text": "01 Spooler Base is Done 3D printing filament (especially PLA like your Inland spool) acts like a sponge for moisture in the air. When it absorbs water, it causes brittle filament, bubbles, and terrible print quality. By putting this base plate inside a sealed Tupperware or airtight cereal container with some packets of desiccant (silica gel), you create a “Drybox” that keeps the plastic perfectly dry. Furthermore it made for Inland Spool and helps reduce waste reduction"}]...
|
Title: Filament Drying Box Monitoring System by @p Title: Filament Drying Box Monitoring System by @phantomlegends381 | Stardance
Devlogs:
01 Spooler Base is Done 3D printing filament (especially PLA like your Inland spool) acts like a sponge for moisture in the air. When it absorbs water, it causes brittle filament, bubbles, and terrible print quality. By putting this base plate inside a sealed Tupperware or airtight cereal container with some packets of desiccant (silica gel), you create a “Drybox” that keeps the plastic perfectly dry. Furthermore it made for Inland Spool and helps reduce waste reduction
Here are Some New Changes made: The orignal electronic enclosure design failed because of the two flaws first one it covering half of 608 bearings. To fix that made some design changes but then space for PI would decrease. So i made a new lid on the one with 4 pillars for electornic enclosure which is a independent box on its own with ample amount fo space for PI and Humidity sensors. In terms of schematics they is really not anything since very basic stuff such as wiring managemnt for sensor and some ventilation holes which need to be made. The following are already 3d printed: SPOOLER_BASE, ENCLOSURE_LID. only the ENCLOSURE ITSELF IS LEFT since I need to double check some PI and OLED screen issue in order to send for 3D printing. Really can’t waste filament . So imported STL files for PI PICO , OLED o 96 to check out somethings. But the Project build is 75% finished around
Worked on electronics and breadboard verification for electronic schema Uses a DHT11 Humidity Sensor, OLED O 96 module, Raspberry PI PICO. DC BRUSHLESS FAN for moisture monitoring(which i am still working on to specify which one is better). __________________________________________________________Schematics is fine ( its good it doesn’t need a custom PCB a regular breadboard, but problem is during assembling we have to map things out since my enclosure tub has a vertical cutout for the screen unlike the breadboard which horizontally attached to the screen. __________________________________________________________ The major stuff needed is assembly, the screen updating based on the sensor which currently it does.
Final Project Done: This project was my first hardware Project to begin with, it taught me a lot of things how does wiring works, raspberry pi machine pin codes and stuff. I agree on the fact that its not polished for display but the main points it works which is important. I tested it for PLA, PLA+, TPU and it worked for most of them . I left them dry inside the box and cooling system worked. While I agree I should have designed the much better built for stands and stuff but it works which is pretty important I think for project like these. IT is not stylish as hackpad or drone since it was an techincal experiment and stuff. And used many of the pieces. Things To Add in Future. I would probably make a better stand for this, a proper attachment for this and enclosure and take many things in account for printing dimension and stuff
Finalized Project Details Project Status Current Status: Completed and working fine. Review: Checked for any error difficulty. Time Spent: Took a large amount of time to polish. Overall Rating: A fine beginner hardware project. Areas for Improvement PCB Design: Make the layout cleaner and more efficient. Breadboarding: Build neater pre-test setups before soldering. Tool: Practice and improve skills using KiCad. Future Plans Hardware: Move on to new hardware projects. Application: Focus on flight controllers. Architecture: Use x86 architecture for the next build.
Ships:
I made an Filament Dry Box Monitoring System for Outpost. This project used DHT11 sensor to monitor the temperature and a case fan for Pico which turns on or off based on humidity conditions inside the case. The project containd 3d prined chassis, electronics container. Also uses an display to show current temperature inside the plastic container....
|
1793256741.3379035
|
1793343141.3379035
|
|
23393
|
Air draw by @unonown97 | Stardance
|
unonown97
|
1
|
6.49
|
37
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T17:38:03Z", "hours": 6.0, "multiplier": 6.21, "payout": 37, "blessing": "neutral", "text": "Air Draw is a python script that tracks your hand through your webcam and lets you paint on screen by moving your index finger around. It uses MediaPipe under the hood to figure out where your hand and fingers are, and OpenCV to show the camera feed and draw the lines. Quick Controls: -Index finger up: Move Brush -Pinch (Index + Thumb): Lift Brush (Pause Drawing) -Index + Middle fingers up: Select Color / Clear -Press ‘q’ to quit Sometimes when you switch from drawing mode to selection mode quickly the brush leaves a small stray line before resetting. Havent fixed this yet.", "repo": "https://github.com/Mirvo19/Air-draw", "demo": "https://github.com/Mirvo19/Air-draw/releases/tag/1.2"}]...
|
[{"post_id": 14606, "ts": "202 [{"post_id": 14606, "ts": "2026-06-23T19:37:58Z", "hours": 0.4917, "text": "created a github workflow that automatically generates the exe every time a new release is created"}, {"post_id": 14505, "ts": "2026-06-23T17:25:43Z", "hours": 5.9039, "text": "Air Draw Wanted to try making an air drawing thing from scratch. Most tutorials use the old mediapipe Hands API which is getting deprecated so I used the newer Tasks API instead. Canvas layer Keeping a separate image layer for the drawing and merging it with the camera feed each frame was the annoying part. Empty parts of the canvas had to be made transparent using a threshold mask and bitwise operations. cv2.threshold + cv2.bitwise_and + cv2.bitwise_or is the combo that works. Gesture detection First tried checking if fingertip y coordinate was above the knuckle y coordinate. Broke whenever the hand tilted sideways. Switched to distance based: if fingertip is farther from the wrist than the middle knuckle, finger is extended. Works regardless of hand angle. Smoothing Two layers of smoothing. One on the landmark positions themselves and one on the actual drawing point Pinch to lift Fixed pixel distance threshold for pinch detection broke whenever the hand moved closer or farther from the camera. Made the threshold relative to palm size instead (35% of wrist to middle knuckle distance). Much more consistent. Controls (nutshell): Index finger up: Move Brush Pinch (Index + Thumb): Lift Brush (Pause Drawing) Index + Middle fingers up: Select Color / Clear Press ‘q’ to quit"}]...
|
Title: Air draw by @unonown97 | Stardance
Devlogs Title: Air draw by @unonown97 | Stardance
Devlogs:
Air Draw Wanted to try making an air drawing thing from scratch. Most tutorials use the old mediapipe Hands API which is getting deprecated so I used the newer Tasks API instead. Canvas layer Keeping a separate image layer for the drawing and merging it with the camera feed each frame was the annoying part. Empty parts of the canvas had to be made transparent using a threshold mask and bitwise operations. cv2.threshold + cv2.bitwise_and + cv2.bitwise_or is the combo that works. Gesture detection First tried checking if fingertip y coordinate was above the knuckle y coordinate. Broke whenever the hand tilted sideways. Switched to distance based: if fingertip is farther from the wrist than the middle knuckle, finger is extended. Works regardless of hand angle. Smoothing Two layers of smoothing. One on the landmark positions themselves and one on the actual drawing point Pinch to lift Fixed pixel distance threshold for pinch detection broke whenever the hand moved closer or farther from the camera. Made the threshold relative to palm size instead (35% of wrist to middle knuckle distance). Much more consistent. Controls (nutshell): Index finger up: Move Brush Pinch (Index + Thumb): Lift Brush (Pause Drawing) Index + Middle fingers up: Select Color / Clear Press ‘q’ to quit
created a github workflow that automatically generates the exe every time a new release is created
Ships:
Air Draw is a python script that tracks your hand through your webcam and lets you paint on screen by moving your index finger around. It uses MediaPipe under the hood to figure out where your hand and fingers are, and OpenCV to show the camera feed and draw the lines. Quick Controls: -Index finger up: Move Brush -Pinch (Index + Thumb): Lift Brush (Pause Drawing) -Index + Middle fingers up: Select Color / Clear -Press ‘q’ to quit Sometimes when you switch from drawing mode to selection mode quickly the brush leaves a small stray line before resetting. Havent fixed this yet....
|
1792878518.6568174
|
1793742518.6568174
|
|
23413
|
Goa by @immaturegoat | Stardance
|
immaturegoat
|
1
|
12.0
|
211
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T17:47:09Z", "hours": 12.0, "multiplier": 17.54, "payout": 211, "blessing": "neutral", "text": "Goa is a programming language made with javascript. It is designed to be lightweight and expression-based. It has a syntax inspired by Lisp, and focuses entirely on numerical computation. I tried to make it super easy to learn, and the error messages should be easy to understand. I’ll keep working on this in the future though.", "repo": "https://github.com/octaviustheking/goa", "demo": "https://goalang.vercel.app/"}]...
|
[{"post_id": 15118, "ts": "202 [{"post_id": 15118, "ts": "2026-06-24T15:48:13Z", "hours": 3.7797, "text": "Devlog 8 - Goa 1.0 The first full release of my coding language i’m tired boss image here Wow, I’m never writing documentation again. This sucks. Anyway, lots of new things. First, bug fixes Added RAND and ABS I don’t even know how this happened. I swear I added this, and it was in past documentation, but it’s not just in the code. I had to quickly write them in. More parser issues More complex comparators like <= and >= were being split apart, and so it wasn’t being understood. I also had to rewrite the logic for IF and ELSE IF blocks. BASE returning NaN for bases above 10 Ok I’m sorry, but I’m too lazy to actually fix this. BASE will now just return an error if you try to convert a number past base 10. I want to keep Goa without any strings. New statements Logarithms The new LOG statement allows you to do logarithms for any base. Hooray! Trig statements I added SIN , COS , TAN , ARCSIN , ARCCOS , and ARCTAN statements. Should I call the last 3 ASIN , ACOS , and ATAN ? Let me know your thoughts. Rounding statements You can now use the ROUND statement to round to a certain number of decimal places. I also added FLOOR and CEIL functions. More random statements!! I added RANDFLOAT and RANDSIGN for generating random floats and generating a random sign (-1, 1), respectively. GCD and LCM pretty self explanatory Factorials Guess my old programs doing factorials are now useless…. Documentation I’m so exhausted reading through all of it. I’m done. I’m never writing any more documentation again. I hate writing error messages. I hate writing example programs. ARghh"}, {"post_id": 14087, "ts": "2026-06-23T02:20:31Z", "hours": 1.1175, "text": "Devlog 7 - Goa 0.9 Beta My coding language is now close to release! Try it out at: https://goalang.vercel.app In this update, I think I did a good amount of work on the language. I have added float support. Basically, for each variable, now instead of just storing a value, each variable also stores a type - integer or float. With this new type, we have some things to define. Firstly, I’m making Goa have strict typing. To convert between types, use the TOINT and the TOFLOAT statements. Goa also uses safe promotion, meaning calculations involving two integers will produce an integer, while calculations involving at least one float will always produce a float. New stuff!! New comparators!!! I can’t believe I didn’t include this earlier, but now here they are! The <= and the >= comparators! New changes and clarifications… (not as fun) The DIV statement now only returns integers. The EXP statement now only takes positive exponents and if your base is negative, only odd exponents. The BASE statement now only takes integer statements. New statements!!!! With the DIV statement now only returning integers, run the FDIV statement to return floats! Now that the EXP statement no longer takes negative exponents, run the ROOT statement to do roots! What’s next? For the 1.0 full release, I plan to add a lot of statements. I also want to add OR and AND statements… but that’s a little too much work for me. I don’t know, I’ll see. I’m planning on adding trig functions, more random functions, gcd and lcm, and more. I’ll see you guys later!"}, {"post_id": 14044, "ts": "2026-06-23T00:49:41Z", "hours": 1.2592, "text": "Devlog 6 - Documentation for my Coding language! visit the docs at: https://goalang.vercel.app/documentation.html Documentation for Goa is now complete. This is Goa 0.8 Beta, because I’ve also finished some final touches to Goa. Before the full release, I plan to add more comparators, floats, and more math functions. What i’ve added Smooth scroll Now when you use the left sidebar to navigate the documentation, the site smoothly scrolls to that section. Theme changes now save across the IDE and Documentation. Localstorage now saves theme choice, allowing your theme to be saved when switching pages and when reloading (which I think is kinda sick) Added a back to top button Once you scroll down a bit, a back to top button shows at the bottom right, allowing you to scroll all the way back up! (also, it has a pretty cool pop up animation) Changed formatting For the tag, I’ve added formatting making it stand out more from normal text! Lots of animations! I’ve added several hover animations for navigation links both on the sidebar and within the docs, animations for the back to top button, and a quick pop up animation when you first open up the docs! Unique scrollbar i made my own scrollbar I fixed the parser for the code now my nested commands work again heheheh"}, {"post_id": 13685, "ts": "2026-06-22T13:13:18Z", "hours": 2.3858, "text": "Devlog 5 omg i’m gonna literally combust Anyway, so for the past like 2 hours of coding, I’ve been working on my documentation. And I’ve got to say, it absolutely sucks. It’s like I’m writing an essay for my English class. I’m have like 20000 characters, so in like one day my html becomes the largest file here. Big sigh. I’m not even done yet T-T. The reason that I’m so pissed off is I found another bug that I can’t even explained what happened. Some issue in incrementing variables So in programming languages, if you want to change a variable by some amount you would run (I’m just gonna explain in pseudocode) x = x + 1 And this is what you would run (or x += 1 or x ++ or ++x but you get the idea). So in Goa, you would run SET (x ADD (x 1)) Basically, it sets the value of x to the sum of x and 1. However, when I run this, I get ERROR: Undefined variable: ADD . However, when I run SET (x ADD(x 1)) with no space between the ADD statement and the arguments, it works! I have no idea why I can put a space after the SET statement but not after the ADD ! I need to check through my tokenizer and parser to see where it is, but the closest issue I can think of is that my code is looking for the next character after the statement, not the next character after the first whitespace."}, {"post_id": 13206, "ts": "2026-06-21T17:08:32Z", "hours": 0.7325, "text": "Devlog 4 wow I feel like i’ve coded a lot today cuz im jet lagged Anyway, on to the actual devlog! If loops ACTUALLY fixed this time I noticed in the last devlog I posted an image of everything I worked on, like if loops, light mode, nested commands, etc. However, I realized that the output had 4 statements instead of 2. What happened was that the program produced both the outputs for the ELSE IF block AND the ELSE block. That’s now fixed by ensuring that blocks are skipped if the block above them is true. (Also something else I noticed in the screenshot was that the second line of the first IF block actually has an error - whoops, guess I suck at my OWN coding language) Also, I got bored and started working on the README It now has a description of the language, example code, and some examples of functions. I’m probably gonna work on it more later though. Favicon added There’s now an icon on the tab. I also renamed the code editor from “Goa Language” to “Goa IDE”; although IDE is an overstatement for something as basic as mines."}, {"post_id": 13100, "ts": "2026-06-21T13:04:59Z", "hours": 0.7594, "text": "Devlog 3 I have fixed major bugs concerning the basic workings of Goa. Attached below is a screenshot showing all the fixes and new additions in one program. First, nested commands now work. Fixing nested commands Commands like RETURN (BASE (MAX (MULT (ADD (INPUT SUB (INPUT 5)) EXP (2 3)) MIN (10 20)) 2)) now work! I had to add a recursive parser. The old system was based on string splitting, which does not work for nested commands, and caused the system to read nested commands as arguments instead of different commands. If commands now work When running If statements in Goa, an error would come out, saying that “handled is not defined.” This is because handled was being declared outside the scope of the function that it need to be in. However, if, else if, and else statements should now work. Return statements now return values on different lines I forgot to list this in the commit, but now when you use multiple RETURN statements (like in a while loop or printing out multiple values), each value will print on a different line in the output. Originally, each number would print on the same line, separated by a space. This happened even though I added “\\n” to the end of each number. I fixed this by changing the tag that held the output from to to hold pre-formatted text. Light mode added Hooray! Light mode now exists for anyone who wants to burn their eyes! I just chose the opposite color for every color on the page. However, I’m not sure if I like the idea of using white lines to divide sections instead of something like dark gray, as white seems like it stands out too much for being a divider. Other than that, I’m pretty proud of how it looks. I’m not sure if I added this in a previous devlog, but saving and loading works. You can now save to browser local storage, save to a .goa file on your drive, or load a .goa file :) Things to do in the future Firstly, obviously documentation. It is the last thing to go before the basic skeleton of the editor is done. Secondly, I want to add more functions to Goa. Thirdly, I am considering adding string and float compatibility, but I’m not sure yet. Fourthly, I need to save the user’s choice for light/dark mode to localstorage. Finally, just for fun, I want to solve a Codeforces problem with Goa (just to prove that it can work)."}, {"post_id": 13027, "ts": "2026-06-21T09:29:29Z", "hours": 1.2697, "text": "Devlog 2 I have finished coding the basic structure of the code. It uses parentheses in a lisp style, so the function is not connected to the parentheses. In the screenshot attached below, you can see a basic function that converts numbers into binary. Users will be able to add, multiply, divide, subtract, mod, abs, min, max, and use random numbers. There will also be while, for, and if loops. Comparators work, and comments use hashtags. I plan for Goa to basically act as a customizable calculator, as it only supports integers (I may add string support later). You can use it to automate boring actions ( cough like a binary worksheet in your Intro to Software Class). I’ve also added saving to localstorage and saving to files (it saves to a .goa file :)). Known Issues Nested commands do not work As of right now, simpler commands like RETURN (ADD (INPUT INPUT)) do work. However, long nested commands like RETURN (ADD (INPUT ADD (INPUT INPUT))) do not work. I am yet to find out why. Probably due to problem 3 (look below) If loops do not work For some reason, For and While loops work, but If loops don’t. I don’t know why yet. Commands that require only 1 argument throw back an error of needing 2, like ABS. RETURN doesn’t throw back and error, despite only needing 1 argument but using the same logic as the others. However, an error is thrown back once the RETURN statement gets really big, like RETURN (BASE (MAX (MULT (ADD (INPUT SUB (INPUT 5)) EXP (2 3)) MIN (10 20)) 2)). I’ll check it out later. Change theme has no functionality It’s not that it doesn’t work, I just haven’t implemented it yet :3"}, {"post_id": 12964, "ts": "2026-06-21T06:50:09Z", "hours": 0.9114, "text": "Devlog 1 I’ve been wanting to make a coding language for some time now. I want to make a language that can be easily learned. It’s not going to be that powerful, but I want it to basically allow anyone to repeat math functions. I have finished the basic outline of the UI. It was heavily influenced by the USACO IDE (as you can see in the screenshot below). It gives a basic outline to the features that I want to build. First, on the left half of the screen is the area where you can code. It is basically a big textarea input. For the input area, this is where people will put in inputs for the code. Same thing here, it is a textarea input. Finally, there is also an output area. Right now, there is just a placeholder, but that will change later. For the navbar at the top, there are 4 buttons. The first is a link to the documentation. I plan to build another website for the documentation, and I want it to be really easy to understand. Next is a “Save to browser” button that will save the code to localstorage. Next to that button is a “Save to file” button, which I plan to make the website download a .txt file to the computer. The “Load file” basically will allow users to upload code to the website. That’s really it for now, I’ll come back when I want to explain how I plan how the language will work!"}]...
|
Title: Goa by @immaturegoat | Stardance
Devlogs:
Title: Goa by @immaturegoat | Stardance
Devlogs:
Devlog 1 I’ve been wanting to make a coding language for some time now. I want to make a language that can be easily learned. It’s not going to be that powerful, but I want it to basically allow anyone to repeat math functions. I have finished the basic outline of the UI. It was heavily influenced by the USACO IDE (as you can see in the screenshot below). It gives a basic outline to the features that I want to build. First, on the left half of the screen is the area where you can code. It is basically a big textarea input. For the input area, this is where people will put in inputs for the code. Same thing here, it is a textarea input. Finally, there is also an output area. Right now, there is just a placeholder, but that will change later. For the navbar at the top, there are 4 buttons. The first is a link to the documentation. I plan to build another website for the documentation, and I want it to be really easy to understand. Next is a “Save to browser” button that will save the code to localstorage. Next to that button is a “Save to file” button, which I plan to make the website download a .txt file to the computer. The “Load file” basically will allow users to upload code to the website. That’s really it for now, I’ll come back when I want to explain how I plan how the language will work!
Devlog 2 I have finished coding the basic structure of the code. It uses parentheses in a lisp style, so the function is not connected to the parentheses. In the screenshot attached below, you can see a basic function that converts numbers into binary. Users will be able to add, multiply, divide, subtract, mod, abs, min, max, and use random numbers. There will also be while, for, and if loops. Comparators work, and comments use hashtags. I plan for Goa to basically act as a customizable calculator, as it only supports integers (I may add string support later). You can use it to automate boring actions ( cough like a binary worksheet in your Intro to Software Class). I’ve also added saving to localstorage and saving to files (it saves to a .goa file :)). Known Issues Nested commands do not work As of right now, simpler commands like RETURN (ADD (INPUT INPUT)) do work. However, long nested commands like RETURN (ADD (INPUT ADD (INPUT INPUT))) do not work. I am yet to find out why. Probably due to problem 3 (look below) If loops do not work For some reason, For and While loops work, but If loops don’t. I don’t know why yet. Commands that require only 1 argument throw back an error of needing 2, like ABS. RETURN doesn’t throw back and error, despite only needing 1 argument but using the same logic as the others. However, an error is thrown back once the RETURN statement gets really big, like RETURN (BASE (MAX (MULT (ADD (INPUT SUB (INPUT 5)) EXP (2 3)) MIN (10 20)) 2)). I’ll check it out later. Change theme has no functionality It’s not that it doesn’t work, I just haven’t implemented it yet :3
Devlog 3 I have fixed major bugs concerning the basic workings of Goa. Attached below is a screenshot showing all the fixes and new additions in one program. First, nested commands now work. Fixing nested commands Commands like RETURN (BASE (MAX (MULT (ADD (INPUT SUB (INPUT 5)) EXP (2 3)) MIN (10 20)) 2)) now work! I had to add a recursive parser. The old system was based on string splitting, which does not work for nested commands, and caused the system to read nested commands as arguments instead of different commands. If commands now work When running If statements in Goa, an error would come out, saying that “handled is not defined.” This is because handled was being declared outside the scope of the function that it need to be in. However, if, else if, and else statements should now work. Return statements now return values on different lines I forgot to list this in the commit, but now when you use multiple RETURN statements (like in a while loop or printing out multiple values), each value will print on a different line in the output. Originally, each number would print on the same line, separated by a space. This happened even though I added “\n” to the end of each number. I fixed this by changing the tag that held the output from to to hold pre-formatted text. Light mode added Hooray! Light mode now exists for anyone who wants to burn their eyes! I just chose the opposite color for every color on the page. However, I’m not sure if I like the idea of using white lines to divide sections instead of something like dark gray, as white seems like it stands out too much for being a divider. Other than that, I’m pretty proud of how it looks. I’m not sure if I added this in a previous devlog, but saving and loading works. You can now save to browser local storage, save to a .goa file on your drive, or load a .goa file :) Things to do in the future Firstly, obviously documentation. It is the last thing to go before the basic skeleton of the editor is done. Secondly, I want to add more functions to Goa. Thirdly, I am considering adding string and float compatibility, but I’m not sure yet. Fourthly, I need to save the user’s choice for light/dark mode to localstorage. Finally, just for fun, I want to solve a Codeforces problem with Goa (just to prove that it can work).
Devlog 4 wow I feel like i’ve coded a lot today cuz im jet lagged Anyway, on to the actual devlog! If loops ACTUALLY fixed this time I noticed in the last devlog I posted an image of everything I worked on, like if loops, light mode, nested commands, etc. However, I realized that the output had 4 statements instead of 2. What happened was that the program produced both the outputs for the ELSE IF block AND the ELSE block. That’s now fixed by ensuring that blocks are skipped if the block above them is true. (Also something else I noticed in the screenshot was that the second line of the first IF block actually has an error - whoops, guess I suck at my OWN coding language) Also, I got bored and started working on the README It now has a description of the language, example code, and some examples of functions. I’m probably gonna work on it more later though. Favicon added There’s now an icon on the tab. I also renamed the code editor from “Goa Language” to “Goa IDE”; although IDE is an overstatement for something as basic as mines.
Devlog 5 omg i’m gonna literally combust Anyway, so for the past like 2 hours of coding, I’ve been working on my documentation. And I’ve got to say, it absolutely sucks. It’s like I’m writing an essay for my English class. I’m have like 20000 characters, so in like one day my html becomes the largest file here. Big sigh. I’m not even done yet T-T. The reason that I’m so pissed off is I found another bug that I can’t even explained what happened. Some issue in incrementing variables So in programming languages, if you want to change a variable by some amount you would run (I’m just gonna explain in pseudocode) x = x + 1 And this is what you would run (or x += 1 or x ++ or ++x but you get the idea). So in Goa, you would run SET (x ADD (x 1)) Basically, it sets the value of x to the sum of x and 1. However, when I run this, I get ERROR: Undefined variable: ADD . However, when I run SET (x ADD(x 1)) with no space between the ADD statement and the arguments, it works! I have no idea why I can put a space after the SET statement but not after the ADD ! I need to check through my tokenizer and parser to see where it is, but the closest issue I can think of is that my code is looking for the next character after the statement, not the next character after the first whitespace.
Devlog 6 - Documentation for my Coding language! visit the docs at: https://goalang.vercel.app/documentation.html Documentation for Goa is now complete. This is Goa 0.8 Beta, because I’ve also finished some final touches to Goa. Before the full release, I plan to add more comparators, floats, and more math functions. What i’ve added Smooth scroll Now when you use the left sidebar to navigate the documentation, the site smoothly scrolls to that section. Theme changes now save across the IDE and Documentation. Localstorage now saves theme choice, allowing your theme to be saved when switching pages and when reloading (which I think is kinda sick) Added a back to top button Once you scroll down a bit, a back to top button shows at the bottom right, allowing you to scroll all the way back up! (also, it has a pretty cool pop up animation) Changed formatting For the tag, I’ve added formatting making it stand out more from normal text! Lots of animations! I’ve added several hover animations for navigation links both on the sidebar and within the docs, animations for the back to top button, and a quick pop up animation when you first open up the docs! Unique scrollbar i made my own scrollbar I fixed the parser for the code now my nested commands work again heheheh
Devlog 7 - Goa 0.9 Beta My coding language is now close to release! Try it out at: https://goalang.vercel.app In this update, I think I did a good amount of work on the language. I have added float support. Basically, for each variable, now instead of just storing a value, each variable also stores a type - integer or float. With this new type, we have some things to define. Firstly, I’m making Goa have strict typing. To convert between types, use the TOINT and the TOFLOAT statements. Goa also uses safe promotion, meaning calculations involving two integers will produce an integer, while calculations involving at least one float will always produce a float. New stuff!! New comparators!!! I can’t believe I didn’t include this earlier, but now here they are! The <= and the >= comparators! New changes and clarifications… (not as fun) The DIV statement now only returns integers. The EXP statement now only takes positive exponents and if your base is negative, only odd exponents. The BASE statement now only takes integer statements. New statements!!!! With the DIV statement now only returning integers, run the FDIV statement to return floats! Now that the EXP statement no longer takes negative exponents, run the ROOT statement to do roots! What’s next? For the 1.0 full release, I plan to add a lot of statements. I also want to add OR and AND statements… but that’s a little too much work for me. I don’t know, I’ll see. I’m planning on adding trig functions, more random functions, gcd and lcm, and more. I’ll see you guys later!
Devlog 8 - Goa 1.0 The first full release of my coding language i’m tired boss image here Wow, I’m never writing documentation again. This sucks. Anyway, lots of new things. First, bug fixes Added RAND and ABS I don’t even know how this happened. I swear I added this, and it was in past documentation, but it’s not just in the code. I had to quickly write them in. More parser issues More complex comparators like <= and >= were being split apart, and so it wasn’t being understood. I also had to rewrite the logic for IF and ELSE IF blocks. BASE returning NaN for bases above 10 Ok I’m sorry, but I’m too lazy to actually fix this. BASE will now just return an error if you try to convert a number past base 10. I want to keep Goa without any strings. New statements Logarithms The new LOG statement allows you to do logarithms for any base. Hooray! Trig statements I added SIN , COS , TAN , ARCSIN , ARCCOS , and ARCTAN statements. Should I call the last 3 ASIN , ACOS , and ATAN ? Let me know your thoughts. Rounding statements You can now use the ROUND statement to round to a certain number of decimal places. I also added FLOOR and CEIL functions. More random statements!! I added RANDFLOAT and RANDSIGN for generating random floats and generating a random sign (-1, 1), respectively. GCD and LCM pretty self explanatory Factorials Guess my old programs doing factorials are now useless…. Documentation I’m so exhausted reading through all of it. I’m done. I’m never writing any more documentation again. I hate writing error messages. I hate writing example programs. ARghh
Ships:
Goa is a programming language made with javascript. It is designed to be lightweight and expression-based. It has a syntax inspired by Lisp, and focuses entirely on numerical computation. I tried to make it super easy to learn, and the error messages should be easy to understand. I’ll keep working on this in the future though....
|
1793310931.0734642
|
1793397331.0734642
|
|
23427
|
words_of_wiser by @not-willem | Stardance
|
not-willem
|
1
|
1.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T20:33:59Z", "hours": 1.0, "multiplier": 2.57, "payout": 3, "blessing": "neutral", "text": "words_of_wiser I made a program that takes the lyrics of shape of you by Ed Sheeran and randomly pick them 20 times to make a sentence. this was genuinely so easy to make but it was really fun “Say on on lead the be on I baby I’m on something I’m oh my We my day not were” - Ed Sheeran, 2026", "repo": "https://github.com/not-willem/words_of_wiser", "demo": "https://not-willem.github.io/words_of_wiser/"}]...
|
[{"post_id": 13547, "ts": "202 [{"post_id": 13547, "ts": "2026-06-22T05:21:44Z", "hours": 0.9919, "text": "words_of_wiser from Ed Sheeran. most of my time was spent designing so i would appreciate feedback but right now it just takes the lyrics from shape of you, splits it up into words and then randomly picks them 20 times. Very fun to see what Ed has to say."}]...
|
Title: words_of_wiser by @not-willem | Stardance
Title: words_of_wiser by @not-willem | Stardance
Devlogs:
words_of_wiser from Ed Sheeran. most of my time was spent designing so i would appreciate feedback but right now it just takes the lyrics from shape of you, splits it up into words and then randomly picks them 20 times. Very fun to see what Ed has to say.
Ships:
words_of_wiser I made a program that takes the lyrics of shape of you by Ed Sheeran and randomly pick them 20 times to make a sentence. this was genuinely so easy to make but it was really fun “Say on on lead the be on I baby I’m on something I’m oh my We my day not were” - Ed Sheeran, 2026...
|
1793311048.226447
|
1793397448.226447
|
|
23433
|
Garden Calendar by @stockifab | Stardance
|
stockifab
|
1
|
10.0
|
197
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T15:56:53Z", "hours": 10.0, "multiplier": 15.86, "payout": 197, "blessing": "neutral", "text": "Garden Calendar is a website that shows you when to sow the plants for your garden. A calendar shows you when to sow indoors, outdoors, when the plants can be harvested and using filtering options, you can quickly find the plant you are looking for. Furthermore Garden Calendar gives you useful gardening tips for each plant in its database. I built this project because I wanted to refresh my Angular skills, in hindsight, this project wasn’t ideal for this because I didn’t get to use a lot of Angular features. Nevertheless, it wasn’t for nothing, and I learnt something along the way.", "repo": "https://github.com/stockifab/Garden-Calendar/", "demo": "https://stockifab.github.io/Garden-Calendar/"}]...
|
[{"post_id": 16985, "ts": "202 [{"post_id": 16985, "ts": "2026-06-27T15:49:21Z", "hours": 0.5969, "text": "GitHub Pages Deployment I deployed the app to GitHub pages. I encountered one issue: The images were not loading, because GitHub page URLs end with the name of the repository, so the root of the app is not at / but on /<Repository-Name> . The path of my images were preceded with a / which is incorrect when the root is not at / . Removing the / resolved the issue."}, {"post_id": 16944, "ts": "2026-06-27T14:49:44Z", "hours": 2.3583, "text": "Plant Details & UI Tweaks Plants can now be clicked on, showing a details menu on the right with details and a tip for growing the plant. I had troubles with the CSS of the legend at the bottom right corner which is positioned absolutely: The library used to make the panels resizable sets position: relative during dragging, causing the legend to be in an incorrect position only during dragging. I fixed the issue with some clever div wrapping."}, {"post_id": 13872, "ts": "2026-06-22T18:48:31Z", "hours": 3.0761, "text": "Bookmarking + Refactoring Users can now bookmark the plants they want to see. Bookmarked plants save in localStorage. Moreover, there is now an empty state when there are no plants to show due to filters. I also did some refactoring and simplified the code here and there. For my Angular learning goal: I learnt how to use effect() , which seems to do basically the same as the useEffect() hook in React."}, {"post_id": 13070, "ts": "2026-06-21T11:45:30Z", "hours": 2.5361, "text": "Calendar Rebuild I rewrote the calendar from an SVG graphic to a table, and added some basic filtering. Since my goal with this project is to learn Angular this was a nice opportunity to try signal forms. I also created a service for plant-related utility functions. Next I want to allow users to only show plants they are interested in."}, {"post_id": 12996, "ts": "2026-06-21T07:48:24Z", "hours": 1.8083, "text": "Gantt Diagram I want to use a Gantt Diagram to show when to sow and when to harvest plants. I decided to make this chart with a generated SVG graphic but that was a mistake: Calculating the position of each element (text, rectangle, line) is really fragile and styling the diagram further is painful. I want to re-do the diagram with a html table, which can be styled a lot easier."}]...
|
Title: Garden Calendar by @stockifab | Stardance
Title: Garden Calendar by @stockifab | Stardance
Devlogs:
Gantt Diagram I want to use a Gantt Diagram to show when to sow and when to harvest plants. I decided to make this chart with a generated SVG graphic but that was a mistake: Calculating the position of each element (text, rectangle, line) is really fragile and styling the diagram further is painful. I want to re-do the diagram with a html table, which can be styled a lot easier.
Calendar Rebuild I rewrote the calendar from an SVG graphic to a table, and added some basic filtering. Since my goal with this project is to learn Angular this was a nice opportunity to try signal forms. I also created a service for plant-related utility functions. Next I want to allow users to only show plants they are interested in.
Bookmarking + Refactoring Users can now bookmark the plants they want to see. Bookmarked plants save in localStorage. Moreover, there is now an empty state when there are no plants to show due to filters. I also did some refactoring and simplified the code here and there. For my Angular learning goal: I learnt how to use effect() , which seems to do basically the same as the useEffect() hook in React.
Plant Details & UI Tweaks Plants can now be clicked on, showing a details menu on the right with details and a tip for growing the plant. I had troubles with the CSS of the legend at the bottom right corner which is positioned absolutely: The library used to make the panels resizable sets position: relative during dragging, causing the legend to be in an incorrect position only during dragging. I fixed the issue with some clever div wrapping.
GitHub Pages Deployment I deployed the app to GitHub pages. I encountered one issue: The images were not loading, because GitHub page URLs end with the name of the repository, so the root of the app is not at / but on /<Repository-Name> . The path of my images were preceded with a / which is incorrect when the root is not at / . Removing the / resolved the issue.
Ships:
Garden Calendar is a website that shows you when to sow the plants for your garden. A calendar shows you when to sow indoors, outdoors, when the plants can be harvested and using filtering options, you can quickly find the plant you are looking for. Furthermore Garden Calendar gives you useful gardening tips for each plant in its database. I built this project because I wanted to refresh my Angular skills, in hindsight, this project wasn’t ideal for this because I didn’t get to use a lot of Angular features. Nevertheless, it wasn’t for nothing, and I learnt something along the way....
|
1793292510.1300192
|
1793378910.1300192
|
|
23438
|
Hacktown by @spacevini8 | Stardance
|
spacevini8
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T11:19:10Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I wanted to make this mostly as a fun thing before starting my real project, joining is open to anyone in the HC community, albeit with limited space, so if I see that many people take interest in my project, I might even add more pages and plots for people to take! DM me on slack or fork the project if you wish to join! There are currently no members as I wanted to ship it before allowing anyone in. Enjoy!", "repo": "https://github.com/spacevini8/Hacktown", "demo": "https://hacktown.n0budget.com/"}]...
|
[{"post_id": 16841, "ts": "202 [{"post_id": 16841, "ts": "2026-06-27T10:45:18Z", "hours": 0.5083, "text": "Hacktown is essentially finished, It’s still in a somewhat crude state, but I hope to keep updating it as people move in! it’s also now open for anyone (that is a member of HC) to join!"}, {"post_id": 13099, "ts": "2026-06-21T13:02:43Z", "hours": 0.7681, "text": "Added roads and made it a little nicer"}, {"post_id": 13040, "ts": "2026-06-21T10:16:10Z", "hours": 1.115, "text": "I’ve done a big chunk of the town, (thanks netizen.town for the base). It’s kind of crude rn but I’ll keep updating it will hopefully become something usable (and a little less ugly)!"}]...
|
Title: Hacktown by @spacevini8 | Stardance
Devlog Title: Hacktown by @spacevini8 | Stardance
Devlogs:
I’ve done a big chunk of the town, (thanks netizen.town for the base). It’s kind of crude rn but I’ll keep updating it will hopefully become something usable (and a little less ugly)!
Added roads and made it a little nicer
Hacktown is essentially finished, It’s still in a somewhat crude state, but I hope to keep updating it as people move in! it’s also now open for anyone (that is a member of HC) to join!
Ships:
I wanted to make this mostly as a fun thing before starting my real project, joining is open to anyone in the HC community, albeit with limited space, so if I see that many people take interest in my project, I might even add more pages and plots for people to take! DM me on slack or fork the project if you wish to join! There are currently no members as I wanted to ship it before allowing anyone in. Enjoy!...
|
1793263782.7306726
|
1793350182.7306726
|
|
23440
|
Formula1 OS by @sanjaybinayak778 | Stardance
|
sanjaybinayak778
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T01:58:50Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I build a Web OS based on theme formula1 car racing. I used “HTML”, “CSS”, “Node JS”, “Openmeteo API” and “gemini API”. functionalities It has various inbuilt apps which can be opened by double tapping in their icon, and closed by button appearing in pp’s window ( I had to add it because app was glitching because double tap close function) Apps => Notes = Write note in app or open a note from your computer. =>Contact me = you can send me suggestions through this app. =>My Project = you can see my projects listed here. =>Weather = you can check weather forecast or history here. =>Music = you can listen to your favorite music here. => calculator = you know what to do here. => AI = you can ask ai questions about formula1 cars. (NOTE:- As ai is using API it can’t give answers related to project or other things.) Well real challenge was to use APIs in my project to fetch data. Also I don’t know why but Time spent on This site is to n increasing after 8 hr although I added this project in StarDance i have spent more than 18hr after that.", "repo": "https://github.com/SanjayBinayak/Formula1-OS", "demo": "https://f1-os.sanjaybinayak.hackclub.app/"}]...
|
[{"post_id": 13809, "ts": "202 [{"post_id": 13809, "ts": "2026-06-22T17:02:46Z", "hours": 0.2947, "text": "Finally fixed my all errors and pushed it to github and nest server"}, {"post_id": 13727, "ts": "2026-06-22T14:36:55Z", "hours": 2.3906, "text": "I added tow more apps in my OS! I added calculator (it’s odd to add calculator ‘after’ those apps) and an AI for my OS which uses gemini API. Well adding AI was easier than i thought but after i added my AI my OS started glitching and to stop it i have to add a cross button in each app to close ap( before they were closing wit double taping their icons)."}, {"post_id": 13267, "ts": "2026-06-21T18:34:08Z", "hours": 1.3611, "text": "I wanted to add some more apps and i added 3 more apps named my projects, weather center and music. adding music app was real challenge because it’s complicated code it’s my first time working on api that involves visual changes in html ( it’s my first time making a website that uses API calls)."}, {"post_id": 13107, "ts": "2026-06-21T13:21:40Z", "hours": 1.2831, "text": "Heyyyy coders! I am making a web OS Named Formula1 OS as name suggests my theme is based on Formula1 cars. I am aiming to add some advanced app with a interactive clock and music player openable and closable when double tapped in their icons. For now i have created basic structure and 2 apps (Notes and Contact)."}]...
|
Title: Formula1 OS by @sanjaybinayak778 | Stardanc Title: Formula1 OS by @sanjaybinayak778 | Stardance
Devlogs:
Heyyyy coders! I am making a web OS Named Formula1 OS as name suggests my theme is based on Formula1 cars. I am aiming to add some advanced app with a interactive clock and music player openable and closable when double tapped in their icons. For now i have created basic structure and 2 apps (Notes and Contact).
I wanted to add some more apps and i added 3 more apps named my projects, weather center and music. adding music app was real challenge because it’s complicated code it’s my first time working on api that involves visual changes in html ( it’s my first time making a website that uses API calls).
I added tow more apps in my OS! I added calculator (it’s odd to add calculator ‘after’ those apps) and an AI for my OS which uses gemini API. Well adding AI was easier than i thought but after i added my AI my OS started glitching and to stop it i have to add a cross button in each app to close ap( before they were closing wit double taping their icons).
Finally fixed my all errors and pushed it to github and nest server
Ships:
I build a Web OS based on theme formula1 car racing. I used “HTML”, “CSS”, “Node JS”, “Openmeteo API” and “gemini API”. functionalities It has various inbuilt apps which can be opened by double tapping in their icon, and closed by button appearing in pp’s window ( I had to add it because app was glitching because double tap close function) Apps => Notes = Write note in app or open a note from your computer. =>Contact me = you can send me suggestions through this app. =>My Project = you can see my projects listed here. =>Weather = you can check weather forecast or history here. =>Music = you can listen to your favorite music here. => calculator = you know what to do here. => AI = you can ask ai questions about formula1 cars. (NOTE:- As ai is using API it can’t give answers related to project or other things.) Well real challenge was to use APIs in my project to fetch data. Also I don’t know why but Time spent on This site is to n increasing after 8 hr although I added this project in StarDance i have spent more than 18hr after that....
|
1793224388.7790074
|
1793310788.7790074
|
|
23460
|
Website Picker by @moki | Stardance
|
moki
|
1
|
4.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T11:16:00Z", "hours": 4.0, "multiplier": 1.38, "payout": 5, "blessing": "neutral", "text": "It is just a little website, to pick different accounts of mine. I’m also building a portfolio, but it takes more time than I thought it would, so I made this little, fun website in the meantime. It is nothing special", "repo": "https://github.com/moki-3/Website-Picker", "demo": "https://moki.netlify.app"}]...
|
[{"post_id": 13056, "ts": "202 [{"post_id": 13056, "ts": "2026-06-21T11:08:55Z", "hours": 1.465, "text": "Finished the website and it is deployed"}, {"post_id": 13013, "ts": "2026-06-21T09:05:05Z", "hours": 2.21, "text": "Yesterday, I started this project. I did most of the css and added the boxes for the links. It is also responsive!"}]...
|
Title: Website Picker by @moki | Stardance
Devlog Title: Website Picker by @moki | Stardance
Devlogs:
Yesterday, I started this project. I did most of the css and added the boxes for the links. It is also responsive!
Finished the website and it is deployed
Ships:
It is just a little website, to pick different accounts of mine. I’m also building a portfolio, but it takes more time than I thought it would, so I made this little, fun website in the meantime. It is nothing special...
|
1793130860.6853857
|
1793217260.6853857
|
|
23461
|
learning trumpet fingerings by @Dasher2801 | Stard learning trumpet fingerings by @Dasher2801 | Stardance...
|
|
1
|
6.0
|
23
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T17:51:45Z", "hours": 6.0, "multiplier": 4.1, "payout": 23, "blessing": "neutral", "text": "Master Trumpet Fingerings: The Interactive Trainer This minimalist web app is the perfect digital tool for trumpet beginners, music students, and returning playersto intuitively master classic fingerings in the treble clef.Without any downloads or registrations, the tool transforms any web browser into a motivating educational game. The app randomly generates notes between low C and high C, featuring a dynamic sheet music staff that automatically handles ledger lines. You control the virtual valves using your keyboard keys 1, 2, and 3, while pressing 0 immediately resets all valves to the open position. Pressing the Enter key evaluates your attempt. If you are correct, the entire screen instantly turns green and a synthesized trumpet fanfare sounds. Thanks to this combination of visual staff notation, tactile keyboard input, and immediate acoustic rewards, this website ensures rapid learning success. It is the ideal companion for your daily musical warm-up.", "repo": "https://github.com/Dasher2801/Trompete-lernen", "demo": "https://dasher2801.github.io/Trompete-lernen/"}]...
|
[{"post_id": 14356, "ts": "202 [{"post_id": 14356, "ts": "2026-06-23T13:39:19Z", "hours": 1.7, "text": "The design has been completely revamped. Several bugs have also been fixed—such as the issue where only one key could be pressed at a time, or notes being displayed incorrectly."}, {"post_id": 13725, "ts": "2026-06-22T14:31:15Z", "hours": 2.2825, "text": "Now, all notes from Gb to C3 are being tested. The design is still the old one."}, {"post_id": 13012, "ts": "2026-06-21T09:04:53Z", "hours": 1.7472, "text": "Ich arbeite an einer Website, mit der Trompetenspieler schnell und Effizient alle Griffe für die Trompete lernen können. Bis jetzt ist es mur dieser eine Ton (A1).Jetzt muss ich alle anderen Töne und Vorzeichen hinzufügen. Auch das Design muss ich noch anpassen."}]...
|
Title: learning trumpet fingerings by @Dasher2801 Title: learning trumpet fingerings by @Dasher2801 | Stardance
Devlogs:
Ich arbeite an einer Website, mit der Trompetenspieler schnell und Effizient alle Griffe für die Trompete lernen können. Bis jetzt ist es mur dieser eine Ton (A1).Jetzt muss ich alle anderen Töne und Vorzeichen hinzufügen. Auch das Design muss ich noch anpassen.
Now, all notes from Gb to C3 are being tested. The design is still the old one.
The design has been completely revamped. Several bugs have also been fixed—such as the issue where only one key could be pressed at a time, or notes being displayed incorrectly.
Ships:
Master Trumpet Fingerings: The Interactive Trainer This minimalist web app is the perfect digital tool for trumpet beginners, music students, and returning playersto intuitively master classic fingerings in the treble clef.Without any downloads or registrations, the tool transforms any web browser into a motivating educational game. The app randomly generates notes between low C and high C, featuring a dynamic sheet music staff that automatically handles ledger lines. You control the virtual valves using your keyboard keys 1, 2, and 3, while pressing 0 immediately resets all valves to the open position. Pressing the Enter key evaluates your attempt. If you are correct, the entire screen instantly turns green and a synthesized trumpet fanfare sounds. Thanks to this combination of visual staff notation, tactile keyboard input, and immediate acoustic rewards, this website ensures rapid learning success. It is the ideal companion for your daily musical warm-up....
|
1793310797.9341693
|
1793397197.9341693
|
|
23468
|
LG Hackpad by @lucas_g | Stardance
|
lucas_g
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T09:58:35Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made the LG Hackpad — a 9-key mechanical macropad with a rotary encoder and an OLED display, built around the Seeed XIAO RP2040. I designed the schematic and the 2-layer PCB completely from scratch in KiCad (my first PCB ever) and the case in Tinkercad — an open tray design with the XIAO exposed and an anti-flex support grid under the board, printable without supports. On the software side I built CircuitPython firmware where the encoder browses through profiles on the OLED, and a desktop configurator app (Python + CustomTkinter) that lets you assign a key combo or a custom script to every one of the 9 keys. Most challenging: hand-routing a 2-layer board without crossing nets while keeping a clean GND pour, and fitting everything under 100x100mm. I’m proud that I designed the whole hardware myself as a first-timer. To check it out: the repo has the full README, BOM, KiCad files, gerbers, the case as STL + STEP, the firmware and the configurator app. The demo link shows the 3D case model in Tinkercad.", "repo": "https://github.com/Sacul518/hackpad", "demo": ""}]...
|
[{"post_id": 15885, "ts": "202 [{"post_id": 15885, "ts": "2026-06-25T20:18:22Z", "hours": 0.7281, "text": "Just finished setting up my account, converting stl files to .step ones and I added a demo URL to my project."}, {"post_id": 15638, "ts": "2026-06-25T13:07:22Z", "hours": 7.0686, "text": "Finished my LG Hackpad! 🎉 This is a 9-key mechanical macropad with a rotary encoder and an OLED display, built around the Seeed XIAO RP2040. What I did: Designed the schematic and the 2-layer PCB completely from scratch in KiCad (my first PCB ever!). Hand-routed the switch matrix with per-key 1N4148 diodes, added a GND pour and fitted everything under 100x100mm (final: 68x99.68mm). Designed the case in Tinkercad: an open tray design with the XIAO RP2040 exposed, an anti-flex support grid under the PCB, USB cutout and 4x M2 standoffs - printable without supports. Built the firmware (CircuitPython): the encoder browses through profiles on the OLED, and each of the 9 keys is freely configurable via a JSON config. Made a desktop configurator app (Python + CustomTkinter) to assign key combos or custom scripts to every key. Biggest challenge as a first-timer: hand-routing a 2-layer board without crossing nets while keeping a clean GND pour. Super happy with how it turned out!"}]...
|
Title: LG Hackpad by @lucas_g | Stardance
Devlogs Title: LG Hackpad by @lucas_g | Stardance
Devlogs:
Finished my LG Hackpad! 🎉 This is a 9-key mechanical macropad with a rotary encoder and an OLED display, built around the Seeed XIAO RP2040. What I did: Designed the schematic and the 2-layer PCB completely from scratch in KiCad (my first PCB ever!). Hand-routed the switch matrix with per-key 1N4148 diodes, added a GND pour and fitted everything under 100x100mm (final: 68x99.68mm). Designed the case in Tinkercad: an open tray design with the XIAO RP2040 exposed, an anti-flex support grid under the PCB, USB cutout and 4x M2 standoffs - printable without supports. Built the firmware (CircuitPython): the encoder browses through profiles on the OLED, and each of the 9 keys is freely configurable via a JSON config. Made a desktop configurator app (Python + CustomTkinter) to assign key combos or custom scripts to every key. Biggest challenge as a first-timer: hand-routing a 2-layer board without crossing nets while keeping a clean GND pour. Super happy with how it turned out!
Just finished setting up my account, converting stl files to .step ones and I added a demo URL to my project.
Ships:
I made the LG Hackpad — a 9-key mechanical macropad with a rotary encoder and an OLED display, built around the Seeed XIAO RP2040. I designed the schematic and the 2-layer PCB completely from scratch in KiCad (my first PCB ever) and the case in Tinkercad — an open tray design with the XIAO exposed and an anti-flex support grid under the board, printable without supports. On the software side I built CircuitPython firmware where the encoder browses through profiles on the OLED, and a desktop configurator app (Python + CustomTkinter) that lets you assign a key combo or a custom script to every one of the 9 keys. Most challenging: hand-routing a 2-layer board without crossing nets while keeping a clean GND pour, and fitting everything under 100x100mm. I’m proud that I designed the whole hardware myself as a first-timer. To check it out: the repo has the full README, BOM, KiCad files, gerbers, the case as STL + STEP, the firmware and the configurator app. The demo link shows the 3D case model in Tinkercad....
|
1793274566.367518
|
1793360966.367518
|
|
23490
|
ACCESSORY HACKPAB! by @TXJ_PROGRAMER | Stardance
|
TXJ_PROGRAMER
|
1
|
0.94
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T07:31:22Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made the pcb for my hackpab i will make the case after i get the parts and the exact mesurements.", "repo": "https://github.com/srinj-ai/extra-keypay", "demo": ""}]...
|
[{"post_id": 20653, "ts": "202 [{"post_id": 20653, "ts": "2026-07-02T09:35:31Z", "hours": 0.9367, "text": "DevLog 3 Added the case i add the new case"}, {"post_id": 15653, "ts": "2026-06-25T13:35:01Z", "hours": 0.3892, "text": "Devlog#2 : A PCB hello every one this time i made the PCB schema"}, {"post_id": 15083, "ts": "2026-06-24T14:47:41Z", "hours": 0.3369, "text": "dev log #1 created the scamatic i created the scamatic for my project."}]...
|
Title: ACCESSORY HACKPAB! by @TXJ_PROGRAMER | Star Title: ACCESSORY HACKPAB! by @TXJ_PROGRAMER | Stardance
Devlogs:
dev log #1 created the scamatic i created the scamatic for my project.
Devlog#2 : A PCB hello every one this time i made the PCB schema
DevLog 3 Added the case i add the new case
Ships:
i made the pcb for my hackpab i will make the case after i get the parts and the exact mesurements....
|
1793288860.0543242
|
1793375260.0543242
|
|
23497
|
A website for my friends work by @rosikur | Starda A website for my friends work by @rosikur | Stardance...
|
rosikur
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T17:05:49Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website for my cousin whose started his own buissines . The difficult things were that i was procastranating a lot and that i had exams but now im done with all theexams", "repo": "https://github.com/rosikur/friends-website", "demo": "https://rosikur.github.io/friends-website/"}]...
|
[{"post_id": 16339, "ts": "202 [{"post_id": 16339, "ts": "2026-06-26T16:10:50Z", "hours": 1.6072, "text": "finished the design"}, {"post_id": 13062, "ts": "2026-06-21T11:21:47Z", "hours": 1.6358, "text": "making the css first and then the html(kinda dumb)"}]...
|
Title: A website for my friends work by @rosikur | Title: A website for my friends work by @rosikur | Stardance
Devlogs:
making the css first and then the html(kinda dumb)
finished the design
Ships:
I made a website for my cousin whose started his own buissines . The difficult things were that i was procastranating a lot and that i had exams but now im done with all theexams...
|
1793137914.8793046
|
1793224314.8793046
|
|
23506
|
rock-paper-scissors by @CLK | Stardance
|
CLK
|
1
|
3.44
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T11:31:51Z", "hours": 2.0, "multiplier": 1.48, "payout": 2, "blessing": "neutral", "text": "I made a rock paper scissors website, go to https://nivlacvt.github.io/rock-paper-scissors/ to test the project, I hope you like it", "repo": "https://github.com/NIVLACvt/rock-paper-scissors", "demo": "https://nivlacvt.github.io/rock-paper-scissors/"}]...
|
[{"post_id": 32591, "ts": "202 [{"post_id": 32591, "ts": "2026-07-21T21:23:16Z", "hours": 1.4406, "text": "added a main page to choose your game mode, added 2 new game modes to choose from including AI vs AI and human vs human!!!"}, {"post_id": 19162, "ts": "2026-06-30T12:33:59Z", "hours": 0.5181, "text": "changed back to completely random rock paper or scissors added wins and losses counter at the bottom and color"}, {"post_id": 18316, "ts": "2026-06-29T12:51:31Z", "hours": 0.5267, "text": "just finished butter logic"}, {"post_id": 17768, "ts": "2026-06-28T18:16:31Z", "hours": 0.5667, "text": "finished this project in thirty minutes just a fun little game of rock paper scissors there are still a few bugs though anyway I hope you like it"}]...
|
Title: rock-paper-scissors by @CLK | Stardance
De Title: rock-paper-scissors by @CLK | Stardance
Devlogs:
finished this project in thirty minutes just a fun little game of rock paper scissors there are still a few bugs though anyway I hope you like it
just finished butter logic
changed back to completely random rock paper or scissors added wins and losses counter at the bottom and color
added a main page to choose your game mode, added 2 new game modes to choose from including AI vs AI and human vs human!!!
Ships:
I made a rock paper scissors website, go to https://nivlacvt.github.io/rock-paper-scissors/ to test the project, I hope you like it...
|
1793224279.4303012
|
1793310679.4303012
|
|
23510
|
Ultimate Tic Tac Toe by @Mark_Pink | Stardance
|
Mark_Pink
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T20:48:32Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an Ultimate Tic Tac Toe project which allows you to play the popular game on the web. I used a 4d array which was a bit confusing, especially for the displaying of the board itself. Overall, it was completed and it’s a fun game that anyone can play.", "repo": "https://github.com/Mark-Pinker/UltTTT", "demo": "https://onecompiler.com/java/44tmrdy28"}]...
|
[{"post_id": 17899, "ts": "202 [{"post_id": 17899, "ts": "2026-06-28T20:43:11Z", "hours": 2.3711, "text": "Finished the code with error checking for the inputs, as well as the entire user interface where you can see the rules of the game since it’s a bit complicated to explain. The main mechanic of the opponent going to the corresponding space has also been completed as well as a restart mechanic. Everything about the code is basically finished except for maybe an AI which I may create in the future."}, {"post_id": 14680, "ts": "2026-06-23T21:26:04Z", "hours": 2.1581, "text": "Successfully added the win condition as well as the main structure which allows the game to be played completely"}]...
|
Title: Ultimate Tic Tac Toe by @Mark_Pink | Starda Title: Ultimate Tic Tac Toe by @Mark_Pink | Stardance
Devlogs:
Successfully added the win condition as well as the main structure which allows the game to be played completely
Finished the code with error checking for the inputs, as well as the entire user interface where you can see the rules of the game since it’s a bit complicated to explain. The main mechanic of the opponent going to the corresponding space has also been completed as well as a restart mechanic. Everything about the code is basically finished except for maybe an AI which I may create in the future.
Ships:
I made an Ultimate Tic Tac Toe project which allows you to play the popular game on the web. I used a 4d array which was a bit confusing, especially for the displaying of the board itself. Overall, it was completed and it’s a fun game that anyone can play....
|
1793134407.5302076
|
1793220807.5302076
|
|
23517
|
cupboard design by @Jay_D | Stardance
|
Jay_D
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T17:53:31Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a design of a miniature cupboard. later there will be more complex projects but this is my firsy", "repo": "https://github.com/jdinventor7/3D-printed-cupboard-for-Stardance-hack-club", "demo": ""}]...
|
[{"post_id": 13149, "ts": "202 [{"post_id": 13149, "ts": "2026-06-21T14:55:44Z", "hours": 1.1836, "text": "3D printed cupboard"}]...
|
Title: cupboard design by @Jay_D | Stardance
Devl Title: cupboard design by @Jay_D | Stardance
Devlogs:
3D printed cupboard
Ships:
I made a design of a miniature cupboard. later there will be more complex projects but this is my firsy...
|
1793130808.33375
|
1793217208.33375
|
|
23540
|
Thermals by @MarioS271 | Stardance
|
MarioS271
|
1
|
34.0
|
480
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T20:13:09Z", "hours": 34.0, "multiplier": 13.98, "payout": 480, "blessing": "neutral", "text": "Hi! Welcome to my project, Thermals. ######## It is a system resource monitor for Windows and Linux, written in Java. It monitors the following: CPU (usage, frequency, temperature) RAM (usage, free, on linux also cached) GPU (usage, temp, VRAM usage) Disks (name, mountpoint, read/write, usage) Network (adapter name, download/upload) Known Issues: Intel GPUs under Windows only report temperature correctly due to intel not really making it possible to read GPU data like you can with NVAPI/ADLX Intel GPUs under Linux do not show up at all AMD GPUs under Linux are untested and may not work (due to me not having AMD hardware avail, on windows a friend tested it for me) Tested on: Windows (Lenovo LOQ Gaming 15IRH8; i7-13620H, NVIDIA RTX 4050 Laptop GPU) WSL (same lenovo as above) Windows (Custom Build; AMD Ryzen 7 something, AMD Radeon something) Ubuntu 25.10 (Dell Latitude 5410; Stock) It works by polling hardware data on a background thread and pushing updates to the UI via a listener system. Data sources differ by platform: On windows, data comes from OSHI (a java library), D3DKMTHK for mainly GPU count and temperature on intel GPUs, NVAPI for NVIDIA GPUs and ADLX for AMD GPUs. The last three use an external C++ helper which interacts with these libraries and returns a json structure to the java app via stdout, which contains all the detected values. On Linux, data comes from OSHI, nvidia-smi and hwmon. The UI is built with Java Swing and FlatLaf for a dark, modern, Jetbrains-IDE-like style. For graphs, JFreeChart was used. The App also has a system tray icon, of which the color indicates the current CPU temperature. ######## I hope you have fun trying my project! :)", "repo": "https://github.com/MarioS271/thermals", "demo": "https://github.com/MarioS271/thermals/releases/latest"}]...
|
[{"post_id": 51260, "ts": "202 [{"post_id": 51260, "ts": "2026-08-20T19:56:57Z", "hours": 6.3822, "text": "Everything finally works!! I added support for linux and tested on WSL and native Ubuntu. Everything works perfectly (except AMD GPUs on Linux, didn’t have any hardware to test that…) In the last two days, a lot of changes happened, which are listed below. Changelog August 19th: Window immediately opens on app start now App now works without a tray icon Remove fan speed display Add CPU temp sensing for linux Make Disk and Net Panels grow on more entries that can fit Add filter for unwanted mounts/filesystems on disks view Hide middle panel (GPUs) if no valid GPU is present (mainly happens on linux + intel gpu) Implement GPU stat reading for NVIDIA and AMD GPUs in Linux Switch to JBR (Jetbrains Runtime) to fix scaling issues on Linux Create & debug CI/CD pipeline (a sh * t ton of debugging mostly) Add the logo Add file lock for only one instance Add PawnIO install prompt August 20th: Overhaul the tray icon behaviour and window controls Switch RAM graph to percentages from absolute values Add EMA filter for CPU temperature Add temperature data to CPU and GPU graphs Add color coded font for stats corresponding to graph datasets Fix up popups and the main class Clean up and optimize the whole app a little Fix Linux app launch Hide the AppImage mount under Linux … and of course tons of tiny tweaks and fixes everywhere too. :)"}, {"post_id": 49804, "ts": "2026-08-18T18:59:30Z", "hours": 2.3211, "text": "All Sensor Data works now! :) (on windows at least) Disks Per disk, you get its name and mountpoint, its R/W and its current capacity (used/total GB, progress bar and percentage). Network Adapters Per adapter, you get name and up/down speeds. Names above 40 chars are shortened to avoid text of the speed and name colliding. Next Up I’m working on getting Linux working too. Will probably have that done by tomorrow."}, {"post_id": 48405, "ts": "2026-08-16T18:54:25Z", "hours": 0.9208, "text": "RAM Panel and ADLX works! (yes, i did the adlx part partially using claude because i don’t hate myself enough to work on the adlx stuff for 5h when i have to get up tomorrow)"}, {"post_id": 48363, "ts": "2026-08-16T17:54:30Z", "hours": 3.6458, "text": "CPU and GPU data working! The Data Sources For CPU, mostly OSHI. For CPU frequency, I’ve also decided to go back to OSHI for various reasons. CPU temperature is queried using PawnIO. For GPU(s), D3DKMTHK is used for a list of GPUs and GPU temperature. For all other metrics, NVAPI (NVIDIA API) is used. AMD GPUs will also get support in the near future (via ADLX), Intel GPUs won’t be supported though. The Architecture of the PawnIO Reader Data Path The Hardware Manager calls the method requestData in WindowsReader which hands it a SensorData object, which contains the CPU temperature and a list of GpuData object, which look like this: public record GpuData ( String name , double tempC , double usagePct , long vramUsedMb , long vramTotalMb ) {} This data is then passed to all subclasses of the hardware manager that need it ( Cpu , Gpu ). Other Improvements The hardware manager now has a new method called addUpdateListener with which you can register a class that implements the HwUpdateListener interface. The hardware manager will then call onHwUpdate on all registered classes as soon as it has refreshed its data via OSHI and PawnIO-Reader. Additionally, the fan panel will not be displayed on windows because of reasons mentioned in the last devlog (too time-consuming to implement properly)"}, {"post_id": 47778, "ts": "2026-08-15T23:02:37Z", "hours": 2.1539, "text": "f * ck microsoft After MANY hours of research and wanting to launch this project into orbit WAY too many times, I’ve finally managed to query almost all of the missing and/or incorrect data in windows (CPU frequency and temp and all GPU stuff) except fan speeds i just dont care enough anymore to implement that too (why later). Why this is SO complicated In contrast to linux (which has hwmon), windows has no standardized way of getting proper sensor data reliably. CPU temp (accessible via WMI) is often not properly exposed by the manufacturer causing it to return either zero or garbage. CPU frequency is exposed, but it kinda lags behind and is measured/calculated badly. GPU stuff is basically not exposed at all, expect via their half-working API called “D3DKMTHK” (no i did not smash my keyboard) over which you can pretty reliably get GPU temp and memory frequency, but usage and fan speed not so much. For that, I used NVAPI (NVIDIA’s GPU query API). What? AMD and Intel GPUs don’t work with NVAPI? i know and i will not fix it, i don’t have the energy or time for that (i’m sorry). you’re welcome to give me a PR tho For the CPU stuff (frequency and temperatue) I used PawnIO, a kernel driver that can be scripted to do a lot of things. I use premade “AMX Modules” which basically are such scripts to get these CPU metrics. The AMX modules in use are: IntelMSR AMDFamily17 RyzenSMU (you can find these here ) The Final Solution A C++ shim which takes the data from PawnIO, NVAPI, “D3DKMTHK” and all the others and hands it to the java app via stdout . The java process runs the .exe everytime it needs the values, parses the returned json and saves the values. What were u talking about fan speeds too difficult again? You see, I could just do the same as with the CPU stuff (AMX modules). The problem is, the module LpcIO which exposes the EC (embedded controller) only exposes a direct path to it, meaning I’d have to implement and parse everything myself. The huge problem with this is: on laptops the EC is vendor-specific and undocumented, and on desktop, there are ~71 supported chips that require different implementations, which is probably the biggest waste of time, so I’ve decided to just skip fan speeds entirely."}, {"post_id": 27984, "ts": "2026-07-13T23:02:39Z", "hours": 3.5231, "text": "Partial Live CPU Data working! :) I’ve managed to get the live CPU stats (usage, per-core usage and (approx.) clock speed) and the CPU usage graph running. One problem with the current approach for measuring values (which is done using OSHI) is that on Windows, things like CPU temperature, CPU clock speed and others are not reliable. Why? On Windows, metrics like CPU temperature are read over WMI. However, the actual CPU temp is often only partially or not at all correctly exposed via WMI. CPU clock is often a stale/cached value or sometimes not at all given. This requires an external source of data which is both correct and more reliable. Technical Architecture of HwManager and live stats/graphs The hardware manager is a class that can provide all sensor data necessary. It abstracts OSHI and any future methods of aquiring data into one class (with instances of other classes such as Cpu ). It has its own thread which calls the pollValues method of all subclasses ( Cpu , …) which then update their internal values, which can be retrieved via getter functions. The Window class has an internal timer which calls the update method of TopPanel , MiddlePanel and BottomPanel , which then call each component panel’s update method which then update their stats and graphs."}, {"post_id": 22487, "ts": "2026-07-04T23:44:30Z", "hours": 2.0642, "text": "Fan Panel and Disks Panel done! After once again a little time away from this project, I finally finished the fan panel and the disks panel! :) Fan Panel The fan panel has a 2x3 grid which expands in columns if more than 6 fans are present (which also expands the width of the panel). Each fan is just a Stat instance. Disks Panel Each Disk is given params such as name, type (NVMe, SATA SSD/HDD, …), usage percentage and read/write rates. Then, the Disk instance manages the layout and drawing. The Disk class extends BaseBottomEntry , which is a horizontal JPanel with a BoxLayout and a name label. Then, Disk adds a JPanel on the right side of itsself and places stats like the ones given above (type, read/write activity, …) in it. For usage, there’s also a PercentageBar which is also custom-written. Looking forward to finishing the UI and then getting started on the actual stats reading! :)"}, {"post_id": 19556, "ts": "2026-06-30T21:42:55Z", "hours": 2.5158, "text": "UI coming together even more! The core UI structure is done now. This includes: Top Row Middle Row Bottom Row Top Row The top row contains CPU and RAM, same as in the last devlog. Middle Row The middle row contains all GPUs and fan speeds. This means it can contain 2..n component panels (if n is number of GPUs minus one). It is horizontally scrollable which prevents this row over-cluttering the popup (which would be caused by methods like wrapping excess panels to the next row). Bottom Row This row contains two panels which fill the window’s width. The first panel - the disks panel - contains info about all disks or drives in the computer. It will have one “entry” (one row inside the panel with info such as drive name, transfer speed and used/total size). Same goes for the network panel, which contains all network adapters. It will display info such as download, upload, adapter state and name."}, {"post_id": 17560, "ts": "2026-06-28T12:04:04Z", "hours": 4.2872, "text": "UI Overhaul!!!! I’ve decided I wanna go for a slightly different UI style, with CPU and RAM in the first row in a 2:1 ratio. Below, there’s the GPU row with 2 cols and as many rows as needed, and below will be one panel for all disks (including their usage, current transfer and so on) and one for all network adapters and their stats. What changed already The CPU and RAM panel are now positioned exactly how they will be in the final product. The CPU panel is also basically done, as its got the usage graph on top and stats on the bottom. Technical Details There are two new classes: Stat and Graph . A Graph is… well pretty self explanatory I hope, and a Stat is one value with text on what it is. (as seen below the red graph)."}, {"post_id": 16494, "ts": "2026-06-26T20:47:50Z", "hours": 1.9594, "text": "UI Overhaul!! :) I finally got the UI working in a way I like. You now have one panel per component. The Structure The window contains a JScrollPane (for scrolling when the content gets larger than the window) which contains a JSplitPane for dividing the contents into top and bottom. Additionally, there are the TopPanel and BottomPanel . The TopPanel contains three fixed panels: CPU, GPU and RAM. (still need to figure out how to properly display multi-GPU setups like this but future problem i guess) The BottomPanel contains all other devices, like drives and network adapters. Technical Details Both TopPanel and BottomPanel are containers for individual “component panels”. Each component panel ( CpuPanel , DiskPanel , …) owns its own components like labels, graphs or similar. I also wrote a custom JPanelRounded class for rounded panels. About to add a little detail to the component panels next! :)"}, {"post_id": 15916, "ts": "2026-06-25T21:20:54Z", "hours": 3.3436, "text": "Finally, progress again! After being offline for a little touching… grass and stuff (idk if anyone will get the reference) I finally got to work again and made two things work: Right Click Menu for the Tray Icon Basic Popup Window Structure The Window Architecture The popup window uses one main JSplitPlane which houses two panels ( TopPanel , BottomPanel ). Each of these panels again contains panels ( CpuPanel , GpuPanel , …), of which each one contains stuff like its own labels and other stuff."}, {"post_id": 13328, "ts": "2026-06-21T20:35:53Z", "hours": 0.8256, "text": "Tray Icon is nearing completion (already)! OK, don’t take it wrong: the app is nowhere near finished but at least the tray icon is! The current tray icon state The tray icon now displays the CPU temperature represented as a color, interpolated between a cold hue (green, 30°C) and a hot hue (red, 90°C). Also, I added a tooltip which shows temps for CPU and GPU (currently its placeholders but oh well) It took embarassingly long for me to realise I needed antialiasing to eliminate the choppyness-look from the icon btw"}, {"post_id": 13148, "ts": "2026-06-21T14:54:36Z", "hours": 0.4139, "text": "New project alert! I’ve started working on an app called “Thermals”. It serves the purpose of being a simple yet modern and elegant usage and temperature monitor, accessible through a tray icon, made to work on both Windows and Linux. Current Progress Build System, Repository and similar is set up and simple tray icon (a white square) is also working. Looking forward to how this project comes out! :)"}]...
|
Title: Thermals by @MarioS271 | Stardance
Devlogs Title: Thermals by @MarioS271 | Stardance
Devlogs:
New project alert! I’ve started working on an app called “Thermals”. It serves the purpose of being a simple yet modern and elegant usage and temperature monitor, accessible through a tray icon, made to work on both Windows and Linux. Current Progress Build System, Repository and similar is set up and simple tray icon (a white square) is also working. Looking forward to how this project comes out! :)
Tray Icon is nearing completion (already)! OK, don’t take it wrong: the app is nowhere near finished but at least the tray icon is! The current tray icon state The tray icon now displays the CPU temperature represented as a color, interpolated between a cold hue (green, 30°C) and a hot hue (red, 90°C). Also, I added a tooltip which shows temps for CPU and GPU (currently its placeholders but oh well) It took embarassingly long for me to realise I needed antialiasing to eliminate the choppyness-look from the icon btw
Finally, progress again! After being offline for a little touching… grass and stuff (idk if anyone will get the reference) I finally got to work again and made two things work: Right Click Menu for the Tray Icon Basic Popup Window Structure The Window Architecture The popup window uses one main JSplitPlane which houses two panels ( TopPanel , BottomPanel ). Each of these panels again contains panels ( CpuPanel , GpuPanel , …), of which each one contains stuff like its own labels and other stuff.
UI Overhaul!! :) I finally got the UI working in a way I like. You now have one panel per component. The Structure The window contains a JScrollPane (for scrolling when the content gets larger than the window) which contains a JSplitPane for dividing the contents into top and bottom. Additionally, there are the TopPanel and BottomPanel . The TopPanel contains three fixed panels: CPU, GPU and RAM. (still need to figure out how to properly display multi-GPU setups like this but future problem i guess) The BottomPanel contains all other devices, like drives and network adapters. Technical Details Both TopPanel and BottomPanel are containers for individual “component panels”. Each component panel ( CpuPanel , DiskPanel , …) owns its own components like labels, graphs or similar. I also wrote a custom JPanelRounded class for rounded panels. About to add a little detail to the component panels next! :)
UI Overhaul!!!! I’ve decided I wanna go for a slightly different UI style, with CPU and RAM in the first row in a 2:1 ratio. Below, there’s the GPU row with 2 cols and as many rows as needed, and below will be one panel for all disks (including their usage, current transfer and so on) and one for all network adapters and their stats. What changed already The CPU and RAM panel are now positioned exactly how they will be in the final product. The CPU panel is also basically done, as its got the usage graph on top and stats on the bottom. Technical Details There are two new classes: Stat and Graph . A Graph is… well pretty self explanatory I hope, and a Stat is one value with text on what it is. (as seen below the red graph).
UI coming together even more! The core UI structure is done now. This includes: Top Row Middle Row Bottom Row Top Row The top row contains CPU and RAM, same as in the last devlog. Middle Row The middle row contains all GPUs and fan speeds. This means it can contain 2..n component panels (if n is number of GPUs minus one). It is horizontally scrollable which prevents this row over-cluttering the popup (which would be caused by methods like wrapping excess panels to the next row). Bottom Row This row contains two panels which fill the window’s width. The first panel - the disks panel - contains info about all disks or drives in the computer. It will have one “entry” (one row inside the panel with info such as drive name, transfer speed and used/total size). Same goes for the network panel, which contains all network adapters. It will display info such as download, upload, adapter state and name.
Fan Panel and Disks Panel done! After once again a little time away from this project, I finally finished the fan panel and the disks panel! :) Fan Panel The fan panel has a 2x3 grid which expands in columns if more than 6 fans are present (which also expands the width of the panel). Each fan is just a Stat instance. Disks Panel Each Disk is given params such as name, type (NVMe, SATA SSD/HDD, …), usage percentage and read/write rates. Then, the Disk instance manages the layout and drawing. The Disk class extends BaseBottomEntry , which is a horizontal JPanel with a BoxLayout and a name label. Then, Disk adds a JPanel on the right side of itsself and places stats like the ones given above (type, read/write activity, …) in it. For usage, there’s also a PercentageBar which is also custom-written. Looking forward to finishing the UI and then getting started on the actual stats reading! :)
Partial Live CPU Data working! :) I’ve managed to get the live CPU stats (usage, per-core usage and (approx.) clock speed) and the CPU usage graph running. One problem with the current approach for measuring values (which is done using OSHI) is that on Windows, things like CPU temperature, CPU clock speed and others are not reliable. Why? On Windows, metrics like CPU temperature are read over WMI. However, the actual CPU temp is often only partially or not at all correctly exposed via WMI. CPU clock is often a stale/cached value or sometimes not at all given. This requires an external source of data which is both correct and more reliable. Technical Architecture of HwManager and live stats/graphs The hardware manager is a class that can provide all sensor data necessary. It abstracts OSHI and any future methods of aquiring data into one class (with instances of other classes such as Cpu ). It has its own thread which calls the pollValues method of all subclasses ( Cpu , …) which then update their internal values, which can be retrieved via getter functions. The Window class has an internal timer which calls the update method of TopPanel , MiddlePanel and BottomPanel , which then call each component panel’s update method which then update their stats and graphs.
f * ck microsoft After MANY hours of research and wanting to launch this project into orbit WAY too many times, I’ve finally managed to query almost all of the missing and/or incorrect data in windows (CPU frequency and temp and all GPU stuff) except fan speeds i just dont care enough anymore to implement that too (why later). Why this is SO complicated In contrast to linux (which has hwmon), windows has no standardized way of getting proper sensor data reliably. CPU temp (accessible via WMI) is often not properly exposed by the manufacturer causing it to return either zero or garbage. CPU frequency is exposed, but it kinda lags behind and is measured/calculated badly. GPU stuff is basically not exposed at all, expect via their half-working API called “D3DKMTHK” (no i did not smash my keyboard) over which you can pretty reliably get GPU temp and memory frequency, but usage and fan speed not so much. For that, I used NVAPI (NVIDIA’s GPU query API). What? AMD and Intel GPUs don’t work with NVAPI? i know and i will not fix it, i don’t have the energy or time for that (i’m sorry). you’re welcome to give me a PR tho For the CPU stuff (frequency and temperatue) I used PawnIO, a kernel driver that can be scripted to do a lot of things. I use premade “AMX Modules” which basically are such scripts to get these CPU metrics. The AMX modules in use are: IntelMSR AMDFamily17 RyzenSMU (you can find these here ) The Final Solution A C++ shim which takes the data from PawnIO, NVAPI, “D3DKMTHK” and all the others and hands it to the java app via stdout . The java process runs the .exe everytime it needs the values, parses the returned json and saves the values. What were u talking about fan speeds too difficult again? You see, I could just do the same as with the CPU stuff (AMX modules). The problem is, the module LpcIO which exposes the EC (embedded controller) only exposes a direct path to it, meaning I’d have to implement and parse everything myself. The huge problem with this is: on laptops the EC is vendor-specific and undocumented, and on desktop, there are ~71 supported chips that require different implementations, which is probably the biggest waste of time, so I’ve decided to just skip fan speeds entirely.
CPU and GPU data working! The Data Sources For CPU, mostly OSHI. For CPU frequency, I’ve also decided to go back to OSHI for various reasons. CPU temperature is queried using PawnIO. For GPU(s), D3DKMTHK is used for a list of GPUs and GPU temperature. For all other metrics, NVAPI (NVIDIA API) is used. AMD GPUs will also get support in the near future (via ADLX), Intel GPUs won’t be supported though. The Architecture of the PawnIO Reader Data Path The Hardware Manager calls the method requestData in WindowsReader which hands it a SensorData object, which contains the CPU temperature and a list of GpuData object, which look like this: public record GpuData ( String name , double tempC , double usagePct , long vramUsedMb , long vramTotalMb ) {} This data is then passed to all subclasses of the hardware manager that need it ( Cpu , Gpu ). Other Improvements The hardware manager now has a new method called addUpdateListener with which you can register a class that implements the HwUpdateListener interface. The hardware manager will then call onHwUpdate on all registered classes as soon as it has refreshed its data via OSHI and PawnIO-Reader. Additionally, the fan panel will not be displayed on windows because of reasons mentioned in the last devlog (too time-consuming to implement properly)
RAM Panel and ADLX works! (yes, i did the adlx part partially using claude because i don’t hate myself enough to work on the adlx stuff for 5h when i have to get up tomorrow)
All Sensor Data works now! :) (on windows at least) Disks Per disk, you get its name and mountpoint, its R/W and its current capacity (used/total GB, progress bar and percentage). Network Adapters Per adapter, you get name and up/down speeds. Names above 40 chars are shortened to avoid text of the speed and name colliding. Next Up I’m working on getting Linux working too. Will probably have that done by tomorrow.
Everything finally works!! I added support for linux and tested on WSL and native Ubuntu. Everything works perfectly (except AMD GPUs on Linux, didn’t have any hardware to test that…) In the last two days, a lot of changes happened, which are listed below. Changelog August 19th: Window immediately opens on app start now App now works without a tray icon Remove fan speed display Add CPU temp sensing for linux Make Disk and Net Panels grow on more entries that can fit Add filter for unwanted mounts/filesystems on disks view Hide middle panel (GPUs) if no valid GPU is present (mainly happens on linux + intel gpu) Implement GPU stat reading for NVIDIA and AMD GPUs in Linux Switch to JBR (Jetbrains Runtime) to fix scaling issues on Linux Create & debug CI/CD pipeline (a sh * t ton of debugging mostly) Add the logo Add file lock for only one instance Add PawnIO install prompt August 20th: Overhaul the tray icon behaviour and window controls Switch RAM graph to percentages from absolute values Add EMA filter for CPU temperature Add temperature data to CPU and GPU graphs Add color coded font for stats corresponding to graph datasets Fix up popups and the main class Clean up and optimize the whole app a little Fix Linux app launch Hide the AppImage mount under Linux … and of course tons of tiny tweaks and fixes everywhere too. :)
Ships:
Hi! Welcome to my project, Thermals. ######## It is a system resource monitor for Windows and Linux, written in Java. It monitors the following: CPU (usage, frequency, temperature) RAM (usage, free, on linux also cached) GPU (usage, temp, VRAM usage) Disks (name, mountpoint, read/write, usage) Network (adapter name, download/upload) Known Issues: Intel GPUs under Windows only report temperature correctly due to intel not really making it possible to read GPU data like you can with NVAPI/ADLX Intel GPUs under Linux do not show up at all AMD GPUs under Linux are untested and may not work (due to me not having AMD hardware avail, on windows a friend tested it for me) Tested on: Windows (Lenovo LOQ Gaming 15IRH8; i7-13620H, NVIDIA RTX 4050 Laptop GPU) WSL (same lenovo as above) Windows (Custom Build; AMD Ryzen 7 something, AMD Radeon something) Ubuntu 25.10 (Dell Latitude 5410; Stock) It works by polling hardware data on a background thread and pushing updates to the UI via a listener system. Data sources differ by platform: On windows, data comes from OSHI (a java library), D3DKMTHK for mainly GPU count and temperature on intel GPUs, NVAPI for NVIDIA GPUs and ADLX for AMD GPUs. The last three use an external C++ helper which interacts with these libraries and returns a json structure to the java app via stdout, which contains all the detected values. On Linux, data comes from OSHI, nvidia-smi and hwmon. The UI is built with Java Swing and FlatLaf for a dark, modern, Jetbrains-IDE-like style. For graphs, JFreeChart was used. The App also has a system tray icon, of which the color indicates the current CPU temperature. ######## I hope you have fun trying my project! :)...
|
1793231417.9500318
|
1793317817.9500318
|
|
23541
|
7boom by @l4urens | Stardance
|
l4urens
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T16:11:46Z", "hours": 0.0, "multiplier": 1.11, "payout": 0, "blessing": "neutral", "text": "the project is prtymuch done i add hard mode", "repo": "https://github.com/L4urens1/7boom.py", "demo": "https://github.com/L4urens1/7boom.py/releases/tag/3.1"}]...
|
[{"post_id": 13181, "ts": "202 [{"post_id": 13181, "ts": "2026-06-21T15:59:46Z", "hours": 0.4219, "text": "i add an option for hard mode"}]...
|
Title: 7boom by @l4urens | Stardance
Devlogs:
i a Title: 7boom by @l4urens | Stardance
Devlogs:
i add an option for hard mode
Ships:
the project is prtymuch done i add hard mode...
|
1793253035.9310615
|
1793339435.9310615
|
|
23546
|
My WebOS by @Hertty10 | Stardance
|
Hertty10
|
1
|
6.42
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T16:18:13Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a a webOS. The coding of the javascript was challenging for me since it was a new coding language. I am proud i didnt give up halfway", "repo": "https://github.com/Hertty15/WebOS", "demo": "https://hertty15.github.io/WebOS/WebOS.html"}]...
|
[{"post_id": 15535, "ts": "202 [{"post_id": 15535, "ts": "2026-06-25T07:34:06Z", "hours": 0.5819, "text": "terminal finally can do stuff"}, {"post_id": 15266, "ts": "2026-06-24T19:48:20Z", "hours": 1.0939, "text": "got setting being able to change baackground colour"}, {"post_id": 15094, "ts": "2026-06-24T15:05:21Z", "hours": 0.7372, "text": "calc is working now"}, {"post_id": 15035, "ts": "2026-06-24T12:45:37Z", "hours": 2.0025, "text": "working on getting the calc to work"}, {"post_id": 14458, "ts": "2026-06-23T16:16:25Z", "hours": 0.44, "text": "The final UI"}, {"post_id": 14275, "ts": "2026-06-23T10:04:53Z", "hours": 0.2667, "text": "The UI wasnt showing up"}, {"post_id": 13854, "ts": "2026-06-22T18:15:49Z", "hours": 1.6083, "text": "The basic starting design"}]...
|
Title: My WebOS by @Hertty10 | Stardance
Devlogs: Title: My WebOS by @Hertty10 | Stardance
Devlogs:
The basic starting design
The UI wasnt showing up
The final UI
working on getting the calc to work
calc is working now
got setting being able to change baackground colour
terminal finally can do stuff
Ships:
I made a a webOS. The coding of the javascript was challenging for me since it was a new coding language. I am proud i didnt give up halfway...
|
1792878863.4457068
|
1793742863.4457068
|
|
23555
|
Standby by @geenk | Stardance
|
geenk
|
1
|
30.0
|
512
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T21:07:26Z", "hours": 30.0, "multiplier": 16.89, "payout": 512, "blessing": "neutral", "text": "Standby Standby is an simple Android app that turns your phone into basically a smart bedside or desk clock (similar to StandBy mode on iPhones). Instead of a black screen while charging, your phone now is a nice little glanceable screen for a desk or nightstand. It can display many things and thanks to the customizability of the plugins, the limit is your imagination (you can probably run doom lol). When I moved from iOS to Android, I didnt find an app that ticked all the boxes for me, they were all either paid or the useful features were all locked behind paywalls or they didnt look good… So I built Standby. The core philosophy of Standby is for everything to be customizable and easy to do so. Plugins use the very well established HTML/CSS/JS to display and have access to both the web and local phone sensors if needed (permission is granted on a plugin by plugin basis). The challenges It was my first time coding an Android app, so it was hard for me to figure things out, but thanks to the assistance of generative AI tools and of numerous Youtube tutorials, I was able to (mostly) firgure things out. I would say the AppWidgetHost part was the hardest to make, I constantly ran into issues where the third party widgets wasn’t updating properly or the widgets would just crash the app when selected. Those issues took a lot of head scratching to figure out. The WebView part was surprisingly easy, since it was just pretty much a glorified web browser in the app. Compose also helped a lot with the UI side of things, it was nice to have reusable things I can use instead of making my own UI components, etc. Though AI also helped a lot with UI due to simply how long it was to write the UI code. Demo You can watch the video demo to see how the app works in general: https://drive.google.com/file/d/1LBqg1Of4_amh87YIiEeGrte-fc33Wl7u/view?usp=sharing There also many screenshots on GitHub showcasing plugins. If you want to install the app, the signed APK is in the GitHub releases tab. To load plugins into the app, download the plugin zips you want under plugins/build/ on GitHub and either import it using the local uploader or import it as a file from the app.", "repo": "https://github.com/Haxintosh/standby", "demo": "https://github.com/Haxintosh/standby/releases/tag/v0.1"}]...
|
[{"post_id": 49823, "ts": "202 [{"post_id": 49823, "ts": "2026-08-18T19:26:03Z", "hours": 1.9322, "text": "New plugins, night mode and page indicators Added new half sized clock plugins and a bad apple plugin Added a night mode for the app to allow for scheduled actions Made a new banner for the app"}, {"post_id": 49118, "ts": "2026-08-17T19:00:48Z", "hours": 4.1339, "text": "Fixed issues with weather provider and add AppWidgetHost functionality Added AppWidgetHost functionality to the app, allowing for third party app widgets to be displayed in the app. Removed GPS settings for privacy. Added a hold menu for widgets to rename the widgets. Added button to refresh plugins"}, {"post_id": 18459, "ts": "2026-06-29T16:52:31Z", "hours": 4.6319, "text": "Updated clock faces, alarms, and added provider API Added a clock face and updated the more colorful one to look better when the digits overlap each other. Added a new sensor bridge method getNextAlarm() , to get the phone’s next alarm Added the foundations for provider APIs and an example implementation using weather The provider API handles more complex and repetitive tasks for the plugins. For instance, instead of having 2 plugins both having to send out API requests to get data, the app gets the weather data itself and distributes it to the plugins in a similar way to the SensorBridge JS interface. The weather provider refreshes every hour and caches the response from open meteo and provides some basic helper methods. For instance getCurrentWeather() gives the current weather information in a JSON which is easily used by other plugins. It also manages weather icon loading and caching from OpenWeather and passes it to the plugin in base64."}, {"post_id": 14690, "ts": "2026-06-23T21:42:01Z", "hours": 3.0578, "text": "Import plugin dialog! Added a popup when the user imports a new plugin, whether from file picker or from the web that lists the requested sensor access, the domains the plugin needs access to and general metadata about the plugin (author, name, description, etc). Also, added a way to rename plugins to be able to differentiate between multiple instances of the same plugin, especially useful when you want to have multiple configs of the same plugin!"}, {"post_id": 14452, "ts": "2026-06-23T16:08:11Z", "hours": 3.8658, "text": "Bug fixes & new plugins I added a new weather plugin and a full screen digital clock plugin. I also migrated some of old plugins made before the plugin spec was written. Also fixed a bug with stale plugin states. The old behavior was that the setup and the listeners captured a stale instance of the plugin params, which meant issues related to permissions and logging. For instance, logcat gives “PluginWebView com.geenk.standby D [Default Clock]” instead of logging it as [Weather plugin]. Also found an issue that kept crashing my phone over ADB screen mirroring, though the issue was more of an AOSP issue. (DEBUG crash_dump64 A Abort message: ’Splitting motion events requires a down time to be set for the target on connection …)"}, {"post_id": 13974, "ts": "2026-06-22T22:48:16Z", "hours": 2.8394, "text": "More battery stats I have added support for more battery data to be accessed by plugins, now with support for most battery data. The SensorBridge.kt now using JSON to send information to the plugin because I was having issues with List being sent over to WebView not working correctly. Also added a battery plugin demonstrating the new battery information."}, {"post_id": 13163, "ts": "2026-06-21T15:15:20Z", "hours": 9.8283, "text": "Standby! Sorry I forgot to break it down into smaller logs… Standby now supports many new features. Full plugin spec Now the plugins for the app are no longer just HTML files. There is now a structure to the plugin zip files with support for customization of the plugin itself (ie changing accent colors, turning features on/off) that is reflected in the UI. Remote plugin uploading Instead of having to send the plugin to your phone, you can now enable a lightweight HTTP server where you can upload plugin files directly from your computer! Better security With the full plugin spec, there is now a whitelist for the allowed domains and phone sensor APIs [note this still needs to be tested further and needs a UI when the user imports a plugin] Side by side layout Now the app supports putting 2 half sized plugin next to each other, similar to iOS’s StandBy implementation. You can also have many different panels of plugins. OLED burn-in protection Since the app displays a static screen for most of the time, I have added in an OLED protection feature that turns off very other pixel and alternates it to reduce burn it (user configurable, can turn off up to ~83% of the pixels, though it is very dim).Also, for phones supporting lower refresh rates, there is now an option to force the app to the lowest refresh rate when idle. Better UI The old version had no animations and was pretty ugly in terms of UI. Now, the different buttons are animated and disappear when the app is idle. The UI now follows the phone’s colors."}]...
|
Title: Standby by @geenk | Stardance
Devlogs:
Sta Title: Standby by @geenk | Stardance
Devlogs:
Standby! Sorry I forgot to break it down into smaller logs… Standby now supports many new features. Full plugin spec Now the plugins for the app are no longer just HTML files. There is now a structure to the plugin zip files with support for customization of the plugin itself (ie changing accent colors, turning features on/off) that is reflected in the UI. Remote plugin uploading Instead of having to send the plugin to your phone, you can now enable a lightweight HTTP server where you can upload plugin files directly from your computer! Better security With the full plugin spec, there is now a whitelist for the allowed domains and phone sensor APIs [note this still needs to be tested further and needs a UI when the user imports a plugin] Side by side layout Now the app supports putting 2 half sized plugin next to each other, similar to iOS’s StandBy implementation. You can also have many different panels of plugins. OLED burn-in protection Since the app displays a static screen for most of the time, I have added in an OLED protection feature that turns off very other pixel and alternates it to reduce burn it (user configurable, can turn off up to ~83% of the pixels, though it is very dim).Also, for phones supporting lower refresh rates, there is now an option to force the app to the lowest refresh rate when idle. Better UI The old version had no animations and was pretty ugly in terms of UI. Now, the different buttons are animated and disappear when the app is idle. The UI now follows the phone’s colors.
More battery stats I have added support for more battery data to be accessed by plugins, now with support for most battery data. The SensorBridge.kt now using JSON to send information to the plugin because I was having issues with List being sent over to WebView not working correctly. Also added a battery plugin demonstrating the new battery information.
Bug fixes & new plugins I added a new weather plugin and a full screen digital clock plugin. I also migrated some of old plugins made before the plugin spec was written. Also fixed a bug with stale plugin states. The old behavior was that the setup and the listeners captured a stale instance of the plugin params, which meant issues related to permissions and logging. For instance, logcat gives “PluginWebView com.geenk.standby D [Default Clock]” instead of logging it as [Weather plugin]. Also found an issue that kept crashing my phone over ADB screen mirroring, though the issue was more of an AOSP issue. (DEBUG crash_dump64 A Abort message: ’Splitting motion events requires a down time to be set for the target on connection …)
Import plugin dialog! Added a popup when the user imports a new plugin, whether from file picker or from the web that lists the requested sensor access, the domains the plugin needs access to and general metadata about the plugin (author, name, description, etc). Also, added a way to rename plugins to be able to differentiate between multiple instances of the same plugin, especially useful when you want to have multiple configs of the same plugin!
Updated clock faces, alarms, and added provider API Added a clock face and updated the more colorful one to look better when the digits overlap each other. Added a new sensor bridge method getNextAlarm() , to get the phone’s next alarm Added the foundations for provider APIs and an example implementation using weather The provider API handles more complex and repetitive tasks for the plugins. For instance, instead of having 2 plugins both having to send out API requests to get data, the app gets the weather data itself and distributes it to the plugins in a similar way to the SensorBridge JS interface. The weather provider refreshes every hour and caches the response from open meteo and provides some basic helper methods. For instance getCurrentWeather() gives the current weather information in a JSON which is easily used by other plugins. It also manages weather icon loading and caching from OpenWeather and passes it to the plugin in base64.
Fixed issues with weather provider and add AppWidgetHost functionality Added AppWidgetHost functionality to the app, allowing for third party app widgets to be displayed in the app. Removed GPS settings for privacy. Added a hold menu for widgets to rename the widgets. Added button to refresh plugins
New plugins, night mode and page indicators Added new half sized clock plugins and a bad apple plugin Added a night mode for the app to allow for scheduled actions Made a new banner for the app
Ships:
Standby Standby is an simple Android app that turns your phone into basically a smart bedside or desk clock (similar to StandBy mode on iPhones). Instead of a black screen while charging, your phone now is a nice little glanceable screen for a desk or nightstand. It can display many things and thanks to the customizability of the plugins, the limit is your imagination (you can probably run doom lol). When I moved from iOS to Android, I didnt find an app that ticked all the boxes for me, they were all either paid or the useful features were all locked behind paywalls or they didnt look good… So I built Standby. The core philosophy of Standby is for everything to be customizable and easy to do so. Plugins use the very well established HTML/CSS/JS to display and have access to both the web and local phone sensors if needed (permission is granted on a plugin by plugin basis). The challenges It was my first time coding an Android app, so it was hard for me to figure things out, but thanks to the assistance of generative AI tools and of numerous Youtube tutorials, I was able to (mostly) firgure things out. I would say the AppWidgetHost part was the hardest to make, I constantly ran into issues where the third party widgets wasn’t updating properly or the widgets would just crash the app when selected. Those issues took a lot of head scratching to figure out. The WebView part was surprisingly easy, since it was just pretty much a glorified web browser in the app. Compose also helped a lot with the UI side of things, it was nice to have reusable things I can use instead of making my own UI components, etc. Though AI also helped a lot with UI due to simply how long it was to write the UI code. Demo You can watch the video demo to see how the app works in general: https://drive.google.com/file/d/1LBqg1Of4_amh87YIiEeGrte-fc33Wl7u/view?usp=sharing There also many screenshots on GitHub showcasing plugins. If you want to install the app, the signed APK is in the GitHub releases tab. To load plugins into the app, download the plugin zips you want under plugins/build/ on GitHub and either import it using the local uploader or import it as a file from the app....
|
1793141608.863629
|
1793228008.863629
|
|
23572
|
FootyCompass by @joedesmos | Stardance
|
joedesmos
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T16:30:37Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Built a football (soccer) learning platform called FootyCompass ⚽ The goal is to make learning football players, clubs, leagues, and national teams more fun through quizzes, collections, learning paths, and player profiles. Over the past few weeks I’ve: • Built a database with thousands of players and hundreds of clubs • Added national team pages and World Cup content • Created quiz modes and learning paths • Added hundreds of real player photos and club crests • Fixed tons of deployment, asset, and mobile UI issues One of the biggest challenges was building a reliable image pipeline that could safely find player photos and club assets while avoiding incorrect matches and broken images. I’m most proud of how polished the site feels now. It started as a small football quiz idea and has grown into a full football learning platform. If you’re a football fan, I’d love feedback: • Are the quizzes fun? • Is navigation easy? • What features would make you use it regularly? • Any bugs or broken pages? Try exploring a club, a national team, or taking a quiz and let me know what you think!", "repo": "https://github.com/joedesmos-co/footycompass", "demo": "https://footycompass.com"}]...
|
[{"post_id": 14793, "ts": "202 [{"post_id": 14793, "ts": "2026-06-24T01:02:38Z", "hours": 1.9972, "text": "UI redesign to make app look nicer as well as a new feature. The new feature is a randomizer that picks a random player or club to take you to which adds a fun element."}, {"post_id": 14466, "ts": "2026-06-23T16:27:41Z", "hours": 2.1264, "text": "Added some final polish and did some bug fixes."}]...
|
Title: FootyCompass by @joedesmos | Stardance
Dev Title: FootyCompass by @joedesmos | Stardance
Devlogs:
Added some final polish and did some bug fixes.
UI redesign to make app look nicer as well as a new feature. The new feature is a randomizer that picks a random player or club to take you to which adds a fun element.
Ships:
Built a football (soccer) learning platform called FootyCompass ⚽ The goal is to make learning football players, clubs, leagues, and national teams more fun through quizzes, collections, learning paths, and player profiles. Over the past few weeks I’ve: • Built a database with thousands of players and hundreds of clubs • Added national team pages and World Cup content • Created quiz modes and learning paths • Added hundreds of real player photos and club crests • Fixed tons of deployment, asset, and mobile UI issues One of the biggest challenges was building a reliable image pipeline that could safely find player photos and club assets while avoiding incorrect matches and broken images. I’m most proud of how polished the site feels now. It started as a small football quiz idea and has grown into a full football learning platform. If you’re a football fan, I’d love feedback: • Are the quizzes fun? • Is navigation easy? • What features would make you use it regularly? • Any bugs or broken pages? Try exploring a club, a national team, or taking a quiz and let me know what you think!...
|
1793314384.9005616
|
1793400784.9005616
|
|
23582
|
Groovy fusion kitchen🔥🔥 by @Faridat | Stardance
|
Faridat
|
1
|
4.8
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T20:07:19Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "what i made is basically an xylophone in aspect of a kitchen although the sound of the keys work you can also generate and record recipes with different keys. And you can also form your own sound if you like music. One challenging thing i encounter during this project is to get the keys working because it was not producing the sound and although they was lots of issues with this project i manage to give Google Gemini the idea and the code i generated then i fixed the code and the issues then it started working. And now i learnt the correct way to add sound by watching you tube videos on it. What i am proud off in this project is the final result and how i was able to learn new thing with the issues i faced. And why should people try this project cause i made it no no i was just joking this project would make you fall in love with xylophone. and creating sound and may even inspire you you may become a famous pianoist or artist in the future. THANK YOU NASA AND HACK CLUB.", "repo": "https://github.com/sreeeeeeddddddda/groovyfusionkitche", "demo": "https://sreeeeeeddddddda.github.io/groovyfusionkitche/"}]...
|
[{"post_id": 19494, "ts": "202 [{"post_id": 19494, "ts": "2026-06-30T20:28:36Z", "hours": 0.7953, "text": "Basically i don’t know how to make this more fun but i am adding a mini challenge box and something like a hologram that mix your recipe."}, {"post_id": 18570, "ts": "2026-06-29T19:21:43Z", "hours": 0.6, "text": "Coming to the end of this project now the code is giving a bit of stress but i am being honest uses Ai to correct this. part but it did help as the result is great."}, {"post_id": 18470, "ts": "2026-06-29T17:11:09Z", "hours": 0.4522, "text": "Added xylophone dimension to add different design of the dimension used AI to generate this part."}, {"post_id": 18351, "ts": "2026-06-29T13:56:26Z", "hours": 0.5667, "text": "Am so excited can’t wait to publish this guys vote and follow for more amazing project. Added a pop-up instruction that you will see the moment you click the demo link want to see it click the demo link guys."}, {"post_id": 17869, "ts": "2026-06-28T20:09:10Z", "hours": 0.4667, "text": "SNEAK PEAK GUYS"}, {"post_id": 17814, "ts": "2026-06-28T19:04:18Z", "hours": 1.4944, "text": "Sorry guys i forgot to post devlogs so imma spam today i fixed the website to scroll snick pick"}, {"post_id": 14621, "ts": "2026-06-23T20:04:30Z", "hours": 0.3811, "text": "i started coding the the background command and colour."}]...
|
Title: Groovy fusion kitchen🔥🔥 by @Faridat | Stard Title: Groovy fusion kitchen🔥🔥 by @Faridat | Stardance
Devlogs:
i started coding the the background command and colour.
Sorry guys i forgot to post devlogs so imma spam today i fixed the website to scroll snick pick
SNEAK PEAK GUYS
Am so excited can’t wait to publish this guys vote and follow for more amazing project. Added a pop-up instruction that you will see the moment you click the demo link want to see it click the demo link guys.
Added xylophone dimension to add different design of the dimension used AI to generate this part.
Coming to the end of this project now the code is giving a bit of stress but i am being honest uses Ai to correct this. part but it did help as the result is great.
Basically i don’t know how to make this more fun but i am adding a mini challenge box and something like a hologram that mix your recipe.
Ships:
what i made is basically an xylophone in aspect of a kitchen although the sound of the keys work you can also generate and record recipes with different keys. And you can also form your own sound if you like music. One challenging thing i encounter during this project is to get the keys working because it was not producing the sound and although they was lots of issues with this project i manage to give Google Gemini the idea and the code i generated then i fixed the code and the issues then it started working. And now i learnt the correct way to add sound by watching you tube videos on it. What i am proud off in this project is the final result and how i was able to learn new thing with the issues i faced. And why should people try this project cause i made it no no i was just joking this project would make you fall in love with xylophone. and creating sound and may even inspire you you may become a famous pianoist or artist in the future. THANK YOU NASA AND HACK CLUB....
|
1792878501.954152
|
1793742501.954152
|
|
23588
|
LighterWebUI by @Capy | Stardance
|
Capy
|
1
|
45.0
|
838
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T20:45:07Z", "hours": 45.0, "multiplier": 18.87, "payout": 838, "blessing": "neutral", "text": "I made LighterWebUI, a lightweight local AI client based on Ollama. It uses as little as 70MB of RAM at idle, over 6x less than OpenWebUI, making it easy to run on a Pi Zero 2 W (512MB RAM). It uses Ollama, a well-known way to run inference locally. The profile system is similar to Neflix. IMPORTANT: For this demo, the AI models are run through an API, not locally, as I’m not able to run large LLMs reliably enough on my hardware. Please don’t use any swearing, slurs or otherwise bad language with the AI. You may create and delete your own chats and users, but please leave the existing ones as they are. The stack: SvelteKit frontend and backend, Ollama for inference, Acebase local (NoSQL) database.", "repo": "https://github.com/CapyGamesXD/LighterWebUI", "demo": "https://lighterwebui.capydesigns.com/home/"}]...
|
[{"post_id": 39117, "ts": "202 [{"post_id": 39117, "ts": "2026-08-01T20:30:17Z", "hours": 0.5122, "text": "Fixed final bugs before shipping! I sent the project to some friends to check that everything worked as expected. It didn’t. I fixed what didn’t and now I’m READY TO SHIP!!!! Thank you guys for reading all these devlogs! <3"}, {"post_id": 39022, "ts": "2026-08-01T18:00:21Z", "hours": 0.5603, "text": "Polished bugs! This might be my last devlog! I plan to write quite a specific ship note for the users telling them what they may and may not do. Thanks so much to everyone who was here from the start of LighterWebUI! I’ve really enjoyed this project and I’m looking forward to the next one! I’ve got some ideas, so keep an eye out! Anyway, I removed some excess logs, polished some code layout, just made the whole thing a little nicer. I also started hosting at https://lighterwebui.capydesigns.com ! I may have to take it down a couple times. I’ve made 3 profiles with a chat in each of them that the users can use to test the site. Bye guys! <3 Happy hacking!"}, {"post_id": 38970, "ts": "2026-08-01T16:18:24Z", "hours": 5.4911, "text": "HUGE devlog! I made a TON of changes, improvements, etc! First, mobile compatibility! The user can now change the system prompt. I added a nice (basic) loading screen . I improved a big database inefficiency with the messaging system. (before I continue, please consider the fact that it was probably 22:30 when I coded this, and I was likely somewhat delirious), the messaging system would take the current array from the DB, add the new messages, and replace the entire file. FOR EVERY MESSAGE. This is heavy on RAM, slow and way more operations than are needed, also getting slower the longer the chat is. Now, when the user sends a message and the AI replies, that pair of messages get sent over and pushed to the chat. 2 messages, not the entire chat! I finally added the Lighter, Web, and UI pages. I had a tag that bound to a routeSelect variable. This routeSelect variable would determine the apiRoute. The fix was to just get rid of the routeSelect and bind the to the apiRoute. (whoops!) OH! Something I totally almost forgot to mention! I made the starting pages! You now follow this flow: Press the PEAK start button, grab your admin code, get prompted to set up Ollama (or the cloud API), then enter your username, then finally, the last page gives you the same glorious button to finish the tutorial/intro, alongside the repo link. I also edited the README a bunch to add instructions for setup. I’m opting to recommend Bun over Node for running it. Also! I tested more for the RAM usage. I found that (after rebooting my Pi) I managed to get <70MB usage at idle. That is INSANE! This will - of course fluctuate with the number of concurrent users/prompts, but is really impressive nonetheless. I also tested in on my Pi Z2W to make sure it worked. Start-to-finish, I found a few missing dependencies in the package.json, which I quickly added. Now, the project can be downloaded and run in just 5 terminal commands! Finally, I ran a code review thingy using VSCode’s AI tool (I made sure to tell it not to generate code!) and it found a few minor bugs, so I fixed the main ones. I also ignored some because they’re incredibly unlikely to happen in general, let alone during the initial ship period. I’d rather not waste time fixing things like “what if the server dies midway through this exact token output and that goes kaboom” or whatever lol. Oh, one last thing, I removed my custom alerts. They were nice, but also very useless… I replaced them with the browser’s own confirmation dialog, since it’s simpler and honestly nicer to use! Also 100% cross-platform. Two little sub-notes, I can’t show all pages of the setup because of the attachment limit on Stardance, so you’ll just have to run the project yourself to see it (hehehe), and secondly, don’t worry, I’ll make sure to change the password shown in that image. I’m gonna delete the database entirely again before I ship! Anyway! Sorry again for the long devlog, I just have so much to say! I also omitted a TON of smaller optimisations/changes again, but they’re generally irrelevant to the user’s experience, and I doubt anyone would want to read a 10,000 word devlog like “and then I added another pixel to the offset… Then removed it… Then added it back…” If I remember something less brain-meltingly boring, I’ll make sure to add it! (P.S, this is me coming back and editing the project because I’d WAY surpassed the character limit!) Thanks so much for reading what’s possibly one of my last devlogs! Happy hacking everyone! I MIGHT see you in the next one!"}, {"post_id": 36518, "ts": "2026-07-28T18:00:34Z", "hours": 3.0181, "text": "# I FINISHED THE MAIN PAGE’S FEATURES!!! I added a create and remove user function. I also entirely overhauled how they’re stored. Time for the boring dev talk: Before, the DB ref was (‘/LighterWebUI/users/’) and now it’s (‘/LighterWebUI/users/${userId}’), meaning I can modify them as I need without having to first fetch the array, modify it and then re-send it to the db. It’s a TINY bit more efficient, and a lot easier to use. Also, STATISTICS! I took a few measurements, here are the results. <100MB idle (about 95MB) Idling with 10 browser tabs running it took it way up to… 105MB According to my very thorough single Google search, the average idle for OpenWebUI is 400-650MB, making mine 4-6x less RAM usage! I also improved some of the logic surrounding the presets for API endpoints. UX improvements too! I MASSIVELY improved the UI of certain things like the user profile system, which now doesn’t display the currently selected profile as an option (not super significant, but nice). I also added the option to add new users. The chats list now (finally) shows which chat you’re active in. It highlights it in a lighter gray. I also made it so that when you use the “override model selection”, the options disappear so you don’t have an empty element :) I fixed the colours and improved continuity across colourful elements (before I had like 4 different blue colours that were basically identical XD) I feel like the UI is kinda Discord-esque on the user page, which I quite like :D I also added a lil function to close all menus, which streamlines all the others instead of manually closing every one of them. As far as I can remember that’s basically it! OH WAIT NO I added a new settings menu! It’s totally different now. :) I organised some things and split it into two sides, regular and advanced. I’m very close to finishing the project! Probably <10 hours left on it. (I’m gonna fix the weird text spacing soon DW lol) I’ll also add a ‘cancel’ option to the New User menu. As usual, if I remember anything else I’ll add it in the comments :D Thanks for reading guys! <3 Happy hacking!"}, {"post_id": 35324, "ts": "2026-07-26T17:20:30Z", "hours": 4.8344, "text": "The grand settings, backend and UX update of ’26! I added a bunch of backup logic behind the custom route fetching! It’s working great now! I then also had to fix a bunch of things with the guest route, because that was all messed up from the settings stuff. I added a new tool! The AI can now run endChat() to stop the user and delete the chat if they ask/say something harmful. I would like to stop it before it reaches my API provider, but I don’t think HC would appreciate me putting a “slurs.txt” file into my repo When the AI calls the function, it fetches the current chat and simply deletes it. It also notifies the user through a simple error system I’ve made. From there, the user can currently create a new chat. I’m prepared to keep it this way for now, since I don’t want to limit other people from using their own local models for whatever they might want. I’m also considering providing the option to rely solely on the model’s guardrails. I’ve just gotta hope nobody wants to test that feature upon shipping… Speaking of which, I’ve massively changed my mind on how I’ll handle that! It’s NOT going to be hosted on-device for the ship, which I know sounds ironic (and frankly, is, given it’s a local AI client), but I don’t want any users saying “this local 0.5B AI is terrible, it must be a bad project!”, and will thus use Ollama’s official cloud API. Also, if my Pi were to receive multiple prompts at once, it would likely… Die. This would A: suck, because I’d need to restart it frequently and B: prevent any users from rating it while it’s off. If it dies at midnight, I won’t know until I wake up! Ollama’s Cloud API has seemingly good uptime (I couldn’t find any stats online, but it seems decent!) and provides me with much larger models, up to 120B (and likely higher) without having to pay. That brings me to one of the largest things I had to figure out! If a user selects an unavailable model (Kimi K2.6, for instance), the server returns an error (which was surprisingly difficult to actually parse/decode!) and fails. I created a system to return that the prompt failed, then check that the fallback model is different from the current model. If so, it warns the user, then goes to the fallback model and regenerates by itself, automatically. The default fallback is Gemma4:31B, since it’s a free Ollama model. I’m providing my own key, so users don’t need to enter their own. If the fallback is the SAME as the current, it’ll show an unexpected error. I also added auto scrolling, although I couldn’t figure it out, so I debugged using Gemini and managed to fix it. It’s a ChatGPT-style scrolling system! It binds you to the bottom while it’s generating, but if you scroll up, it’ll sever that binding, letting you scroll freely. If you want to continue following the AI’s text stream, simply scroll back down! I am considering adding a button to do so as well, since that could be a very easy feature to add and improve overall UX. Oh right, I also fixed the displaying of when the AI uses tools! I found out that the Vercel AI SDK has a new system for it in the newest version and used that instead. I think I added some more stuff, but I can’t really remember it all right now! Most of the time spent was debugging the things I broke while adding new features. I’ll add anything I remember as a comment on this devlog! Also check the changelog if you wanna see more stuff (and specifics!) :) I acknowledge that this is my longest devlog so far, but I just wanted to be thorough! If you have any questions, I’d love to answer them in the comments!!!"}, {"post_id": 34728, "ts": "2026-07-25T18:01:16Z", "hours": 4.57, "text": "URL UPDATEEEE! I FINALLY added custom URLs! I mentioned wanting to do that in the last devlog, but now you CAN! I finished the settings page’s content, including adding an entire auth system (painful) and trying to make the UX nicer (also painful), alongside encountering a TON of other bugs and having to fix those. I also made a system to generate passwords randomly to access the admin controls. It OFFICIALLY works with other APIs! Simply enter the route (e.g, https://ollama.com/api ) and your API key and it’ll handle the rest. This is just the main feature I added, but I added a TON of other things too! ANYWAY! Still on the “//TODO:” list: A TON OF STUFF! I plan to add customisable temperature next, then the into/“welcome” screens, then all the scrolling and animation stuff. I think I can do this in time though, which is a great feeling having coded less recently."}, {"post_id": 31736, "ts": "2026-07-20T11:36:36Z", "hours": 4.4872, "text": "Hey! Added web search integration, a settings menu, and I’m working on an admin page! I also added text formatting, which was a pain to test with the 0.5B model because of how disobedient it can be I plan to allow the user to change the API route (and key) through a locked admin page. I’m working through security issues with that, and spent a fair amount of time thinking of how to fix that. My current plan is: Generate a secret “key” during setup that unlocks the admin page. When the user visits the page, ask them for the key to submit the changes. If the user hasn’t been authenticated, do not allow them to change settings. The main concern is that they could use devtools to just toggle the variable, hence fetching it directly within the function. I think it’ll work, but I’ll need to do some testing. :) I also added a little icon if the user hasn’t got a Tavily API key for web search functionality. The image currently shows the route editable within the client side. I might go with that and have the same logic behind it on the home page instead of a separate /admin page. In all honesty, I’m kinda overwhelmed. This is the biggest project I’ve ever made, and I feel like I keep accidentally switching features and missing stuff out. Anyway, it’s still really fun, so I’m still going for that Flipper Zero and TRMNL kit! :D Thanks for reading!!!"}, {"post_id": 30631, "ts": "2026-07-18T11:01:58Z", "hours": 3.1933, "text": "MASSIVE overhaul of the backend! As you may recall, I previously spent a few hours trying (and failing) to implement tool calling. I did a bit of research (Google Gemini helped with the research portion!) and found that the Vercel AI SDK has the ability to stream text while tool calling, with WAY less code than doing it manually! The great conversion of ’26… That SUCKED!!! It worked great until I noticed that the database no longer worked… Anyway, as of 5 minutes ago, I just fixed that! I completely removed my local “messages” array and replaced it with chat.messages. I LOVE THE VERCEL AI SDK!! It’s amazing. I just need some tool ideas of what to add.. (Currently, there’s just a short pause and a gap above the messages to indicate a tool was used, but I plan to replace that with a nice “Tool used: ____” now! I also did a TON of other things, including fixing many bugs with the new user system, but that seems to OFFICIALLY be working now!! Only took me 20+ hours to get a working AI client T_T But now I can start getting it NICE! :) I’ll improve UI, add a TON of pages, etc! If you have any default tool suggestions, please do give them."}, {"post_id": 29011, "ts": "2026-07-15T17:39:29Z", "hours": 3.2464, "text": "I FINISHED THE USER SYSTEM after a ton of uhh.. Pain and suffering! :D JK, it wasn’t too bad. I did, however encounter a loop of failing code that I couldn’t figure out! Turns out, my localStorage thingy was broken! I accidentally set it wrong! Anyway, after finally fixing that, I kept going! I removed the DB from github too lol. Unfortunately I’ve made no UI changes yet, so there’s really nothing interesting to see. AI usage: I debugged a few errors using Gemini, finding the solution. Still no AI code was used. I found that I could use return functions with $effect runes, which I somehow missed before! That came in handy with the fancy system I added to not entirely break the website if you leave during a stream. :) For some reason, the page is UNBELIEVABLY slow to initially load on development mode, so that sucks… It works instantly on release though, so that’s great! I added a few new messages to the main screen. Some backups too, one of which is visible below. It tells you instantly what profile you’re on. I’ll consider varying that each time like most AI websites do, but I’ll make sure to keep it as small as possible. I have a LOT to do on my Trello board still, which is ironic. The more work I do, the more issues I find! The board gets longer each devlog T_T Somewhat interesting update: I’m gonna add some docs (likely on Github, unless I feel inclined to code them!) in which there’ll be an error code section. I’m making my own error codes, specific to the website. :) Currently got: A1: user error (not logged in, corrupt data, etc.) U1: unknown error M1: unavailable model P1: invalid prompt I plan to maybe add profanity filtering to the prompt validity checker (which I’ve also yet to implement)! I can also make a nice customisable theme across pages. Exciting devlog, because now I can get back onto the FUN STUFF!!! No more ‘why account no work T_T’ stuff! Thanks for reading, happy coding!"}, {"post_id": 28412, "ts": "2026-07-14T17:27:24Z", "hours": 4.5658, "text": "More work! :D As the image shows, I just finished implementing ‘guest’ mode and have started on the user profile system (on the right) I plan to: Finish adding it, fixing the UI, etc. Add it to the setup process :O Anyway, other things (massively summarised to fit a devlog… If you want to know more, check the repo!) I designed an icon! That wasn’t logged for time. :) I implemented the logo (it doubles as a guest profile picture thing on the top right!) It’s a bit generic, very “AI company”-esque, but still - pretty nice for my first Inkscape logo :D I’ve added some nice icons, as you can see in the sidebar. I forced alignment of the title, so that’s fixed! :) I fixed the bug where the user could enter a prompt without having a user object assigned to them. For Guest detection, I basically just say “if(!user.userId)”, since the Guest is the only profile that will NEVER have an automatically assigned user ID. I’ve totally revamped the user system: It’s now a JSON object called user, with various items like userName, userId, and userPlainNum. PlainNum is for ordering, and I was pretty sure I had something in mind, but I can’t remember why I added it so it might be removed. I’m at 571 lines of code! I made several new JS backend files for this user system, so I’m very excited to introduce it! I am posting this devlog only part of the way through coding that system. Suffice to say my Trello board is FULL! Also, heh… Embarrassing story: I kinda committed the database :) BUT! It wasn’t public anyway, so it’s just my debugging “uhhh… hello? HELLO??? Are you there?” prompts. Nothing secret. Also probably best that it happens during development and before I have users! Anyway, since I’m HORRIBLE with Git commands, I used Gemini to help fix it. Hopefully that worked. As I said in the AI declaration thingy, none of the code is copy-pasted from AI, and is all Capy-written :D (PS, I probably skipped over 500 tiny bug fixes and a few bigger features, but we’d both be here for a while if I hadn’t.) Thanks so much for reading my devlog! Happy coding!"}, {"post_id": 22863, "ts": "2026-07-05T14:16:18Z", "hours": 5.1, "text": "I added a BUNCH of stuff! I was so locked in that I forgot to make a devlog! Let’s make this one shorter: I added the left panel I added multiple new backend files for the DATABASE!!! I added a database (AceBase!) I improved the UI I’m testing with another AI model for now Okay, onto the detailed stuff. AceBase! It’s a really nice database package thingy! It has FireStore-like syntax but without the annoying stuff. :) I’ll definitely use it in future projects too! Anyway, using that I made a system to create, fetch, etc new chats! Now they’re stored in the database alongside their associated crypto-UUID key. That’s passed as a search parameter (kinda like YouTube videos!) and fetched, then the messages are loaded. I did way more that honestly can’t fit into this devlog, so that’s the main stuff out of the way. :) To do: UI! It’s still got some smaller issues (the title is off-centre :O) Fix a BUNCH of backend bugs Add auto-chat naming (just the first few words of the user’s prompt for now :D) Add a user profile system (like Netflix :O) Add a “guest mode” account. Make the URL customisable (in case someone’s hosting at a different address) Make a customisable system prompt! Decide what models are suitable for release. Add some nice (lucide.dev) icons! And a BUNCH more! Thanks for reading! :D Happy coding!"}, {"post_id": 22148, "ts": "2026-07-04T13:42:08Z", "hours": 4.6039, "text": "Devlog #2! This one was a challenge… I started by spending an hour or two trying to figure out a nice system for function calling, before coming to the sad realisation that it wouldn’t be very useful. I then experimented with AI models, and realised that SmoLLM is a nice balance between intelligence and size! I also discovered that Ollama (by default) doesn’t allow two prompts at once. I plan to keep this functionality, despite its obvious drawbacks. If I didn’t have it in place, two users using different (or even the same) models could totally crash the Pi. That would leave the site down for hours on end if I’m not available to fix it. With Ollama’s prevention, worst case scenario: one user waits a few extra seconds. Anyway, I also started working on the UI! I’ve also implemented a nice system that fetches the available models, which seems to work great! I’m currently getting a nice input box. The images of UI from the last devlog were the Figma designs, but now it’s time to actually make them in HTML and CSS! I’ve done a lot of other backend stuff, playing around with various experiments, but now I’m back to working on the frontend for now. One last thing: I’m still deciding how the website will work. I might add Firebase authentication. This would allow easy saving of chats. It would also, however make the development experience more complicated and the app itself less streamlined. Another concern is that people run local AI for security, so posting everything they’ve said off to Google is a little pointless. I’ve got two other options: local JSON (or SQL :P) database, and no storage at all. I think the SQL database will have to be made. :) Thanks so much for reading the devlog! Sorry I made it so long… Also! A feature I’m super proud of! The title card at the top of the image isn’t just a title! Each word lights up when you hover. If you click, it takes you to a page detailing the feature of the site. (E.g, ‘lighter’ will take you to the page describing how I made the site efficient and lightweight!) Thanks for reading!"}, {"post_id": 17631, "ts": "2026-06-28T14:44:42Z", "hours": 0.4275, "text": "First devlog! I FINALLY got the text streaming working! Unfortunately, Wakatime didn’t work for the first almost 2 hours of coding! Oh well! Not much I can do XD I am really happy with it! Currently running Qwen 2.5 coder 3B, which works great! This is all running on my Raspberry Pi 5 4gb (which I got from the last Hackclub event!!!), so I’m super grateful that my projects could get me such amazing hardware, thank you Hackclub! ❤️"}]...
|
Title: LighterWebUI by @Capy | Stardance
Devlogs: Title: LighterWebUI by @Capy | Stardance
Devlogs:
First devlog! I FINALLY got the text streaming working! Unfortunately, Wakatime didn’t work for the first almost 2 hours of coding! Oh well! Not much I can do XD I am really happy with it! Currently running Qwen 2.5 coder 3B, which works great! This is all running on my Raspberry Pi 5 4gb (which I got from the last Hackclub event!!!), so I’m super grateful that my projects could get me such amazing hardware, thank you Hackclub! ❤️
Devlog #2! This one was a challenge… I started by spending an hour or two trying to figure out a nice system for function calling, before coming to the sad realisation that it wouldn’t be very useful. I then experimented with AI models, and realised that SmoLLM is a nice balance between intelligence and size! I also discovered that Ollama (by default) doesn’t allow two prompts at once. I plan to keep this functionality, despite its obvious drawbacks. If I didn’t have it in place, two users using different (or even the same) models could totally crash the Pi. That would leave the site down for hours on end if I’m not available to fix it. With Ollama’s prevention, worst case scenario: one user waits a few extra seconds. Anyway, I also started working on the UI! I’ve also implemented a nice system that fetches the available models, which seems to work great! I’m currently getting a nice input box. The images of UI from the last devlog were the Figma designs, but now it’s time to actually make them in HTML and CSS! I’ve done a lot of other backend stuff, playing around with various experiments, but now I’m back to working on the frontend for now. One last thing: I’m still deciding how the website will work. I might add Firebase authentication. This would allow easy saving of chats. It would also, however make the development experience more complicated and the app itself less streamlined. Another concern is that people run local AI for security, so posting everything they’ve said off to Google is a little pointless. I’ve got two other options: local JSON (or SQL :P) database, and no storage at all. I think the SQL database will have to be made. :) Thanks so much for reading the devlog! Sorry I made it so long… Also! A feature I’m super proud of! The title card at the top of the image isn’t just a title! Each word lights up when you hover. If you click, it takes you to a page detailing the feature of the site. (E.g, ‘lighter’ will take you to the page describing how I made the site efficient and lightweight!) Thanks for reading!
I added a BUNCH of stuff! I was so locked in that I forgot to make a devlog! Let’s make this one shorter: I added the left panel I added multiple new backend files for the DATABASE!!! I added a database (AceBase!) I improved the UI I’m testing with another AI model for now Okay, onto the detailed stuff. AceBase! It’s a really nice database package thingy! It has FireStore-like syntax but without the annoying stuff. :) I’ll definitely use it in future projects too! Anyway, using that I made a system to create, fetch, etc new chats! Now they’re stored in the database alongside their associated crypto-UUID key. That’s passed as a search parameter (kinda like YouTube videos!) and fetched, then the messages are loaded. I did way more that honestly can’t fit into this devlog, so that’s the main stuff out of the way. :) To do: UI! It’s still got some smaller issues (the title is off-centre :O) Fix a BUNCH of backend bugs Add auto-chat naming (just the first few words of the user’s prompt for now :D) Add a user profile system (like Netflix :O) Add a “guest mode” account. Make the URL customisable (in case someone’s hosting at a different address) Make a customisable system prompt! Decide what models are suitable for release. Add some nice (lucide.dev) icons! And a BUNCH more! Thanks for reading! :D Happy coding!
More work! :D As the image shows, I just finished implementing ‘guest’ mode and have started on the user profile system (on the right) I plan to: Finish adding it, fixing the UI, etc. Add it to the setup process :O Anyway, other things (massively summarised to fit a devlog… If you want to know more, check the repo!) I designed an icon! That wasn’t logged for time. :) I implemented the logo (it doubles as a guest profile picture thing on the top right!) It’s a bit generic, very “AI company”-esque, but still - pretty nice for my first Inkscape logo :D I’ve added some nice icons, as you can see in the sidebar. I forced alignment of the title, so that’s fixed! :) I fixed the bug where the user could enter a prompt without having a user object assigned to them. For Guest detection, I basically just say “if(!user.userId)”, since the Guest is the only profile that will NEVER have an automatically assigned user ID. I’ve totally revamped the user system: It’s now a JSON object called user, with various items like userName, userId, and userPlainNum. PlainNum is for ordering, and I was pretty sure I had something in mind, but I can’t remember why I added it so it might be removed. I’m at 571 lines of code! I made several new JS backend files for this user system, so I’m very excited to introduce it! I am posting this devlog only part of the way through coding that system. Suffice to say my Trello board is FULL! Also, heh… Embarrassing story: I kinda committed the database :) BUT! It wasn’t public anyway, so it’s just my debugging “uhhh… hello? HELLO??? Are you there?” prompts. Nothing secret. Also probably best that it happens during development and before I have users! Anyway, since I’m HORRIBLE with Git commands, I used Gemini to help fix it. Hopefully that worked. As I said in the AI declaration thingy, none of the code is copy-pasted from AI, and is all Capy-written :D (PS, I probably skipped over 500 tiny bug fixes and a few bigger features, but we’d both be here for a while if I hadn’t.) Thanks so much for reading my devlog! Happy coding!
I FINISHED THE USER SYSTEM after a ton of uhh.. Pain and suffering! :D JK, it wasn’t too bad. I did, however encounter a loop of failing code that I couldn’t figure out! Turns out, my localStorage thingy was broken! I accidentally set it wrong! Anyway, after finally fixing that, I kept going! I removed the DB from github too lol. Unfortunately I’ve made no UI changes yet, so there’s really nothing interesting to see. AI usage: I debugged a few errors using Gemini, finding the solution. Still no AI code was used. I found that I could use return functions with $effect runes, which I somehow missed before! That came in handy with the fancy system I added to not entirely break the website if you leave during a stream. :) For some reason, the page is UNBELIEVABLY slow to initially load on development mode, so that sucks… It works instantly on release though, so that’s great! I added a few new messages to the main screen. Some backups too, one of which is visible below. It tells you instantly what profile you’re on. I’ll consider varying that each time like most AI websites do, but I’ll make sure to keep it as small as possible. I have a LOT to do on my Trello board still, which is ironic. The more work I do, the more issues I find! The board gets longer each devlog T_T Somewhat interesting update: I’m gonna add some docs (likely on Github, unless I feel inclined to code them!) in which there’ll be an error code section. I’m making my own error codes, specific to the website. :) Currently got: A1: user error (not logged in, corrupt data, etc.) U1: unknown error M1: unavailable model P1: invalid prompt I plan to maybe add profanity filtering to the prompt validity checker (which I’ve also yet to implement)! I can also make a nice customisable theme across pages. Exciting devlog, because now I can get back onto the FUN STUFF!!! No more ‘why account no work T_T’ stuff! Thanks for reading, happy coding!
MASSIVE overhaul of the backend! As you may recall, I previously spent a few hours trying (and failing) to implement tool calling. I did a bit of research (Google Gemini helped with the research portion!) and found that the Vercel AI SDK has the ability to stream text while tool calling, with WAY less code than doing it manually! The great conversion of ’26… That SUCKED!!! It worked great until I noticed that the database no longer worked… Anyway, as of 5 minutes ago, I just fixed that! I completely removed my local “messages” array and replaced it with chat.messages. I LOVE THE VERCEL AI SDK!! It’s amazing. I just need some tool ideas of what to add.. (Currently, there’s just a short pause and a gap above the messages to indicate a tool was used, but I plan to replace that with a nice “Tool used: ____” now! I also did a TON of other things, including fixing many bugs with the new user system, but that seems to OFFICIALLY be working now!! Only took me 20+ hours to get a working AI client T_T But now I can start getting it NICE! :) I’ll improve UI, add a TON of pages, etc! If you have any default tool suggestions, please do give them.
Hey! Added web search integration, a settings menu, and I’m working on an admin page! I also added text formatting, which was a pain to test with the 0.5B model because of how disobedient it can be I plan to allow the user to change the API route (and key) through a locked admin page. I’m working through security issues with that, and spent a fair amount of time thinking of how to fix that. My current plan is: Generate a secret “key” during setup that unlocks the admin page. When the user visits the page, ask them for the key to submit the changes. If the user hasn’t been authenticated, do not allow them to change settings. The main concern is that they could use devtools to just toggle the variable, hence fetching it directly within the function. I think it’ll work, but I’ll need to do some testing. :) I also added a little icon if the user hasn’t got a Tavily API key for web search functionality. The image currently shows the route editable within the client side. I might go with that and have the same logic behind it on the home page instead of a separate /admin page. In all honesty, I’m kinda overwhelmed. This is the biggest project I’ve ever made, and I feel like I keep accidentally switching features and missing stuff out. Anyway, it’s still really fun, so I’m still going for that Flipper Zero and TRMNL kit! :D Thanks for reading!!!
URL UPDATEEEE! I FINALLY added custom URLs! I mentioned wanting to do that in the last devlog, but now you CAN! I finished the settings page’s content, including adding an entire auth system (painful) and trying to make the UX nicer (also painful), alongside encountering a TON of other bugs and having to fix those. I also made a system to generate passwords randomly to access the admin controls. It OFFICIALLY works with other APIs! Simply enter the route (e.g, https://ollama.com/api ) and your API key and it’ll handle the rest. This is just the main feature I added, but I added a TON of other things too! ANYWAY! Still on the “//TODO:” list: A TON OF STUFF! I plan to add customisable temperature next, then the into/“welcome” screens, then all the scrolling and animation stuff. I think I can do this in time though, which is a great feeling having coded less recently.
The grand settings, backend and UX update of ’26! I added a bunch of backup logic behind the custom route fetching! It’s working great now! I then also had to fix a bunch of things with the guest route, because that was all messed up from the settings stuff. I added a new tool! The AI can now run endChat() to stop the user and delete the chat if they ask/say something harmful. I would like to stop it before it reaches my API provider, but I don’t think HC would appreciate me putting a “slurs.txt” file into my repo When the AI calls the function, it fetches the current chat and simply deletes it. It also notifies the user through a simple error system I’ve made. From there, the user can currently create a new chat. I’m prepared to keep it this way for now, since I don’t want to limit other people from using their own local models for whatever they might want. I’m also considering providing the option to rely solely on the model’s guardrails. I’ve just gotta hope nobody wants to test that feature upon shipping… Speaking of which, I’ve massively changed my mind on how I’ll handle that! It’s NOT going to be hosted on-device for the ship, which I know sounds ironic (and frankly, is, given it’s a local AI client), but I don’t want any users saying “this local 0.5B AI is terrible, it must be a bad project!”, and will thus use Ollama’s official cloud API. Also, if my Pi were to receive multiple prompts at once, it would likely… Die. This would A: suck, because I’d need to restart it frequently and B: prevent any users from rating it while it’s off. If it dies at midnight, I won’t know until I wake up! Ollama’s Cloud API has seemingly good uptime (I couldn’t find any stats online, but it seems decent!) and provides me with much larger models, up to 120B (and likely higher) without having to pay. That brings me to one of the largest things I had to figure out! If a user selects an unavailable model (Kimi K2.6, for instance), the server returns an error (which was surprisingly difficult to actually parse/decode!) and fails. I created a system to return that the prompt failed, then check that the fallback model is different from the current model. If so, it warns the user, then goes to the fallback model and regenerates by itself, automatically. The default fallback is Gemma4:31B, since it’s a free Ollama model. I’m providing my own key, so users don’t need to enter their own. If the fallback is the SAME as the current, it’ll show an unexpected error. I also added auto scrolling, although I couldn’t figure it out, so I debugged using Gemini and managed to fix it. It’s a ChatGPT-style scrolling system! It binds you to the bottom while it’s generating, but if you scroll up, it’ll sever that binding, letting you scroll freely. If you want to continue following the AI’s text stream, simply scroll back down! I am considering adding a button to do so as well, since that could be a very easy feature to add and improve overall UX. Oh right, I also fixed the displaying of when the AI uses tools! I found out that the Vercel AI SDK has a new system for it in the newest version and used that instead. I think I added some more stuff, but I can’t really remember it all right now! Most of the time spent was debugging the things I broke while adding new features. I’ll add anything I remember as a comment on this devlog! Also check the changelog if you wanna see more stuff (and specifics!) :) I acknowledge that this is my longest devlog so far, but I just wanted to be thorough! If you have any questions, I’d love to answer them in the comments!!!
# I FINISHED THE MAIN PAGE’S FEATURES!!! I added a create and remove user function. I also entirely overhauled how they’re stored. Time for the boring dev talk: Before, the DB ref was (‘/LighterWebUI/users/’) and now it’s (‘/LighterWebUI/users/${userId}’), meaning I can modify them as I need without having to first fetch the array, modify it and then re-send it to the db. It’s a TINY bit more efficient, and a lot easier to use. Also, STATISTICS! I took a few measurements, here are the results. <100MB idle (about 95MB) Idling with 10 browser tabs running it took it way up to… 105MB According to my very thorough single Google search, the average idle for OpenWebUI is 400-650MB, making mine 4-6x less RAM usage! I also improved some of the logic surrounding the presets for API endpoints. UX improvements too! I MASSIVELY improved the UI of certain things like the user profile system, which now doesn’t display the currently selected profile as an option (not super significant, but nice). I also added the option to add new users. The chats list now (finally) shows which chat you’re active in. It highlights it in a lighter gray. I also made it so that when you use the “override model selection”, the options disappear so you don’t have an empty element :) I fixed the colours and improved continuity across colourful elements (before I had like 4 different blue colours that were basically identical XD) I feel like the UI is kinda Discord-esque on the user page, which I quite like :D I also added a lil function to close all menus, which streamlines all the others instead of manually closing every one of them. As far as I can remember that’s basically it! OH WAIT NO I added a new settings menu! It’s totally different now. :) I organised some things and split it into two sides, regular and advanced. I’m very close to finishing the project! Probably <10 hours left on it. (I’m gonna fix the weird text spacing soon DW lol) I’ll also add a ‘cancel’ option to the New User menu. As usual, if I remember anything else I’ll add it in the comments :D Thanks for reading guys! <3 Happy hacking!
HUGE devlog! I made a TON of changes, improvements, etc! First, mobile compatibility! The user can now change the system prompt. I added a nice (basic) loading screen . I improved a big database inefficiency with the messaging system. (before I continue, please consider the fact that it was probably 22:30 when I coded this, and I was likely somewhat delirious), the messaging system would take the current array from the DB, add the new messages, and replace the entire file. FOR EVERY MESSAGE. This is heavy on RAM, slow and way more operations than are needed, also getting slower the longer the chat is. Now, when the user sends a message and the AI replies, that pair of messages get sent over and pushed to the chat. 2 messages, not the entire chat! I finally added the Lighter, Web, and UI pages. I had a tag that bound to a routeSelect variable. This routeSelect variable would determine the apiRoute. The fix was to just get rid of the routeSelect and bind the to the apiRoute. (whoops!) OH! Something I totally almost forgot to mention! I made the starting pages! You now follow this flow: Press the PEAK start button, grab your admin code, get prompted to set up Ollama (or the cloud API), then enter your username, then finally, the last page gives you the same glorious button to finish the tutorial/intro, alongside the repo link. I also edited the README a bunch to add instructions for setup. I’m opting to recommend Bun over Node for running it. Also! I tested more for the RAM usage. I found that (after rebooting my Pi) I managed to get <70MB usage at idle. That is INSANE! This will - of course fluctuate with the number of concurrent users/prompts, but is really impressive nonetheless. I also tested in on my Pi Z2W to make sure it worked. Start-to-finish, I found a few missing dependencies in the package.json, which I quickly added. Now, the project can be downloaded and run in just 5 terminal commands! Finally, I ran a code review thingy using VSCode’s AI tool (I made sure to tell it not to generate code!) and it found a few minor bugs, so I fixed the main ones. I also ignored some because they’re incredibly unlikely to happen in general, let alone during the initial ship period. I’d rather not waste time fixing things like “what if the server dies midway through this exact token output and that goes kaboom” or whatever lol. Oh, one last thing, I removed my custom alerts. They were nice, but also very useless… I replaced them with the browser’s own confirmation dialog, since it’s simpler and honestly nicer to use! Also 100% cross-platform. Two little sub-notes, I can’t show all pages of the setup because of the attachment limit on Stardance, so you’ll just have to run the project yourself to see it (hehehe), and secondly, don’t worry, I’ll make sure to change the password shown in that image. I’m gonna delete the database entirely again before I ship! Anyway! Sorry again for the long devlog, I just have so much to say! I also omitted a TON of smaller optimisations/changes again, but they’re generally irrelevant to the user’s experience, and I doubt anyone would want to read a 10,000 word devlog like “and then I added another pixel to the offset… Then removed it… Then added it back…” If I remember something less brain-meltingly boring, I’ll make sure to add it! (P.S, this is me coming back and editing the project because I’d WAY surpassed the character limit!) Thanks so much for reading what’s possibly one of my last devlogs! Happy hacking everyone! I MIGHT see you in the next one!
Polished bugs! This might be my last devlog! I plan to write quite a specific ship note for the users telling them what they may and may not do. Thanks so much to everyone who was here from the start of LighterWebUI! I’ve really enjoyed this project and I’m looking forward to the next one! I’ve got some ideas, so keep an eye out! Anyway, I removed some excess logs, polished some code layout, just made the whole thing a little nicer. I also started hosting at https://lighterwebui.capydesigns.com ! I may have to take it down a couple times. I’ve made 3 profiles with a chat in each of them that the users can use to test the site. Bye guys! <3 Happy hacking!
Fixed final bugs before shipping! I sent the project to some friends to check that everything worked as expected. It didn’t. I fixed what didn’t and now I’m READY TO SHIP!!!! Thank you guys for reading all these devlogs! <3
Ships:
I made LighterWebUI, a lightweight local AI client based on Ollama. It uses as little as 70MB of RAM at idle, over 6x less than OpenWebUI, making it easy to run on a Pi Zero 2 W (512MB RAM). It uses Ollama, a well-known way to run inference locally. The profile system is similar to Neflix. IMPORTANT: For this demo, the AI models are run through an API, not locally, as I’m not able to run large LLMs reliably enough on my hardware. Please don’t use any swearing, slurs or otherwise bad language with the AI. You may create and delete your own chats and users, but please leave the existing ones as they are. The stack: SvelteKit frontend and backend, Ollama for inference, Acebase local (NoSQL) database....
|
1793220704.936078
|
1793307104.936078
|
|
23596
|
Chess.com Style Game Reviewer by @cziwu2010 | Star Chess.com Style Game Reviewer by @cziwu2010 | Stardance...
|
cziwu2010
|
1
|
30.32
|
159
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T10:24:39Z", "hours": 30.0, "multiplier": 6.32, "payout": 159, "blessing": "neutral", "text": "My attempt at building a chess.com style reviewer. It uses python for the backend and pyside6 for the frontend and Stockfish for the engine. The hardest part was learning the chess concepts and understanding chess computation. Also this is my first project with a frontend so I’m also looking forward to programme more apps with frontend. Just download and extract the zip file to run the application (Note that windows will pop up the “Windows protected your PC” window bcs I dont have a Code Signing Certificate, if that happens just click “Run Anyway”. Msg me on slack if you have feedback! (this is the only screenshot i have, so sry it looks all the same)", "repo": "https://github.com/cziwu12/chess.com-style-reviewer", "demo": "https://github.com/cziwu12/chess.com-style-reviewer/releases/tag/v1.0.0"}]...
|
[{"post_id": 31175, "ts": "202 [{"post_id": 31175, "ts": "2026-07-19T11:20:37Z", "hours": 0.3222, "text": "Ok so apparently I have to write a final devlog before shipping so here’s what my next steps for the reviewer. 1. Improve the Game Accuracy and Classification function. 2. Find critical moments/moves where it heavily affected the game’s outcome. As for the frontend: Add next and previous move buttons. Add an interactable chess board where the player can change a move to see the different outcome. Obviously there’s more but these are the step ill prob take next."}, {"post_id": 31153, "ts": "2026-07-19T10:13:41Z", "hours": 3.2336, "text": "Almost done! My attempt to program a chess.com style reviewer. It has the basic stats like evaluation, Classification, WDL and move accuracy. It also contains game accuracy and a SVG board where you can see your moves. It’s currently in its rawest form and I’ll improve the accuracy of the reviewer and add more useful feature to it."}, {"post_id": 29393, "ts": "2026-07-16T10:06:34Z", "hours": 2.7267, "text": "Frontend 90% done. Using PySide6"}, {"post_id": 28350, "ts": "2026-07-14T15:42:45Z", "hours": 1.0925, "text": "Last but not least, the UI. I’ll be coding it using PySide6. Im currently still learning how to use the language."}, {"post_id": 27660, "ts": "2026-07-13T12:59:03Z", "hours": 8.1008, "text": "Ok i dont really have a photo rn (using phone to type the devlog) but i’ve formatted, simplified and and created files to store all of the functions. All that’s left to do is add GUI. Ill prob add a photo tmr"}, {"post_id": 24450, "ts": "2026-07-08T00:38:44Z", "hours": 13.8867, "text": "I would say I’m 85% done with the backend of the chess reviewer. I added move and game accuracy, WDL (Win/Draw/Loss) probability and some tactics detection like hanging pieces, loose pieces, and pieces en prise. I even managed to find publicly available equations that yield results similar to Chess.com. My next steps would be adding the basic classifications and tactics detection before adding gui."}, {"post_id": 16315, "ts": "2026-06-26T15:29:56Z", "hours": 0.5181, "text": "in progress. Aiming to build a chess.com style reviewer. Using python-chess and stockfish to build this. Also any tutorials on the python chess lib other than the documentation? thanks"}]...
|
Title: Chess.com Style Game Reviewer by @cziwu2010 Title: Chess.com Style Game Reviewer by @cziwu2010 | Stardance
Devlogs:
in progress. Aiming to build a chess.com style reviewer. Using python-chess and stockfish to build this. Also any tutorials on the python chess lib other than the documentation? thanks
I would say I’m 85% done with the backend of the chess reviewer. I added move and game accuracy, WDL (Win/Draw/Loss) probability and some tactics detection like hanging pieces, loose pieces, and pieces en prise. I even managed to find publicly available equations that yield results similar to Chess.com. My next steps would be adding the basic classifications and tactics detection before adding gui.
Ok i dont really have a photo rn (using phone to type the devlog) but i’ve formatted, simplified and and created files to store all of the functions. All that’s left to do is add GUI. Ill prob add a photo tmr
Last but not least, the UI. I’ll be coding it using PySide6. Im currently still learning how to use the language.
Frontend 90% done. Using PySide6
Almost done! My attempt to program a chess.com style reviewer. It has the basic stats like evaluation, Classification, WDL and move accuracy. It also contains game accuracy and a SVG board where you can see your moves. It’s currently in its rawest form and I’ll improve the accuracy of the reviewer and add more useful feature to it.
Ok so apparently I have to write a final devlog before shipping so here’s what my next steps for the reviewer. 1. Improve the Game Accuracy and Classification function. 2. Find critical moments/moves where it heavily affected the game’s outcome. As for the frontend: Add next and previous move buttons. Add an interactable chess board where the player can change a move to see the different outcome. Obviously there’s more but these are the step ill prob take next.
Ships:
My attempt at building a chess.com style reviewer. It uses python for the backend and pyside6 for the frontend and Stockfish for the engine. The hardest part was learning the chess concepts and understanding chess computation. Also this is my first project with a frontend so I’m also looking forward to programme more apps with frontend. Just download and extract the zip file to run the application (Note that windows will pop up the “Windows protected your PC” window bcs I dont have a Code Signing Certificate, if that happens just click “Run Anyway”. Msg me on slack if you have feedback! (this is the only screenshot i have, so sry it looks all the same)...
|
1793220851.1575696
|
1793307251.1575696
|
|
23602
|
QueueIt by @abhaysudhir | Stardance
|
abhaysudhir
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T23:52:28Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? QueueIt is a Chrome extension that adds a message queue to AI chat. Normally you send one message, then sit and wait while the model types out its answer before you can send the next. QueueIt lets you keep going: while Claude is replying, you hit Enter and your message lines up as a chip above the composer instead of getting sent. The moment Claude finishes, your next queued message sends on its own. You can line up several follow-ups, walk away, and come back to a full thread of answers. The queue is saved per site, so it survives a page refresh or a browser restart. It works on Claude today and is built model-agnostic, so other chat sites are each just a small adapter away. What was challenging? Three things main things. First, claude.ai has its own Enter-to-send handler, so to queue instead of send I had to listen on the document in the capture phase and stop the event before the page ever saw it. Second, knowing when the AI is actually “busy”: instead of guessing at network state, I watch the DOM for Claude’s Stop button, which is reliable and survives backend changes. Third, sending a queued message has to look like a real user action. Claude’s composer is a ProseMirror editor, so I write text through the input events it expects and click the real send button rather than faking a submit. Testing was its own challenge, since the extension only runs on a logged-in site. I built mock chat pages and a Playwright test that loads the actual unpacked extension into a real Chromium and runs the whole flow. What are you proud of? The clean model-agnostic design: all the behavior is one engine, and a new site is a single adapter entry (composer, send, and stop selectors) plus a manifest match, not a rewrite. I am also proud that it is genuinely tested end to end in a real browser, not just unit-mocked, including the survives-a-refresh case, and that it has zero runtime dependencies. What should people know so they can test it? It loads as an unpacked extension, no build step: Clone the repo, open chrome://extensions, turn on Developer mode, click Load unpacked, and pick the folder. Open claude.ai. Send a message, and while Claude is replying, type another and press Enter. It queues above the box as a chip. When Claude finishes, watch it auto-send. Refresh the page mid-queue to see the queue survive. It is, however, easier to watch the demo video as it gives you a clear understanding of how QueueIt works.", "repo": "https://github.com/abhaysudhir/QueueIt", "demo": "https://cleanshot.com/share/8Y8kLtjz"}]...
|
[{"post_id": 13546, "ts": "202 [{"post_id": 13546, "ts": "2026-06-22T05:18:50Z", "hours": 2.8508, "text": "QueueIt: the missing queue button for AI chat You know the dead time when Claude is typing out a long answer and you already know your next two or three follow-ups? You just sit there so you can fire them off one at a time. That always bugged me. QueueIt kills that wait. While the AI is mid-reply, you hit Enter and your message lines up as a chip above the box instead of getting dropped. The moment the model finishes, the next one sends on its own. Line up your prompts, walk away, come back to a full thread of answers. What’s working so far Enter queues while the AI is generating, and sends normally when it’s idle, so it never gets in your way Queued messages show as removable chips above the composer, with an auto-send toggle The queue survives a refresh (saved in chrome.storage ), so a reload doesn’t wipe your plans Works on Claude today, built model-agnostic so new chat sites are each just one small adapter away The fun part claude.ai has its own Enter-to-send handler, so to beat it I listen on the document in the capture phase and stopImmediatePropagation before the page ever sees the keystroke. And instead of guessing when the AI is “busy”, I just watch the DOM for its Stop button. The whole flow is tested end to end in real Chrome with Playwright, including the survives-a-refresh case, on two different composer shapes. Next up Integrate ChatGPT Drag to reorder queued messages Inline editing of a queued message before it sends More site adapters: Gemini, DeepSeek, Kimi Saved snippets / templates, send pacing, and keyboard shortcuts It loads as an unpacked extension straight from the repo. Try it and tell me what you’d queue up first."}]...
|
Title: QueueIt by @abhaysudhir | Stardance
Devlog Title: QueueIt by @abhaysudhir | Stardance
Devlogs:
QueueIt: the missing queue button for AI chat You know the dead time when Claude is typing out a long answer and you already know your next two or three follow-ups? You just sit there so you can fire them off one at a time. That always bugged me. QueueIt kills that wait. While the AI is mid-reply, you hit Enter and your message lines up as a chip above the box instead of getting dropped. The moment the model finishes, the next one sends on its own. Line up your prompts, walk away, come back to a full thread of answers. What’s working so far Enter queues while the AI is generating, and sends normally when it’s idle, so it never gets in your way Queued messages show as removable chips above the composer, with an auto-send toggle The queue survives a refresh (saved in chrome.storage ), so a reload doesn’t wipe your plans Works on Claude today, built model-agnostic so new chat sites are each just one small adapter away The fun part claude.ai has its own Enter-to-send handler, so to beat it I listen on the document in the capture phase and stopImmediatePropagation before the page ever sees the keystroke. And instead of guessing when the AI is “busy”, I just watch the DOM for its Stop button. The whole flow is tested end to end in real Chrome with Playwright, including the survives-a-refresh case, on two different composer shapes. Next up Integrate ChatGPT Drag to reorder queued messages Inline editing of a queued message before it sends More site adapters: Gemini, DeepSeek, Kimi Saved snippets / templates, send pacing, and keyboard shortcuts It loads as an unpacked extension straight from the repo. Try it and tell me what you’d queue up first.
Ships:
What did you make? QueueIt is a Chrome extension that adds a message queue to AI chat. Normally you send one message, then sit and wait while the model types out its answer before you can send the next. QueueIt lets you keep going: while Claude is replying, you hit Enter and your message lines up as a chip above the composer instead of getting sent. The moment Claude finishes, your next queued message sends on its own. You can line up several follow-ups, walk away, and come back to a full thread of answers. The queue is saved per site, so it survives a page refresh or a browser restart. It works on Claude today and is built model-agnostic, so other chat sites are each just a small adapter away. What was challenging? Three things main things. First, claude.ai has its own Enter-to-send handler, so to queue instead of send I had to listen on the document in the capture phase and stop the event before the page ever saw it. Second, knowing when the AI is actually “busy”: instead of guessing at network state, I watch the DOM for Claude’s Stop button, which is reliable and survives backend changes. Third, sending a queued message has to look like a real user action. Claude’s composer is a ProseMirror editor, so I write text through the input events it expects and click the real send button rather than faking a submit. Testing was its own challenge, since the extension only runs on a logged-in site. I built mock chat pages and a Playwright test that loads the actual unpacked extension into a real Chromium and runs the whole flow. What are you proud of? The clean model-agnostic design: all the behavior is one engine, and a new site is a single adapter entry (composer, send, and stop selectors) plus a manifest match, not a rewrite. I am also proud that it is genuinely tested end to end in a real browser, not just unit-mocked, including the survives-a-refresh case, and that it has zero runtime dependencies. What should people know so they can test it? It loads as an unpacked extension, no build step: Clone the repo, open chrome://extensions, turn on Developer mode, click Load unpacked, and pick the folder. Open claude.ai. Send a message, and while Claude is replying, type another and press Enter. It queues above the box as a chip. When Claude finishes, watch it auto-send. Refresh the page mid-queue to see the queue survive. It is, however, easier to watch the demo video as it gives you a clear understanding of how QueueIt works....
|
1793134405.790695
|
1793220805.790695
|
|
23608
|
My first slack bot! by @ravshan | Stardance
|
ravshan
|
1
|
0.28
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T14:02:51Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an ai based chat that responds to you and can make warm conversations if needed. It is also excellent replacement for boring chats. The thing was hard about it was that hard to detect your mistakes, but at least I came over it, and now finally can launch my first project.", "repo": "https://github.com/rasatov69-debug/quizzi", "demo": "https://slack.com"}]...
|
[{"post_id": 16798, "ts": "202 [{"post_id": 16798, "ts": "2026-06-27T08:43:10Z", "hours": 0.2844, "text": "on bot that responds to you immediately and works 24/7."}, {"post_id": 14314, "ts": "2026-06-23T12:22:20Z", "hours": 0.29, "text": "So, currently I’m getting one step close to finish one of my first project that I completed with coding experience. I’m feeling incredible to make something by my own."}]...
|
Title: My first slack bot! by @ravshan | Stardance Title: My first slack bot! by @ravshan | Stardance
Devlogs:
So, currently I’m getting one step close to finish one of my first project that I completed with coding experience. I’m feeling incredible to make something by my own.
on bot that responds to you immediately and works 24/7.
Ships:
I made an ai based chat that responds to you and can make warm conversations if needed. It is also excellent replacement for boring chats. The thing was hard about it was that hard to detect your mistakes, but at least I came over it, and now finally can launch my first project....
|
1793141421.775283
|
1793227821.775283
|
|
23619
|
Wallipheus by @Wally | Stardance
|
Wally
|
1
|
2.32
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T12:54:55Z", "hours": 2.0, "multiplier": 2.28, "payout": 4, "blessing": "neutral", "text": "Made a Slack app for my personal channel, it can welcome new members, set a reminder, give cat fun facts, greet people, and has a daily reminder with a message that can be changed with a command, the ReadMe contains all the command names and what they do", "repo": "https://github.com/wally-ben/wallipheus", "demo": "https://hackclub.enterprise.slack.com/archives/C0AECK065AP"}]...
|
[{"post_id": 15801, "ts": "202 [{"post_id": 15801, "ts": "2026-06-25T18:01:03Z", "hours": 0.3242, "text": "Cleaned up the ReadMe file and fixed a problem where the Cat Command wasn’t working"}, {"post_id": 15558, "ts": "2026-06-25T09:17:07Z", "hours": 0.4958, "text": "Added a daily reminder at 9 am with a message that can be changed using /wallipheus-daily"}, {"post_id": 15362, "ts": "2026-06-24T23:45:44Z", "hours": 0.4456, "text": "Added a reminder command, it currently only takes in the amount of minutes and a message but I plan on adding the option to have a daily reminder"}, {"post_id": 15151, "ts": "2026-06-24T16:47:18Z", "hours": 0.2503, "text": "Added a Welcome message for #the-wally-cave, and started working on a reminder system"}, {"post_id": 15102, "ts": "2026-06-24T15:18:28Z", "hours": 0.7103, "text": "Followed the guide and made a Slack app with 3 commands, wallipheus-greet, wallipheus-ping, and wallipheus-cat. Will be adding more commands that use other APIs."}]...
|
Title: Wallipheus by @Wally | Stardance
Devlogs:
Title: Wallipheus by @Wally | Stardance
Devlogs:
Followed the guide and made a Slack app with 3 commands, wallipheus-greet, wallipheus-ping, and wallipheus-cat. Will be adding more commands that use other APIs.
Added a Welcome message for #the-wally-cave, and started working on a reminder system
Added a reminder command, it currently only takes in the amount of minutes and a message but I plan on adding the option to have a daily reminder
Added a daily reminder at 9 am with a message that can be changed using /wallipheus-daily
Cleaned up the ReadMe file and fixed a problem where the Cat Command wasn’t working
Ships:
Made a Slack app for my personal channel, it can welcome new members, set a reminder, give cat fun facts, greet people, and has a daily reminder with a message that can be changed with a command, the ReadMe contains all the command names and what they do...
|
1793278350.6276639
|
1793364750.6276639
|
|
23651
|
60% layout keyboard tester by @jahnavi1 | Stardanc 60% layout keyboard tester by @jahnavi1 | Stardance...
|
jahnavi1
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T17:44:43Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i created an 60% layout keyboard tester using html and css and javascript,it is mainly created for 60%layout keyboard,the challenging part was fixing the errors on my own-_-", "repo": "https://github.com/jahnavi19212/keyboard-tester", "demo": "https://jahnavi19212.github.io/keyboard-tester/"}]...
|
[{"post_id": 13827, "ts": "202 [{"post_id": 13827, "ts": "2026-06-22T17:33:22Z", "hours": 2.8911, "text": "i created a 60% layout keyboard tester using html,css,js"}]...
|
Title: 60% layout keyboard tester by @jahnavi1 | S Title: 60% layout keyboard tester by @jahnavi1 | Stardance
Devlogs:
i created a 60% layout keyboard tester using html,css,js
Ships:
i created an 60% layout keyboard tester using html and css and javascript,it is mainly created for 60%layout keyboard,the challenging part was fixing the errors on my own-_-...
|
1793141431.474859
|
1793227831.474859
|
|
23657
|
Swarm by @devlsx | Stardance
|
devlsx
|
1
|
7.0
|
53
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T05:43:11Z", "hours": 7.0, "multiplier": 7.11, "payout": 53, "blessing": "neutral", "text": "This one’s swarm, a small BitTorrent client in Rust with no torrent libraries. I wanted to actually understand the protocol end to end. What it does: • parses .torrent files with its own bencode parser • announces to the tracker over HTTP and reads the compact peer list • speaks the peer wire protocol — handshake, bitfield, request/piece, over raw TCP • pulls pieces block by block and verifies each against its SHA-1 before writing it to disk • shows the swarm in a TUI: the piece grid filling in, per-peer have-bars, live speed The SHA-1 is hand-rolled (it’s what the spec uses for integrity), so the core has zero dependencies. Hardest bit: the info-hash. You can’t re-encode the parsed info dict and hash that key order/formatting can differ from the original because you have to SHA-1 the exact bytes as they sit in the file. Took me a while to spot why my hash didn’t match.", "repo": "https://github.com/AlexanderGese/swarm", "demo": "https://alexandergese.github.io/swarm/"}]...
|
[{"post_id": 17413, "ts": "202 [{"post_id": 17413, "ts": "2026-06-28T05:41:25Z", "hours": 7.4039, "text": "This one’s swarm, a small BitTorrent client in Rust with no torrent libraries. I wanted to actually understand the protocol end to end."}]...
|
Title: Swarm by @devlsx | Stardance
Devlogs:
This Title: Swarm by @devlsx | Stardance
Devlogs:
This one’s swarm, a small BitTorrent client in Rust with no torrent libraries. I wanted to actually understand the protocol end to end.
Ships:
This one’s swarm, a small BitTorrent client in Rust with no torrent libraries. I wanted to actually understand the protocol end to end. What it does: • parses .torrent files with its own bencode parser • announces to the tracker over HTTP and reads the compact peer list • speaks the peer wire protocol — handshake, bitfield, request/piece, over raw TCP • pulls pieces block by block and verifies each against its SHA-1 before writing it to disk • shows the swarm in a TUI: the piece grid filling in, per-peer have-bars, live speed The SHA-1 is hand-rolled (it’s what the spec uses for integrity), so the core has zero dependencies. Hardest bit: the info-hash. You can’t re-encode the parsed info dict and hash that key order/formatting can differ from the original because you have to SHA-1 the exact bytes as they sit in the file. Took me a while to spot why my hash didn’t match....
|
1792878740.1829228
|
1793742740.1829228
|
|
23658
|
Nonet by @devlsx | Stardance
|
devlsx
|
1
|
10.0
|
107
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T06:09:39Z", "hours": 10.0, "multiplier": 10.72, "payout": 107, "blessing": "neutral", "text": "What I made: nonet is a Sudoku solver and generator written from scratch in Rust — the point is you can watch it think. It solves any board with backtracking guided by the MRV heuristic (always branch on the cell with the fewest candidates), and generates fresh puzzles guaranteed to have exactly one solution. The default mode is an animated terminal UI where numbers go down in green, dead ends back out in red, and the grid resolves live. The same engine is compiled to WebAssembly so it runs in the browser too. What was challenging: the generator. Naively pulling clues out of a finished grid leaves puzzles with multiple solutions, so after every removal it re-counts the solutions (stopping at 2) and puts the cell back if the board is no longer unique — that uniqueness check is what makes them real Sudoku instead of guessable mush. What I’m proud of: the core has zero dependencies — my own xorshift RNG, my own bitmask candidate logic — and even “world’s hardest” boards solve in microseconds while still animating smoothly. It’s also published on crates.io. How to test it: https://alexandergese.github.io/nonet/ — generate a puzzle, hit solve, watch it animate. Or cargo install nonet and run nonet for the full terminal UI (space = play/pause, n = new, 1–4 = difficulty).", "repo": "https://github.com/AlexanderGese/nonet", "demo": "https://alexandergese.github.io/nonet/"}]...
|
[{"post_id": 13557, "ts": "202 [{"post_id": 13557, "ts": "2026-06-22T06:05:47Z", "hours": 10.4981, "text": "Spent the weekend on nonet, a small Sudoku engine in Rust. Two halves: • a solver using the MRV heuristic (always branch on the cell with the fewest candidates) — even the “world’s hardest” boards fall basically instantly • a generator that produces puzzles with exactly one solution: fill a random complete grid, then dig cells back out, only keeping a removal if the puzzle is still unique The fun part is it shows its work — an animated terminal UI where you watch numbers go down in green, dead ends back out in red, and the grid resolve to a single answer. The same engine is compiled to WebAssembly so you can mess with it in the browser. Hardest bit: the generator. Naively pulling clues out leaves puzzles with multiple solutions; the uniqueness check (count solutions but stop at 2) is what keeps them honest. Proud of: the core has zero dependencies — own xorshift RNG, own bit-masking for candidates — and the whole search animates smoothly at 60-odd steps a second."}]...
|
Title: Nonet by @devlsx | Stardance
Devlogs:
Spen Title: Nonet by @devlsx | Stardance
Devlogs:
Spent the weekend on nonet, a small Sudoku engine in Rust. Two halves: • a solver using the MRV heuristic (always branch on the cell with the fewest candidates) — even the “world’s hardest” boards fall basically instantly • a generator that produces puzzles with exactly one solution: fill a random complete grid, then dig cells back out, only keeping a removal if the puzzle is still unique The fun part is it shows its work — an animated terminal UI where you watch numbers go down in green, dead ends back out in red, and the grid resolve to a single answer. The same engine is compiled to WebAssembly so you can mess with it in the browser. Hardest bit: the generator. Naively pulling clues out leaves puzzles with multiple solutions; the uniqueness check (count solutions but stop at 2) is what keeps them honest. Proud of: the core has zero dependencies — own xorshift RNG, own bit-masking for candidates — and the whole search animates smoothly at 60-odd steps a second.
Ships:
What I made: nonet is a Sudoku solver and generator written from scratch in Rust — the point is you can watch it think. It solves any board with backtracking guided by the MRV heuristic (always branch on the cell with the fewest candidates), and generates fresh puzzles guaranteed to have exactly one solution. The default mode is an animated terminal UI where numbers go down in green, dead ends back out in red, and the grid resolves live. The same engine is compiled to WebAssembly so it runs in the browser too. What was challenging: the generator. Naively pulling clues out of a finished grid leaves puzzles with multiple solutions, so after every removal it re-counts the solutions (stopping at 2) and puts the cell back if the board is no longer unique — that uniqueness check is what makes them real Sudoku instead of guessable mush. What I’m proud of: the core has zero dependencies — my own xorshift RNG, my own bitmask candidate logic — and even “world’s hardest” boards solve in microseconds while still animating smoothly. It’s also published on crates.io. How to test it: https://alexandergese.github.io/nonet/ — generate a puzzle, hit solve, watch it animate. Or cargo install nonet and run nonet for the full terminal UI (space = play/pause, n = new, 1–4 = difficulty)....
|
1792878742.5884762
|
1793742742.5884762
|
|
23676
|
soundArchive by @maruscarebecca | Stardance
|
maruscarebecca
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T19:32:58Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my most recent web project is soundArchive! A soundboard (which, the more I think about it, is the most 2010’s era cringe thing ever) I built to mess around with the p5.js library and just do something fun in general. Played around with some animations for pressing the buttons and randomly changing the background color on each click. Credits for the idea and the base of the project all go to Codedex, a platform I love and that helped me grow as a coder, 100% :)) Here’s the tutorial I followed for the first part of the project: https://www.codedex.io/projects/build-an-interactive-soundboard-with-p5js Overall, I had fun. 10/10, would recommend.", "repo": "https://github.com/rebecca-marusca/soundArchive", "demo": "https://sound-archive.vercel.app/"}]...
|
[{"post_id": 15255, "ts": "202 [{"post_id": 15255, "ts": "2026-06-24T19:25:53Z", "hours": 1.0986, "text": "pretty much wrapped up work on soundArchive. I added the title and a subtitle in a funky font (this is the first time I’ve used a Google font on a website so that’s something new) and changed some button’s colors - there was too much green and blue before:)) It felt too boring so I made it that each button press randomly changes the background color, and implemented 2 animations for pressing the buttons and ripples."}, {"post_id": 13297, "ts": "2026-06-21T19:34:34Z", "hours": 1.5144, "text": "started working on soundArchive! I discovered the p5.js library today, thought it seemed cool, and wanted to build something with it, so here we are! Credits to Codedex’s tutorial: https://www.codedex.io/projects/build-an-interactive-soundboard-with-p5js I definitely want to add more animations and change the buttons colors before I deploy, but we have to start somewhere, right?"}]...
|
Title: soundArchive by @maruscarebecca | Stardance Title: soundArchive by @maruscarebecca | Stardance
Devlogs:
started working on soundArchive! I discovered the p5.js library today, thought it seemed cool, and wanted to build something with it, so here we are! Credits to Codedex’s tutorial: https://www.codedex.io/projects/build-an-interactive-soundboard-with-p5js I definitely want to add more animations and change the buttons colors before I deploy, but we have to start somewhere, right?
pretty much wrapped up work on soundArchive. I added the title and a subtitle in a funky font (this is the first time I’ve used a Google font on a website so that’s something new) and changed some button’s colors - there was too much green and blue before:)) It felt too boring so I made it that each button press randomly changes the background color, and implemented 2 animations for pressing the buttons and ripples.
Ships:
my most recent web project is soundArchive! A soundboard (which, the more I think about it, is the most 2010’s era cringe thing ever) I built to mess around with the p5.js library and just do something fun in general. Played around with some animations for pressing the buttons and randomly changing the background color on each click. Credits for the idea and the base of the project all go to Codedex, a platform I love and that helped me grow as a coder, 100% :)) Here’s the tutorial I followed for the first part of the project: https://www.codedex.io/projects/build-an-interactive-soundboard-with-p5js Overall, I had fun. 10/10, would recommend....
|
1793296518.9067647
|
1793382918.9067647
|
|
23680
|
GeoNet-3D by @Mateus-M15 | Stardance
|
Mateus-M15
|
1
|
28.43
|
305
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T02:37:05Z", "hours": 27.0, "multiplier": 11.23, "payout": 305, "blessing": "neutral", "text": "GeoNet-3D is an interactive 3D Solar System n’ Satellite Simulator built with Three.js and raw JavaScript. What did you make? I built an interactive 3D space simulator featuring planetary orbits, Earth’s Moon, real-time tracking of artificial satellites (like the ISS, Hubble, and JWST), a 3D orientation compass, dynamic info panels, and a custom intro screen with a rotating 3D Earth preview. What was challenging? Diving into Three.js and .JS before we even covered JavaScript in my classes! Dealing with WebGL rendering, coordinating camera tracking without built-in collision tools, handling an isolated second canvas for the intro page, and figuring out the math for the orbital movements were a pain ;o. What are you proud of? I’m proud of taking this idea from absolute zero to a fully functional, clean 3D web application. Getting the custom UI layout working, making the transition from the welcome screen to the main simulation seamless, and building controls that actually feel good to navigate was super satisfying. What should people know so they can test your project? When you load the page, you’ll land on a welcome intro screen with a control guide and a 3D Earth. Click “START EXPLORING” to jump into the actual simulation. Use Left Click to select objects, Right Click + Drag to rotate the camera, WASD for free flying movement, and the top-left UI panel to toggle satellites, real speed, orbits, or the 3D compass.", "repo": "https://github.com/m15dev/GeoNet-3D", "demo": "https://m15dev.github.io/GeoNet-3D/"}]...
|
[{"post_id": 36779, "ts": "202 [{"post_id": 36779, "ts": "2026-07-29T01:38:07Z", "hours": 0.6731, "text": "DevLog #12 Hello ;D, i’ve done some changes to the README, now it says better on my AI usage, so now it should be allright. see ya soon"}, {"post_id": 35464, "ts": "2026-07-26T22:12:12Z", "hours": 0.7533, "text": "DevLog 11# Well the life not always a strawberry, i saw now that u pushed the wrong version to commit and lost some fixes i did, uuh i spend 3 hours trying to find why wasn’t the website loading, turns out, “GitHub-Pages” and “Vercer” are case sentive, so my SatelitesDATA.js wasn’t reconized when called SatelitesData.js, yeah, but in my defense, im my computer was working ;P Take care people"}, {"post_id": 34957, "ts": "2026-07-26T02:33:02Z", "hours": 0.8469, "text": "DevLog #10 🚀 Hello dear person seeing this :D: :D OH MAN, FINALLY IT’S WORKIN as IT SHOULD, well, even tough i had some Ai help -sorry for that, going from never build a website or anything to and 3D renderer, was a verry cool thing to do, and made me understand better how site’s work etc, today i’ve added the final “MANUEL” to use just a quick guide, and some random bug fix, feel free to try it out, BYEEEE"}, {"post_id": 34369, "ts": "2026-07-25T00:55:16Z", "hours": 1.2617, "text": "DevLog #9 Hello, so today i’ve added the satelites models and the Cool Info Pannel now works as it should, i’ll add a user guide manual tomorrow, bye ;3"}, {"post_id": 33834, "ts": "2026-07-24T02:22:59Z", "hours": 1.4842, "text": "DevLog #8 sup, today i just did some changes to the menu, added an animation, and configured the “Hide Ui” button, more work tomorrow, bye."}, {"post_id": 29903, "ts": "2026-07-17T02:17:58Z", "hours": 1.4342, "text": "Devlog #7 Hello People ;3 - Today was a shorter development session, about one hour, but I focused on planning one of the biggest UI improvements for GeoNet 3D . Planned Features Designed the layout for the Planet Information panel. Planned a navigation guide for planets and satellites. Improved the overall UI layout to make it feel more like an app. Toggle Ui, Orbits, Stars, Cool Info Pannel. Planed a user manual. Interactive planet information. Satellite information panel. The new Cool Information Panel will display data such as: Radius Mass Day Length Year Length Number of Moons Distance from the Sun My goal is to make GeoNet 3D feel less like a simple 3D viewer and more like an interactive educational application. Even though there wasn’t a lot of coding today, planning the interface beforehand should make the next implementation much faster. P.S. If you noticed this devlog has a different style, it’s because I didn’t realize I could customize it until today. >:P"}, {"post_id": 29272, "ts": "2026-07-16T02:38:10Z", "hours": 6.0142, "text": "Helloo again XD, so today i got focoused on fixin the damn system that gives and ideia of how fast they actually move irl, and their positions, to they are aproximatly where it should be, not 100% exact but you can get the ideia, fixed bug when animation endende some planets whould snap to a completly random position, i also took some time to redesign the satellites systems so i can calculate their positions easly, overall, i improved the simulation. See ya on next ;D"}, {"post_id": 28673, "ts": "2026-07-15T02:13:26Z", "hours": 6.0644, "text": "Hello ;3 woow 6 hours. . . yeah, thats some time i guess…. Today i decided that 900+ lines on a single file was too much, so i need to organize it better, because adding new updates was getting hard as i was lost to where i put some code, in addition to that now we have: -New Camera sistem the old one sometime just didn’t work, the issue was it missed a “}” -The Real-Time Speed, now does some math to place the planets as close as they should be irl, when you toggle it on ofc, that was it, rewriting and aprimorating the code. theres some photos of the app down there / , see yaa ;0"}, {"post_id": 28066, "ts": "2026-07-14T02:48:52Z", "hours": 5.3283, "text": "Hello :D so i got a few days off, uuh vacation and a flu verry normal, but to reapay that i didn’t worked on the project other days, i reapaid it today so: -New Camera System; YAYA:D (now it’s easier to navigate and it’s no glichy) -New Planets from the solar system. -New Toggle Button for the “Real Time speed” that alings the planets to where they supposly are irl, (on-work) -Added a trail, so you can see the path the it runs, -Added a teleporting menu, so you can let’s says, “fast travel “ to an planet. that’s it folks, have a good day ;D"}, {"post_id": 14808, "ts": "2026-06-24T01:32:34Z", "hours": 1.2769, "text": "GoodNight to whoever is reading this ;D So today i just fixed some camera bugs, like when i click a platet, a satelite etc, the camera doesn’t pivot correctly, now works fine, and add some box likes objects representing the satelites, (the box it’s temporary) until i find a model or i make one."}, {"post_id": 14084, "ts": "2026-06-23T02:08:42Z", "hours": 2.7178, "text": "Sup people or aliens idk ;D So today I fixed the camera controls that were twisted, and added a menu so I can do stuff like pivoting the camera to Earth, toggling the stars, Earth’s rotation, and more. I also added the Moon and the Sun as actual celestial bodies, plus a 3D compass because you might flip yourself upside down and need to keep track of it!"}, {"post_id": 13348, "ts": "2026-06-21T21:22:08Z", "hours": 0.7067, "text": "Hello dear person reading this :D. Today I built the main Earth sphere using Three.js, i used a texture loader function to project an image onto the sphere, and added a sun-type illumination. I still need to create the actual Sun object for reference."}]...
|
Title: GeoNet-3D by @Mateus-M15 | Stardance
Devlo Title: GeoNet-3D by @Mateus-M15 | Stardance
Devlogs:
Hello dear person reading this :D. Today I built the main Earth sphere using Three.js, i used a texture loader function to project an image onto the sphere, and added a sun-type illumination. I still need to create the actual Sun object for reference.
Sup people or aliens idk ;D So today I fixed the camera controls that were twisted, and added a menu so I can do stuff like pivoting the camera to Earth, toggling the stars, Earth’s rotation, and more. I also added the Moon and the Sun as actual celestial bodies, plus a 3D compass because you might flip yourself upside down and need to keep track of it!
GoodNight to whoever is reading this ;D So today i just fixed some camera bugs, like when i click a platet, a satelite etc, the camera doesn’t pivot correctly, now works fine, and add some box likes objects representing the satelites, (the box it’s temporary) until i find a model or i make one.
Hello :D so i got a few days off, uuh vacation and a flu verry normal, but to reapay that i didn’t worked on the project other days, i reapaid it today so: -New Camera System; YAYA:D (now it’s easier to navigate and it’s no glichy) -New Planets from the solar system. -New Toggle Button for the “Real Time speed” that alings the planets to where they supposly are irl, (on-work) -Added a trail, so you can see the path the it runs, -Added a teleporting menu, so you can let’s says, “fast travel “ to an planet. that’s it folks, have a good day ;D
Hello ;3 woow 6 hours. . . yeah, thats some time i guess…. Today i decided that 900+ lines on a single file was too much, so i need to organize it better, because adding new updates was getting hard as i was lost to where i put some code, in addition to that now we have: -New Camera sistem the old one sometime just didn’t work, the issue was it missed a “}” -The Real-Time Speed, now does some math to place the planets as close as they should be irl, when you toggle it on ofc, that was it, rewriting and aprimorating the code. theres some photos of the app down there / , see yaa ;0
Helloo again XD, so today i got focoused on fixin the damn system that gives and ideia of how fast they actually move irl, and their positions, to they are aproximatly where it should be, not 100% exact but you can get the ideia, fixed bug when animation endende some planets whould snap to a completly random position, i also took some time to redesign the satellites systems so i can calculate their positions easly, overall, i improved the simulation. See ya on next ;D
Devlog #7 Hello People ;3 - Today was a shorter development session, about one hour, but I focused on planning one of the biggest UI improvements for GeoNet 3D . Planned Features Designed the layout for the Planet Information panel. Planned a navigation guide for planets and satellites. Improved the overall UI layout to make it feel more like an app. Toggle Ui, Orbits, Stars, Cool Info Pannel. Planed a user manual. Interactive planet information. Satellite information panel. The new Cool Information Panel will display data such as: Radius Mass Day Length Year Length Number of Moons Distance from the Sun My goal is to make GeoNet 3D feel less like a simple 3D viewer and more like an interactive educational application. Even though there wasn’t a lot of coding today, planning the interface beforehand should make the next implementation much faster. P.S. If you noticed this devlog has a different style, it’s because I didn’t realize I could customize it until today. >:P
DevLog #8 sup, today i just did some changes to the menu, added an animation, and configured the “Hide Ui” button, more work tomorrow, bye.
DevLog #9 Hello, so today i’ve added the satelites models and the Cool Info Pannel now works as it should, i’ll add a user guide manual tomorrow, bye ;3
DevLog #10 🚀 Hello dear person seeing this :D: :D OH MAN, FINALLY IT’S WORKIN as IT SHOULD, well, even tough i had some Ai help -sorry for that, going from never build a website or anything to and 3D renderer, was a verry cool thing to do, and made me understand better how site’s work etc, today i’ve added the final “MANUEL” to use just a quick guide, and some random bug fix, feel free to try it out, BYEEEE
DevLog 11# Well the life not always a strawberry, i saw now that u pushed the wrong version to commit and lost some fixes i did, uuh i spend 3 hours trying to find why wasn’t the website loading, turns out, “GitHub-Pages” and “Vercer” are case sentive, so my SatelitesDATA.js wasn’t reconized when called SatelitesData.js, yeah, but in my defense, im my computer was working ;P Take care people
DevLog #12 Hello ;D, i’ve done some changes to the README, now it says better on my AI usage, so now it should be allright. see ya soon
Ships:
GeoNet-3D is an interactive 3D Solar System n’ Satellite Simulator built with Three.js and raw JavaScript. What did you make? I built an interactive 3D space simulator featuring planetary orbits, Earth’s Moon, real-time tracking of artificial satellites (like the ISS, Hubble, and JWST), a 3D orientation compass, dynamic info panels, and a custom intro screen with a rotating 3D Earth preview. What was challenging? Diving into Three.js and .JS before we even covered JavaScript in my classes! Dealing with WebGL rendering, coordinating camera tracking without built-in collision tools, handling an isolated second canvas for the intro page, and figuring out the math for the orbital movements were a pain ;o. What are you proud of? I’m proud of taking this idea from absolute zero to a fully functional, clean 3D web application. Getting the custom UI layout working, making the transition from the welcome screen to the main simulation seamless, and building controls that actually feel good to navigate was super satisfying. What should people know so they can test your project? When you load the page, you’ll land on a welcome intro screen with a control guide and a 3D Earth. Click “START EXPLORING” to jump into the actual simulation. Use Left Click to select objects, Right Click + Drag to rotate the camera, WASD for free flying movement, and the top-left UI panel to toggle satellites, real speed, orbits, or the 3D compass....
|
1792878701.0832562
|
1793742701.0832562
|
|
23702
|
Matura stats by @visarmullaj07 | Stardance
|
visarmullaj07
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-31T22:11:43Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I got tired of downloading the official grade pdfs or using super slow apps, so I build my own version. Its main feature is the nearly instant student search even on considerable loads. It works by splitting the user stats into files grouped by the id prefix. Thus, each student doesn’t need to download all the data for 25000 student nation wide - instead only the data for around 400. This massively reduces load times, even on slow internet connections. Appart from that, it shows overall statistics and student-specific statistics, allowing students to see how they compare with the rest of the nation. I could not find this feature anywhere else on the internet.", "repo": "https://github.com/Notava1ble/matura-nota", "demo": "https://notava1ble.github.io/matura-nota/"}]...
|
[{"post_id": 13316, "ts": "202 [{"post_id": 13316, "ts": "2026-06-21T20:13:43Z", "hours": 7.4881, "text": "Creating a website to show visually beautiful stats for the student performance on the national exams."}]...
|
Title: Matura stats by @visarmullaj07 | Stardance
Title: Matura stats by @visarmullaj07 | Stardance
Devlogs:
Creating a website to show visually beautiful stats for the student performance on the national exams.
Ships:
I got tired of downloading the official grade pdfs or using super slow apps, so I build my own version. Its main feature is the nearly instant student search even on considerable loads. It works by splitting the user stats into files grouped by the id prefix. Thus, each student doesn’t need to download all the data for 25000 student nation wide - instead only the data for around 400. This massively reduces load times, even on slow internet connections. Appart from that, it shows overall statistics and student-specific statistics, allowing students to see how they compare with the rest of the nation. I could not find this feature anywhere else on the internet....
|
1793303397.5400953
|
1793389797.5400953
|
|
23723
|
Python Calculator by @Sahild | Stardance
|
Sahild
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T15:12:49Z", "hours": 0.0, "multiplier": 1.0, "payout": 0, "blessing": "neutral", "text": "shipped: python calculator a terminal based calculator with a menu system, input validation and ascii art banners supports addition subtraction multiplication and division. handles bad input and division by zero without crashing. github", "repo": "https://github.com/sahilchess/python-calculator", "demo": "https://github.com/sahilchess/python-calculator/releases/tag/v1"}]...
|
[{"post_id": 17647, "ts": "202 [{"post_id": 17647, "ts": "2026-06-28T15:11:02Z", "hours": 0.2789, "text": "python calculator devlog built a terminal calculator in python today. nothing really big. i did this for the sticker the main thing i wanted was a clean menu system so i used a numbered list and sys.exit() to handle the exit case gracefully. sys.exit() was the cool thing i found that makes the code exit without all these error messages in the terminal. additionally, also added input validation so if you pick a choice outside 1-5 it tells you instead of just crashing. one fun thing: added ascii art at the start and end using multiline print statements. the banner at the top took a while to get right because the spacing kept breaking. also handled division by zero explicitly since thats a pretty common edge case that trips people up. next steps: maybe add a loop so you can do multiple calculations without rerunning the script"}]...
|
Title: Python Calculator by @Sahild | Stardance
D Title: Python Calculator by @Sahild | Stardance
Devlogs:
python calculator devlog built a terminal calculator in python today. nothing really big. i did this for the sticker the main thing i wanted was a clean menu system so i used a numbered list and sys.exit() to handle the exit case gracefully. sys.exit() was the cool thing i found that makes the code exit without all these error messages in the terminal. additionally, also added input validation so if you pick a choice outside 1-5 it tells you instead of just crashing. one fun thing: added ascii art at the start and end using multiline print statements. the banner at the top took a while to get right because the spacing kept breaking. also handled division by zero explicitly since thats a pretty common edge case that trips people up. next steps: maybe add a loop so you can do multiple calculations without rerunning the script
Ships:
shipped: python calculator a terminal based calculator with a menu system, input validation and ascii art banners supports addition subtraction multiplication and division. handles bad input and division by zero without crashing. github...
|
1793307057.7697177
|
1793393457.7697177
|
|
23732
|
Pip-Boy OS by @BarBariConan | Stardance
|
BarBariConan
|
1
|
11.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T09:39:01Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I Finally made my dream project and made a Pip-Boy themed OS themed like the one from Fallout 4. it was challenging figuring out HTML for the first time and im so happy i finally stuck with a project and finished it. I hope you enjoy using it as much as i did developing it.", "repo": "https://github.com/BarBariConan/Pip-OS", "demo": "https://barbariconan.github.io/Pip-OS/"}]...
|
[{"post_id": 22046, "ts": "202 [{"post_id": 22046, "ts": "2026-07-04T09:24:54Z", "hours": 0.6933, "text": "After a lot of trial and error the demo is finally up! You can check it out here: https://barbariconan.github.io/Pip-OS/ Or at my project page."}, {"post_id": 22001, "ts": "2026-07-04T07:12:26Z", "hours": 3.0728, "text": "Pip-OS I’ve added quite a bit since last time, first i worked on fixing and cleaning up my code cause it was lowkey messy asf and then i added the glow effect to the text and the app icons, after i spent some time figuring out how to implement 2 random text systems (1 for a fake tip and 1 for a fake location) then i spent waaaaaayyy too long making a little lockpicking minigame. going to figure out how i can open it up to let you guys test it out. oh and i made it so the year is always set to 2077."}, {"post_id": 21257, "ts": "2026-07-03T02:59:48Z", "hours": 2.6117, "text": "FO4 OS: Devlog 2 today i changed the UI quite a lot, by adding app icons, adding a drag bar and close button and adding a glow effect to the windows to give it more of that Pip-Boy feel. I integrated a text editor and a map of the FO4 commonwealth that you can drag around and zoom in. I think the projects coming along really nicely."}, {"post_id": 19518, "ts": "2026-06-30T20:55:30Z", "hours": 4.4733, "text": "HTML is hard ig first time using html EVER so its taken me 4 hours to get not even halfway through this. On a positive note tho, i’m rly happy with how its turning out and i think its starting to look kinda like the FO4 Pip-Boy. (still doesn’t look the best tho) Edit: An off topic question but can anyone tell me how to change my pfp? i cant figure it out"}]...
|
Title: Pip-Boy OS by @BarBariConan | Stardance
De Title: Pip-Boy OS by @BarBariConan | Stardance
Devlogs:
HTML is hard ig first time using html EVER so its taken me 4 hours to get not even halfway through this. On a positive note tho, i’m rly happy with how its turning out and i think its starting to look kinda like the FO4 Pip-Boy. (still doesn’t look the best tho) Edit: An off topic question but can anyone tell me how to change my pfp? i cant figure it out
FO4 OS: Devlog 2 today i changed the UI quite a lot, by adding app icons, adding a drag bar and close button and adding a glow effect to the windows to give it more of that Pip-Boy feel. I integrated a text editor and a map of the FO4 commonwealth that you can drag around and zoom in. I think the projects coming along really nicely.
Pip-OS I’ve added quite a bit since last time, first i worked on fixing and cleaning up my code cause it was lowkey messy asf and then i added the glow effect to the text and the app icons, after i spent some time figuring out how to implement 2 random text systems (1 for a fake tip and 1 for a fake location) then i spent waaaaaayyy too long making a little lockpicking minigame. going to figure out how i can open it up to let you guys test it out. oh and i made it so the year is always set to 2077.
After a lot of trial and error the demo is finally up! You can check it out here: https://barbariconan.github.io/Pip-OS/ Or at my project page.
Ships:
I Finally made my dream project and made a Pip-Boy themed OS themed like the one from Fallout 4. it was challenging figuring out HTML for the first time and im so happy i finally stuck with a project and finished it. I hope you enjoy using it as much as i did developing it....
|
1793134040.3583646
|
1793220440.3583646
|
|
23780
|
Telephone Tools SlackBot by @ryank | Stardance
|
ryank
|
1
|
1.0
|
11
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T03:18:53Z", "hours": 1.0, "multiplier": 11.86, "payout": 11, "blessing": "neutral", "text": "I made a Slack bot that utilizes my telco tools API. this bot will let you look up the Caller Name (CNAME), and Location Routing Number (LRN) information of a given phone number. you can either make your lookup public, or private by using the -private addon on the command. I had to rewrite some parts of the CSP LRN API to better format it for slack, but since i already had the connections with telco switches for information, it was pretty eassy to setup. When testing, make sure you put in the full 11 digit phone number, and note, it will only work on United States Toll and Toll free number. If you are out of the us, you could test it out with a public company number!", "repo": "https://github.com/csptechnologies/slacktelcotools", "demo": "https://hackclub.enterprise.slack.com/archives/C0BCR6852TC"}]...
|
[{"post_id": 14839, "ts": "202 [{"post_id": 14839, "ts": "2026-06-24T03:15:54Z", "hours": 0.3189, "text": "Done! It is now time to ship it out!"}, {"post_id": 14120, "ts": "2026-06-23T02:58:42Z", "hours": 0.3528, "text": "Figured out the 404 problem with the API, Just got done implementing CNAM lookup! Next Step: LRN Data, and Private ways to lookup CNAM and LRN!"}, {"post_id": 14092, "ts": "2026-06-23T02:29:40Z", "hours": 0.3622, "text": "I got the bot running! Now I just gotta figure out why my backend API is returning a 404!"}]...
|
Title: Telephone Tools SlackBot by @ryank | Starda Title: Telephone Tools SlackBot by @ryank | Stardance
Devlogs:
I got the bot running! Now I just gotta figure out why my backend API is returning a 404!
Figured out the 404 problem with the API, Just got done implementing CNAM lookup! Next Step: LRN Data, and Private ways to lookup CNAM and LRN!
Done! It is now time to ship it out!
Ships:
I made a Slack bot that utilizes my telco tools API. this bot will let you look up the Caller Name (CNAME), and Location Routing Number (LRN) information of a given phone number. you can either make your lookup public, or private by using the -private addon on the command. I had to rewrite some parts of the CSP LRN API to better format it for slack, but since i already had the connections with telco switches for information, it was pretty eassy to setup. When testing, make sure you put in the full 11 digit phone number, and note, it will only work on United States Toll and Toll free number. If you are out of the us, you could test it out with a public company number!...
|
1793271221.3930616
|
1793357621.3930616
|
|
23784
|
Network Scanner by @Drake | Stardance
|
Drake
|
1
|
4.92
|
24
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T03:40:56Z", "hours": 3.0, "multiplier": 9.35, "payout": 24, "blessing": "neutral", "text": "I made a network scanner website that uses python (w/ flask). I think its important that people have an easy introduction to cyber secruity and this website helps with that!", "repo": "https://github.com/veefs/network-fingerprinter", "demo": "https://github.com/veefs/network-fingerprinter/releases/tag/update"}]...
|
[{"post_id": 13868, "ts": "202 [{"post_id": 13868, "ts": "2026-06-22T18:43:54Z", "hours": 0.7825, "text": "added a bunch more features: curl now hows the option too download the page and display it, you can set ports & ips, and overall it feels a lot more like a pen testing tool now."}, {"post_id": 13817, "ts": "2026-06-22T17:15:21Z", "hours": 1.1328, "text": "Added a windows only binary for the release using pyisntaller and added some more features + updated the readme"}, {"post_id": 13511, "ts": "2026-06-22T03:32:39Z", "hours": 1.1139, "text": "Adding metasploit style console to my network scanner now uses command like set <ip> and os <ip> . Set set’s the target ip and os runs nmap -o to fingerprint the OS. I aim to combine this with a future project that Im doing which is a fully DIY coded firewall engine in c++"}, {"post_id": 13421, "ts": "2026-06-21T23:45:29Z", "hours": 1.4167, "text": "Working on my network engine so this scans your entire network and shows you the ip, mac address, company name, and if you can reach it by pinging it"}]...
|
Title: Network Scanner by @Drake | Stardance
Devl Title: Network Scanner by @Drake | Stardance
Devlogs:
Working on my network engine so this scans your entire network and shows you the ip, mac address, company name, and if you can reach it by pinging it
Adding metasploit style console to my network scanner now uses command like set <ip> and os <ip> . Set set’s the target ip and os runs nmap -o to fingerprint the OS. I aim to combine this with a future project that Im doing which is a fully DIY coded firewall engine in c++
Added a windows only binary for the release using pyisntaller and added some more features + updated the readme
added a bunch more features: curl now hows the option too download the page and display it, you can set ports & ips, and overall it feels a lot more like a pen testing tool now.
Ships:
I made a network scanner website that uses python (w/ flask). I think its important that people have an easy introduction to cyber secruity and this website helps with that!...
|
1793299786.205186
|
1793386186.205186
|
|
23794
|
Arty WebOS by @KerhylonKava | Stardance
|
KerhylonKava
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T06:29:16Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Arty Web OS which is honestly a mash of different random ideas, with no cohesive theme. Kind of reflects my irl interests tho. Some plane related stuff in the background, some art, some tea related stuff… I must admit, I’m quite weird. To make clear my intentions; I want to ship this, then fork the repo, and completely re-design the theme (to be more cohesive, since I have better ideas than complete randomness) of the site, either to be playing card related, or tea related. I know, two very different things. Anyway, the site has hand-drawn art, an easter egg reference to another of my projects in the form of an icebreaker question, and a tea bag tab quote, because who doesn’t want to be subjected to a random quote fit for a tea-drinking brit (I’m British, just to be clear, so I’m allowed to make fun). My “extra” features are blockquotes and detail drop-downs. I had to ask my dad for help because the js was erroring when called to open/close the windows, and he helped me figure out I needed to defer the js loading. I’m proud that I was able to build the site from the start with separate js, css, and html files, instead of having it all in the html file for the first few lessons like the guide. It did cause a few issues (like the bug my dad helped me fix), but in the long run, setting it up like this will hopefully make it easier to scale. To test out my project, you just need to follow the link to the github page.", "repo": "https://github.com/KerhylonKava/ArtyWebOS", "demo": "https://kerhylonkava.github.io/ArtyWebOS/index.html"}]...
|
[{"post_id": 19027, "ts": "202 [{"post_id": 19027, "ts": "2026-06-30T06:11:02Z", "hours": 1.1608, "text": "Woah! I actually updated the icebreaker question of the day! Today its What’s the weirdest thing you collect? And what’s that I see, a new feature as well? It appears we have a details dropdown revealing my answer to the question… and an all new button which opens another window displaying a Tea Tab Quote! (Hastily designed, in an attempt to finish before the sticker deadline at midnight today in whatever timezone that I didn’t look up… oops) And note to self, I really have to figure out a way for it to pull the daily icebreaker from a spreadsheet or something that does not require me to commit every day. Anyways, this is my truly random website, basically for experimenting. I think I’m actally going to fork the repository when I redesign the whole thing so that this can still exist if I ever want to experiment more or add other truly random things. Oh, yeah, also, the windows now change which one is on top based on which was clicked most recently. And to whoever reads this, Thanks, and have a lovely day! Cheers! Kava"}, {"post_id": 18169, "ts": "2026-06-29T06:11:59Z", "hours": 3.3583, "text": "Two Interactive Windows Now! After much hard work, (like, more than the guide suggests to spend on the whole WebOS project, never mind 1 2/2 of the 5 lessons), I have 2 interactive windows! The first is the welcome screen, and the second is the “Icebreaker Question of the Day” which will be updated daily, as the name suggests . The artwork for the little icebreaker icon was done by one of my teammates at a hackathon, actually for a website specifically for icebreaker questions. Also you may notice the close buttons stick out of the window frame, and tbh, that’s because I didn’t want to figure out how to make them fit properly at the time, but now I like it soooo… I might just keep it that way. Lowkey, I think I’m gonna ship it, and then completely overhaul it and create a card game focused OS that displays some playing cards I’ve designed and some how-to’s for my favorite card games. And don’t read too much into the icebreaker question. I definitely didn’t come up with it because I was eating cake in a weird way… Definitely…"}, {"post_id": 17460, "ts": "2026-06-28T07:47:15Z", "hours": 1.6892, "text": "Basic setup of home page. Technically I called it Arty Web OS , but I’ll see where inspiration takes me for the real theme. I would make it about me like the guide suggests, but I already have/made a personal site. The background is a flying dream/vision board I found on Pinterest, and the blue swirly drawing in the center “window” was drawn by me. I started right off the bat with the CSS in a separate file since I find that easier in the long run, and I did borrow some code from my personal site to get the CSS started – think style presets for selection, images, and my favorite, :root{ --base-color: #6e6a4b; --text-color: #f8b91a... etc. so I can change colors without having to individually edit each instance it appears. I’ll probably add more tomorrow, and maybe ship it in some way, shape, or form by Monday to complete the weekend sticker quest thing. Cheers!"}]...
|
Title: Arty WebOS by @KerhylonKava | Stardance
De Title: Arty WebOS by @KerhylonKava | Stardance
Devlogs:
Basic setup of home page. Technically I called it Arty Web OS , but I’ll see where inspiration takes me for the real theme. I would make it about me like the guide suggests, but I already have/made a personal site. The background is a flying dream/vision board I found on Pinterest, and the blue swirly drawing in the center “window” was drawn by me. I started right off the bat with the CSS in a separate file since I find that easier in the long run, and I did borrow some code from my personal site to get the CSS started – think style presets for selection, images, and my favorite, :root{ --base-color: #6e6a4b; --text-color: #f8b91a... etc. so I can change colors without having to individually edit each instance it appears. I’ll probably add more tomorrow, and maybe ship it in some way, shape, or form by Monday to complete the weekend sticker quest thing. Cheers!
Two Interactive Windows Now! After much hard work, (like, more than the guide suggests to spend on the whole WebOS project, never mind 1 2/2 of the 5 lessons), I have 2 interactive windows! The first is the welcome screen, and the second is the “Icebreaker Question of the Day” which will be updated daily, as the name suggests . The artwork for the little icebreaker icon was done by one of my teammates at a hackathon, actually for a website specifically for icebreaker questions. Also you may notice the close buttons stick out of the window frame, and tbh, that’s because I didn’t want to figure out how to make them fit properly at the time, but now I like it soooo… I might just keep it that way. Lowkey, I think I’m gonna ship it, and then completely overhaul it and create a card game focused OS that displays some playing cards I’ve designed and some how-to’s for my favorite card games. And don’t read too much into the icebreaker question. I definitely didn’t come up with it because I was eating cake in a weird way… Definitely…
Woah! I actually updated the icebreaker question of the day! Today its What’s the weirdest thing you collect? And what’s that I see, a new feature as well? It appears we have a details dropdown revealing my answer to the question… and an all new button which opens another window displaying a Tea Tab Quote! (Hastily designed, in an attempt to finish before the sticker deadline at midnight today in whatever timezone that I didn’t look up… oops) And note to self, I really have to figure out a way for it to pull the daily icebreaker from a spreadsheet or something that does not require me to commit every day. Anyways, this is my truly random website, basically for experimenting. I think I’m actally going to fork the repository when I redesign the whole thing so that this can still exist if I ever want to experiment more or add other truly random things. Oh, yeah, also, the windows now change which one is on top based on which was clicked most recently. And to whoever reads this, Thanks, and have a lovely day! Cheers! Kava
Ships:
I made Arty Web OS which is honestly a mash of different random ideas, with no cohesive theme. Kind of reflects my irl interests tho. Some plane related stuff in the background, some art, some tea related stuff… I must admit, I’m quite weird. To make clear my intentions; I want to ship this, then fork the repo, and completely re-design the theme (to be more cohesive, since I have better ideas than complete randomness) of the site, either to be playing card related, or tea related. I know, two very different things. Anyway, the site has hand-drawn art, an easter egg reference to another of my projects in the form of an icebreaker question, and a tea bag tab quote, because who doesn’t want to be subjected to a random quote fit for a tea-drinking brit (I’m British, just to be clear, so I’m allowed to make fun). My “extra” features are blockquotes and detail drop-downs. I had to ask my dad for help because the js was erroring when called to open/close the windows, and he helped me figure out I needed to defer the js loading. I’m proud that I was able to build the site from the start with separate js, css, and html files, instead of having it all in the html file for the first few lessons like the guide. It did cause a few issues (like the bug my dad helped me fix), but in the long run, setting it up like this will hopefully make it easier to scale. To test out my project, you just need to follow the link to the github page....
|
1793256458.4572408
|
1793342858.4572408
|
|
23799
|
TJRocketry by @elifeldman769 | Stardance
|
elifeldman769
|
1
|
11.0
|
172
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T00:26:04Z", "hours": 11.0, "multiplier": 17.21, "payout": 172, "blessing": "neutral", "text": "# The TJ Rocketry Platform Over the last month, I have been developing a centralized platform for TJ Rocketry to streamline many of the club's operations. The project is backed by PostgreSQL and combines attendance tracking, inventory management, file storage, and administrative tools into a single system. ## Attendance and Launch Management One of the major additions has been an integrated attendance system. Officers can create launch events and generate attendance codes, allowing members to check in through the website. Attendance records can then be exported directly as CSV files, significantly reducing manual work. ## Inventory System I implemented a complete inventory management system to keep track of rocket components and supplies. Members can browse available items and submit requests, while officers can approve or deny them. The system automatically tracks inventory quantities and request history, making it easier to maintain accountability. ## File Storage To centralize documentation, I built a file system inspired by Google Drive. Members can upload, organize, and access CAD files, reports, presentations, and other club resources through a familiar interface. ## Resource Hub The platform also serves as a repository for important documents and resources. Guides, documentation, and reference material are organized in one location, making information easier to find for both new and experienced members. ## Administrative Dashboard A full administration panel was developed to provide officers with complete control over the platform. User permissions, launches, inventory, and other aspects of the system can all be managed through a web interface without requiring direct database access. ## Technical Highlights - PostgreSQL-backed storage - Role-based access control - Attendance and launch management - CSV export functionality - Inventory request and approval workflows - Integrated file storage system - Administrative dashboard Over the last month, the platform has evolved into a central operating system for TJ Rocketry. The goal has been to reduce overhead for officers and provide members with a single location for everything they need. Future development will focus on expanding automation and adding additional tools to support the club's engineering activities.", "repo": "https://github.com/TJ-Rocketry/TJRocketry", "demo": "https://tjrocketry.org"}]...
|
[{"post_id": 13431, "ts": "202 [{"post_id": 13431, "ts": "2026-06-22T00:24:25Z", "hours": 11.4, "text": "Devlog: Building the TJ Rocketry Platform Over the last month, I have been developing a centralized platform for TJ Rocketry to streamline many of the club’s operations. The project is backed by PostgreSQL and combines attendance tracking, inventory management, file storage, and administrative tools into a single system. Attendance and Launch Management One of the major additions has been an integrated attendance system. Officers can create launch events and generate attendance codes, allowing members to check in through the website. Attendance records can then be exported directly as CSV files, significantly reducing manual work. Inventory System I implemented a complete inventory management system to keep track of rocket components and supplies. Members can browse available items and submit requests, while officers can approve or deny them. The system automatically tracks inventory quantities and request history, making it easier to maintain accountability. File Storage To centralize documentation, I built a file system inspired by Google Drive. Members can upload, organize, and access CAD files, reports, presentations, and other club resources through a familiar interface. Resource Hub The platform also serves as a repository for important documents and resources. Guides, documentation, and reference material are organized in one location, making information easier to find for both new and experienced members. Administrative Dashboard A full administration panel was developed to provide officers with complete control over the platform. User permissions, launches, inventory, and other aspects of the system can all be managed through a web interface without requiring direct database access. Technical Highlights PostgreSQL-backed storage Role-based access control Attendance and launch management CSV export functionality Inventory request and approval workflows Integrated file storage system Administrative dashboard Over the last month, the platform has evolved into a central operating system for TJ Rocketry. The goal has been to reduce overhead for officers and provide members with a single location for everything they need. Future development will focus on expanding automation and adding additional tools to support the club’s engineering activities."}]...
|
Title: TJRocketry by @elifeldman769 | Stardance
D Title: TJRocketry by @elifeldman769 | Stardance
Devlogs:
Devlog: Building the TJ Rocketry Platform Over the last month, I have been developing a centralized platform for TJ Rocketry to streamline many of the club’s operations. The project is backed by PostgreSQL and combines attendance tracking, inventory management, file storage, and administrative tools into a single system. Attendance and Launch Management One of the major additions has been an integrated attendance system. Officers can create launch events and generate attendance codes, allowing members to check in through the website. Attendance records can then be exported directly as CSV files, significantly reducing manual work. Inventory System I implemented a complete inventory management system to keep track of rocket components and supplies. Members can browse available items and submit requests, while officers can approve or deny them. The system automatically tracks inventory quantities and request history, making it easier to maintain accountability. File Storage To centralize documentation, I built a file system inspired by Google Drive. Members can upload, organize, and access CAD files, reports, presentations, and other club resources through a familiar interface. Resource Hub The platform also serves as a repository for important documents and resources. Guides, documentation, and reference material are organized in one location, making information easier to find for both new and experienced members. Administrative Dashboard A full administration panel was developed to provide officers with complete control over the platform. User permissions, launches, inventory, and other aspects of the system can all be managed through a web interface without requiring direct database access. Technical Highlights PostgreSQL-backed storage Role-based access control Attendance and launch management CSV export functionality Inventory request and approval workflows Integrated file storage system Administrative dashboard Over the last month, the platform has evolved into a central operating system for TJ Rocketry. The goal has been to reduce overhead for officers and provide members with a single location for everything they need. Future development will focus on expanding automation and adding additional tools to support the club’s engineering activities.
Ships:
# The TJ Rocketry Platform Over the last month, I have been developing a centralized platform for TJ Rocketry to streamline many of the club's operations. The project is backed by PostgreSQL and combines attendance tracking, inventory management, file storage, and administrative tools into a single system. ## Attendance and Launch Management One of the major additions has been an integrated attendance system. Officers can create launch events and generate attendance codes, allowing members to check in through the website. Attendance records can then be exported directly as CSV files, significantly reducing manual work. ## Inventory System I implemented a complete inventory management system to keep track of rocket components and supplies. Members can browse available items and submit requests, while officers can approve or deny them. The system automatically tracks inventory quantities and request history, making it easier to maintain accountability. ## File Storage To centralize documentation, I built a file system inspired by Google Drive. Members can upload, organize, and access CAD files, reports, presentations, and other club resources through a familiar interface. ## Resource Hub The platform also serves as a repository for important documents and resources. Guides, documentation, and reference material are organized in one location, making information easier to find for both new and experienced members. ## Administrative Dashboard A full administration panel was developed to provide officers with complete control over the platform. User permissions, launches, inventory, and other aspects of the system can all be managed through a web interface without requiring direct database access. ## Technical Highlights - PostgreSQL-backed storage - Role-based access control - Attendance and launch management - CSV export functionality - Inventory request and approval workflows - Integrated file storage system - Administrative dashboard Over the last month, the platform has evolved into a central operating system for TJ Rocketry. The goal has been to reduce overhead for officers and provide members with a single location for everything they need. Future development will focus on expanding automation and adding additional tools to support the club's engineering activities....
|
1793256985.0280082
|
1793343385.0280082
|
|
23803
|
Sudo2AC by @kallenseelo | Stardance
|
kallenseelo
|
1
|
8.75
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T00:35:39Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a Visual Studio Code extension that converts pseudocode and comments to real working code with just a highlight and click! I made it as a way to help make it easier to build code when you’re starting to learn a language and don’t really know how to bring your ideas to life. It lets you accurately learn by still writing how it should work but using the extension to see what that code actually looks like and applies to the rest of your project, making it easier to code while not taking away the human side! The main challenging part of this project was just learning how to build a Visual Studio Code plugin and get it working. Overall it’s pretty simple, but it took me a lot of research and debugging to get it working! Overall, though, it works super well, and I’m super proud of the result. To test this project, you need Visual Studio Code, as well as Ollama downloaded. I would recommend something like a cloud model, as it’s free and fast without needing super powerful hardware!", "repo": "https://github.com/k754a/Sudo2AC", "demo": "https://marketplace.visualstudio.com/items?itemName=KallenSeelo.sudo2ac"}]...
|
[{"post_id": 50675, "ts": "202 [{"post_id": 50675, "ts": "2026-08-19T23:35:59Z", "hours": 1.7458, "text": "Fix of the readme! I before had created a temp one using AI, just to kinda slot in there till I created my own, but i lowkey forgot to remove it, so i shipped with it, so this is the fix!"}, {"post_id": 14011, "ts": "2026-06-23T00:01:57Z", "hours": 0.6597, "text": "This is the final devlog. I cleaned up a bunch of stuff and built the project, also making a readme. I also got the project on the Visual Studio Code marketplace for anyone to try; I also made this awesome banner! (oh i also added keyboard shortcuts, to make it easier to use!) https://marketplace.visualstudio.com/items?itemName=KallenSeelo.sudo2ac"}, {"post_id": 13964, "ts": "2026-06-22T22:30:02Z", "hours": 3.3103, "text": "Demo of Sudo2AC! I finished work on my pseudocode to actual code plugin; it uses Ollama, which you can run locally or use their cloud models! It works super well converting structured pseudocode code into actual code that works! This can help make it easier for things like writing new things that relate to your functions, while understanding how it works!"}, {"post_id": 13542, "ts": "2026-06-22T04:54:14Z", "hours": 3.3156, "text": "Ok, this is the first push for my project, Sudo to actual code! I was trying to code an AI compiler, but AI really sucks at compiling things, but it gave me the idea that I could make a VS Code extension that helps you code faster by writing pseudocode for some functions and then getting it translated to real code using context from the rest of your functions. It would help you learn while not slowing you down! You still learn by still writing what you want to do, but the AI changes it so you can see how your idea converted to real code! Today was kind of basic; I just worked for about 45 mins trying to fix my Ollama install, then the rest trying and debugging things! I’m going to very much improve this to be much better, as the extension doesn’t really do anything currently!"}]...
|
Title: Sudo2AC by @kallenseelo | Stardance
Devlog Title: Sudo2AC by @kallenseelo | Stardance
Devlogs:
Ok, this is the first push for my project, Sudo to actual code! I was trying to code an AI compiler, but AI really sucks at compiling things, but it gave me the idea that I could make a VS Code extension that helps you code faster by writing pseudocode for some functions and then getting it translated to real code using context from the rest of your functions. It would help you learn while not slowing you down! You still learn by still writing what you want to do, but the AI changes it so you can see how your idea converted to real code! Today was kind of basic; I just worked for about 45 mins trying to fix my Ollama install, then the rest trying and debugging things! I’m going to very much improve this to be much better, as the extension doesn’t really do anything currently!
Demo of Sudo2AC! I finished work on my pseudocode to actual code plugin; it uses Ollama, which you can run locally or use their cloud models! It works super well converting structured pseudocode code into actual code that works! This can help make it easier for things like writing new things that relate to your functions, while understanding how it works!
This is the final devlog. I cleaned up a bunch of stuff and built the project, also making a readme. I also got the project on the Visual Studio Code marketplace for anyone to try; I also made this awesome banner! (oh i also added keyboard shortcuts, to make it easier to use!) https://marketplace.visualstudio.com/items?itemName=KallenSeelo.sudo2ac
Fix of the readme! I before had created a temp one using AI, just to kinda slot in there till I created my own, but i lowkey forgot to remove it, so i shipped with it, so this is the fix!
Ships:
I built a Visual Studio Code extension that converts pseudocode and comments to real working code with just a highlight and click! I made it as a way to help make it easier to build code when you’re starting to learn a language and don’t really know how to bring your ideas to life. It lets you accurately learn by still writing how it should work but using the extension to see what that code actually looks like and applies to the rest of your project, making it easier to code while not taking away the human side! The main challenging part of this project was just learning how to build a Visual Studio Code plugin and get it working. Overall it’s pretty simple, but it took me a lot of research and debugging to get it working! Overall, though, it works super well, and I’m super proud of the result. To test this project, you need Visual Studio Code, as well as Ollama downloaded. I would recommend something like a cloud model, as it’s free and fast without needing super powerful hardware!...
|
1792875243.1794202
|
1793739243.1794202
|
|
23805
|
Inverted Pendulum by @runthebot | Stardance
|
runthebot
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T15:14:05Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an inverted pendulum and leant a lot about control theory.", "repo": "https://github.com/RunTheBot/inverted-pendulum", "demo": ""}]...
|
[{"post_id": 67424, "ts": "202 [{"post_id": 67424, "ts": "2026-09-13T15:11:02Z", "hours": 37.8686, "text": "This is one big catch-up log covering nine recordings. I worked on the initial design, rebuilt parts of the belt assembly, chose and mounted the encoders, dealt with the wiring, and started learning how to control the system with a state-space model and LQR. Starting the CAD I began by researching different mechanical options while building the model in Onshape. Before I could get far into the full assembly, I needed to settle details such as the shaft, bearings, supports, and how everything would fit together.The first recording was only 57 minutes because recording my screen was making everything lag. In the next session, I continued developing the pivot assembly. The shaft passes through a bearing mounted in a shaped support plate, with another support behind it.The following 2h 52m session continued the CAD work. I spent more time on the plates, their hole layouts, and the surrounding geometry. At this stage, I was still developing individual parts rather than working with a finished mechanism. Reworking the belt assembly I spent another 38 minutes remaking the belt-related parts. I moved between editing the plate and checking how everything fit in the full assembly. This made it easier to see how the rail, carriage, shaft supports, and belt system would work together.This is why the update contains several separate CAD sessions. I kept returning to the same mechanism as the design developed: first the pivot, then the plates and belt assembly, and eventually the encoder mounts and smaller hardware details.Choosing the encodersThe next problem was deciding which encoders to use. I researched different options and mounting arrangements, including AMT-style encoders, before deciding to use the encoders I already had. That took another 1h 1m.Choosing the encoder was only half of the problem. I still had to determine how to mount it and connect everything reliably. Encoder wiring pain The appropriately named “Encoder Wiring Pain” session lasted 3h 40m. I worked through the encoder connections and looked at mounting references while figuring out how the sensor would fit into the rest of the mechanism.After that, I spent another 1h 52m making smaller mechanical changes in Onshape. By this point I was working on details around the encoder housing, connector, fasteners, and nearby parts.These changes were individually small, but they mattered because the sensor needed to fit around the existing hardware without interfering with the moving assembly.Learning state space and LQR The longest of the first eight sessions was 5h 19m. I spent it coding, learning about state-space control and LQR, and continuing some of the CAD work.I worked through notes for a state-space model and LQR controller for a cart double-pendulum system. This included defining the system’s state vector and understanding how the state-space equations describe its motion.This part was mainly development and learning. I haven’t established a successful balancing test from these recordings yet, so the controller still needs to be implemented, tuned, and tested on the real mechanism.Hardware work and final CAD changes The last recording covers hands-on hardware work alongside a few final CAD changes. I worked on the wiring at my desk while using references such as the Raspberry Pi Pico pinout.Again, this recording ran much longer than the actual work. Please count it as roughly 4–5 hours rather than the full 7h 41m shown by Lapse."}, {"post_id": 56170, "ts": "2024-08-16T00:00:00Z", "hours": 0.0, "text": "Programming… AND TUNING!!!! and testing. No challange here really, smooth sailing"}, {"post_id": 56169, "ts": "2024-08-14T00:00:00Z", "hours": 0.0, "text": "Hours: 4h Started on rewiring, Using a SKR Pico for a stepper this time. passing encoder through a RP2350 since its a 5v sensor. Im using a SKR pico now sooooo… I first feed the 5V encoder signal through a Pico 2 to translate it to 3.3v"}, {"post_id": 56089, "ts": "2024-08-10T00:00:00Z", "hours": 0.0, "text": "Hours: 4 Very slow CADing of a redesign. Using a stepper motor now soo yay."}, {"post_id": 56088, "ts": "2024-07-09T00:00:00Z", "hours": 0.0, "text": "Chud day. Worked on amt alignment for second stage, quite fast, went through 4 iteration, testing and calculating spacing ending up making the tool below did the wireing for the amt"}, {"post_id": 56087, "ts": "2024-06-21T00:00:00Z", "hours": 0.0, "text": "Switched Hex shaft in CAD to a bored out hex shaft"}]...
|
Title: Inverted Pendulum by @runthebot | Stardance Title: Inverted Pendulum by @runthebot | Stardance
Devlogs:
Switched Hex shaft in CAD to a bored out hex shaft
Chud day. Worked on amt alignment for second stage, quite fast, went through 4 iteration, testing and calculating spacing ending up making the tool below did the wireing for the amt
Hours: 4 Very slow CADing of a redesign. Using a stepper motor now soo yay.
Hours: 4h Started on rewiring, Using a SKR Pico for a stepper this time. passing encoder through a RP2350 since its a 5v sensor. Im using a SKR pico now sooooo… I first feed the 5V encoder signal through a Pico 2 to translate it to 3.3v
Programming… AND TUNING!!!! and testing. No challange here really, smooth sailing
This is one big catch-up log covering nine recordings. I worked on the initial design, rebuilt parts of the belt assembly, chose and mounted the encoders, dealt with the wiring, and started learning how to control the system with a state-space model and LQR. Starting the CAD I began by researching different mechanical options while building the model in Onshape. Before I could get far into the full assembly, I needed to settle details such as the shaft, bearings, supports, and how everything would fit together.The first recording was only 57 minutes because recording my screen was making everything lag. In the next session, I continued developing the pivot assembly. The shaft passes through a bearing mounted in a shaped support plate, with another support behind it.The following 2h 52m session continued the CAD work. I spent more time on the plates, their hole layouts, and the surrounding geometry. At this stage, I was still developing individual parts rather than working with a finished mechanism. Reworking the belt assembly I spent another 38 minutes remaking the belt-related parts. I moved between editing the plate and checking how everything fit in the full assembly. This made it easier to see how the rail, carriage, shaft supports, and belt system would work together.This is why the update contains several separate CAD sessions. I kept returning to the same mechanism as the design developed: first the pivot, then the plates and belt assembly, and eventually the encoder mounts and smaller hardware details.Choosing the encodersThe next problem was deciding which encoders to use. I researched different options and mounting arrangements, including AMT-style encoders, before deciding to use the encoders I already had. That took another 1h 1m.Choosing the encoder was only half of the problem. I still had to determine how to mount it and connect everything reliably. Encoder wiring pain The appropriately named “Encoder Wiring Pain” session lasted 3h 40m. I worked through the encoder connections and looked at mounting references while figuring out how the sensor would fit into the rest of the mechanism.After that, I spent another 1h 52m making smaller mechanical changes in Onshape. By this point I was working on details around the encoder housing, connector, fasteners, and nearby parts.These changes were individually small, but they mattered because the sensor needed to fit around the existing hardware without interfering with the moving assembly.Learning state space and LQR The longest of the first eight sessions was 5h 19m. I spent it coding, learning about state-space control and LQR, and continuing some of the CAD work.I worked through notes for a state-space model and LQR controller for a cart double-pendulum system. This included defining the system’s state vector and understanding how the state-space equations describe its motion.This part was mainly development and learning. I haven’t established a successful balancing test from these recordings yet, so the controller still needs to be implemented, tuned, and tested on the real mechanism.Hardware work and final CAD changes The last recording covers hands-on hardware work alongside a few final CAD changes. I worked on the wiring at my desk while using references such as the Raspberry Pi Pico pinout.Again, this recording ran much longer than the actual work. Please count it as roughly 4–5 hours rather than the full 7h 41m shown by Lapse.
Ships:
I made an inverted pendulum and leant a lot about control theory....
|
1793148462.9732592
|
1793234862.9732592
|
|
23816
|
Portfolio - Elijah Feldman by @elifeldman769 | Sta Portfolio - Elijah Feldman by @elifeldman769 | Stardance...
|
elifeldman769
|
1
|
12.0
|
192
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T15:52:13Z", "hours": 12.0, "multiplier": 16.3, "payout": 192, "blessing": "neutral", "text": "This is my personal website, built in React and hosted on Vercel. I designed most of it with smaller screens in mind first, since my hope was to render it best on the screen of phones, then made sure everything held up on desktop too, using different tailwind classnames for different screen sizes so pages fit well on small, medium, and large screens alike. The home page is smaller and vertically centered rather than using the full width like the rest of the site, since it’s the first thing anyone sees and I wanted it to feel right on a phone before anything else. On the top left of the navbar, it dynamically renders the current page name based on the url you’re on, and on small screens the links collapse into a hamburger button that opens into a full screen menu. For the gallery, I built an indexed system that automatically tiles a group of photos and displays them, hovering a photo reveals its caption sliding up from the bottom. Originally the captions came from the photo’s filename, split by underscore, so each member of that array got appended with spaces to become the string making up the name of the place, which is what shows up on hover. The gallery is much nicer now and loads quickly too, since I wrote a js script to go through each image and compress it, taking the photos from 40 MB down to about 4MB, meaning the page loads much much faster. The two photos that are actually portraits of me get compressed less aggressively than the rest so they stay sharp, since those are the ones I want search engines to associate with my name. I wanted to make sure the site would be easy to add to in the future, so the projects page pulls automatically from a JSON file. I specify a title, date, description, image path, and links, where I just give a tag name for each link and it renders in a unified button format. These are autopopulated with reference ids and jump to the right spot automatically, going straight to that project’s section, and they also get added to a table of contents at the top automatically, so adding a new project is just adding a JSON entry, nothing else. Publications works the same way, off its own JSON file, showing the paper’s title, authors with my own name auto-bolded, venue and year, and the same flexible tag and link buttons as projects. The CV page is taken from the latex code of my actual resume, restructured into that same JSON format so it renders natively on the site instead of just being an embedded PDF, with the option to download the compiled latex pdf too. The publications section on that page pulls from the exact same JSON file the publications page uses, so I only ever add a new paper in one place and both pages stay in sync. The blog has search and topic filtering over a list of posts, and each post’s actual content is a static html file that gets fetched dynamically based on the url, so writing a new post is dropping in an html file and a metadata entry rather than writing more react. Contact is just emails and socials, written with brackets around the at sign to dodge the most basic scrapers. I put the site on google search console with a sitemap so it gets indexed properly, and spent time making sure page titles, descriptions, and image metadata are set up right so photos of me actually have a shot at showing up when people search my name, without cluttering the site with extra images just for that purpose. Overall I really love the theme of this site, with the blue accents, I got some inspiration from other research portfolios I’d seen. Before this it was pretty scattered, without a gallery or projects page, and mostly just had the home page with a weird VantaJS background running on it. Now it’s a lot more complete: a dynamic gallery, a projects page and publications page that both pull from JSON so they’re easy to keep updated, a CV page sourced from my actual resume, and a blog that can actually grow instead of being one hardcoded post.", "repo": "https://github.com/ElijahFeldman7/portfolio", "demo": "https://elijahwfeldman.com"}]...
|
[{"post_id": 31277, "ts": "202 [{"post_id": 31277, "ts": "2026-07-19T15:40:04Z", "hours": 4.6214, "text": "Devlog II: Personal Portfolio The devlog today showcases in a sense more of a refinement with several large QOL updates, along with 2 more pages. Firstly, I optimized the site for mobile. All pages are now fit well for small or md screens by using different tailwind classnames for different screens. Second of all, the gallery is much nicer now and loads quickly, since I wrote a js script to go through each image and compress them. This took them from 40 MB -> 4MB, meaning the page loads much much faster. Next, I wanted to ensure that the site would be easy to add to in the future, so the projects page now pulls automatically from a JSON file. It can have tags for links that render in a unified format and I specify file path, description, title. These are autopopulated with reference ids and go to the table of contents automatically. I added a publications page to showcase my last paper, and those in the future to come. The CV is taken from latex code from my resume and is just a JSON structured format. It has the option to download the latex pdf too."}, {"post_id": 24201, "ts": "2026-07-07T16:47:34Z", "hours": 7.2322, "text": "Devlog I - Personal Website For a bit of context, I worked on this site earlier however before it was pretty scattered without a gallery, projects, and mostly just had the home page with a weird VantaJS background. I apoligize for not dev logging over the past 7 hours, since I got so caught up in dev work. For a brief overview, several features I built were: an indexed gallery system that would automatically tile a group of photos in a folder and display them. it would take the name of the photo and split it by _. for each member in the array, it would append it with spaces to become a string making the name of teh place that can be hovered over. On the top left of the navbar, it’ll dynamically render the url based on what page you are on The home page is smaller since my hope was to render it best on the screen of phones. I designed most of the site with smaller screens in mind For projects, I rendered a table of contexts that will jump to projects/#project based on the selected one, automatically going to that index of the page. I linked the code to previous project, bioblitz, however I still need to add more. I put the site on google search console with a sitemap so it will soon be indexed. Overall, I really love the theme of this site, with the blue accents. I got some inspiration from other research portfolios. In the future, I want to redo the blog page fully since it didn’t have much before but one not dynamically rendered post. Attached are some photos of the pages."}]...
|
Title: Portfolio - Elijah Feldman by @elifeldman76 Title: Portfolio - Elijah Feldman by @elifeldman769 | Stardance
Devlogs:
Devlog I - Personal Website For a bit of context, I worked on this site earlier however before it was pretty scattered without a gallery, projects, and mostly just had the home page with a weird VantaJS background. I apoligize for not dev logging over the past 7 hours, since I got so caught up in dev work. For a brief overview, several features I built were: an indexed gallery system that would automatically tile a group of photos in a folder and display them. it would take the name of the photo and split it by _. for each member in the array, it would append it with spaces to become a string making the name of teh place that can be hovered over. On the top left of the navbar, it’ll dynamically render the url based on what page you are on The home page is smaller since my hope was to render it best on the screen of phones. I designed most of the site with smaller screens in mind For projects, I rendered a table of contexts that will jump to projects/#project based on the selected one, automatically going to that index of the page. I linked the code to previous project, bioblitz, however I still need to add more. I put the site on google search console with a sitemap so it will soon be indexed. Overall, I really love the theme of this site, with the blue accents. I got some inspiration from other research portfolios. In the future, I want to redo the blog page fully since it didn’t have much before but one not dynamically rendered post. Attached are some photos of the pages.
Devlog II: Personal Portfolio The devlog today showcases in a sense more of a refinement with several large QOL updates, along with 2 more pages. Firstly, I optimized the site for mobile. All pages are now fit well for small or md screens by using different tailwind classnames for different screens. Second of all, the gallery is much nicer now and loads quickly, since I wrote a js script to go through each image and compress them. This took them from 40 MB -> 4MB, meaning the page loads much much faster. Next, I wanted to ensure that the site would be easy to add to in the future, so the projects page now pulls automatically from a JSON file. It can have tags for links that render in a unified format and I specify file path, description, title. These are autopopulated with reference ids and go to the table of contents automatically. I added a publications page to showcase my last paper, and those in the future to come. The CV is taken from latex code from my resume and is just a JSON structured format. It has the option to download the latex pdf too.
Ships:
This is my personal website, built in React and hosted on Vercel. I designed most of it with smaller screens in mind first, since my hope was to render it best on the screen of phones, then made sure everything held up on desktop too, using different tailwind classnames for different screen sizes so pages fit well on small, medium, and large screens alike. The home page is smaller and vertically centered rather than using the full width like the rest of the site, since it’s the first thing anyone sees and I wanted it to feel right on a phone before anything else. On the top left of the navbar, it dynamically renders the current page name based on the url you’re on, and on small screens the links collapse into a hamburger button that opens into a full screen menu. For the gallery, I built an indexed system that automatically tiles a group of photos and displays them, hovering a photo reveals its caption sliding up from the bottom. Originally the captions came from the photo’s filename, split by underscore, so each member of that array got appended with spaces to become the string making up the name of the place, which is what shows up on hover. The gallery is much nicer now and loads quickly too, since I wrote a js script to go through each image and compress it, taking the photos from 40 MB down to about 4MB, meaning the page loads much much faster. The two photos that are actually portraits of me get compressed less aggressively than the rest so they stay sharp, since those are the ones I want search engines to associate with my name. I wanted to make sure the site would be easy to add to in the future, so the projects page pulls automatically from a JSON file. I specify a title, date, description, image path, and links, where I just give a tag name for each link and it renders in a unified button format. These are autopopulated with reference ids and jump to the right spot automatically, going straight to that project’s section, and they also get added to a table of contents at the top automatically, so adding a new project is just adding a JSON entry, nothing else. Publications works the same way, off its own JSON file, showing the paper’s title, authors with my own name auto-bolded, venue and year, and the same flexible tag and link buttons as projects. The CV page is taken from the latex code of my actual resume, restructured into that same JSON format so it renders natively on the site instead of just being an embedded PDF, with the option to download the compiled latex pdf too. The publications section on that page pulls from the exact same JSON file the publications page uses, so I only ever add a new paper in one place and both pages stay in sync. The blog has search and topic filtering over a list of posts, and each post’s actual content is a static html file that gets fetched dynamically based on the url, so writing a new post is dropping in an html file and a metadata entry rather than writing more react. Contact is just emails and socials, written with brackets around the at sign to dodge the most basic scrapers. I put the site on google search console with a sitemap so it gets indexed properly, and spent time making sure page titles, descriptions, and image metadata are set up right so photos of me actually have a shot at showing up when people search my name, without cluttering the site with extra images just for that purpose. Overall I really love the theme of this site, with the blue accents, I got some inspiration from other research portfolios I’d seen. Before this it was pretty scattered, without a gallery or projects page, and mostly just had the home page with a weird VantaJS background running on it. Now it’s a lot more complete: a dynamic gallery, a projects page and publications page that both pull from JSON so they’re easy to keep updated, a CV page sourced from my actual resume, and a blog that can actually grow instead of being one hardcoded post....
|
1793263764.1133318
|
1793350164.1133318
|