|
16851
|
DukeOS by @Lauren_hackalicious | Stardance
|
Lauren_hackalicious
|
1
|
19.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T22:19:40Z", "hours": 19.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I initially wanted to make the OS theme centered around the jazz artist, Laufey. It was going great at first, but something felt off. In this first iteration, I kept running into bugs and errors that I couldn’t work out. I seized this as an opportunity to scrap the web-OS and center the theme on Frutiger. Frutiger is a design aesthetic that dominated technology, branding, and user interfaces from roughly 2004 to 2013. The buttons are prominently glossy (shiny almost), the backgrounds are lively and lush, and often have blue skies. I preferred this design because it was bright and vibrant, unlike my previous design choice. In this second iteration of the web-OS, I took on challenges with pride and care because I wanted this to work; I wanted to see my vision come to life. As a result, it has. In the first iteration, I couldn’t figure out how to move the handle or figure out how I wanted to design it. By the second iteration, I could! To close the tabs, click the “X” button. The maximize and minimize buttons don’t work, but are simply there as decoration. In my second version of my web-based OS, I plan to add a function to those buttons. This repository uses HTML, CSS, and JavaScript for functionality.", "repo": "https://github.com/example0d1n/DukeOS", "demo": "https://example0d1n.github.io/DukeOS/"}]...
|
[{"post_id": 11612, "ts": "202 [{"post_id": 11612, "ts": "2026-06-18T22:12:27Z", "hours": 2.8869, "text": "FINAL devlog | 1. I created a fully functioning weather app using JavaScript. This took almost 3 hours because I’m new to JavaScript, so I followed a tutorial by BroCode, who is a coding tutorial creator. He doesn’t just make the program; he explains what each line of code does and how it connects to the HTML/CSS file. 2. The weather app and notes app icons are draggable. 3. The calculator app is not draggable for some reason that I cannot figure out. The weather app window is not draggable for the same reason. In my second version of my web-based OS, I plan to have all my windows draggable."}, {"post_id": 11012, "ts": "2026-06-18T01:18:15Z", "hours": 1.6011, "text": "UPDATE - I replaced the music icon with a weather app icon because I plan on creating a music player as a separate JavaScript project - I updated the main window to include my GitHub profile and READ.ME - Everything is now draggable - I added a doc section to the bottom of my screen, and I plan to make them function similar to the apps in the main section of the OS"}, {"post_id": 10884, "ts": "2026-06-17T20:52:28Z", "hours": 2.8267, "text": "i added the calculator app to the webOS! This took almost 3 hours to do because of a lot of bug fixes ,and asking copilot for help, which ended up making things worse. I had to code the calculator myself in a seperate CSS file, so all the styling woulndn’t be in one large file. I can move the calculator window around, but I can’t close it due to some overlapping JS and CSS names.. i think. the next update willl have this fixed! I also learned that I can embed a script file into a specific div element.I used AI to program the onclick +1 on the z-index on the window. this essentially means when a person clicks a window, it is on the top layer."}, {"post_id": 9554, "ts": "2026-06-15T22:39:36Z", "hours": 1.7125, "text": "smallllll update I implemented the Notes window and made it closable and draggable. I’m unfamiliar with JavaScript, which is the magic that makes everything on my website function, so I’ve been struggling to follow the WebOS jam. I’m going to look up some YouTube videos about JavaScript to see if that’ll help me out. Any progress is good progress. This devlog documents the 12th hour I’ve worked on this project!! crazy to think about."}, {"post_id": 9066, "ts": "2026-06-15T04:19:40Z", "hours": 1.5697, "text": "GREAT progress today! I got the welcome window up and completely working, and both of my handles are draggable. This is a huge step up from the first iteration of my webOS, as I am happy with the current results! I also added background audio to the page, but I want it to play on loop without the audio controls. That is something I will have to figure out in the next devlog. The welcome window is closable :D"}, {"post_id": 8869, "ts": "2026-06-14T19:22:16Z", "hours": 1.705, "text": "I updated the top bar!! My journey so far with my DukeOS with the Frutiger customization has been riveting! I made the top bar fit the current aesthetic and added a small icon at the beginning of the section to make the OS feel more like an OS. I’m still struggling with getting the handle to work :/."}, {"post_id": 8516, "ts": "2026-06-14T05:05:44Z", "hours": 0.9647, "text": "Quick upd before I turn in for the night!! I fixed the CSS error that was occurring at the top of the main window on my OS! Turns out I just had to utilize a div I completely forgot about (whoops). I just began working on the top menu of the webOS. I’ll edit the style to match the Frutiger aesthetic I’m going for."}, {"post_id": 8449, "ts": "2026-06-14T01:27:50Z", "hours": 3.1067, "text": "COMPLETE STYLE REVAMP: Frutiger Aero! I thought long and hard about my recent struggle with my original OS and realized I wasn’t quite happy where I was. There were bugs I couldn’t quite fix, so I figured the best way to fix them all was by starting from scratch. By doing this, I can catch any coding errors I missed the first time around and learn from them! I hope to end my first webOS happy and satisfied. As you can see, my tab isn’t complete, and that is due to some CSS styling I can’t quite figure out yet. I will post a devlog with it fixed and the main window complete!"}, {"post_id": 7567, "ts": "2026-06-12T17:28:28Z", "hours": 0.9061, "text": "The handle drag still doesn’t work for some reason. I looked over the code a few times, making sure the div id has the str “header” included, but it doesn’t work. I decided to ignore the problem for now and continued to customize the handle to look like Laufey’s “A Matter of Time: Final Hour”. I added a labeled figcaption with that title. I really do want to get the handle draggable to really make the website feel like an OS, but I’m not familiar with JavaScript. If anyone could help me, I would greatly appreciate it! I linked my GitHub repository below https://github.com/example0d1n/DukeOS"}, {"post_id": 7266, "ts": "2026-06-12T03:44:27Z", "hours": 1.3033, "text": "Progress on my WebOS mission! I decided to sidequest from my main web project since I was getting pretty stumped on the form data collection. Going into this, I thought it would be simple, which it has been, except for the whole JavaScript portion. I am extremely unfamiliar with the language, so copy&pasting from the Jam and hoping the code worked (with the necessary edits) was my best bet. Whilst I am reading through the explanation from the Code Jam, I can’t figure out what went wrong in my “handle” element. My welcome window works fine as displayed in the video, but the handle, the isolated picture of Laufey, doesn’t. The image is either selected by my mouse or has a ghost drag effect to it. I plan to fix it by the next develog."}, {"post_id": 7054, "ts": "2026-06-11T20:24:53Z", "hours": 0.6961, "text": "Started working on the webOS project! I just inserted the window on the start screen :D"}]...
|
Title: DukeOS by @Lauren_hackalicious | Stardance
Title: DukeOS by @Lauren_hackalicious | Stardance
Devlogs:
Started working on the webOS project! I just inserted the window on the start screen :D
Progress on my WebOS mission! I decided to sidequest from my main web project since I was getting pretty stumped on the form data collection. Going into this, I thought it would be simple, which it has been, except for the whole JavaScript portion. I am extremely unfamiliar with the language, so copy&pasting from the Jam and hoping the code worked (with the necessary edits) was my best bet. Whilst I am reading through the explanation from the Code Jam, I can’t figure out what went wrong in my “handle” element. My welcome window works fine as displayed in the video, but the handle, the isolated picture of Laufey, doesn’t. The image is either selected by my mouse or has a ghost drag effect to it. I plan to fix it by the next develog.
The handle drag still doesn’t work for some reason. I looked over the code a few times, making sure the div id has the str “header” included, but it doesn’t work. I decided to ignore the problem for now and continued to customize the handle to look like Laufey’s “A Matter of Time: Final Hour”. I added a labeled figcaption with that title. I really do want to get the handle draggable to really make the website feel like an OS, but I’m not familiar with JavaScript. If anyone could help me, I would greatly appreciate it! I linked my GitHub repository below https://github.com/example0d1n/DukeOS
COMPLETE STYLE REVAMP: Frutiger Aero! I thought long and hard about my recent struggle with my original OS and realized I wasn’t quite happy where I was. There were bugs I couldn’t quite fix, so I figured the best way to fix them all was by starting from scratch. By doing this, I can catch any coding errors I missed the first time around and learn from them! I hope to end my first webOS happy and satisfied. As you can see, my tab isn’t complete, and that is due to some CSS styling I can’t quite figure out yet. I will post a devlog with it fixed and the main window complete!
Quick upd before I turn in for the night!! I fixed the CSS error that was occurring at the top of the main window on my OS! Turns out I just had to utilize a div I completely forgot about (whoops). I just began working on the top menu of the webOS. I’ll edit the style to match the Frutiger aesthetic I’m going for.
I updated the top bar!! My journey so far with my DukeOS with the Frutiger customization has been riveting! I made the top bar fit the current aesthetic and added a small icon at the beginning of the section to make the OS feel more like an OS. I’m still struggling with getting the handle to work :/.
GREAT progress today! I got the welcome window up and completely working, and both of my handles are draggable. This is a huge step up from the first iteration of my webOS, as I am happy with the current results! I also added background audio to the page, but I want it to play on loop without the audio controls. That is something I will have to figure out in the next devlog. The welcome window is closable :D
smallllll update I implemented the Notes window and made it closable and draggable. I’m unfamiliar with JavaScript, which is the magic that makes everything on my website function, so I’ve been struggling to follow the WebOS jam. I’m going to look up some YouTube videos about JavaScript to see if that’ll help me out. Any progress is good progress. This devlog documents the 12th hour I’ve worked on this project!! crazy to think about.
i added the calculator app to the webOS! This took almost 3 hours to do because of a lot of bug fixes ,and asking copilot for help, which ended up making things worse. I had to code the calculator myself in a seperate CSS file, so all the styling woulndn’t be in one large file. I can move the calculator window around, but I can’t close it due to some overlapping JS and CSS names.. i think. the next update willl have this fixed! I also learned that I can embed a script file into a specific div element.I used AI to program the onclick +1 on the z-index on the window. this essentially means when a person clicks a window, it is on the top layer.
UPDATE - I replaced the music icon with a weather app icon because I plan on creating a music player as a separate JavaScript project - I updated the main window to include my GitHub profile and READ.ME - Everything is now draggable - I added a doc section to the bottom of my screen, and I plan to make them function similar to the apps in the main section of the OS
FINAL devlog | 1. I created a fully functioning weather app using JavaScript. This took almost 3 hours because I’m new to JavaScript, so I followed a tutorial by BroCode, who is a coding tutorial creator. He doesn’t just make the program; he explains what each line of code does and how it connects to the HTML/CSS file. 2. The weather app and notes app icons are draggable. 3. The calculator app is not draggable for some reason that I cannot figure out. The weather app window is not draggable for the same reason. In my second version of my web-based OS, I plan to have all my windows draggable.
Ships:
I initially wanted to make the OS theme centered around the jazz artist, Laufey. It was going great at first, but something felt off. In this first iteration, I kept running into bugs and errors that I couldn’t work out. I seized this as an opportunity to scrap the web-OS and center the theme on Frutiger. Frutiger is a design aesthetic that dominated technology, branding, and user interfaces from roughly 2004 to 2013. The buttons are prominently glossy (shiny almost), the backgrounds are lively and lush, and often have blue skies. I preferred this design because it was bright and vibrant, unlike my previous design choice. In this second iteration of the web-OS, I took on challenges with pride and care because I wanted this to work; I wanted to see my vision come to life. As a result, it has. In the first iteration, I couldn’t figure out how to move the handle or figure out how I wanted to design it. By the second iteration, I could! To close the tabs, click the “X” button. The maximize and minimize buttons don’t work, but are simply there as decoration. In my second version of my web-based OS, I plan to add a function to those buttons. This repository uses HTML, CSS, and JavaScript for functionality....
|
1793789491.5289445
|
1793875891.5289445
|
|
16852
|
My very own WebOS by @chez | Stardance
|
chez
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @chez | Stardance
|
1793188304.652503
|
1793793104.652503
|
|
16853
|
My very own WebOS by @sandesh | Stardance
|
sandesh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @sandesh | Stardance
|
1792911149.5427942
|
1793775149.5427942
|
|
16854
|
Pixel Phone Case Design by @Lakshyat | Stardance
|
Lakshyat
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Pixel Phone Case Design by @Lakshyat | Star Title: Pixel Phone Case Design by @Lakshyat | Stardance...
|
1793785910.133779
|
1794390710.133779
|
|
16855
|
Attendance App by @sandesh | Stardance
|
sandesh
|
0
|
10.77
|
0
|
[]
|
[{"post_id": 61032, "ts": "202 [{"post_id": 61032, "ts": "2026-09-03T18:54:43Z", "hours": 1.0894, "text": "Devlog 5 Today I built UI for the signup screen! It was fun time building it. I had login screen UI code on the side panel so that I could reuse things from the already built part. The most annoying part fixing was role dropdown. When user was selected it would display dropdown on upside and when it was admin selected it would display the role in down part but after few tries I fixed it to stay down the whole time. Tomorrow I would add the functions and test my login/signup and everything for authentication. or maybe also add forgot password page and complete it tomorrow as its something very easy as per youtube gods."}, {"post_id": 60433, "ts": "2026-09-02T19:17:15Z", "hours": 1.9236, "text": "Devlog 4 Today, I had a different plan. I wanted to work on signup page and forgot password? page. Instead, I worked on user roles. I started this project today with defining scope of this app; user stories; I had completely missed it. I wrote it in my diary. Then worked on user roles it was way complicated for me as it is my first app ever on flutter and I am doing it by learning from youtube, google and asking ai where none of above seems to guide me i ask it for guidance and did it myself. I don’t have demo for it because I could not create user without signup button as I lack my knowledge currently in that field."}, {"post_id": 59760, "ts": "2026-09-01T18:07:22Z", "hours": 4.2706, "text": "Devlog 3 Finally, after 3 months, I am working on this project. Since I just started reworking today, I first needed to clean up all the mess I had made before. This included fixing errors that were already there 3 months ago, and I also had to move the project to the C drive because I was getting an error due to cache and couldn’t solve it in my original folder. After fixing the mess, I added email password authentication using Firebase. Tested it out, and worked smoothly. I haven’t yet added error handling, so it just logs me in when the email and password are correct. Will soon add error handling. Also, I will add forgot password and signup real soon, but not yet. Also, the sign-out button on the homepage works yay!! What did I learn today? Sometimes what is not even an error could be flagged as an error. How to fix it? Just ignore it lol. Try working on the project consistently, or else you will forget the code you wrote 3 months ago. and will spend more time just wondering what you did."}, {"post_id": 8263, "ts": "2026-06-13T19:07:59Z", "hours": 2.2594, "text": "Devlog 2 In this devlog, I will talk about what I learned and what I built today. I started by learning the difference between stateless and stateful widgets. A stateless widget displays fixed content, while a stateful widget can update its content dynamically based on user interaction or data changes. Next, I explored rows and columns. Rows arrange widgets horizontally, while columns arrange them vertically. Understanding these layouts helped me structure my UI more effectively. I also learned about images and containers. Flutter provides two ways to display images: NetworkImage and AssetImage. Network images are loaded from a URL, while asset images are bundled with the app, making them more reliable and faster to load. Containers help organize and position widgets by providing spacing, sizing, and styling options. Another topic I covered was fonts and text styling. Custom fonts need to be added to the project and configured before they can be used. Flutter’s text styling system feels similar to CSS, allowing customization of size, weight, color, and other properties. While building my project, I also gained practical experience with buttons, padding, SizedBox, SingleChildScrollView, TextEditingControllers, and email/password input fields. Using everything I learned yesterday and today, I built a simple Login UI. Although it is a basic project, it helped me understand how different widgets work together to create a functional interface. Overall, today was focused on learning Flutter fundamentals and applying them in a small project rather than just following tutorials. My next goal is to improve the UI further and start adding functionality behind the interface."}, {"post_id": 7598, "ts": "2026-06-12T18:21:58Z", "hours": 1.2225, "text": "Devlog 1 I created a Flutter project that supports both mobile and web. Then, I created a new project in Firebase. I then enabled email/password login in Firebase. Also created Firestore database in test mode. This is the part I enjoyed the most so far. I watched few youtube videos learning basics of flutter and dart. The progress for day 1 is not a lot. But I want to work on this project continuously and daily. My main time spend today was learning and trying what I learned and setup a build environment."}]...
|
Title: Attendance App by @sandesh | Stardance
Dev Title: Attendance App by @sandesh | Stardance
Devlogs:
Devlog 1 I created a Flutter project that supports both mobile and web. Then, I created a new project in Firebase. I then enabled email/password login in Firebase. Also created Firestore database in test mode. This is the part I enjoyed the most so far. I watched few youtube videos learning basics of flutter and dart. The progress for day 1 is not a lot. But I want to work on this project continuously and daily. My main time spend today was learning and trying what I learned and setup a build environment.
Devlog 2 In this devlog, I will talk about what I learned and what I built today. I started by learning the difference between stateless and stateful widgets. A stateless widget displays fixed content, while a stateful widget can update its content dynamically based on user interaction or data changes. Next, I explored rows and columns. Rows arrange widgets horizontally, while columns arrange them vertically. Understanding these layouts helped me structure my UI more effectively. I also learned about images and containers. Flutter provides two ways to display images: NetworkImage and AssetImage. Network images are loaded from a URL, while asset images are bundled with the app, making them more reliable and faster to load. Containers help organize and position widgets by providing spacing, sizing, and styling options. Another topic I covered was fonts and text styling. Custom fonts need to be added to the project and configured before they can be used. Flutter’s text styling system feels similar to CSS, allowing customization of size, weight, color, and other properties. While building my project, I also gained practical experience with buttons, padding, SizedBox, SingleChildScrollView, TextEditingControllers, and email/password input fields. Using everything I learned yesterday and today, I built a simple Login UI. Although it is a basic project, it helped me understand how different widgets work together to create a functional interface. Overall, today was focused on learning Flutter fundamentals and applying them in a small project rather than just following tutorials. My next goal is to improve the UI further and start adding functionality behind the interface.
Devlog 3 Finally, after 3 months, I am working on this project. Since I just started reworking today, I first needed to clean up all the mess I had made before. This included fixing errors that were already there 3 months ago, and I also had to move the project to the C drive because I was getting an error due to cache and couldn’t solve it in my original folder. After fixing the mess, I added email password authentication using Firebase. Tested it out, and worked smoothly. I haven’t yet added error handling, so it just logs me in when the email and password are correct. Will soon add error handling. Also, I will add forgot password and signup real soon, but not yet. Also, the sign-out button on the homepage works yay!! What did I learn today? Sometimes what is not even an error could be flagged as an error. How to fix it? Just ignore it lol. Try working on the project consistently, or else you will forget the code you wrote 3 months ago. and will spend more time just wondering what you did.
Devlog 4 Today, I had a different plan. I wanted to work on signup page and forgot password? page. Instead, I worked on user roles. I started this project today with defining scope of this app; user stories; I had completely missed it. I wrote it in my diary. Then worked on user roles it was way complicated for me as it is my first app ever on flutter and I am doing it by learning from youtube, google and asking ai where none of above seems to guide me i ask it for guidance and did it myself. I don’t have demo for it because I could not create user without signup button as I lack my knowledge currently in that field.
Devlog 5 Today I built UI for the signup screen! It was fun time building it. I had login screen UI code on the side panel so that I could reuse things from the already built part. The most annoying part fixing was role dropdown. When user was selected it would display dropdown on upside and when it was admin selected it would display the role in down part but after few tries I fixed it to stay down the whole time. Tomorrow I would add the functions and test my login/signup and everything for authentication. or maybe also add forgot password page and complete it tomorrow as its something very easy as per youtube gods....
|
1793433038.711478
|
1794037838.711478
|
|
16856
|
StudyFlow by @anshnadger | Stardance
|
anshnadger
|
1
|
9.64
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T19:49:19Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a web app called StudyFlow that helps users manage tasks and notes. It includes login accounts, task tracking with priorities and due dates, and a notes system with basic text formatting. The hardest parts were fixing Flask backend bugs, setting up user login so each user’s data is separate, and making task sorting and the rich-text editor work properly. I’m proud that I built a full working full-stack app with authentication, database storage, and useful features like progress tracking and formatted notes. To test it, users should sign up, log in, then add tasks or notes; tasks can be marked complete by clicking them, and notes support formatting like bold text and lists.", "repo": "https://github.com/aan-2012/studyflow-webapp/", "demo": "https://studyflow-webapp.onrender.com/"}]...
|
[{"post_id": 24892, "ts": "202 [{"post_id": 24892, "ts": "2026-07-08T18:56:09Z", "hours": 0.5131, "text": "Today I focused on making StudyFlow feel more like a real website by improving the overall design and user experience. I started by upgrading the UI theme. I replaced the basic styling with a more modern look by adding a cleaner background, glass-style cards, smoother animations, better spacing, and a more professional color palette. I also updated the navigation bar and homepage styling to make the app feel more polished and consistent. After improving the overall theme, I focused on making sure the dashboard stayed clean and not overloaded with unnecessary information. Instead of adding too many features, I worked on improving the existing sections so the homepage feels organized and easy to use.I also upgraded the dashboard statistics section. The old stats were simple numbers, so I redesigned them into cleaner cards with icons, better layouts, and smoother hover effects. This makes it easier for users to quickly understand their progress when they open the app. Overall, today’s update was mainly about turning StudyFlow from a simple functional app into a more professional-looking productivity platform. The focus was improving the experience, keeping the design clean, and making the website feel more like a real application."}, {"post_id": 23632, "ts": "2026-07-06T18:23:54Z", "hours": 1.1317, "text": "Today I spent a lot of time improving my StudyFlow web app and basically pushing it from a “works but simple” project into something that actually feels like a real website. I started by fixing a bunch of core issues in the login and signup system. At first, there were some bugs where routes weren’t returning properly and authentication wasn’t behaving consistently, but after going through the Flask logic and sessions, I got login, signup, and logout fully working with hashed passwords and a proper users table. After that, I worked on improving the task system UI. One issue I ran into was that completed tasks didn’t clearly show as done anymore, so I fixed the styling so strikethrough and visual feedback properly show when a task is completed. I also made sure the edit and delete buttons stayed aligned correctly in the task list, because at one point they were dropping under the task text and breaking the layout. Then I moved into the notes editor, which was honestly the trickiest part of the UI. I added formatting tools like bold, italic, underline, and bullet/numbered lists using a content-editable editor. That part took a bit of debugging because the list formatting and syncing with the hidden input wasn’t behaving properly, but I got it working so notes now save properly with formatting intact. A big chunk of the day was also spent on the overall design refresh. I upgraded the entire UI theme to look much more modern, adding a gradient background, blurred “glass” style navbar and cards, smoother hover animations, and better spacing and typography using a new font (Poppins). The goal was to make it feel less like a school project and more like a real productivity app you’d actually use. I also improved the homepage dashboard so it feels more like a proper landing page, with a hero section, quick navigation buttons, and stats cards showing progress and completed tasks. I even added a background design with soft glowing shapes to make it feel less flat. Overall, today was mostly about fixing bugs while also slowly upgrading the entire look and feel of the app without breaking existing features. The end result is a much cleaner, more modern StudyFlow that still keeps all the original functionality but now actually feels polished."}, {"post_id": 21672, "ts": "2026-07-03T19:12:48Z", "hours": 3.7686, "text": "I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!"}, {"post_id": 15920, "ts": "2026-06-25T21:24:46Z", "hours": 4.4872, "text": "I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!"}]...
|
Title: StudyFlow by @anshnadger | Stardance
Devlo Title: StudyFlow by @anshnadger | Stardance
Devlogs:
I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!
I am working on a website that helps people to keep track of their tasks, take notes with ease, and more! No more stressing overnight to cram for your finals, study with the flow now!
Today I spent a lot of time improving my StudyFlow web app and basically pushing it from a “works but simple” project into something that actually feels like a real website. I started by fixing a bunch of core issues in the login and signup system. At first, there were some bugs where routes weren’t returning properly and authentication wasn’t behaving consistently, but after going through the Flask logic and sessions, I got login, signup, and logout fully working with hashed passwords and a proper users table. After that, I worked on improving the task system UI. One issue I ran into was that completed tasks didn’t clearly show as done anymore, so I fixed the styling so strikethrough and visual feedback properly show when a task is completed. I also made sure the edit and delete buttons stayed aligned correctly in the task list, because at one point they were dropping under the task text and breaking the layout. Then I moved into the notes editor, which was honestly the trickiest part of the UI. I added formatting tools like bold, italic, underline, and bullet/numbered lists using a content-editable editor. That part took a bit of debugging because the list formatting and syncing with the hidden input wasn’t behaving properly, but I got it working so notes now save properly with formatting intact. A big chunk of the day was also spent on the overall design refresh. I upgraded the entire UI theme to look much more modern, adding a gradient background, blurred “glass” style navbar and cards, smoother hover animations, and better spacing and typography using a new font (Poppins). The goal was to make it feel less like a school project and more like a real productivity app you’d actually use. I also improved the homepage dashboard so it feels more like a proper landing page, with a hero section, quick navigation buttons, and stats cards showing progress and completed tasks. I even added a background design with soft glowing shapes to make it feel less flat. Overall, today was mostly about fixing bugs while also slowly upgrading the entire look and feel of the app without breaking existing features. The end result is a much cleaner, more modern StudyFlow that still keeps all the original functionality but now actually feels polished.
Today I focused on making StudyFlow feel more like a real website by improving the overall design and user experience. I started by upgrading the UI theme. I replaced the basic styling with a more modern look by adding a cleaner background, glass-style cards, smoother animations, better spacing, and a more professional color palette. I also updated the navigation bar and homepage styling to make the app feel more polished and consistent. After improving the overall theme, I focused on making sure the dashboard stayed clean and not overloaded with unnecessary information. Instead of adding too many features, I worked on improving the existing sections so the homepage feels organized and easy to use.I also upgraded the dashboard statistics section. The old stats were simple numbers, so I redesigned them into cleaner cards with icons, better layouts, and smoother hover effects. This makes it easier for users to quickly understand their progress when they open the app. Overall, today’s update was mainly about turning StudyFlow from a simple functional app into a more professional-looking productivity platform. The focus was improving the experience, keeping the design clean, and making the website feel more like a real application.
Ships:
I made a web app called StudyFlow that helps users manage tasks and notes. It includes login accounts, task tracking with priorities and due dates, and a notes system with basic text formatting. The hardest parts were fixing Flask backend bugs, setting up user login so each user’s data is separate, and making task sorting and the rich-text editor work properly. I’m proud that I built a full working full-stack app with authentication, database storage, and useful features like progress tracking and formatted notes. To test it, users should sign up, log in, then add tasks or notes; tasks can be marked complete by clicking them, and notes support formatting like bold text and lists....
|
1793692605.929441
|
1793779005.929441
|
|
16857
|
KiwiCubed by @Kiwian | Stardance
|
Kiwian
|
0
|
10.88
|
0
|
[]
|
[{"post_id": 9580, "ts": "2026 [{"post_id": 9580, "ts": "2026-06-15T23:18:58Z", "hours": 7.7656, "text": "Thread safety and OpenGL Threads are a huge part of KiwiCubed. When running an integrated server, you are already running 5 central threads at once (render/tick/network for the client, and tick/network for the server). And getting these threads to work together is rarely simple. After I had first finished getting the server to send over player join packets, and getting player models to parse and render correctly, I figured I’d be done. However, whenever the client would try to render a new player, I’d get a weird OpenGL error saying that no vertex array object was bound. This was weird, because I have a simple abstraction layer over OpenGL, that currently is very aggressive with making sure that no errors like this occur, forsaking a small amount of performance (because OpenGL is not what I want to spend my time debugging when implementing features). Because of this, it should have been basically impossible for the program to ever be in an invalid OpenGL state. After adding some logs to see the exact ID of every vertex array object generated, saw that the ID for the player was always 0, and finally realized the problem. When the client received a packet informing it of a new entity, the NetworkHandler would call a callback registered by a different part of the program. This callback would immediately spawn and setup the full entity. Crucially, for entities with EntityRenderableComponent ‘s, this included generating OpenGL buffers and uploading data to them. The thing is, LiteNetLib (the networking library I use) doesn’t run on the main thread. It uses some worker thread(s?) so it can send and receive packets asynchronously. This meant that, all entity setup code from network-received entities would be run on a background thread. If you don’t know, OpenGL is very thread aware, and only lets you do operations from the thread where the OpenGL context is generated. You can manually set up a “shared context”, but the shared context actually doesn’t support specifically vertex array object creation, which makes it useless for my purposes anyways. Basically, what would happen, is that the NetworkHandler would receive the entity and set it up on that thread, and then OpenGL would SILENTLY fail the several operations involved in setting up an entity. Moral of the story: I hate threading. And also why does OpenGL not give errors for trying to use it from the wrong thread? wtf (I used lazy initialization to fix it. Kind of a band-aid fix but it was the best I could think of at the time)"}, {"post_id": 7295, "ts": "2026-06-12T05:00:09Z", "hours": 3.1147, "text": "Finally fixed a client-side rendering issue I introduced while trying to implement multiplayer. See, for normal entities, their positions are only updated roughly every 3 frames (1 tick w/ 20tps & 60fps). Because of this, the render thread actually keeps track of each entity’s current and last position, and then interpolates between those positions based on how far through the current tick is when rendering. This is the same method I used for determining the camera position for the player. However, there is an issue with this method. It’s very hard to get the tick thread to run on an exact 50ms interval because of OS-level limitations. Because of this, based on how the render/tick threads are aligned, the render thread may find that the value used for seeing how far along the current tick is (usually 0.0-1.0) is actually 1.0+. When this happens, it causes visible stuttering and jittering with entity positions. Now, this issue doesn’t really affect entities, as there is a simple solution, which is to simply keep a slightly larger buffer of entity positions. Then, instead of using the current/last tick positions to interpolate, it uses the 2/3 last positions in the buffer, allowing the tick thread some wiggle room. Of course, this doesn’t work for the player, which needs to update visually as quickly as possible. And I finally made the connection that this method I was planning to use on other entities wouldn’t work on the player. So I’ve finally changed the engine to query player input and apply player physics every frame, separate from all other entities, and I’ve refactored the physics system to be able to handle being called at differing rates (20tps vs 60fps);"}]...
|
Title: KiwiCubed by @Kiwian | Stardance
Devlogs:
Title: KiwiCubed by @Kiwian | Stardance
Devlogs:
Finally fixed a client-side rendering issue I introduced while trying to implement multiplayer. See, for normal entities, their positions are only updated roughly every 3 frames (1 tick w/ 20tps & 60fps). Because of this, the render thread actually keeps track of each entity’s current and last position, and then interpolates between those positions based on how far through the current tick is when rendering. This is the same method I used for determining the camera position for the player. However, there is an issue with this method. It’s very hard to get the tick thread to run on an exact 50ms interval because of OS-level limitations. Because of this, based on how the render/tick threads are aligned, the render thread may find that the value used for seeing how far along the current tick is (usually 0.0-1.0) is actually 1.0+. When this happens, it causes visible stuttering and jittering with entity positions. Now, this issue doesn’t really affect entities, as there is a simple solution, which is to simply keep a slightly larger buffer of entity positions. Then, instead of using the current/last tick positions to interpolate, it uses the 2/3 last positions in the buffer, allowing the tick thread some wiggle room. Of course, this doesn’t work for the player, which needs to update visually as quickly as possible. And I finally made the connection that this method I was planning to use on other entities wouldn’t work on the player. So I’ve finally changed the engine to query player input and apply player physics every frame, separate from all other entities, and I’ve refactored the physics system to be able to handle being called at differing rates (20tps vs 60fps);
Thread safety and OpenGL Threads are a huge part of KiwiCubed. When running an integrated server, you are already running 5 central threads at once (render/tick/network for the client, and tick/network for the server). And getting these threads to work together is rarely simple. After I had first finished getting the server to send over player join packets, and getting player models to parse and render correctly, I figured I’d be done. However, whenever the client would try to render a new player, I’d get a weird OpenGL error saying that no vertex array object was bound. This was weird, because I have a simple abstraction layer over OpenGL, that currently is very aggressive with making sure that no errors like this occur, forsaking a small amount of performance (because OpenGL is not what I want to spend my time debugging when implementing features). Because of this, it should have been basically impossible for the program to ever be in an invalid OpenGL state. After adding some logs to see the exact ID of every vertex array object generated, saw that the ID for the player was always 0, and finally realized the problem. When the client received a packet informing it of a new entity, the NetworkHandler would call a callback registered by a different part of the program. This callback would immediately spawn and setup the full entity. Crucially, for entities with EntityRenderableComponent ‘s, this included generating OpenGL buffers and uploading data to them. The thing is, LiteNetLib (the networking library I use) doesn’t run on the main thread. It uses some worker thread(s?) so it can send and receive packets asynchronously. This meant that, all entity setup code from network-received entities would be run on a background thread. If you don’t know, OpenGL is very thread aware, and only lets you do operations from the thread where the OpenGL context is generated. You can manually set up a “shared context”, but the shared context actually doesn’t support specifically vertex array object creation, which makes it useless for my purposes anyways. Basically, what would happen, is that the NetworkHandler would receive the entity and set it up on that thread, and then OpenGL would SILENTLY fail the several operations involved in setting up an entity. Moral of the story: I hate threading. And also why does OpenGL not give errors for trying to use it from the wrong thread? wtf (I used lazy initialization to fix it. Kind of a band-aid fix but it was the best I could think of at the time)...
|
1793379360.8708642
|
1793984160.8708642
|
|
16858
|
Hackpad yay! by @saanvispacecase | Stardance
|
saanvispacecase
|
0
|
13.54
|
0
|
[]
|
[{"post_id": 29802, "ts": "202 [{"post_id": 29802, "ts": "2026-07-16T22:43:48Z", "hours": 0.4625, "text": "I just finished my hackpad and shipped it! First time shipping a project, I’m so proud of myself! Here’s some pics of the completed design, it’ll be able to control media, brightness, and volume!"}, {"post_id": 27224, "ts": "2026-07-12T16:32:54Z", "hours": 0.5508, "text": "HELLO!! quick devlog update. i’ve given up on the api…i want to ship this project so that i can get some feedback and improve on it. i’ve started making the images for the oled display! coded the switches and encoder already (in kmk), so now i just have the display left, then i’m pretty much ready to ship! super excited for that, we’ll see how it goes!"}, {"post_id": 24506, "ts": "2026-07-08T03:08:02Z", "hours": 0.3744, "text": "HELLO!! I am still trucking along, made my main.py file, finished the custom key file for the like function, and created the serial file to send the like command to my laptop. tomorrow, i’ll probably work on the part of the firmware that connects the commands received by the laptop through serial to spotify (API time!! i’m gonna be a spotify developer :’)) i feel like it’s going pretty well, i’m understanding all the code and it’s fun to work with so many connecting files and learn all these skills i haven’t ever done before. stay tuned for this engineer’s first ever time soldering! (hopefully that happens sooner than later) signing off, vi!!"}, {"post_id": 23014, "ts": "2026-07-05T18:46:37Z", "hours": 3.5014, "text": "Hi everyone :)) Took a quick break from the project because I ran a 10k for the 4th of July! Anyways, I started the firmware. My plan of attack is to use the native KMK functions to make the next, previous, and mute functions, then write a separate python script that uses the spotify api and code the custom keys to connect to the separate script where I can make them do things like like the song and show the song playing on the oled. Hopefully it works, I’ve never done something like this! Wish me luck!!"}, {"post_id": 17409, "ts": "2026-06-28T05:31:17Z", "hours": 4.3772, "text": "HELLO!! I’m back with a hackpad update. made lots of progress today! i rerouted and rerouted and rerouted my PCB and i think i’m happy with it now! no errors on DRC and it (to my untrained eyes) looks a lot cleaner! if someone sees any major issues with my routing, please tell me, i’m so nervous about it :((. i also almost finished my CAD for the case!! i decided to separate the parts into the top and bottom portions of the case and assemble them together in fusion, which worked pretty well. some things i need to fix tomorrow are the placement of the usb-c port (too high on the cad model relative to the oled display), find out the dimensions of the oled, and add holes for screws. after that, i should be ready to move on to firmware (NERVOUS)! anyways, i’m chugging along, slowly but surely! it is definitely time for me to go to bed, but happy creating, everyone!"}, {"post_id": 16451, "ts": "2026-06-26T19:31:39Z", "hours": 2.5503, "text": "HELLO PARTY PEOPLE! I got a lot farther on my hackpad since 2AM, when I first wrote my devlog. I finished the schematic, using matrix wiring for the switches (pretty fun!!) and I added the rotary encoder, OLED display, and RGB LEDs (which I’m not sure I PCB’d correctly, yes that’s a verb now), then moved on to PCB. I first completely did front copper wiring, which was a hassle, then I actually read the instructions and alternated between front and back as needed, which made it much easier. I added a little reference image of the Spotify logo and named my hackpad the Musepad, so it’s official now! I’m gonna move on to my FAVORITE part, CADing the case (i literally LOVE CAD so much) and then my not so favorite part, working on the firmware (but it’ll still be cool! never worked with APIs before!). I’m so excited to eventually hold my Musepad in my hands once I finish! See you guys later!"}, {"post_id": 16294, "ts": "2026-06-26T14:34:32Z", "hours": 1.7219, "text": "6/26: first hackpad devlog Hello to all my fans (total number: 0)! I’ve been working on this project for about a week now, but will probably restart or do some severe editing. Now that I’ve looked at a few examples of what I want to do, I have made a plan. I will either create a hackpad that displays the weather, or one that connects to my spotify and displays the song I am playing along with a progress bar correlating to the length of the song (I like the second idea better). With my switches, I want to be able to increase or decrease volume and skip songs, so I would need four switches. I could also implement a rotary encoder to move within the song, although this would only work for premium. I might give the rotary encoder a different job…maybe changing the RGB colors of the keyboard backlighting or adding an animation or scrolling through long titles. I’ll have to see. I found an API called SpotAPI that I might look into because it says I can use Spotify Free, I just have to see if it’s legal. So far, I’ve created the schematic and moved on to the PCB, although I want to redesign my schematic to add in matrix wiring (just to try and make it cleaner, although I may not need it). Anywayssss, that’s all from me, your favorite engineer that has zero clue what she’s doing!"}]...
|
Title: Hackpad yay! by @saanvispacecase | Stardanc Title: Hackpad yay! by @saanvispacecase | Stardance
Devlogs:
6/26: first hackpad devlog Hello to all my fans (total number: 0)! I’ve been working on this project for about a week now, but will probably restart or do some severe editing. Now that I’ve looked at a few examples of what I want to do, I have made a plan. I will either create a hackpad that displays the weather, or one that connects to my spotify and displays the song I am playing along with a progress bar correlating to the length of the song (I like the second idea better). With my switches, I want to be able to increase or decrease volume and skip songs, so I would need four switches. I could also implement a rotary encoder to move within the song, although this would only work for premium. I might give the rotary encoder a different job…maybe changing the RGB colors of the keyboard backlighting or adding an animation or scrolling through long titles. I’ll have to see. I found an API called SpotAPI that I might look into because it says I can use Spotify Free, I just have to see if it’s legal. So far, I’ve created the schematic and moved on to the PCB, although I want to redesign my schematic to add in matrix wiring (just to try and make it cleaner, although I may not need it). Anywayssss, that’s all from me, your favorite engineer that has zero clue what she’s doing!
HELLO PARTY PEOPLE! I got a lot farther on my hackpad since 2AM, when I first wrote my devlog. I finished the schematic, using matrix wiring for the switches (pretty fun!!) and I added the rotary encoder, OLED display, and RGB LEDs (which I’m not sure I PCB’d correctly, yes that’s a verb now), then moved on to PCB. I first completely did front copper wiring, which was a hassle, then I actually read the instructions and alternated between front and back as needed, which made it much easier. I added a little reference image of the Spotify logo and named my hackpad the Musepad, so it’s official now! I’m gonna move on to my FAVORITE part, CADing the case (i literally LOVE CAD so much) and then my not so favorite part, working on the firmware (but it’ll still be cool! never worked with APIs before!). I’m so excited to eventually hold my Musepad in my hands once I finish! See you guys later!
HELLO!! I’m back with a hackpad update. made lots of progress today! i rerouted and rerouted and rerouted my PCB and i think i’m happy with it now! no errors on DRC and it (to my untrained eyes) looks a lot cleaner! if someone sees any major issues with my routing, please tell me, i’m so nervous about it :((. i also almost finished my CAD for the case!! i decided to separate the parts into the top and bottom portions of the case and assemble them together in fusion, which worked pretty well. some things i need to fix tomorrow are the placement of the usb-c port (too high on the cad model relative to the oled display), find out the dimensions of the oled, and add holes for screws. after that, i should be ready to move on to firmware (NERVOUS)! anyways, i’m chugging along, slowly but surely! it is definitely time for me to go to bed, but happy creating, everyone!
Hi everyone :)) Took a quick break from the project because I ran a 10k for the 4th of July! Anyways, I started the firmware. My plan of attack is to use the native KMK functions to make the next, previous, and mute functions, then write a separate python script that uses the spotify api and code the custom keys to connect to the separate script where I can make them do things like like the song and show the song playing on the oled. Hopefully it works, I’ve never done something like this! Wish me luck!!
HELLO!! I am still trucking along, made my main.py file, finished the custom key file for the like function, and created the serial file to send the like command to my laptop. tomorrow, i’ll probably work on the part of the firmware that connects the commands received by the laptop through serial to spotify (API time!! i’m gonna be a spotify developer :’)) i feel like it’s going pretty well, i’m understanding all the code and it’s fun to work with so many connecting files and learn all these skills i haven’t ever done before. stay tuned for this engineer’s first ever time soldering! (hopefully that happens sooner than later) signing off, vi!!
HELLO!! quick devlog update. i’ve given up on the api…i want to ship this project so that i can get some feedback and improve on it. i’ve started making the images for the oled display! coded the switches and encoder already (in kmk), so now i just have the display left, then i’m pretty much ready to ship! super excited for that, we’ll see how it goes!
I just finished my hackpad and shipped it! First time shipping a project, I’m so proud of myself! Here’s some pics of the completed design, it’ll be able to control media, brightness, and volume!...
|
1793310766.8583949
|
1793915566.8583949
|
|
16859
|
My awesome macropad! by @shaur1021 | Stardance
|
shaur1021
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @shaur1021 | Starda Title: My awesome macropad! by @shaur1021 | Stardance...
|
1793307385.0414357
|
1793912185.0414357
|
|
16860
|
Frictionless by @anonymous_683 | Stardance
|
anonymous_683
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @anonymous_683 | Stardance
|
1793390139.4924989
|
1793994939.4924989
|
|
16861
|
Mars Greenhouse Sim by @Siddharthkrishna | Stardan Mars Greenhouse Sim by @Siddharthkrishna | Stardance...
|
Siddharthkrishna
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Mars Greenhouse Sim by @Siddharthkrishna | Title: Mars Greenhouse Sim by @Siddharthkrishna | Stardance...
|
1793393576.890006
|
1793998376.890006
|
|
16862
|
My awesome macropad! by @Niche | Stardance
|
Niche
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Niche | Stardance
|
1793231314.0968192
|
1793836114.0968192
|
|
16863
|
Bsbs by @justanothernormalusername | Stardance
|
justanothernormalusername
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Bsbs by @justanothernormalusername | Starda Title: Bsbs by @justanothernormalusername | Stardance...
|
1793299837.5883036
|
1793904637.5883036
|
|
16864
|
ALOS by @BasGame1 | Stardance
|
BasGame1
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T19:48:25Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "ALOS its a try into booting a leaked unrelease android based OS in qemu. After a few weeks (started the project before counting the time) I managed to make a stable boot and have video output. The only downsides of this project are the slow boot time and RILd ( wifi, bt..) not working (that hopefully can be both fixed). I hope you enjoy it!", "repo": "https://github.com/BasGame1/AluminiumOS", "demo": "https://raw.githubusercontent.com/BasGame1/AluminiumOS/refs/heads/DEV/install.sh"}]...
|
[{"post_id": 20237, "ts": "202 [{"post_id": 20237, "ts": "2026-07-01T19:43:12Z", "hours": 0.5097, "text": "Added script to install the project, check if git its installed and use the package manager to install qemu and even can call the init script to execute everything in one script so it easier to interact with it"}, {"post_id": 19971, "ts": "2026-07-01T13:17:41Z", "hours": 0.6208, "text": "Video Output fixed. After a few changes with qemu gtk (and 700 seconds of boot) it finally boots with an image"}, {"post_id": 7472, "ts": "2026-06-12T13:48:03Z", "hours": 1.705, "text": "Video output and RO errors After 190 commits, i have make ALOS image boot in terminal, but surface slinger crashes due to OpenGL configuration and RO errors on boot The cause of this may be the ramdisk changing system params"}]...
|
Title: ALOS by @BasGame1 | Stardance
Devlogs:
Vid Title: ALOS by @BasGame1 | Stardance
Devlogs:
Video output and RO errors After 190 commits, i have make ALOS image boot in terminal, but surface slinger crashes due to OpenGL configuration and RO errors on boot The cause of this may be the ramdisk changing system params
Video Output fixed. After a few changes with qemu gtk (and 700 seconds of boot) it finally boots with an image
Added script to install the project, check if git its installed and use the package manager to install qemu and even can call the init script to execute everything in one script so it easier to interact with it
Ships:
ALOS its a try into booting a leaked unrelease android based OS in qemu. After a few weeks (started the project before counting the time) I managed to make a stable boot and have video output. The only downsides of this project are the slow boot time and RILd ( wifi, bt..) not working (that hopefully can be both fixed). I hope you enjoy it!...
|
1793703352.3217254
|
1793789752.3217254
|
|
16865
|
silly-os by @meowllory22 | Stardance
|
meowllory22
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T23:40:59Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "my webos is ready to go to the world!!! im really proud of all ive figured out and i really enjoy how it turned out. mess around with it and check out my dope cookie recipe and the cute cat friend and everything!! :)", "repo": "https://github.com/meowllory22/my-os-", "demo": "https://meowllory22.github.io/my-os-/"}]...
|
[{"post_id": 20382, "ts": "202 [{"post_id": 20382, "ts": "2026-07-01T23:24:55Z", "hours": 0.8892, "text": "i added a music app with some fun songs!!! im really enjoying how its turning out"}, {"post_id": 19811, "ts": "2026-07-01T06:20:25Z", "hours": 6.8186, "text": "i took a bit of a break but i added a lot more silly things :) (the cat squeaks when u click him!!!)"}, {"post_id": 9114, "ts": "2026-06-15T07:47:16Z", "hours": 2.2167, "text": "got the window working!! i changed a lot of the format but the actual content is still the same. i like how silly it looks and im gonna add a lot more stupid stuff!!!!!"}, {"post_id": 7807, "ts": "2026-06-13T00:56:03Z", "hours": 1.5825, "text": "im remembering how to do html and made this so far ! im hopinh to add a music player and some more fun stuff but this is all i got for now lol"}]...
|
Title: silly-os by @meowllory22 | Stardance
Devlo Title: silly-os by @meowllory22 | Stardance
Devlogs:
im remembering how to do html and made this so far ! im hopinh to add a music player and some more fun stuff but this is all i got for now lol
got the window working!! i changed a lot of the format but the actual content is still the same. i like how silly it looks and im gonna add a lot more stupid stuff!!!!!
i took a bit of a break but i added a lot more silly things :) (the cat squeaks when u click him!!!)
i added a music app with some fun songs!!! im really enjoying how its turning out
Ships:
my webos is ready to go to the world!!! im really proud of all ive figured out and i really enjoy how it turned out. mess around with it and check out my dope cookie recipe and the cute cat friend and everything!! :)...
|
1793821671.3244164
|
1793908071.3244164
|
|
16866
|
Test by @Trinidater | Stardance
|
Trinidater
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Test by @Trinidater | Stardance
|
1793530244.7791524
|
1794135044.7791524
|
|
16867
|
printFind by @torteno | Stardance
|
torteno
|
0
|
36.2
|
0
|
[]
|
[{"post_id": 82149, "ts": "202 [{"post_id": 82149, "ts": "2026-10-24T03:38:03Z", "hours": 25.7367, "text": "Feature improvements - orca slicer working natively on web :D"}, {"post_id": 7048, "ts": "2026-06-11T20:17:39Z", "hours": 10.4625, "text": "First post of the app"}]...
|
Title: printFind by @torteno | Stardance
Devlogs: Title: printFind by @torteno | Stardance
Devlogs:
First post of the app
Feature improvements - orca slicer working natively on web :D...
|
1793231483.190903
|
1793836283.190903
|
|
16868
|
My awesome macropad! by @prakritikashyap711 | Star My awesome macropad! by @prakritikashyap711 | Stardance...
|
prakritikashyap711
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @prakritikashyap711 Title: My awesome macropad! by @prakritikashyap711 | Stardance...
|
1793307439.061305
|
1793912239.061305
|
|
16869
|
My very own WebOS by @mamidipalliananya | Stardanc My very own WebOS by @mamidipalliananya | Stardance...
|
mamidipalliananya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @mamidipalliananya | S Title: My very own WebOS by @mamidipalliananya | Stardance...
|
1793245846.721696
|
1793850646.721696
|
|
16870
|
My first slack bot! by @Rudra-Darji | Stardance
|
Rudra-Darji
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Rudra-Darji | Stard Title: My first slack bot! by @Rudra-Darji | Stardance...
|
1793494486.560821
|
1794099286.560821
|
|
16871
|
My very own WebOS by @saliha_malik_26 | Stardance
|
saliha_malik_26
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @saliha_malik_26 | Sta Title: My very own WebOS by @saliha_malik_26 | Stardance...
|
1793386416.6408837
|
1793991216.6408837
|
|
16872
|
TCG Tycoon Slack Bot by @Veeraj | Stardance
|
Veeraj
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T17:20:23Z", "hours": 2.0, "multiplier": 1.55, "payout": 3, "blessing": "neutral", "text": "I made a slackbot that allows you to play a tycoon game with the use of one command. I found a lot of things challenging as it was my first time. The main thing was understanding terminal commands and understanding how to install the software. It was confusing at first but as I did more I started to get the hang of it. I am really proud of the tournament feature and hope you enjoy it as much as I did.", "repo": "https://github.com/Octolord12/waddle-tcg-tycoon", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BAWSLDY83"}]...
|
[{"post_id": 8171, "ts": "2026 [{"post_id": 8171, "ts": "2026-06-13T16:50:02Z", "hours": 1.7956, "text": "Version 1.2 added features such as gradable cards, player to player trading and a highly volatile tournament system. The screenshot is the grading system."}]...
|
Title: TCG Tycoon Slack Bot by @Veeraj | Stardance Title: TCG Tycoon Slack Bot by @Veeraj | Stardance
Devlogs:
Version 1.2 added features such as gradable cards, player to player trading and a highly volatile tournament system. The screenshot is the grading system.
Ships:
I made a slackbot that allows you to play a tycoon game with the use of one command. I found a lot of things challenging as it was my first time. The main thing was understanding terminal commands and understanding how to install the software. It was confusing at first but as I did more I started to get the hang of it. I am really proud of the tournament feature and hope you enjoy it as much as I did....
|
1793735369.6980147
|
1793821769.6980147
|
|
16873
|
My first slack bot! by @kimxox | Stardance
|
kimxox
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @kimxox | Stardance
|
1793418503.9843235
|
1794023303.9843235
|
|
16874
|
hardware project by @faz | Stardance
|
faz
|
0
|
6.83
|
0
|
[]
|
[{"post_id": 8925, "ts": "2026 [{"post_id": 8925, "ts": "2026-06-14T20:55:30Z", "hours": 5.2875, "text": "i did a ton of work in the past day or two, unfortunately i forgot to do a devlog so over 5 hrs of working time has passed. i made working circuits for a ton of different components: LED bar, PWM with LED, RGB LED, neopixel (8 LEDs in one component), active + passive buzzer, touch sensing (with a loose wire as a sensor). potentiometers, photoresistors, and thermistors. started experimenting with more complex circuit designs for subparts of the final project like working with multiple potentiometers to create a RGB LED circuit that can change to any colour my twisting the potentiometers (image attached). the photoresistor + LED circuit was interesting as the output of the LED affected the photoresistor output, so i would need to shield the photoresistor from it. the buzzers allowed me to get some proper sound out (like a sine wave sound) so ill continue experimenting with that later down the road."}, {"post_id": 7043, "ts": "2026-06-11T20:06:49Z", "hours": 1.5425, "text": "LED + Button spent some time connecting esp32 and installing the driver + micropython. designed some circuits on TinkerCAD with arduino instead of esp32 got used to some circuits like momentary push button and also non momentary one to light up an LED. wrote code for all of this. see below for the latest one i did"}]...
|
Title: hardware project by @faz | Stardance
Devlo Title: hardware project by @faz | Stardance
Devlogs:
LED + Button spent some time connecting esp32 and installing the driver + micropython. designed some circuits on TinkerCAD with arduino instead of esp32 got used to some circuits like momentary push button and also non momentary one to light up an LED. wrote code for all of this. see below for the latest one i did
i did a ton of work in the past day or two, unfortunately i forgot to do a devlog so over 5 hrs of working time has passed. i made working circuits for a ton of different components: LED bar, PWM with LED, RGB LED, neopixel (8 LEDs in one component), active + passive buzzer, touch sensing (with a loose wire as a sensor). potentiometers, photoresistors, and thermistors. started experimenting with more complex circuit designs for subparts of the final project like working with multiple potentiometers to create a RGB LED circuit that can change to any colour my twisting the potentiometers (image attached). the photoresistor + LED circuit was interesting as the output of the LED affected the photoresistor output, so i would need to shield the photoresistor from it. the buzzers allowed me to get some proper sound out (like a sine wave sound) so ill continue experimenting with that later down the road....
|
1793278293.0474076
|
1793883093.0474076
|
|
16875
|
My very own WebOS by @kailin | Stardance
|
kailin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @kailin | Stardance
|
1793418879.7190242
|
1794023679.7190242
|
|
16876
|
EmberCrow OS by @ghita | Stardance
|
ghita
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T21:45:09Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "what i made embercrow os - a hacker themed desktop that runs in the browser, no install. retro boot sequence, draggable windows, five apps (terminal, files, notes, music, about), and a living ascii mascot with a glowing eye that tracks your cursor and reacts to what you’re doing. what was challenging getting the mascot’s behavior (eye tracking, blinking, idle reactions) to feel natural while keeping the logic separate from the dom and testable. what i’m proud of it actually feels alive, and the core logic is all unit tested despite being a no-framework, no-build-step project. skip the boot with any key (or watch it once), open some apps, try the [*] theme button in the taskbar, and sit still for 30 seconds to see the crow react", "repo": "https://github.com/AndreiRazvanGhita/embercrowos-stardance", "demo": "https://andreirazvanghita.github.io/embercrowos-stardance/"}]...
|
[{"post_id": 7718, "ts": "2026 [{"post_id": 7718, "ts": "2026-06-12T21:38:21Z", "hours": 0.6606, "text": "last one for this round, added a theme switcher to the desktop. there’s a new [*] button in the taskbar that cycles through three color schemes: ember (the original orange, default), phosphor (green, classic crt terminal look), and cyber (blue). clicking it swaps the accent color across the whole desktop. window borders, highlights, the terminal cursor, and even the living mascot’s glowing eye all shift to match, since they were already built on a shared accent variable. it resets back to ember on reload, so you always start from the default look. architecture-wise this was a clean one to slot in. the theme logic is a small standalone module (just a list of themes and a “next theme” function), same pattern as the window manager and mascot logic, so it’s unit tested without needing a browser."}, {"post_id": 7686, "ts": "2026-06-12T20:43:52Z", "hours": 0.6206, "text": "quick one - made the repo public today and set up a live demo, so now you can actually try embercrow os in the browser instead of cloning it. demo: https://andreirazvanghita.github.io/embercrowos-stardance/ repo: https://github.com/AndreiRazvanGhita/embercrowos-stardance it deploys automatically through github actions, so whenever i push to master the live version updates within a minute or two. nothing new functionality-wise, just wanted it accessible for anyone who wants to poke around without setting up a local server."}, {"post_id": 7649, "ts": "2026-06-12T19:47:38Z", "hours": 3.5114, "text": "ok so this is my webos mission entry. theme is basically “what if a hacker terminal and a desktop os had a baby” - black and white everything, one accent color (ember orange), monospace fonts, the works. no frameworks, just html/css/js because i wanted to actually understand every line of this thing. got the core stuff working: window manager - you can drag windows around, focus them (the active one gets a glowy orange outline, felt very “hacker movie” to me), minimize to the taskbar, close them. double click an icon and it spawns a new window, slightly offset so they don’t all stack exactly on top of each other. apps - went with 5: a terminal you can actually type into (help, whoami, ls, etc, plus a hidden crow command that prints an ascii bird because why not) a fake file explorer with a little folder tree (there’s a secrets.txt in there, very serious business) an “about” app that’s basically neofetch but for my os, shows uptime and stuff a notes app that saves to localStorage so your notes survive a refresh a music player with a little audio visualizer using the web audio api - this one took way longer than expected the boot sequence - probably my favorite part. when you load the page you get a fake terminal boot log scrolling by ([ ok ] mounting //embercrow/root… type stuff), then this big ascii bird silhouette fades in with a glowing orange eye, then a fake login prompt types itself out and “logs you in” (no actual password, it’s all for show), then it does a crt scanline transition into the desktop. you can skip it by pressing any key if you don’t want to sit through it every time. the mascot is “the embercrow” - giant bird of prey made out of dots/ascii blocks with one glowing eye. shows up in the boot sequence and as a little taskbar icon. architecture-wise i kept the window manager totally dumb/generic - it doesn’t know anything about specific apps, each app just registers itself with a title, icon, and a function that builds its content. made it way easier to build each app on its own and test it in isolation. todo mostly polish at this point - tweaking the boot sequence timing, maybe a couple more terminal easter eggs. core stuff is done and working."}]...
|
Title: EmberCrow OS by @ghita | Stardance
Devlogs Title: EmberCrow OS by @ghita | Stardance
Devlogs:
ok so this is my webos mission entry. theme is basically “what if a hacker terminal and a desktop os had a baby” - black and white everything, one accent color (ember orange), monospace fonts, the works. no frameworks, just html/css/js because i wanted to actually understand every line of this thing. got the core stuff working: window manager - you can drag windows around, focus them (the active one gets a glowy orange outline, felt very “hacker movie” to me), minimize to the taskbar, close them. double click an icon and it spawns a new window, slightly offset so they don’t all stack exactly on top of each other. apps - went with 5: a terminal you can actually type into (help, whoami, ls, etc, plus a hidden crow command that prints an ascii bird because why not) a fake file explorer with a little folder tree (there’s a secrets.txt in there, very serious business) an “about” app that’s basically neofetch but for my os, shows uptime and stuff a notes app that saves to localStorage so your notes survive a refresh a music player with a little audio visualizer using the web audio api - this one took way longer than expected the boot sequence - probably my favorite part. when you load the page you get a fake terminal boot log scrolling by ([ ok ] mounting //embercrow/root… type stuff), then this big ascii bird silhouette fades in with a glowing orange eye, then a fake login prompt types itself out and “logs you in” (no actual password, it’s all for show), then it does a crt scanline transition into the desktop. you can skip it by pressing any key if you don’t want to sit through it every time. the mascot is “the embercrow” - giant bird of prey made out of dots/ascii blocks with one glowing eye. shows up in the boot sequence and as a little taskbar icon. architecture-wise i kept the window manager totally dumb/generic - it doesn’t know anything about specific apps, each app just registers itself with a title, icon, and a function that builds its content. made it way easier to build each app on its own and test it in isolation. todo mostly polish at this point - tweaking the boot sequence timing, maybe a couple more terminal easter eggs. core stuff is done and working.
quick one - made the repo public today and set up a live demo, so now you can actually try embercrow os in the browser instead of cloning it. demo: https://andreirazvanghita.github.io/embercrowos-stardance/ repo: https://github.com/AndreiRazvanGhita/embercrowos-stardance it deploys automatically through github actions, so whenever i push to master the live version updates within a minute or two. nothing new functionality-wise, just wanted it accessible for anyone who wants to poke around without setting up a local server.
last one for this round, added a theme switcher to the desktop. there’s a new [*] button in the taskbar that cycles through three color schemes: ember (the original orange, default), phosphor (green, classic crt terminal look), and cyber (blue). clicking it swaps the accent color across the whole desktop. window borders, highlights, the terminal cursor, and even the living mascot’s glowing eye all shift to match, since they were already built on a shared accent variable. it resets back to ember on reload, so you always start from the default look. architecture-wise this was a clean one to slot in. the theme logic is a small standalone module (just a list of themes and a “next theme” function), same pattern as the window manager and mascot logic, so it’s unit tested without needing a browser.
Ships:
what i made embercrow os - a hacker themed desktop that runs in the browser, no install. retro boot sequence, draggable windows, five apps (terminal, files, notes, music, about), and a living ascii mascot with a glowing eye that tracks your cursor and reacts to what you’re doing. what was challenging getting the mascot’s behavior (eye tracking, blinking, idle reactions) to feel natural while keeping the logic separate from the dom and testable. what i’m proud of it actually feels alive, and the core logic is all unit tested despite being a no-framework, no-build-step project. skip the boot with any key (or watch it once), open some apps, try the [*] theme button in the taskbar, and sit still for 30 seconds to see the crow react...
|
1793720933.4883475
|
1793807333.4883475
|
|
16877
|
Aero by @VoidChris | Stardance
|
VoidChris
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-25T00:36:02Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My project features a glider based on the aerodynamics of the Peregrine Falcon. A challenge I faced during this project occurred during the designing of the model because I am new to CAD modeling and 3d modeling in general, this is my first hardware project. I am very proud of the design and results of the Sim Scale simulation I tested numerous (13) times. For those wanting to test my project you would need a 3d printer. Also for those wanting to test my project it is 6 ft long so find a tall hill to throw it off of.", "repo": "https://github.com/Void-Chris/Aero-Stardance-Project", "demo": ""}]...
|
[{"post_id": 21073, "ts": "202 [{"post_id": 21073, "ts": "2026-07-02T21:01:00Z", "hours": 1.7003, "text": "I think I’m finished with the project."}, {"post_id": 14599, "ts": "2026-06-23T19:22:37Z", "hours": 2.05, "text": "Did a few more sketches. Mirrored half model. Started tail. (because i forgot to do so before)"}, {"post_id": 13834, "ts": "2026-06-22T17:46:18Z", "hours": 1.6833, "text": "Redid sketches and got rid of some sketches"}, {"post_id": 11620, "ts": "2026-06-18T22:33:05Z", "hours": 1.7667, "text": "Three part wing"}, {"post_id": 10879, "ts": "2026-06-17T20:44:38Z", "hours": 3.4667, "text": "updated and removed some parts of the 3d model"}, {"post_id": 10288, "ts": "2026-06-16T22:33:09Z", "hours": 1.35, "text": "Peregrine Falcon Inspired gliding thing"}]...
|
Title: Aero by @VoidChris | Stardance
Devlogs:
Pe Title: Aero by @VoidChris | Stardance
Devlogs:
Peregrine Falcon Inspired gliding thing
updated and removed some parts of the 3d model
Three part wing
Redid sketches and got rid of some sketches
Did a few more sketches. Mirrored half model. Started tail. (because i forgot to do so before)
I think I’m finished with the project.
Ships:
My project features a glider based on the aerodynamics of the Peregrine Falcon. A challenge I faced during this project occurred during the designing of the model because I am new to CAD modeling and 3d modeling in general, this is my first hardware project. I am very proud of the design and results of the Sim Scale simulation I tested numerous (13) times. For those wanting to test my project you would need a 3d printer. Also for those wanting to test my project it is 6 ft long so find a tall hill to throw it off of....
|
1793714175.4891105
|
1793800575.4891105
|
|
16878
|
My awesome macropad! by @mail_adisin | Stardance
|
mail_adisin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @mail_adisin | Star Title: My awesome macropad! by @mail_adisin | Stardance...
|
1793314248.1203253
|
1793919048.1203253
|
|
16879
|
PotatoPad by @Potatoeater0075 | Stardance
|
Potatoeater0075
|
0
|
5.27
|
0
|
[]
|
[{"post_id": 15402, "ts": "202 [{"post_id": 15402, "ts": "2026-06-25T01:15:38Z", "hours": 1.0994, "text": "Retracing the PCB to allocate for the dimension requirement"}, {"post_id": 15342, "ts": "2026-06-24T22:50:18Z", "hours": 1.0808, "text": "Just finished Wiring the PCB, have to say, this was the hardest part so far. I was compeltely stuck until I found out what Vias were"}, {"post_id": 15315, "ts": "2026-06-24T21:36:49Z", "hours": 0.6442, "text": "I arranged the PCB, but might rerrange based on how it looks"}, {"post_id": 14718, "ts": "2026-06-23T22:28:15Z", "hours": 0.2967, "text": "I just completed the schematic for all of the LEDs. Using LEDs made my life a lot easier, its auctually crazy."}, {"post_id": 14706, "ts": "2026-06-23T22:09:52Z", "hours": 0.5606, "text": "Redoing the enitre schematic because I learned about labels and this helped me get rid of all the long ahh wires"}, {"post_id": 14532, "ts": "2026-06-23T17:55:55Z", "hours": 0.54, "text": "Remaking Entire Schematic because lack of GPIO pins"}, {"post_id": 14489, "ts": "2026-06-23T17:02:35Z", "hours": 0.4878, "text": "I am removing some switches to make room for the rotary encoders in KiCad"}, {"post_id": 14062, "ts": "2026-06-23T01:18:28Z", "hours": 0.5622, "text": "I have just created the matrix wiring and layout for my PotatoPad, I am learning new things as I complete the project"}]...
|
Title: PotatoPad by @Potatoeater0075 | Stardance
Title: PotatoPad by @Potatoeater0075 | Stardance
Devlogs:
I have just created the matrix wiring and layout for my PotatoPad, I am learning new things as I complete the project
I am removing some switches to make room for the rotary encoders in KiCad
Remaking Entire Schematic because lack of GPIO pins
Redoing the enitre schematic because I learned about labels and this helped me get rid of all the long ahh wires
I just completed the schematic for all of the LEDs. Using LEDs made my life a lot easier, its auctually crazy.
I arranged the PCB, but might rerrange based on how it looks
Just finished Wiring the PCB, have to say, this was the hardest part so far. I was compeltely stuck until I found out what Vias were
Retracing the PCB to allocate for the dimension requirement...
|
1793306979.004769
|
1793911779.004769
|
|
16880
|
Project Lavender (name pending) by @Wayan | Starda Project Lavender (name pending) by @Wayan | Stardance...
|
Wayan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Project Lavender (name pending) by @Wayan | Title: Project Lavender (name pending) by @Wayan | Stardance...
|
1793375307.440307
|
1793980107.440307
|
|
16881
|
Solar detector- AI-Powered Space Weather Forecasti Solar detector- AI-Powered Space Weather Forecasting by @sofia_barbaglio | Stardance...
|
sofia_barbaglio
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Solar detector- AI-Powered Space Weather Fo Title: Solar detector- AI-Powered Space Weather Forecasting by @sofia_barbaglio | Stardance...
|
1793188100.4595742
|
1793792900.4595742
|
|
16882
|
My very own WebOS by @SyNTaX_Error | Stardance
|
SyNTaX_Error
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @SyNTaX_Error | Starda Title: My very own WebOS by @SyNTaX_Error | Stardance...
|
1793800431.1862504
|
1794405231.1862504
|
|
16883
|
Tunasquare by @two0ort | Stardance
|
two0ort
|
0
|
4.82
|
0
|
[]
|
[{"post_id": 15004, "ts": "202 [{"post_id": 15004, "ts": "2026-06-24T11:48:59Z", "hours": 4.8206, "text": "Made a small design for what I’m working on! So far I only have that and a small chess game where I somehow haven’t figured out checkmate detection in."}]...
|
Title: Tunasquare by @two0ort | Stardance
Devlogs Title: Tunasquare by @two0ort | Stardance
Devlogs:
Made a small design for what I’m working on! So far I only have that and a small chess game where I somehow haven’t figured out checkmate detection in....
|
1793541028.7465556
|
1794145828.7465556
|
|
16884
|
aurora by @ahmoodio | Stardance
|
ahmoodio
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: aurora by @ahmoodio | Stardance
|
1793202594.1528971
|
1793807394.1528971
|
|
16885
|
Hackfetch by @xerneas | Stardance
|
|
2
|
124.4
|
1751
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T11:04:00Z", "hours": 63.0, "multiplier": 19.6, "payout": 1381, "blessing": "neutral", "text": "HACKFETCH V2.0 it’s been a few weeks since ship #1 and hackfetch is a completely different tool now. faster, smaller, quieter, actually correct, and now lives in places besides your terminal window. v2.0.0 is out. what changed: fits in your tmux status bar with one line of config. same story for lualine. hackfetch -status prints a compact one-liner meant to be shelled out to every minute. fits everywhere else too. now on the AUR (yay -S hackfetch-bin) alongside the existing brew tap, curl installer, powershell installer, and go install. seven install channels total. runs in ~20ms on repeat calls thanks to an on-disk cache. tmux polling every minute is basically free now. was ~700ms cold before. runs in ~0.7s cold thanks to a parallel API fetch. was ~1.7s before. shows a smooth truecolor gradient on any modern terminal. auto-detects $COLORTERM. falls back to 256-color on older ones. -doctor walks a colored checklist of your setup and tells you exactly what’s broken. green if fine, orange if not, non-zero exit if you wanna script it. new pizza logo because hack club runs on pizza. seven logos total. streak is finally correct after silently saying “1 day” for a month. /summaries is gone from hackatime so hackfetch now reconstructs streak from every coding session in your history via /heartbeats/spans. real streak: 9 days for me right now. 7-day sparkline baked into the fetch (with -v) and available as -status –sparkline for the tmux bar. default fetch got leaner. slack handle, machines count, and the sparkline moved behind -v so the normal fetch stays focused on hours + project + language. loading spinner on the api fetch so you know something is happening. and then the cache made it show up almost never. one install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Arch family: yay -S hackfetch-bin macOS / Linuxbrew: brew install xerneas3318/tap/hackfetch For more install methods check out the github page: https://github.com/xerneas3318/hackfetch teasing the next big thing: hackfetch -leaderboard is coming next, using the public leaderboard endpoints i found in hackatime’s routes file. compete with friends on daily and weekly hours right from your terminal. private friend groups on a hackclub nest box after that. if you try it, thanks. send me some feedback", "repo": "https://github.com/xerneas3318/hackfetch", "demo": "https://github.com/xerneas3318/hackfetch/releases"}, {"ship_num": 2, "ts": "2026-07-07T00:01:54Z", "hours": 27.0, "multiplier": 17.78, "payout": 370, "blessing": "neutral", "text": "Every fetch tool tells you your OS. Mine tells you your streak. hackfetch is a Hack Club themed terminal fetch tool. Inspired by neofetch (originally bash, now archived) and fastfetch (its C successor), written in pure Go. Instead of just showing your kernel and CPU, it pulls live stats from your Hackatime account: today’s hours, weekly total, current streak, top project, top language. Right in your terminal. Six Hack Club themed ASCII logos (including my GOAT orpheus). Fourteen color schemes (pride, trans, bi, pan included). Live watch mode that refreshes while you code. And as of today, you can export the whole thing as a PNG, JPG, or SVG card and post it anywhere. One line to install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Tell me how it was! Follow and like for updates.", "repo": "https://github.com/xerneas3318/hackfetch", "demo": "https://github.com/xerneas3318/hackfetch/releases"}]...
|
[{"post_id": 39919, "ts": "202 [{"post_id": 39919, "ts": "2026-08-03T07:26:53Z", "hours": 6.6894, "text": "Hackfetdch natively in your readme hackfetch -readme it spits out a markdown stats card ready to paste straight into your github profile README. pipe it into a file and commit: hackfetch -readme > stats.md this is the cool bit or drop it in your README.md between two html comments and set up a github action to run it on a schedule so it auto refreshes every day. your profile now has a live coding stats card next to your pinned repos with no cron server, no vercel deploy, no api key stashed in secrets. its literally just markdown. zero extra api calls too. the readme card reads from the same cached hackatime response the normal fetch uses so if you just ran hackfetch it takes ~20ms. the streak emoji is a lil detail i had fun with. 3+ days gets a 🔥 upgrade with brew upgrade hackfetch or yay -S hackfetch-bin (once aur maintenance wraps up) or curl the installer curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh"}, {"post_id": 39223, "ts": "2026-08-02T01:40:31Z", "hours": 7.6967, "text": "HACKFETCH BATTLES??? two features in one release. hackfetch already knows a scary amount about you (thanks hackatime) so why not turn that into more features. hackfetch vs @ someone head to head compare. give it a hackatime username and hackfetch fetches both your histories in parallel, buckets them into today / this week / all time / streak, and prints them side by side with a winner arrow on every row. accepts @name , name , or a full profile url like hackatime.hackclub.com/@name . also works positional: hackfetch vs @you . use it to settle arguments, motivate yourself, or realize your friend has coded 265 hours and you should probably close discord. hackfetch -records personal bests. computed entirely from data hackfetch already fetches (streak + sparkline already use it), so zero new api calls $ hackfetch -records ✦ personal records @you biggest day 12h 41m on 2026-07-18 longest streak 25 days ended 2026-07-01 longest session 43m on 2026-07-17 days coded 86 first day 2026-04-24 99 days ago lifetime 208h 29m the “longest streak” tracks your all time best not just your current one. and “first day” tells you how long ago you started so you can feel old. grab it brew upgrade hackfetch yay -S hackfetch-bin install curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Next devlog is gonna be a fun one, I have an idea cooking up"}, {"post_id": 38323, "ts": "2026-07-31T17:22:26Z", "hours": 9.4408, "text": "big thank you for everyone’s feedback! fresh out of the oven: hackfetch v2.1.1 (aka the reviewer bug fix pass) what got fixed: shell detection used to just read $SHELL which is your login shell. if you log in as bash but run fish, hackfetch was calling you a bash user. it now checks $FISH_VERSION / $ZSH_VERSION / $BASH_VERSION and falls back to asking the OS who your parent process actually is editor detection was two bugs in a trench coat. it wasnt stripping args so zeditor --wait showed up as “zeditor –wait” instead of “Zed”, and if you had no $EDITOR set it defaulted to nano even if you had literally never opened nano. now it strips flags, maps launcher names to human ones (zeditor -> Zed, code -> VS Code, cursor -> Cursor, hx -> Helix etc), and says “-” instead of nano if nothing is set. top project label was ambiguous. it was pulling weekly stats but the row just said “top project” so people thought it meant all time. now weekly rows read top proj 7d , top lang 7d , top ed 7d , top cat 7d . setup dialog was scaring people. it always printed “file exists but has no api_key” whenever it reached the setup flow, even if the api_key line was actually there but just failing to parse. loadConfig is now more forgiving (inline comments, quoted values, case insensitive keys) and setup tells you WHY its stuck instead of gaslighting you about your own config. also short circuits if you run hackfetch -setup when youre already set up. people said they wanted a gay flag color was already there under the name pride but that wasnt obvious. gay is now an alias so both work. grab it: brew upgrade hackfetch or yay -S hackfetch-bin or curl / powershell installer if you don’t have it yet curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh again thank you to everyone who took the time to actually run it and tell me what was broken!"}, {"post_id": 34562, "ts": "2026-07-25T12:00:09Z", "hours": 10.5769, "text": "hackfetch COLLAB?? so my last two devlogs teased two features. shipping both today. -leaderboard last devlog i said “compete with your friends on hackatime hours is coming soon.” i thought i was gonna have to build a whole nest server for it. turns out /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist and are public on hackatime. just a single call!! so hackfetch -leaderboard daily (or weekly) now shows the top 10: ✦ daily leaderboard Last 24 hours 🥇 1. soaphia14 11h 12m 🥈 2. AnastKara 10h 32m 🥉 3. RoSerMar 10h 6m 4. euledone 10h 5. TheShovel 10h 6. Dylhouse 9h 1m 7. Dexrn 8h 59m 8. HexFud 8h 31m 9. zeddash 8h 29m 10. Trtotomotoro 8h 26m every username is an OSC 8 clickable link to that person’s hackatime profile. modern terminals (iterm2, kitty, wezterm, alacritty, gnome-terminal) render it as an actual hyperlink you can click. terminals without OSC 8 just show the plain text so it doesnt look broken. if you’re on the board it highlights your row in orange and adds (you) next to your name. json addon the other thing. someone else competing in stardance messaged me the other day about integrating hackatime into their own project and needed help figuring out the api (YAY). helping them made me realize hackfetch is doing a bunch of work (auth, caching, streak reconstruction, per-day bucketing) that other tools would love to piggyback on. so now: $ hackfetch -json { \"version\": \"2\", \"fetched_at\": \"2026-07-25T17:00: 20.900829+05:30\", \"system\": { \"user\": \"xerneas\", \"host\": \"Macbook-Pro\", \"os\": \"macOS 26.5.2\", ... }, \"hackatime\": { \"slack\": \"@U0B8FHHRQPJ\", \"streak\": 12, \"today_seconds\": 15820, \"week_seconds\": 237501, \"top_project\": { \"name\": \"hackfetch\", \" \"top_language\": { \"name\": \"Go\", \"seconds\": 97418 }, \"week_chart\": [36967, 31651, 33841, 284 \"machines\": 3 } } week_chart is 7 numbers = daily seconds oldest to newest same as the sparkline. top_language skips the unknown/other buckets. everything lines up with what the normal fetch would show, just parseable. ship landed in v2.1.0. brew update && brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then try: hackfetch -leaderboard weekly hackfetch -json | jq For a general install use: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh"}, {"post_id": 32880, "ts": "2026-07-22T10:20:45Z", "hours": 8.6689, "text": "my streak was lying to me for a month went to add a simple 7-day sparkline. by the end of the night i had rewritten how hackfetch talks to hackatime and my streak field is finally accurate for the first time in weeks. the plan was get the status from the last 7 days. draw ▁▂▃▄▅▆▇█ bars except the endpoint i needed straight up 404s. /users/current/summaries doesnt exist on the current hackatime deployment. Which means every single time i ran hackfetch it was quietly making a 30-day range call that always failed, then falling back to a placeholder that said “if today has activity, streak = 1”. thats it. no matter how long ive actually been on a streak, the fetch would just show 1 day. 🤦 my streak has said 1 day for the last 2 weeks even though ive been coding literally every day. never noticed because 1 day looks kinda plausible (i added 1 day as a fallback so that it didn’t show an error a couple weeks ago and forgot ) the fix: went digging in hackatimes rails routes on github. turns out theres a whole /api/v1/ namespace i was never using. and one of the endpoints is /api/v1/users/:id/heartbeats/spans. one call, ~150kb of json, every coding session ive ever logged with start_time, end_time, duration. 2000+ spans. which is exactly what i need for both features. bucket the timestamps by local calendar day, count unique days for streak, sum durations per day for the sparkline. one request covers both. and while i was already in the api layer i noticed fetchUser was making a whole separate call for my slack handle, which is silly because that data is already in the weekly stats response we cache. so i piggybacked it. weve gone from 4 api calls per fetch to 3. the sparkline: 7-day chart ▄▄▇▅▄▅▃ 65h 28m oldest on the left, newest on the right. that tall bar in the middle is a big lock-in session from earlier in the week. the two shorter ones on the right are today (still coding) and yesterday (took a break). opt in for -status --sparkline if you want it in your tmux bar too: 2h 9m today · streak 9 · ▄▄▇▅▄▅▃ 65h 28m teasing a backend: I’m planning on building a whole leaderboard server on a free hack club nest box so people can compete on their hackatime hours. while i was poking around the routes file for the streak fix i noticed something. /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist. public. no auth needed. no server needed. no cron sync. hackatime literally already has it directly. so hackfetch -leaderboard is coming soon (private friend groups and personal competitions can come later) last devlog before my next ship after the ship the devlogs are going to be huge. stay tuned :P"}, {"post_id": 32268, "ts": "2026-07-21T10:28:54Z", "hours": 9.7706, "text": "caching or i owe hackclub money so heres what my day looked like: nvim was calling hackfetch -status on every redraw for my lualine. tmux was calling it every 60 seconds for the status bar. i had 3 tmux sessions open. and every time i actually opened a new terminal, hackfetch fired again on shell start. quick napkin math: nvim redraws are basically continuous when im typing, tmux was hitting the api 3x/minute across sessions, plus every terminal open = another fetch. we’re talking hundreds of calls to hackatime in a normal work session. from ONE user. me hackatime is a free hack club service and i was starting to feel bad lol. the fix: cache the response ~/.cache/hackfetch/last.json stores the last snapshot with a timestamp. every fetch checks that file first. if its fresh enough, skip the network entirely and just render from disk. TTL is different depending on the caller: hackfetch (one-shot): 30 seconds. long enough that a normal re-run inside a devlog attempt is instant, short enough that you dont get badly stale numbers. hackfetch -status: 60 seconds tmux polls roughly this often anyway so its basically free now. hackfetch -watch: ignores the cache, always fresh (thats the whole point of watch mode). opt out with -no-cache or HACKFETCH_CACHE_TTL=0 if you want. also HACKFETCH_CACHE_TTL=300 to be even more polite. So yea tmux is now basically free . but the real win writing this made me realize the cache does more than save milliseconds: every fetch was a full TLS handshake, wifi radio spin up, etc. now most fetches touch the disk once and nothing else. macbook fan appreciates it. offline. if your wifi drops mid coding session you keep working from the cache instead of showing a spinner forever. tmux bar just keeps saying what it said 40 seconds ago. battery again but for the hackatime server. hackfetch stops asking the api 5-10x more than they need to. multiply by everyone who has it in their tmux config and thats a real thing. atomic write via .tmp + rename so nothing ever reads a half-written file. cache is user-only (0600), because it does contain your top project name. bonus: -doctor while i was fixing the polite-to-the-api stuff i added -doctor , which walks a checklist and tells you whats broken: hackfetch doctor ✓ wakatime config exists /Users/xerneas/.wakatime.cfg ✓ api_key present loaded from config ✓ wakatime-cli found /Users/xerneas/.wakatime/wakatime-cli ✓ hackatime api reachable today: 28m ✓ terminal supports truecolor $COLORTERM=truecolor ✓ browser opener available /usr/bin/open green if its working, orange if its not, and non-zero exit if anything failed so you can script it. this was going to be a small self-diagnosis feature and it caught a real bug in the api client on the very first run i did while writing it lol (a string field where hackatime returns an int, so one of the fields was silently missing from every fetch since v1.0). fixed that too. ship both landed in v1.10.0. update as usual: brew update brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then run hackfetch -doctor first, and if anything is broken it’ll tell you exactly what."}, {"post_id": 31673, "ts": "2026-07-20T08:45:06Z", "hours": 8.4247, "text": "hackfetch is now TMUX + NVIM COMPATIBLE new thing today: hackfetch will just show up wherever you already look. tmux status bar. nvim statusline. any tool that can shell out to a command and put text on a screen. The addition was simple: hackfetch -status prints one line: 2h 11m today · hackfetch (45m) · streak 12 just the numbers, for tools that already have their own rendering. hackfetch is a data source now, not just a display. in tmux two lines in ~/.tmux.conf : set -g status-interval 60 thats it. every tmux session, every window, refreshing once a minute. i dropped it in a pink Catppuccin capsule to the left of my existing date capsule and now i cant stop glancing at it lol. in neovim (lualine) same story, five lines of lua: sections = { lualine_z = { function () return vim . fn . system ( \"hackfetch -status\" ): gsub ( \" \\n \" , \"\" ) end } } } shells out on every redraw. works with airline too, or any custom statusline that lets you plug in a function. the fun part making hackfetch call safe for “something tmux runs every 60s forever” meant fixing three assumptions the normal fetch was making. this was way harder than it should have been ngl. setup cant block. if you dont have ~/.wakatime.cfg, normal hackfetch throws you into an interactive setup wizard (ask me how i know). in status mode that would freeze your tmux bar until you notice and Ctrl+C it. so status mode is fully non interactive now. no config → print nothing → tmux shows nothing → no deadlock 🙏 api errors cant leak into your bar. hackatime offline? old behavior would dump HTTP 500 timeout into your status area which looks INSANE. now status mode exits silently instead so your bar stays clean every call has to be cheap. hackfetch’s parallel fetch alr seconds, and the shared HTTP client keeps connections alive across the 4 API calls it fires, so tmux polling every 60s is easy on the API. a proper local file cache is on the list for later but honestly not needed for now (i’m lazy) ship landed in v1.9.0. if you already have it: brew update brew upgrade hackfetch or arch family: yay -Syu hackfetch-bin (for more installs for ur specific os check out the github pls) then drop the tmux or lualine snippet above into your dotfiles and its just there in every terminal. no plugin. no config. no daemon. just a flag."}, {"post_id": 31042, "ts": "2026-07-19T03:42:21Z", "hours": 8.7494, "text": "Hackfetch Gets Real Colors New thing today: hackfetch now emits 24-bit color when your terminal supports it, and spreads gradients smoothly across each row instead of cycling through the palette one character at a time. Before and after Old behavior: for a per-char scheme like rainbow , each character got exactly one palette entry, wrapping around every N characters. On a 30-column row with a 3-color palette, that looked like ten cycles of red, green, blue, red, green, blue… basically RGB static. New behavior: the palette spreads across the row once, and characters between palette entries get interpolated in-between colors. Same 3-color palette on a 30-column row now shows red, olive, green, teal, blue, magenta, back to red. Why the rebuild Terminals speak two color modes: 256-color ( \\x1b[38;5;Nm ): pick from a fixed palette of 256 preset RGB values. 24-bit / truecolor ( \\x1b[38;2;R;G;Bm ): specify any of ~16 million RGB values directly. The old code always used 256-color. That meant every character had to snap to one of the palette entries. No in-betweens possible. The new code checks $COLORTERM (set to truecolor by iTerm2, kitty, WezTerm, Alacritty, GNOME Terminal, and most modern terminals) and emits 24-bit escapes when supported. When it’s not, it falls back to the old cycled-palette behavior automatically. You can force it either way with HACKFETCH_TRUECOLOR=1 or =0 . Where you’ll notice it The built-in rainbow scheme has 23 palette stops, so the difference on that one is small. You just see a smoother color distribution and less banding. The change is dramatic on: custom themes with few stops (try 3 colors in your ~/.config/hackfetch/colors.json for the wildest gradient) the stardance palette (11 stops, per-char), where sparkles now flow through the spectrum in order instead of landing on random-looking colors any per-line scheme ( pride , trans , bi , pan , sunset , ocean , forest ) since they now emit exact RGB values instead of nearest-256-color Bonus: the SVG, PNG, and JPG export paths use the smooth interpolation too, so exported cards look better regardless of your terminal. Ship Landed in v1.8.0 . brew update brew upgrade hackfetch Or on the Arch family: yay -Syu hackfetch-bin Try hackfetch rocket forest and just watch."}, {"post_id": 30475, "ts": "2026-07-18T02:33:55Z", "hours": 10.1122, "text": "One More Way to Install (and Pizza) Two small things today: hackfetch is now on the AUR, and there’s a new logo. hackfetch on the AUR A reviewer on my last ship said they had a hard time getting hackfetch running on CachyOS (an Arch-based Linux distro). Instead of trying to reproduce their exact issue, I figured the cleanest fix was to publish hackfetch through the package manager Arch users already trust. So hackfetch is now up as hackfetch-bin on the AUR: aur.archlinux.org/packages/hackfetch-bin If you’re on Arch, CachyOS, Manjaro, EndeavourOS, Garuda, or any other Arch-based distro: yay -S hackfetch-bin Or with paru: paru -S hackfetch-bin The package pulls the pre-built binary straight from the GitHub release, so there’s no waiting on a source build. Works on both x86_64 and aarch64 . Add it up and hackfetch is now installable one command from: brew (macOS and Linuxbrew) apt / dnf / yum / pacman / zypper / apk (all through the curl installer) the AUR (Arch family) go install (any platform with Go) the PowerShell installer (Windows) This thing is getting kind of hard to NOT install. Pizza logo Hack Club runs on pizza. Now hackfetch does too. hackfetch pizza It’s a triangular slice viewed from the tip, HACK CLUB baked into the middle, and a rolled crust at the wide edge. The tricky part was the crust. I went through three drafts trying to make it curve at the bottom without breaking the connection to the slice’s diagonal sides (turns out you can’t cleanly connect diagonal characters to horizontal ones in a monospace grid). Landed on a two-row rolled crust where the diagonals keep going and the interior fills with a double horizontal band. Pairs surprisingly well with sunset: hackfetch pizza sunset Turns your terminal into a golden-hour pizza box. Ship Both landed in v1.7.3 . If you’re on Arch-family: yay -S hackfetch-bin Elsewhere: brew update brew upgrade hackfetch Now try hackfetch pizza and tell me if the crust looks right."}, {"post_id": 29524, "ts": "2026-07-16T14:40:13Z", "hours": 3.2108, "text": "Hackfetch Is Now Actually Fast Last log I added a loading spinner so you’d have something to look at while hackfetch was hitting the Hackatime API. This week I made it so you barely have time to see the spinner at all (undoing all my work lol) The problem hackfetch was making four separate calls to Hackatime for every fetch: /users/current/heartbeats/most_recent (for your slack handle) /users/current/summaries (for your streak) /users/current/statusbar/today (for today's coding time) /users/current/stats/last_7_days (for weekly stats) Doing them one after another meant the total wait was the sum of all four. Turns out that’s about 1.7 seconds on a normal connection. Not the end of the world, but very noticeable when you just want to open a terminal. The fix: run them all at the same time Now hackfetch fires all four calls in parallel using goroutines, waits for the slowest one to come back, and then builds the fetch from the responses. Total wait drops from “sum of all four” to “just the slowest one.” Before: ~1.7 seconds After: ~0.7 seconds 60% faster . Every single fetch. Every single time. One tiny bonus optimization While I was in there, I also switched to a single shared HTTP client with a bigger connection pool. The default Go setup caps you at 2 open connections per host, which is fine when you’re calling one endpoint at a time but hurts when you’re firing four at once. Now the parallel calls can share connections instead of stacking up on each other. Nothing about the fetch itself changed. Same info, same layout, same colors. Just faster. Ship Shipped in v1.7.2. If you have hackfetch installed: brew update brew upgrade hackfetch time hackfetch Watch the spinner barely have time to appear."}, {"post_id": 29398, "ts": "2026-07-16T10:18:00Z", "hours": 13.6781, "text": "Loading Spinner and Splitting Up main.go Thanks so much to everyone who took the time to comment, rate, and drop feedback on my latest ship. All of it was genuinely so helpful and I’ve been spending the last couple days fixing things up a bit. I totally forgot to devlog so I’m actually losing a couple hours since it’s been over ten hours since my last one :sob A loading spinner while Hackatime fetches One reviewer pointed out that hackfetch takes a couple of seconds when it’s pulling your Hackatime stats for the first time, and there was no signal that anything was happening. Now there is. ⠋ fetching Hackatime... The spinner cycles through 10 braille frames and the whole line clears out the instant the fetch finishes. Same fetch, way less awkward pause. Two small details that make it feel right: It only shows when stderr is actually a terminal, so it doesn’t spam control codes into your log files if you redirect output. It prints one frame immediately, so fast fetches still flash something instead of nothing. hackfetch runs it around the API calls automatically. No config, no opt-in. It’s just there. Splitting up main.go Another reviewer said the 1.5k-line file was too much. They were completely right. hackfetch had grown into one giant main.go that held the logos, the color schemes, the Hackatime API client, the terminal render, the SVG exporter, the PNG rasterizer, everything. Refactored today into files that each do one thing: logos.go: the ASCII logos colors.go: color schemes and the ANSI → hex table config.go: reads ~/.wakatime.cfg hackatime.go: the API client, caching, and language inference sysinfo.go: OS, shell, editor, terminal setup.go: the -setup flow render.go: terminal render, watch loop, and layout export.go: SVG, PNG, and JPG exporters main.go: just flag parsing and the entry point (~100 lines instead of 1,600) Same binary, same behavior, zero user-visible change. But next time I want to add a new logo or a new color scheme, I know exactly which file to open. Also way friendlier for anyone who wants to hack on it. Ship Both landed in v1.7.1. If you already have it: brew update brew upgrade hackfetch Or the curl installer will pull v1.7.1 the next time you run it. Try it."}, {"post_id": 23812, "ts": "2026-07-06T23:42:52Z", "hours": 7.1119, "text": "New feature today: hackfetch can turn itself into a shareable image. The goal was simple: your terminal fetch should be more than a terminal thing. If it looks cool on your screen, you should be able to post it in a Slack channel or drop it in a devlog without ever having to take a screenshot. hackfetch -export card.svg Run that and instead of printing to your terminal, hackfetch writes an SVG file that looks exactly like the fetch on your screen: logo on the left, stats on the right, rounded corners, monospace font, every color preserved. Getting the general SVG output was the easy part. Draw a rectangle, put text inside it, done. The hard part was preserving the colors. Terminals speak ANSI 256-color codes. SVGs speak hex color strings. They don’t line up one-to-one, so a naive export just drops every color and produces a black-and-white version of the fetch. Not very shareable. The fix: a lookup table from ANSI 256-color codes to hex values, plus a rendering path that emits every styled character as its own SVG element with the correct fill color. That’s actually a lot of tspans. Schemes like per-char, where every single glyph has its own gradient stop, can produce hundreds of colored elements per fetch. But it works. The SVG renders smoothly in any browser and looks identical to what shows up in your terminal. Use It Anywhere Some things you can do with the exported card: open it in a browser to see it drop it into a Slack channel or a devlog convert it to PNG with rsvg-convert if you need a raster image hackfetch -export card.svg trans Open it. Post it. Ship it."}, {"post_id": 19472, "ts": "2026-06-30T20:03:24Z", "hours": 2.2483, "text": "Live Hackfetch New milestone today: hackfetch can now stay open and update itself while you code. The goal was simple: run hackfetch once, leave it in the corner of your terminal, and watch the numbers move in real time as you work. hackfetch -watch Your today-hours tick up. Your top project changes when you switch repos. Your streak rolls over at midnight. All without running the command a second time. The static render was already in place from the regular one-shot fetch. The new part was redrawing without scrolling. That sounds simple. It is not. In a terminal, every time you print something, it appends to the bottom of the screen. By default, refreshing the fetch would just print a second copy of itself underneath the first, then a third, then a fourth. Within a minute you’d have a wall of identical fetches scrolling away into the past. The trick is ANSI escape codes. There’s a sequence that means “move the cursor up N lines” and one that means “clear the rest of the screen from here down.” Together they let you erase the previous fetch and redraw a new one in the same spot. Same screen, fresh data, no scroll. Why every 30 seconds? Two reasons: Hackatime aggregates heartbeats in 1-minute buckets internally, so polling faster than that doesn’t tell you anything new 30 seconds is fast enough to feel “live” without hammering the API for no reason Ctrl+C to quit. Resizing the terminal doesn’t break it. Pair it with a gradient color scheme and the whole thing turns into a tiny dashboard for your coding session: hackfetch -watch sunset"}, {"post_id": 16604, "ts": "2026-06-27T00:38:28Z", "hours": 0.5825, "text": "Hackfetch Installs Itself Anywhere Hackfetch crossed another milestone today: you no longer need Go installed to use it. Or Homebrew. Or anything, really. The goal was simple: one command, any Linux, any Mac, no prerequisites. curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Run that on Ubuntu, Fedora, Alpine, Arch, openSUSE, whatever you have, and a few seconds later hackfetch is on your PATH. Getting the basic installer working was the easy part. Detect your OS, detect your CPU architecture, grab the matching binary from GitHub Releases, drop it in /usr/local/bin. Standard installer stuff. The harder problem was the script itself failing on some Linuxes. I’d written the first version in Bash, with set -euo pipefail at the top and $'\\033[1m' style escape sequences sprinkled through. Worked great on my Mac. Worked great on Ubuntu. Then I checked which shell Alpine Linux ships by default. Not Bash. The whole script would die on line one for anyone on a minimal container. So I rewrote it in POSIX sh, which is the one shell every Unix system actually has. No Bash-isms, no fancy quoting, no pipefail. Smaller, dumber, way more portable. Speaking Seven Package Managers The next problem: the script needs curl and tar to do its job. If you don’t have them, normally you’d just be stuck. Instead, the installer now detects your system’s package manager and installs the missing prereqs for you: apt (Debian, Ubuntu) dnf (Fedora, RHEL) yum (CentOS, older RHEL) pacman (Arch) zypper (openSUSE) apk (Alpine) brew (macOS) They all do the same thing. They all use different words for it. The installer knows all seven. One line. Any Linux. No prereqs."}, {"post_id": 15120, "ts": "2026-06-24T15:57:10Z", "hours": 0.4172, "text": "Hackfetch Meets Orpheus! If you’ve been around Hack Club for more than five minutes, you know Orpheus. The little dinosaur shows up everywhere: stickers, websites, T-shirts, hackathon merch. Until today, he wasn’t in hackfetch. That’s been bugging me since v1.0. The goal was simple: give Orpheus a spot in the logo lineup, the same way flag, bot, and rocket already have one. hackfetch orpheus Drawing him was the harder part. Every logo in hackfetch has to fit inside a fixed width of 33 characters, otherwise the system info column next to it gets pushed off the screen. 33 characters is not a lot of room to draw a recognizable dinosaur, especially one with personality. I tried him head-on first. It didn’t work. Round dinosaur faces in ASCII end up looking like blobs because you don’t have curves, only corners. So I redrew him in profile. The result: a snout sticking out to one side one big eye (◉) that catches the light a HACK CLUB body underneath two tiny stubby legs at the bottom Nine lines tall. No wasted rows. He plays especially well with the gradient color schemes: hackfetch orpheus -color forest hackfetch orpheus -color sunset Forest makes him look like he’s wandering through tall grass. Sunset gives him a “main character in the closing shot” vibe. The mascot finally has a seat at the terminal. Long overdue! Also if any better artists want to have a crack at it, I’m super open to that, and I can credit you in my repo as a collaborator! THNX!"}, {"post_id": 14410, "ts": "2026-06-23T15:08:46Z", "hours": 6.8756, "text": "Hackfetch Can Finally Fetch Hackfetch crossed a pretty big milestone today: it actually fetches things. The goal is simple: build a Neofetch-style dashboard for Hack Club. Run a single command and get a snapshot of your machine alongside your Hack Club activity. hackfetch and instantly see information like: OS Hostname Username Shell Terminal Editor Hackatime stats Getting the system information was the easy part. Go makes it straightforward to grab things like the current user, hostname, operating system, and environment variables. The harder problem was rendering everything cleanly beside an ASCII logo. Each logo has different dimensions and line lengths, so I ended up building a small layout engine that calculates the width of every logo row and pads it dynamically before printing the corresponding information. Without that, the text column slowly drifts into the logo and the entire fetch screen looks broken. Hooking into Hackatime The more interesting work was integrating with the Hackatime API.Hackfetch reads your API key from: ~/.wakatime.cfg authenticates with Hackatime, and pulls fresh coding statistics every time you run the command.Right now it can display: Today’s coding time Weekly coding time Current streak Top project Most-used language No browser. No dashboard. Just a terminal command."}, {"post_id": 7579, "ts": "2026-06-12T17:50:14Z", "hours": 0.5989, "text": "In honor of pride month, I have added a pride color scheme to my custom hackfetch. It is currently installable via brew. On macs, simply run: brew install xerneas3318/tap/hackfetch Currently working on better support for more operating systems. Follow and like to stay updated!"}, {"post_id": 7526, "ts": "2026-06-12T15:50:51Z", "hours": 8.7181, "text": "Introducing hackfetch a tiny terminal fetch tool for hackatime. Run hackfetch and get your hours today, weekly total, streak, top project, and top language right in your terminal. 5 logos. 8 color schemes. mix and match: hackfetch stardance rainbow How it works: hackfetch reads your hackatime key from ~/.wakatime.cfg, fetches your Hackatime summaries and heartbeats, then renders your stats directly in the terminal."}]...
|
Title: Hackfetch by @xerneas | Stardance
Devlogs: Title: Hackfetch by @xerneas | Stardance
Devlogs:
Introducing hackfetch a tiny terminal fetch tool for hackatime. Run hackfetch and get your hours today, weekly total, streak, top project, and top language right in your terminal. 5 logos. 8 color schemes. mix and match: hackfetch stardance rainbow How it works: hackfetch reads your hackatime key from ~/.wakatime.cfg, fetches your Hackatime summaries and heartbeats, then renders your stats directly in the terminal.
In honor of pride month, I have added a pride color scheme to my custom hackfetch. It is currently installable via brew. On macs, simply run: brew install xerneas3318/tap/hackfetch Currently working on better support for more operating systems. Follow and like to stay updated!
Hackfetch Can Finally Fetch Hackfetch crossed a pretty big milestone today: it actually fetches things. The goal is simple: build a Neofetch-style dashboard for Hack Club. Run a single command and get a snapshot of your machine alongside your Hack Club activity. hackfetch and instantly see information like: OS Hostname Username Shell Terminal Editor Hackatime stats Getting the system information was the easy part. Go makes it straightforward to grab things like the current user, hostname, operating system, and environment variables. The harder problem was rendering everything cleanly beside an ASCII logo. Each logo has different dimensions and line lengths, so I ended up building a small layout engine that calculates the width of every logo row and pads it dynamically before printing the corresponding information. Without that, the text column slowly drifts into the logo and the entire fetch screen looks broken. Hooking into Hackatime The more interesting work was integrating with the Hackatime API.Hackfetch reads your API key from: ~/.wakatime.cfg authenticates with Hackatime, and pulls fresh coding statistics every time you run the command.Right now it can display: Today’s coding time Weekly coding time Current streak Top project Most-used language No browser. No dashboard. Just a terminal command.
Hackfetch Meets Orpheus! If you’ve been around Hack Club for more than five minutes, you know Orpheus. The little dinosaur shows up everywhere: stickers, websites, T-shirts, hackathon merch. Until today, he wasn’t in hackfetch. That’s been bugging me since v1.0. The goal was simple: give Orpheus a spot in the logo lineup, the same way flag, bot, and rocket already have one. hackfetch orpheus Drawing him was the harder part. Every logo in hackfetch has to fit inside a fixed width of 33 characters, otherwise the system info column next to it gets pushed off the screen. 33 characters is not a lot of room to draw a recognizable dinosaur, especially one with personality. I tried him head-on first. It didn’t work. Round dinosaur faces in ASCII end up looking like blobs because you don’t have curves, only corners. So I redrew him in profile. The result: a snout sticking out to one side one big eye (◉) that catches the light a HACK CLUB body underneath two tiny stubby legs at the bottom Nine lines tall. No wasted rows. He plays especially well with the gradient color schemes: hackfetch orpheus -color forest hackfetch orpheus -color sunset Forest makes him look like he’s wandering through tall grass. Sunset gives him a “main character in the closing shot” vibe. The mascot finally has a seat at the terminal. Long overdue! Also if any better artists want to have a crack at it, I’m super open to that, and I can credit you in my repo as a collaborator! THNX!
Hackfetch Installs Itself Anywhere Hackfetch crossed another milestone today: you no longer need Go installed to use it. Or Homebrew. Or anything, really. The goal was simple: one command, any Linux, any Mac, no prerequisites. curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Run that on Ubuntu, Fedora, Alpine, Arch, openSUSE, whatever you have, and a few seconds later hackfetch is on your PATH. Getting the basic installer working was the easy part. Detect your OS, detect your CPU architecture, grab the matching binary from GitHub Releases, drop it in /usr/local/bin. Standard installer stuff. The harder problem was the script itself failing on some Linuxes. I’d written the first version in Bash, with set -euo pipefail at the top and $'\033[1m' style escape sequences sprinkled through. Worked great on my Mac. Worked great on Ubuntu. Then I checked which shell Alpine Linux ships by default. Not Bash. The whole script would die on line one for anyone on a minimal container. So I rewrote it in POSIX sh, which is the one shell every Unix system actually has. No Bash-isms, no fancy quoting, no pipefail. Smaller, dumber, way more portable. Speaking Seven Package Managers The next problem: the script needs curl and tar to do its job. If you don’t have them, normally you’d just be stuck. Instead, the installer now detects your system’s package manager and installs the missing prereqs for you: apt (Debian, Ubuntu) dnf (Fedora, RHEL) yum (CentOS, older RHEL) pacman (Arch) zypper (openSUSE) apk (Alpine) brew (macOS) They all do the same thing. They all use different words for it. The installer knows all seven. One line. Any Linux. No prereqs.
Live Hackfetch New milestone today: hackfetch can now stay open and update itself while you code. The goal was simple: run hackfetch once, leave it in the corner of your terminal, and watch the numbers move in real time as you work. hackfetch -watch Your today-hours tick up. Your top project changes when you switch repos. Your streak rolls over at midnight. All without running the command a second time. The static render was already in place from the regular one-shot fetch. The new part was redrawing without scrolling. That sounds simple. It is not. In a terminal, every time you print something, it appends to the bottom of the screen. By default, refreshing the fetch would just print a second copy of itself underneath the first, then a third, then a fourth. Within a minute you’d have a wall of identical fetches scrolling away into the past. The trick is ANSI escape codes. There’s a sequence that means “move the cursor up N lines” and one that means “clear the rest of the screen from here down.” Together they let you erase the previous fetch and redraw a new one in the same spot. Same screen, fresh data, no scroll. Why every 30 seconds? Two reasons: Hackatime aggregates heartbeats in 1-minute buckets internally, so polling faster than that doesn’t tell you anything new 30 seconds is fast enough to feel “live” without hammering the API for no reason Ctrl+C to quit. Resizing the terminal doesn’t break it. Pair it with a gradient color scheme and the whole thing turns into a tiny dashboard for your coding session: hackfetch -watch sunset
New feature today: hackfetch can turn itself into a shareable image. The goal was simple: your terminal fetch should be more than a terminal thing. If it looks cool on your screen, you should be able to post it in a Slack channel or drop it in a devlog without ever having to take a screenshot. hackfetch -export card.svg Run that and instead of printing to your terminal, hackfetch writes an SVG file that looks exactly like the fetch on your screen: logo on the left, stats on the right, rounded corners, monospace font, every color preserved. Getting the general SVG output was the easy part. Draw a rectangle, put text inside it, done. The hard part was preserving the colors. Terminals speak ANSI 256-color codes. SVGs speak hex color strings. They don’t line up one-to-one, so a naive export just drops every color and produces a black-and-white version of the fetch. Not very shareable. The fix: a lookup table from ANSI 256-color codes to hex values, plus a rendering path that emits every styled character as its own SVG element with the correct fill color. That’s actually a lot of tspans. Schemes like per-char, where every single glyph has its own gradient stop, can produce hundreds of colored elements per fetch. But it works. The SVG renders smoothly in any browser and looks identical to what shows up in your terminal. Use It Anywhere Some things you can do with the exported card: open it in a browser to see it drop it into a Slack channel or a devlog convert it to PNG with rsvg-convert if you need a raster image hackfetch -export card.svg trans Open it. Post it. Ship it.
Loading Spinner and Splitting Up main.go Thanks so much to everyone who took the time to comment, rate, and drop feedback on my latest ship. All of it was genuinely so helpful and I’ve been spending the last couple days fixing things up a bit. I totally forgot to devlog so I’m actually losing a couple hours since it’s been over ten hours since my last one :sob A loading spinner while Hackatime fetches One reviewer pointed out that hackfetch takes a couple of seconds when it’s pulling your Hackatime stats for the first time, and there was no signal that anything was happening. Now there is. ⠋ fetching Hackatime... The spinner cycles through 10 braille frames and the whole line clears out the instant the fetch finishes. Same fetch, way less awkward pause. Two small details that make it feel right: It only shows when stderr is actually a terminal, so it doesn’t spam control codes into your log files if you redirect output. It prints one frame immediately, so fast fetches still flash something instead of nothing. hackfetch runs it around the API calls automatically. No config, no opt-in. It’s just there. Splitting up main.go Another reviewer said the 1.5k-line file was too much. They were completely right. hackfetch had grown into one giant main.go that held the logos, the color schemes, the Hackatime API client, the terminal render, the SVG exporter, the PNG rasterizer, everything. Refactored today into files that each do one thing: logos.go: the ASCII logos colors.go: color schemes and the ANSI → hex table config.go: reads ~/.wakatime.cfg hackatime.go: the API client, caching, and language inference sysinfo.go: OS, shell, editor, terminal setup.go: the -setup flow render.go: terminal render, watch loop, and layout export.go: SVG, PNG, and JPG exporters main.go: just flag parsing and the entry point (~100 lines instead of 1,600) Same binary, same behavior, zero user-visible change. But next time I want to add a new logo or a new color scheme, I know exactly which file to open. Also way friendlier for anyone who wants to hack on it. Ship Both landed in v1.7.1. If you already have it: brew update brew upgrade hackfetch Or the curl installer will pull v1.7.1 the next time you run it. Try it.
Hackfetch Is Now Actually Fast Last log I added a loading spinner so you’d have something to look at while hackfetch was hitting the Hackatime API. This week I made it so you barely have time to see the spinner at all (undoing all my work lol) The problem hackfetch was making four separate calls to Hackatime for every fetch: /users/current/heartbeats/most_recent (for your slack handle) /users/current/summaries (for your streak) /users/current/statusbar/today (for today's coding time) /users/current/stats/last_7_days (for weekly stats) Doing them one after another meant the total wait was the sum of all four. Turns out that’s about 1.7 seconds on a normal connection. Not the end of the world, but very noticeable when you just want to open a terminal. The fix: run them all at the same time Now hackfetch fires all four calls in parallel using goroutines, waits for the slowest one to come back, and then builds the fetch from the responses. Total wait drops from “sum of all four” to “just the slowest one.” Before: ~1.7 seconds After: ~0.7 seconds 60% faster . Every single fetch. Every single time. One tiny bonus optimization While I was in there, I also switched to a single shared HTTP client with a bigger connection pool. The default Go setup caps you at 2 open connections per host, which is fine when you’re calling one endpoint at a time but hurts when you’re firing four at once. Now the parallel calls can share connections instead of stacking up on each other. Nothing about the fetch itself changed. Same info, same layout, same colors. Just faster. Ship Shipped in v1.7.2. If you have hackfetch installed: brew update brew upgrade hackfetch time hackfetch Watch the spinner barely have time to appear.
One More Way to Install (and Pizza) Two small things today: hackfetch is now on the AUR, and there’s a new logo. hackfetch on the AUR A reviewer on my last ship said they had a hard time getting hackfetch running on CachyOS (an Arch-based Linux distro). Instead of trying to reproduce their exact issue, I figured the cleanest fix was to publish hackfetch through the package manager Arch users already trust. So hackfetch is now up as hackfetch-bin on the AUR: aur.archlinux.org/packages/hackfetch-bin If you’re on Arch, CachyOS, Manjaro, EndeavourOS, Garuda, or any other Arch-based distro: yay -S hackfetch-bin Or with paru: paru -S hackfetch-bin The package pulls the pre-built binary straight from the GitHub release, so there’s no waiting on a source build. Works on both x86_64 and aarch64 . Add it up and hackfetch is now installable one command from: brew (macOS and Linuxbrew) apt / dnf / yum / pacman / zypper / apk (all through the curl installer) the AUR (Arch family) go install (any platform with Go) the PowerShell installer (Windows) This thing is getting kind of hard to NOT install. Pizza logo Hack Club runs on pizza. Now hackfetch does too. hackfetch pizza It’s a triangular slice viewed from the tip, HACK CLUB baked into the middle, and a rolled crust at the wide edge. The tricky part was the crust. I went through three drafts trying to make it curve at the bottom without breaking the connection to the slice’s diagonal sides (turns out you can’t cleanly connect diagonal characters to horizontal ones in a monospace grid). Landed on a two-row rolled crust where the diagonals keep going and the interior fills with a double horizontal band. Pairs surprisingly well with sunset: hackfetch pizza sunset Turns your terminal into a golden-hour pizza box. Ship Both landed in v1.7.3 . If you’re on Arch-family: yay -S hackfetch-bin Elsewhere: brew update brew upgrade hackfetch Now try hackfetch pizza and tell me if the crust looks right.
Hackfetch Gets Real Colors New thing today: hackfetch now emits 24-bit color when your terminal supports it, and spreads gradients smoothly across each row instead of cycling through the palette one character at a time. Before and after Old behavior: for a per-char scheme like rainbow , each character got exactly one palette entry, wrapping around every N characters. On a 30-column row with a 3-color palette, that looked like ten cycles of red, green, blue, red, green, blue… basically RGB static. New behavior: the palette spreads across the row once, and characters between palette entries get interpolated in-between colors. Same 3-color palette on a 30-column row now shows red, olive, green, teal, blue, magenta, back to red. Why the rebuild Terminals speak two color modes: 256-color ( \x1b[38;5;Nm ): pick from a fixed palette of 256 preset RGB values. 24-bit / truecolor ( \x1b[38;2;R;G;Bm ): specify any of ~16 million RGB values directly. The old code always used 256-color. That meant every character had to snap to one of the palette entries. No in-betweens possible. The new code checks $COLORTERM (set to truecolor by iTerm2, kitty, WezTerm, Alacritty, GNOME Terminal, and most modern terminals) and emits 24-bit escapes when supported. When it’s not, it falls back to the old cycled-palette behavior automatically. You can force it either way with HACKFETCH_TRUECOLOR=1 or =0 . Where you’ll notice it The built-in rainbow scheme has 23 palette stops, so the difference on that one is small. You just see a smoother color distribution and less banding. The change is dramatic on: custom themes with few stops (try 3 colors in your ~/.config/hackfetch/colors.json for the wildest gradient) the stardance palette (11 stops, per-char), where sparkles now flow through the spectrum in order instead of landing on random-looking colors any per-line scheme ( pride , trans , bi , pan , sunset , ocean , forest ) since they now emit exact RGB values instead of nearest-256-color Bonus: the SVG, PNG, and JPG export paths use the smooth interpolation too, so exported cards look better regardless of your terminal. Ship Landed in v1.8.0 . brew update brew upgrade hackfetch Or on the Arch family: yay -Syu hackfetch-bin Try hackfetch rocket forest and just watch.
hackfetch is now TMUX + NVIM COMPATIBLE new thing today: hackfetch will just show up wherever you already look. tmux status bar. nvim statusline. any tool that can shell out to a command and put text on a screen. The addition was simple: hackfetch -status prints one line: 2h 11m today · hackfetch (45m) · streak 12 just the numbers, for tools that already have their own rendering. hackfetch is a data source now, not just a display. in tmux two lines in ~/.tmux.conf : set -g status-interval 60 thats it. every tmux session, every window, refreshing once a minute. i dropped it in a pink Catppuccin capsule to the left of my existing date capsule and now i cant stop glancing at it lol. in neovim (lualine) same story, five lines of lua: sections = { lualine_z = { function () return vim . fn . system ( "hackfetch -status" ): gsub ( " \n " , "" ) end } } } shells out on every redraw. works with airline too, or any custom statusline that lets you plug in a function. the fun part making hackfetch call safe for “something tmux runs every 60s forever” meant fixing three assumptions the normal fetch was making. this was way harder than it should have been ngl. setup cant block. if you dont have ~/.wakatime.cfg, normal hackfetch throws you into an interactive setup wizard (ask me how i know). in status mode that would freeze your tmux bar until you notice and Ctrl+C it. so status mode is fully non interactive now. no config → print nothing → tmux shows nothing → no deadlock 🙏 api errors cant leak into your bar. hackatime offline? old behavior would dump HTTP 500 timeout into your status area which looks INSANE. now status mode exits silently instead so your bar stays clean every call has to be cheap. hackfetch’s parallel fetch alr seconds, and the shared HTTP client keeps connections alive across the 4 API calls it fires, so tmux polling every 60s is easy on the API. a proper local file cache is on the list for later but honestly not needed for now (i’m lazy) ship landed in v1.9.0. if you already have it: brew update brew upgrade hackfetch or arch family: yay -Syu hackfetch-bin (for more installs for ur specific os check out the github pls) then drop the tmux or lualine snippet above into your dotfiles and its just there in every terminal. no plugin. no config. no daemon. just a flag.
caching or i owe hackclub money so heres what my day looked like: nvim was calling hackfetch -status on every redraw for my lualine. tmux was calling it every 60 seconds for the status bar. i had 3 tmux sessions open. and every time i actually opened a new terminal, hackfetch fired again on shell start. quick napkin math: nvim redraws are basically continuous when im typing, tmux was hitting the api 3x/minute across sessions, plus every terminal open = another fetch. we’re talking hundreds of calls to hackatime in a normal work session. from ONE user. me hackatime is a free hack club service and i was starting to feel bad lol. the fix: cache the response ~/.cache/hackfetch/last.json stores the last snapshot with a timestamp. every fetch checks that file first. if its fresh enough, skip the network entirely and just render from disk. TTL is different depending on the caller: hackfetch (one-shot): 30 seconds. long enough that a normal re-run inside a devlog attempt is instant, short enough that you dont get badly stale numbers. hackfetch -status: 60 seconds tmux polls roughly this often anyway so its basically free now. hackfetch -watch: ignores the cache, always fresh (thats the whole point of watch mode). opt out with -no-cache or HACKFETCH_CACHE_TTL=0 if you want. also HACKFETCH_CACHE_TTL=300 to be even more polite. So yea tmux is now basically free . but the real win writing this made me realize the cache does more than save milliseconds: every fetch was a full TLS handshake, wifi radio spin up, etc. now most fetches touch the disk once and nothing else. macbook fan appreciates it. offline. if your wifi drops mid coding session you keep working from the cache instead of showing a spinner forever. tmux bar just keeps saying what it said 40 seconds ago. battery again but for the hackatime server. hackfetch stops asking the api 5-10x more than they need to. multiply by everyone who has it in their tmux config and thats a real thing. atomic write via .tmp + rename so nothing ever reads a half-written file. cache is user-only (0600), because it does contain your top project name. bonus: -doctor while i was fixing the polite-to-the-api stuff i added -doctor , which walks a checklist and tells you whats broken: hackfetch doctor ✓ wakatime config exists /Users/xerneas/.wakatime.cfg ✓ api_key present loaded from config ✓ wakatime-cli found /Users/xerneas/.wakatime/wakatime-cli ✓ hackatime api reachable today: 28m ✓ terminal supports truecolor $COLORTERM=truecolor ✓ browser opener available /usr/bin/open green if its working, orange if its not, and non-zero exit if anything failed so you can script it. this was going to be a small self-diagnosis feature and it caught a real bug in the api client on the very first run i did while writing it lol (a string field where hackatime returns an int, so one of the fields was silently missing from every fetch since v1.0). fixed that too. ship both landed in v1.10.0. update as usual: brew update brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then run hackfetch -doctor first, and if anything is broken it’ll tell you exactly what.
my streak was lying to me for a month went to add a simple 7-day sparkline. by the end of the night i had rewritten how hackfetch talks to hackatime and my streak field is finally accurate for the first time in weeks. the plan was get the status from the last 7 days. draw ▁▂▃▄▅▆▇█ bars except the endpoint i needed straight up 404s. /users/current/summaries doesnt exist on the current hackatime deployment. Which means every single time i ran hackfetch it was quietly making a 30-day range call that always failed, then falling back to a placeholder that said “if today has activity, streak = 1”. thats it. no matter how long ive actually been on a streak, the fetch would just show 1 day. 🤦 my streak has said 1 day for the last 2 weeks even though ive been coding literally every day. never noticed because 1 day looks kinda plausible (i added 1 day as a fallback so that it didn’t show an error a couple weeks ago and forgot ) the fix: went digging in hackatimes rails routes on github. turns out theres a whole /api/v1/ namespace i was never using. and one of the endpoints is /api/v1/users/:id/heartbeats/spans. one call, ~150kb of json, every coding session ive ever logged with start_time, end_time, duration. 2000+ spans. which is exactly what i need for both features. bucket the timestamps by local calendar day, count unique days for streak, sum durations per day for the sparkline. one request covers both. and while i was already in the api layer i noticed fetchUser was making a whole separate call for my slack handle, which is silly because that data is already in the weekly stats response we cache. so i piggybacked it. weve gone from 4 api calls per fetch to 3. the sparkline: 7-day chart ▄▄▇▅▄▅▃ 65h 28m oldest on the left, newest on the right. that tall bar in the middle is a big lock-in session from earlier in the week. the two shorter ones on the right are today (still coding) and yesterday (took a break). opt in for -status --sparkline if you want it in your tmux bar too: 2h 9m today · streak 9 · ▄▄▇▅▄▅▃ 65h 28m teasing a backend: I’m planning on building a whole leaderboard server on a free hack club nest box so people can compete on their hackatime hours. while i was poking around the routes file for the streak fix i noticed something. /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist. public. no auth needed. no server needed. no cron sync. hackatime literally already has it directly. so hackfetch -leaderboard is coming soon (private friend groups and personal competitions can come later) last devlog before my next ship after the ship the devlogs are going to be huge. stay tuned :P
hackfetch COLLAB?? so my last two devlogs teased two features. shipping both today. -leaderboard last devlog i said “compete with your friends on hackatime hours is coming soon.” i thought i was gonna have to build a whole nest server for it. turns out /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist and are public on hackatime. just a single call!! so hackfetch -leaderboard daily (or weekly) now shows the top 10: ✦ daily leaderboard Last 24 hours 🥇 1. soaphia14 11h 12m 🥈 2. AnastKara 10h 32m 🥉 3. RoSerMar 10h 6m 4. euledone 10h 5. TheShovel 10h 6. Dylhouse 9h 1m 7. Dexrn 8h 59m 8. HexFud 8h 31m 9. zeddash 8h 29m 10. Trtotomotoro 8h 26m every username is an OSC 8 clickable link to that person’s hackatime profile. modern terminals (iterm2, kitty, wezterm, alacritty, gnome-terminal) render it as an actual hyperlink you can click. terminals without OSC 8 just show the plain text so it doesnt look broken. if you’re on the board it highlights your row in orange and adds (you) next to your name. json addon the other thing. someone else competing in stardance messaged me the other day about integrating hackatime into their own project and needed help figuring out the api (YAY). helping them made me realize hackfetch is doing a bunch of work (auth, caching, streak reconstruction, per-day bucketing) that other tools would love to piggyback on. so now: $ hackfetch -json { "version": "2", "fetched_at": "2026-07-25T17:00: 20.900829+05:30", "system": { "user": "xerneas", "host": "Macbook-Pro", "os": "macOS 26.5.2", ... }, "hackatime": { "slack": "@U0B8FHHRQPJ", "streak": 12, "today_seconds": 15820, "week_seconds": 237501, "top_project": { "name": "hackfetch", " "top_language": { "name": "Go", "seconds": 97418 }, "week_chart": [36967, 31651, 33841, 284 "machines": 3 } } week_chart is 7 numbers = daily seconds oldest to newest same as the sparkline. top_language skips the unknown/other buckets. everything lines up with what the normal fetch would show, just parseable. ship landed in v2.1.0. brew update && brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then try: hackfetch -leaderboard weekly hackfetch -json | jq For a general install use: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh
big thank you for everyone’s feedback! fresh out of the oven: hackfetch v2.1.1 (aka the reviewer bug fix pass) what got fixed: shell detection used to just read $SHELL which is your login shell. if you log in as bash but run fish, hackfetch was calling you a bash user. it now checks $FISH_VERSION / $ZSH_VERSION / $BASH_VERSION and falls back to asking the OS who your parent process actually is editor detection was two bugs in a trench coat. it wasnt stripping args so zeditor --wait showed up as “zeditor –wait” instead of “Zed”, and if you had no $EDITOR set it defaulted to nano even if you had literally never opened nano. now it strips flags, maps launcher names to human ones (zeditor -> Zed, code -> VS Code, cursor -> Cursor, hx -> Helix etc), and says “-” instead of nano if nothing is set. top project label was ambiguous. it was pulling weekly stats but the row just said “top project” so people thought it meant all time. now weekly rows read top proj 7d , top lang 7d , top ed 7d , top cat 7d . setup dialog was scaring people. it always printed “file exists but has no api_key” whenever it reached the setup flow, even if the api_key line was actually there but just failing to parse. loadConfig is now more forgiving (inline comments, quoted values, case insensitive keys) and setup tells you WHY its stuck instead of gaslighting you about your own config. also short circuits if you run hackfetch -setup when youre already set up. people said they wanted a gay flag color was already there under the name pride but that wasnt obvious. gay is now an alias so both work. grab it: brew upgrade hackfetch or yay -S hackfetch-bin or curl / powershell installer if you don’t have it yet curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh again thank you to everyone who took the time to actually run it and tell me what was broken!
HACKFETCH BATTLES??? two features in one release. hackfetch already knows a scary amount about you (thanks hackatime) so why not turn that into more features. hackfetch vs @ someone head to head compare. give it a hackatime username and hackfetch fetches both your histories in parallel, buckets them into today / this week / all time / streak, and prints them side by side with a winner arrow on every row. accepts @name , name , or a full profile url like hackatime.hackclub.com/@name . also works positional: hackfetch vs @you . use it to settle arguments, motivate yourself, or realize your friend has coded 265 hours and you should probably close discord. hackfetch -records personal bests. computed entirely from data hackfetch already fetches (streak + sparkline already use it), so zero new api calls $ hackfetch -records ✦ personal records @you biggest day 12h 41m on 2026-07-18 longest streak 25 days ended 2026-07-01 longest session 43m on 2026-07-17 days coded 86 first day 2026-04-24 99 days ago lifetime 208h 29m the “longest streak” tracks your all time best not just your current one. and “first day” tells you how long ago you started so you can feel old. grab it brew upgrade hackfetch yay -S hackfetch-bin install curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Next devlog is gonna be a fun one, I have an idea cooking up
Hackfetdch natively in your readme hackfetch -readme it spits out a markdown stats card ready to paste straight into your github profile README. pipe it into a file and commit: hackfetch -readme > stats.md this is the cool bit or drop it in your README.md between two html comments and set up a github action to run it on a schedule so it auto refreshes every day. your profile now has a live coding stats card next to your pinned repos with no cron server, no vercel deploy, no api key stashed in secrets. its literally just markdown. zero extra api calls too. the readme card reads from the same cached hackatime response the normal fetch uses so if you just ran hackfetch it takes ~20ms. the streak emoji is a lil detail i had fun with. 3+ days gets a 🔥 upgrade with brew upgrade hackfetch or yay -S hackfetch-bin (once aur maintenance wraps up) or curl the installer curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh
Ships:
Every fetch tool tells you your OS. Mine tells you your streak. hackfetch is a Hack Club themed terminal fetch tool. Inspired by neofetch (originally bash, now archived) and fastfetch (its C successor), written in pure Go. Instead of just showing your kernel and CPU, it pulls live stats from your Hackatime account: today’s hours, weekly total, current streak, top project, top language. Right in your terminal. Six Hack Club themed ASCII logos (including my GOAT orpheus). Fourteen color schemes (pride, trans, bi, pan included). Live watch mode that refreshes while you code. And as of today, you can export the whole thing as a PNG, JPG, or SVG card and post it anywhere. One line to install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Tell me how it was! Follow and like for updates.
HACKFETCH V2.0 it’s been a few weeks since ship #1 and hackfetch is a completely different tool now. faster, smaller, quieter, actually correct, and now lives in places besides your terminal window. v2.0.0 is out. what changed: fits in your tmux status bar with one line of config. same story for lualine. hackfetch -status prints a compact one-liner meant to be shelled out to every minute. fits everywhere else too. now on the AUR (yay -S hackfetch-bin) alongside the existing brew tap, curl installer, powershell installer, and go install. seven install channels total. runs in ~20ms on repeat calls thanks to an on-disk cache. tmux polling every minute is basically free now. was ~700ms cold before. runs in ~0.7s cold thanks to a parallel API fetch. was ~1.7s before. shows a smooth truecolor gradient on any modern terminal. auto-detects $COLORTERM. falls back to 256-color on older ones. -doctor walks a colored checklist of your setup and tells you exactly what’s broken. green if fine, orange if not, non-zero exit if you wanna script it. new pizza logo because hack club runs on pizza. seven logos total. streak is finally correct after silently saying “1 day” for a month. /summaries is gone from hackatime so hackfetch now reconstructs streak from every coding session in your history via /heartbeats/spans. real streak: 9 days for me right now. 7-day sparkline baked into the fetch (with -v) and available as -status –sparkline for the tmux bar. default fetch got leaner. slack handle, machines count, and the sparkline moved behind -v so the normal fetch stays focused on hours + project + language. loading spinner on the api fetch so you know something is happening. and then the cache made it show up almost never. one install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Arch family: yay -S hackfetch-bin macOS / Linuxbrew: brew install xerneas3318/tap/hackfetch For more install methods check out the github page: https://github.com/xerneas3318/hackfetch teasing the next big thing: hackfetch -leaderboard is coming next, using the public leaderboard endpoints i found in hackatime’s routes file. compete with friends on daily and weekly hours right from your terminal. private friend groups on a hackclub nest box after that. if you try it, thanks. send me some feedback...
|
1793771679.981143
|
1794635679.981143
|
|
16886
|
My very own WebOS by @JacksonBehlmann | Stardance
|
JacksonBehlmann
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @JacksonBehlmann | Sta Title: My very own WebOS by @JacksonBehlmann | Stardance...
|
1793534116.029894
|
1794138916.029894
|
|
16887
|
Frictionless by @SyNTaX_Error | Stardance
|
SyNTaX_Error
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @SyNTaX_Error | Stardance
|
1793181336.0027282
|
1793786136.0027282
|
|
16888
|
My very own WebOS by @olivia020402 | Stardance
|
olivia020402
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @olivia020402 | Starda Title: My very own WebOS by @olivia020402 | Stardance...
|
1793317735.0380707
|
1793922535.0380707
|
|
16889
|
My very own WebOS by @Aditya_Achar | Stardance
|
Aditya_Achar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Aditya_Achar | Starda Title: My very own WebOS by @Aditya_Achar | Stardance...
|
1793264086.8160567
|
1793868886.8160567
|
|
16890
|
My first slack bot! by @tatoxarabadze12345 | Stard My first slack bot! by @tatoxarabadze12345 | Stardance...
|
tatoxarabadze12345
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @tatoxarabadze12345 Title: My first slack bot! by @tatoxarabadze12345 | Stardance...
|
1793418470.4185166
|
1794023270.4185166
|
|
16891
|
Chess Engine by @nandua2 | Stardance
|
nandua2
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Chess Engine by @nandua2 | Stardance
|
1793411391.6641645
|
1794016191.6641645
|
|
16892
|
FWIR by @Rien | Stardance
|
Rien
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: FWIR by @Rien | Stardance
|
1793274864.1743617
|
1793879664.1743617
|
|
16893
|
Frictionless by @nathankura | Stardance
|
nathankura
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @nathankura | Stardance
|
1793461835.4070768
|
1794066635.4070768
|
|
16894
|
My very own WebOS by @kyleli | Stardance
|
kyleli
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @kyleli | Stardance
|
1793444015.4022365
|
1794048815.4022365
|
|
16895
|
Youtube Subscriber Count by @shaur1021 | Stardance
|
shaur1021
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Youtube Subscriber Count by @shaur1021 | St Title: Youtube Subscriber Count by @shaur1021 | Stardance...
|
1793238823.9714942
|
1793843623.9714942
|
|
16896
|
3-Body JS Simulation by @dkh | Stardance
|
dkh
|
1
|
19.0
|
359
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T02:37:18Z", "hours": 19.0, "multiplier": 18.91, "payout": 359, "blessing": "neutral", "text": "I made a real-time 3D physics simulation of a fully configurable three-body solar system using Three.js. It can run in your browser and is compatible with a wide range of devices. Players can move their camera, adjust simulation parameters, and explore the system’s chaotic behavior. Instructions are in the README along with a downloadable tutorial video file on the itch.io page. The biggest challenge I faced was that I hadn’t programmed with JavaScript, HTML, or CSS in a while. Designed and built by me using Three.js and GitHub Codespaces. I decided to build this project in honor of one of my favorite book series ever called the Three Body Problem. I was also fascinated by three-body physics and wanted to share that fascination with others. Thank you Stardance!", "repo": "https://github.com/dkhdev25/Three-Body-Sim", "demo": "https://dkhdev.itch.io/3-body-sim-3d"}]...
|
[{"post_id": 19656, "ts": "202 [{"post_id": 19656, "ts": "2026-07-01T01:08:50Z", "hours": 0.2669, "text": "Finished the readme so much styling stuff I had to do! Added some fixes and features to the game like following suns and resetting cam positions properly. Then I uploaded the polished version to itch io to ship. Made video tutorial and fixed the layout of the terminal so judges won’t be confused."}, {"post_id": 19531, "ts": "2026-06-30T21:08:54Z", "hours": 1.3189, "text": "Ready to SHIP my project! In this last hour of my work, I have finished the local settings panel that displays the selected body tab, I have made the physics more REALISTIC, and I have polished the simulation up a bit! Now I’m just going to make a README, upload to itch.io, and make a video tutorial to hopefully maximize the stardust I gain from my first ever project on Stardance! Thank you everyone for this opportunity that was given to me!"}, {"post_id": 18865, "ts": "2026-06-30T02:02:53Z", "hours": 0.6419, "text": "Ok, this is the SHORTEST logged time in a devlog I have ever made for this project so far, but an important feature has been finally added. What is the most important part of the simulation? Well a simulation RECORDS… think about that for a minute. Would it be best to have gravity/velocity arrows, the three body spheres, or the TRAILS. Well, it would be the trails, wouldn’t it? Because they are the HISTORY of the simulation. I have failed at making the 3D trails work 2 TIMES already (some sort of problem with the rendering), because after hours of debugging they just WOULD NOT work. But finally I took a simpler approach (after procrastinating them till like the end of the project almost) and they finally work! Basically it just records data points of the star positions then renders them. Let me know if any of you have feedback!"}, {"post_id": 18786, "ts": "2026-06-30T00:04:08Z", "hours": 3.2194, "text": "Just working on getting the global settings panel to finally work with JS after styling it with CSS. Here is this beautiful screenshot of the panel with an interesting image in the viewport XD One thing I have to say, I got dropdowns, off and ons, and number inputs but some of the global settings are unnecessary so I’m gonna get rid of those, fine tune the others, and fix reset/restart terminal commands, then I will finish local settings panel and ship this project."}, {"post_id": 13423, "ts": "2026-06-21T23:46:18Z", "hours": 1.735, "text": "So close to finishing the terminal! Here is a brief explanation on the difference between the two setting types: the terminal RUNS the simulation and the panels specify HOW the simulation will run, the two panels also play two different roles, one of them is the global settings, the other is the individual LOCAL settings for each body in the simulation. I hope this gives some understanding on how I plan to finish the settings before I go over on what I have been doing recently with the terminal which means ONE step closer to shipping this project! So: most of the work being done so far has been with the terminal right now. I polished up the look so it gets a nice default terminal style. Then I fixed some problems with the text line heights and the input/output contrast. I also made a script to sense certain key words in the terminal to color them so that you know that the word EXISTS and you typed it in correctly. I then added a help cmd function so that it will list all of the cmds. I narrowed down the list of cmds to: run, restart, reset, pause, resume, and debug. I’ve been working on getting them all integrated and am almost done. Next is the panels after the terminal is done."}, {"post_id": 8945, "ts": "2026-06-14T21:29:12Z", "hours": 1.9411, "text": "Added the skeleton of the UI!!! It looks nice right now I think, and you can select which sun you want to edit now. Finished ARROWS with contrast yet cohesion because they are velocity and gravity for each star, so same color and stuff, but different lengths, like clock hands. Worked for so LOOOOOOONG on trails but they just wouldn’t show no matter the debugging I tried so I’m giving up on trails (which I didn’t really need anyways). Just need to make the settings and then we can SHIP this project! YASSSSSSS HOORAY!!!"}, {"post_id": 8828, "ts": "2026-06-14T17:58:26Z", "hours": 5.3031, "text": "FINISHED THE 3-BODY PHYSICS!!! Awesome! Then I worked on making all of the simulation settings (already made & newly added) as some neat vars clustered together in the top of the code. After that I started working on the UI, my vision right now is a terminal on the bottom, a banner on the top, and two panels on top of each other on the left, the top one will be the global sim settings and the bottom one will be the selected sun settings. I finished the terminal UI but I need to make it where you can type into it and stuff. Finally, I posted the current version of the unfinished demo onto itch.io! Next I will finish the UI and work on trails + velocity and pull arrows.(Btw, that blue building icon in the screenshot isn’t part of the project, this was made on my school Chromebook so that’s an annoying thing on my screen!)"}, {"post_id": 7647, "ts": "2026-06-12T19:43:27Z", "hours": 2.5744, "text": "I was adding three unique yet COHESIVE suns together in a solar system (for our THREE bodies), adding a cluster system to the new procedural background star generation function I replaced the texture with and a color tint (looks more NATURAL), adding coronas to the three suns and removed their textures, working on orbit and zoom (especially the START position and min/max zoom), removed sphere for background since we don’t use a texture for that ANYMORE, cleaned up the code and polished some stuff. Now I can start working on the physics and then the UI after that."}, {"post_id": 7213, "ts": "2026-06-12T01:22:12Z", "hours": 2.0619, "text": "I started by joining Stardance, connecting my project to Hackatime, creating a GitHub codespace, and a repository with it. I began working on the sun, orbit controls with camera, glow through bloom effect, rotation animations, and background. (It’s all 3D) In fact, I made my first sun sphere (so first body) and then put it INSIDE of a sphere with the looping PNG to achieve a HDRI effect. Next I will set parameters for the zoom, make three suns, and work on trails + physics. (Which isn’t to be taken lightly cause the physics is going to be CRAZY) Thank you Stardance for letting me join! -dkh"}]...
|
Title: 3-Body JS Simulation by @dkh | Stardance
D Title: 3-Body JS Simulation by @dkh | Stardance
Devlogs:
I started by joining Stardance, connecting my project to Hackatime, creating a GitHub codespace, and a repository with it. I began working on the sun, orbit controls with camera, glow through bloom effect, rotation animations, and background. (It’s all 3D) In fact, I made my first sun sphere (so first body) and then put it INSIDE of a sphere with the looping PNG to achieve a HDRI effect. Next I will set parameters for the zoom, make three suns, and work on trails + physics. (Which isn’t to be taken lightly cause the physics is going to be CRAZY) Thank you Stardance for letting me join! -dkh
I was adding three unique yet COHESIVE suns together in a solar system (for our THREE bodies), adding a cluster system to the new procedural background star generation function I replaced the texture with and a color tint (looks more NATURAL), adding coronas to the three suns and removed their textures, working on orbit and zoom (especially the START position and min/max zoom), removed sphere for background since we don’t use a texture for that ANYMORE, cleaned up the code and polished some stuff. Now I can start working on the physics and then the UI after that.
FINISHED THE 3-BODY PHYSICS!!! Awesome! Then I worked on making all of the simulation settings (already made & newly added) as some neat vars clustered together in the top of the code. After that I started working on the UI, my vision right now is a terminal on the bottom, a banner on the top, and two panels on top of each other on the left, the top one will be the global sim settings and the bottom one will be the selected sun settings. I finished the terminal UI but I need to make it where you can type into it and stuff. Finally, I posted the current version of the unfinished demo onto itch.io! Next I will finish the UI and work on trails + velocity and pull arrows.(Btw, that blue building icon in the screenshot isn’t part of the project, this was made on my school Chromebook so that’s an annoying thing on my screen!)
Added the skeleton of the UI!!! It looks nice right now I think, and you can select which sun you want to edit now. Finished ARROWS with contrast yet cohesion because they are velocity and gravity for each star, so same color and stuff, but different lengths, like clock hands. Worked for so LOOOOOOONG on trails but they just wouldn’t show no matter the debugging I tried so I’m giving up on trails (which I didn’t really need anyways). Just need to make the settings and then we can SHIP this project! YASSSSSSS HOORAY!!!
So close to finishing the terminal! Here is a brief explanation on the difference between the two setting types: the terminal RUNS the simulation and the panels specify HOW the simulation will run, the two panels also play two different roles, one of them is the global settings, the other is the individual LOCAL settings for each body in the simulation. I hope this gives some understanding on how I plan to finish the settings before I go over on what I have been doing recently with the terminal which means ONE step closer to shipping this project! So: most of the work being done so far has been with the terminal right now. I polished up the look so it gets a nice default terminal style. Then I fixed some problems with the text line heights and the input/output contrast. I also made a script to sense certain key words in the terminal to color them so that you know that the word EXISTS and you typed it in correctly. I then added a help cmd function so that it will list all of the cmds. I narrowed down the list of cmds to: run, restart, reset, pause, resume, and debug. I’ve been working on getting them all integrated and am almost done. Next is the panels after the terminal is done.
Just working on getting the global settings panel to finally work with JS after styling it with CSS. Here is this beautiful screenshot of the panel with an interesting image in the viewport XD One thing I have to say, I got dropdowns, off and ons, and number inputs but some of the global settings are unnecessary so I’m gonna get rid of those, fine tune the others, and fix reset/restart terminal commands, then I will finish local settings panel and ship this project.
Ok, this is the SHORTEST logged time in a devlog I have ever made for this project so far, but an important feature has been finally added. What is the most important part of the simulation? Well a simulation RECORDS… think about that for a minute. Would it be best to have gravity/velocity arrows, the three body spheres, or the TRAILS. Well, it would be the trails, wouldn’t it? Because they are the HISTORY of the simulation. I have failed at making the 3D trails work 2 TIMES already (some sort of problem with the rendering), because after hours of debugging they just WOULD NOT work. But finally I took a simpler approach (after procrastinating them till like the end of the project almost) and they finally work! Basically it just records data points of the star positions then renders them. Let me know if any of you have feedback!
Ready to SHIP my project! In this last hour of my work, I have finished the local settings panel that displays the selected body tab, I have made the physics more REALISTIC, and I have polished the simulation up a bit! Now I’m just going to make a README, upload to itch.io, and make a video tutorial to hopefully maximize the stardust I gain from my first ever project on Stardance! Thank you everyone for this opportunity that was given to me!
Finished the readme so much styling stuff I had to do! Added some fixes and features to the game like following suns and resetting cam positions properly. Then I uploaded the polished version to itch io to ship. Made video tutorial and fixed the layout of the terminal so judges won’t be confused.
Ships:
I made a real-time 3D physics simulation of a fully configurable three-body solar system using Three.js. It can run in your browser and is compatible with a wide range of devices. Players can move their camera, adjust simulation parameters, and explore the system’s chaotic behavior. Instructions are in the README along with a downloadable tutorial video file on the itch.io page. The biggest challenge I faced was that I hadn’t programmed with JavaScript, HTML, or CSS in a while. Designed and built by me using Three.js and GitHub Codespaces. I decided to build this project in honor of one of my favorite book series ever called the Three Body Problem. I was also fascinated by three-body physics and wanted to share that fascination with others. Thank you Stardance!...
|
1793699411.981816
|
1793785811.981816
|
|
16897
|
My very own WebOS by @Moe_Masri | Stardance
|
Moe_Masri
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Moe_Masri | Stardance
|
1793397031.9382873
|
1794001831.9382873
|
|
16898
|
movl by @lyubo119 | Stardance
|
lyubo119
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: movl by @lyubo119 | Stardance
|
1793368322.5906484
|
1793973122.5906484
|
|
16899
|
The OverEngineered, Engineer's Pocket Cam by @ The OverEngineered, Engineer's Pocket Cam by @KushR | Stardance...
|
KushR
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: The OverEngineered, Engineer's Pocket C Title: The OverEngineered, Engineer's Pocket Cam by @KushR | Stardance...
|
1793483689.014729
|
1794088489.014729
|
|
16900
|
Single Camera Motion Tracker by @kiran_hayden | St Single Camera Motion Tracker by @kiran_hayden | Stardance...
|
kiran_hayden
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Single Camera Motion Tracker by @kiran_hayd Title: Single Camera Motion Tracker by @kiran_hayden | Stardance...
|
1793418894.291812
|
1794023694.291812
|