|
28808
|
My very own WebOS by @aayat_zafar | Stardance
|
aayat_zafar
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T08:13:06Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made AayatOS, a desktop-inspired personal website built with HTML, CSS, and JavaScript. It includes an interactive quote generator featuring quotes from some of my favorite authors and anime characters, a desktop-style layout, navigation, and draggable Notes and System Status windows. The most challenging parts were getting the draggable windows to work without breaking the layout and deploying the project to GitHub Pages. I ran into several issues with the windows overlapping each other and debugging the JavaScript, but after a lot of trial and error I was able to get everything working. I’m most proud of the quote generator and the overall layout. The quote generator was surprisingly fun to build, and I really enjoyed designing the interface to feel like a personalized operating system instead of a typical portfolio website. When testing the project, make sure to click the Next Quote button to cycle through the quotes and try dragging the Notes and System Status windows around the desktop. The website is designed to feel like a small interactive operating system rather than a standard webpage.Lastly, I would recommend opening my project on laptop or a monitor as the draggable windows cant be dragged on a mobile phone.", "repo": "https://github.com/aayatzafar723-lab/AayatOS", "demo": "https://aayatzafar723-lab.github.io/AayatOS/"}]...
|
[{"post_id": 25187, "ts": "202 [{"post_id": 25187, "ts": "2026-07-09T08:07:12Z", "hours": 1.37, "text": "AayatOS is finally complete! 🎉 Seeing everything come together after building it piece by piece has been really satisfying. The project now has a desktop-inspired interface with interactive sections, a working quote generator featuring some of my favorite authors and anime characters, draggable Notes and System Status windows, navigation, and a clean glassmorphism design. The most challenging part of the project was implementing the draggable windows. At first, all of the windows started overlapping and the layout completely broke. I spent quite a bit of time debugging the HTML, CSS, and JavaScript before realizing the issue was caused by applying the draggable code to the wrong elements. After fixing the class names and limiting the draggable feature to the Notes and System Status windows, everything finally worked as intended. This project was my first experience building a complete website from scratch, and I learned a lot about structuring pages with HTML, styling them with CSS, and adding interactivity through JavaScript. I’m really happy with how AayatOS turned out, and it was rewarding to watch it grow from a simple webpage into a desktop-inspired personal portfolio. I am excited to make more projects now!"}, {"post_id": 24062, "ts": "2026-07-07T11:33:19Z", "hours": 0.3667, "text": "CSS and JavaScript: After completing the HTML structure, I focused on styling AayatOS with CSS and adding interactivity using JavaScript. I chose a soft pastel colour palette and added hover effects, smooth scrolling, and subtle animations to create a clean and modern interface. For the quote generator, I included a collection of inspirational quotes from Haikyuu!!, Demon Slayer, and two of my favourite authors, Franz Kafka and Fyodor Dostoevsky, making the project feel more personal. This stage also involved a lot of debugging. I encountered CSS properties that didn’t apply correctly, JavaScript syntax errors, and a few GitHub Pages deployment issues while publishing the website. Solving these challenges helped me better understand front-end development and how Git and GitHub work together for version control and deployment."}, {"post_id": 23588, "ts": "2026-07-06T17:06:06Z", "hours": 4.9611, "text": "HTML Stage: The first stage of AayatOS was creating the website’s structure using HTML. Since this was my first time working with HTML, I found it surprisingly easy because the syntax is simple and straightforward. I built the navigation bar, hero section, quote generator, About the Project section, and About the Creator section. To make the website more organized and visually appealing, I divided the content into different sections and added emojis to the headings. This gave the website a cleaner presentation and made it more engaging for users."}]...
|
Title: My very own WebOS by @aayat_zafar | Stardan Title: My very own WebOS by @aayat_zafar | Stardance
Devlogs:
HTML Stage: The first stage of AayatOS was creating the website’s structure using HTML. Since this was my first time working with HTML, I found it surprisingly easy because the syntax is simple and straightforward. I built the navigation bar, hero section, quote generator, About the Project section, and About the Creator section. To make the website more organized and visually appealing, I divided the content into different sections and added emojis to the headings. This gave the website a cleaner presentation and made it more engaging for users.
CSS and JavaScript: After completing the HTML structure, I focused on styling AayatOS with CSS and adding interactivity using JavaScript. I chose a soft pastel colour palette and added hover effects, smooth scrolling, and subtle animations to create a clean and modern interface. For the quote generator, I included a collection of inspirational quotes from Haikyuu!!, Demon Slayer, and two of my favourite authors, Franz Kafka and Fyodor Dostoevsky, making the project feel more personal. This stage also involved a lot of debugging. I encountered CSS properties that didn’t apply correctly, JavaScript syntax errors, and a few GitHub Pages deployment issues while publishing the website. Solving these challenges helped me better understand front-end development and how Git and GitHub work together for version control and deployment.
AayatOS is finally complete! 🎉 Seeing everything come together after building it piece by piece has been really satisfying. The project now has a desktop-inspired interface with interactive sections, a working quote generator featuring some of my favorite authors and anime characters, draggable Notes and System Status windows, navigation, and a clean glassmorphism design. The most challenging part of the project was implementing the draggable windows. At first, all of the windows started overlapping and the layout completely broke. I spent quite a bit of time debugging the HTML, CSS, and JavaScript before realizing the issue was caused by applying the draggable code to the wrong elements. After fixing the class names and limiting the draggable feature to the Notes and System Status windows, everything finally worked as intended. This project was my first experience building a complete website from scratch, and I learned a lot about structuring pages with HTML, styling them with CSS, and adding interactivity through JavaScript. I’m really happy with how AayatOS turned out, and it was rewarding to watch it grow from a simple webpage into a desktop-inspired personal portfolio. I am excited to make more projects now!
Ships:
I made AayatOS, a desktop-inspired personal website built with HTML, CSS, and JavaScript. It includes an interactive quote generator featuring quotes from some of my favorite authors and anime characters, a desktop-style layout, navigation, and draggable Notes and System Status windows. The most challenging parts were getting the draggable windows to work without breaking the layout and deploying the project to GitHub Pages. I ran into several issues with the windows overlapping each other and debugging the JavaScript, but after a lot of trial and error I was able to get everything working. I’m most proud of the quote generator and the overall layout. The quote generator was surprisingly fun to build, and I really enjoyed designing the interface to feel like a personalized operating system instead of a typical portfolio website. When testing the project, make sure to click the Next Quote button to cycle through the quotes and try dragging the Notes and System Status windows around the desktop. The website is designed to feel like a small interactive operating system rather than a standard webpage.Lastly, I would recommend opening my project on laptop or a monitor as the draggable windows cant be dragged on a mobile phone....
|
1793501472.7172961
|
1793587872.7172961
|
|
10003
|
My first slack bot! by @lemony-tater | Stardance
|
lemony-tater
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-07T22:00:59Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a basic slack bot using javascript. It can tell jokes, give cat facts, give usage guidance, and check connection and latency. The most difficult part was learning javascript as it was a new language to me. Try /lemon-help, /lemon-joke, /lemon-ping, and /lemon-catfact in slack.", "repo": "https://github.com/lemony-tater-tot/my-slackbot", "demo": "https://hackclub.enterprise.slack.com/archives/C0APH2MMHH7"}]...
|
[{"post_id": 4549, "ts": "2026 [{"post_id": 4549, "ts": "2026-06-07T21:53:32Z", "hours": 0.5728, "text": "Finishing up the commands"}]...
|
Title: My first slack bot! by @lemony-tater | Star Title: My first slack bot! by @lemony-tater | Stardance
Devlogs:
Finishing up the commands
Ships:
I made a basic slack bot using javascript. It can tell jokes, give cat facts, give usage guidance, and check connection and latency. The most difficult part was learning javascript as it was a new language to me. Try /lemon-help, /lemon-joke, /lemon-ping, and /lemon-catfact in slack....
|
1793501474.062355
|
1793587874.062355
|
|
2687
|
Pseudo E-commerce website (PE-CW) by @AuraMonster Pseudo E-commerce website (PE-CW) by @AuraMonster | Stardance...
|
AuraMonster
|
1
|
45.0
|
317
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T17:59:53Z", "hours": 45.0, "multiplier": 8.56, "payout": 317, "blessing": "neutral", "text": "This is my Pseudo E-commerce Website (website that sells fake stuff) I made this to learn and because it was fun. This journey was frustrating at times, but taking a break just got me more motivated.", "repo": "https://github.com/mdmutahhar24-pixel/Pseudo-E-Commerce-Website", "demo": "https://pseudo-e-commerce-website-vjx4.vercel.app/"}]...
|
[{"post_id": 10061, "ts": "202 [{"post_id": 10061, "ts": "2026-06-16T17:13:40Z", "hours": 1.5636, "text": "Sixth and Final devlog for Pseudo E-Commerce Website Changes Admin features completed Featured Products added Placeholders added incase of no product Added finishing touches Completed project: https://pseudo-e-commerce-website-vjx4.vercel.app/"}, {"post_id": 9986, "ts": "2026-06-16T14:56:42Z", "hours": 6.3531, "text": "Fifth Devlog for Psuedo E-Commerce Website Changes Included a Log out and Delete option that works Finished About Me page Added product create feature Added add to cart feature Finished Products page Added admin page Expect the next devlog to be the final one."}, {"post_id": 9340, "ts": "2026-06-15T17:48:14Z", "hours": 17.6847, "text": "Fourth Devlog for Psuedo E-Commerce Website So far, I kept restarting. I guess you could say this is my way of venting out my frustration. Since I just restarted. However, every restart gives me better ideas. After a learning break, these are the updates to my third restarted project: dark/light mode dark/light mode toggleable button logo fake advertising banners better backend better frontend heavy changes to project (approach, ideas, etc.) Next time, I do not plan to restart my project. I am going to keep continuing as I feel like I have enough experience now."}, {"post_id": 6556, "ts": "2026-06-11T00:31:02Z", "hours": 9.0075, "text": "Third Devlog for PE-CW (Psuedo E-Commerce Website) Changes: Products page now fully has a create item as well as backend for items. Account Page added Navbar updates to look different based on sign up status Future plans: Account page Log out Ability to edit products made by yourself Ability to add things to cart Ability to view your cart"}, {"post_id": 3231, "ts": "2026-06-06T01:56:29Z", "hours": 6.8661, "text": "Hello everyone, this is my second devlog. What Changed: I had to scrap my previous project because of an unknown error. However the idea hasn’t changed, so I created a new project. I Revamped the entire design, added better backend, and used appealing design choices. For backend, I used Neon’s PostgreSQL and it’s system for authentication and Next.JS’s API routes (along with Prisma) to connect my project to the Neon database. For frontend, I used React, ShadCN’s UI library, and RadixUI’s UI library. For CSS, I used Tailwind CSS. Why I made all of those changes: This is simple: I watched some YouTube tutorials and they inspired me. For backend, it was too useful to ignore. Summary: Restarted Project Integrated Backend Connected PostgreSQL database Updated Design Watched YouTube Tutorials *Image below is the updated landing page."}, {"post_id": 532, "ts": "2026-06-02T00:25:42Z", "hours": 3.2842, "text": "Worked on landing page and am currently working on sign in/sign up page."}]...
|
Title: Pseudo E-commerce website (PE-CW) by @AuraM Title: Pseudo E-commerce website (PE-CW) by @AuraMonster | Stardance
Devlogs:
Worked on landing page and am currently working on sign in/sign up page.
Hello everyone, this is my second devlog. What Changed: I had to scrap my previous project because of an unknown error. However the idea hasn’t changed, so I created a new project. I Revamped the entire design, added better backend, and used appealing design choices. For backend, I used Neon’s PostgreSQL and it’s system for authentication and Next.JS’s API routes (along with Prisma) to connect my project to the Neon database. For frontend, I used React, ShadCN’s UI library, and RadixUI’s UI library. For CSS, I used Tailwind CSS. Why I made all of those changes: This is simple: I watched some YouTube tutorials and they inspired me. For backend, it was too useful to ignore. Summary: Restarted Project Integrated Backend Connected PostgreSQL database Updated Design Watched YouTube Tutorials *Image below is the updated landing page.
Third Devlog for PE-CW (Psuedo E-Commerce Website) Changes: Products page now fully has a create item as well as backend for items. Account Page added Navbar updates to look different based on sign up status Future plans: Account page Log out Ability to edit products made by yourself Ability to add things to cart Ability to view your cart
Fourth Devlog for Psuedo E-Commerce Website So far, I kept restarting. I guess you could say this is my way of venting out my frustration. Since I just restarted. However, every restart gives me better ideas. After a learning break, these are the updates to my third restarted project: dark/light mode dark/light mode toggleable button logo fake advertising banners better backend better frontend heavy changes to project (approach, ideas, etc.) Next time, I do not plan to restart my project. I am going to keep continuing as I feel like I have enough experience now.
Fifth Devlog for Psuedo E-Commerce Website Changes Included a Log out and Delete option that works Finished About Me page Added product create feature Added add to cart feature Finished Products page Added admin page Expect the next devlog to be the final one.
Sixth and Final devlog for Pseudo E-Commerce Website Changes Admin features completed Featured Products added Placeholders added incase of no product Added finishing touches Completed project: https://pseudo-e-commerce-website-vjx4.vercel.app/
Ships:
This is my Pseudo E-commerce Website (website that sells fake stuff) I made this to learn and because it was fun. This journey was frustrating at times, but taking a break just got me more motivated....
|
1793501477.1089106
|
1793587877.1089106
|
|
51466
|
BioStack by @onlybugs05 | Stardance
|
onlybugs05
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-19T16:45:50Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built BioStack Under 1 Hour", "repo": "https://github.com/onlybugs05/BioStack/blob/main", "demo": "https://onlybugs05.github.io/BioStack/"}]...
|
[{"post_id": 50447, "ts": "202 [{"post_id": 50447, "ts": "2026-08-19T16:42:36Z", "hours": 0.6686, "text": "Done Building It"}]...
|
Title: BioStack by @onlybugs05 | Stardance
Devlog Title: BioStack by @onlybugs05 | Stardance
Devlogs:
Done Building It
Ships:
I built BioStack Under 1 Hour...
|
1793501480.2901852
|
1793587880.2901852
|
|
26541
|
smooth-spend-api by @Luksh | Stardance
|
Luksh
|
1
|
2.85
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T22:39:30Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created the backend API for Smooth Spend, an app designed to help manage personal finances smoothly. I deployed it officially on Hack Club Nest using Node.js and Express! The most challenging part was dealing with port forwarding and getting the reverse proxy settings right on Nest, as well as fixing PM2 setup errors so the server could run 24/7 in the background without crashing. I’m super proud of successfully making the API public and seeing the live “Il server di Smooth Spend è online!” message in my browser after a good debugging session. To test it, you can simply visit the live URL: https://smooth-spend-api.hackclub.app 🚀", "repo": "https://github.com/D399def9/smooth-spend-api", "demo": "https://smooth-spend-api.hackclub.app/"}]...
|
[{"post_id": 25476, "ts": "202 [{"post_id": 25476, "ts": "2026-07-09T19:29:36Z", "hours": 1.2417, "text": "Started over from scratch today. Rebuilt my Node.js backend instead of relying on generated code so I can actually understand every part of it. Server is running again"}, {"post_id": 19502, "ts": "2026-06-30T20:34:36Z", "hours": 1.6106, "text": "Hi, at the moment I’m working with JavaScript and doing some debugging while putting together the server. I’m setting up the backend structure and testing how the different parts connect."}, {"post_id": 16558, "ts": "2026-06-26T22:35:15Z", "hours": 0.2972, "text": "Descrizione del progettoQuesto progetto è una piccola API backend in Node.js per la scansione OCR di scontrini."}]...
|
Title: smooth-spend-api by @Luksh | Stardance
Dev Title: smooth-spend-api by @Luksh | Stardance
Devlogs:
Descrizione del progettoQuesto progetto è una piccola API backend in Node.js per la scansione OCR di scontrini.
Hi, at the moment I’m working with JavaScript and doing some debugging while putting together the server. I’m setting up the backend structure and testing how the different parts connect.
Started over from scratch today. Rebuilt my Node.js backend instead of relying on generated code so I can actually understand every part of it. Server is running again
Ships:
I created the backend API for Smooth Spend, an app designed to help manage personal finances smoothly. I deployed it officially on Hack Club Nest using Node.js and Express! The most challenging part was dealing with port forwarding and getting the reverse proxy settings right on Nest, as well as fixing PM2 setup errors so the server could run 24/7 in the background without crashing. I’m super proud of successfully making the API public and seeing the live “Il server di Smooth Spend è online!” message in my browser after a good debugging session. To test it, you can simply visit the live URL: https://smooth-spend-api.hackclub.app 🚀...
|
1793501483.1810188
|
1793587883.1810188
|
|
34429
|
Gunter by @Boyra_Zeren | Stardance
|
Boyra_Zeren
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T16:55:58Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a bot to mimic gunter from adventure time and tried some free APIs to make it more fun! I attached a photo of gunter for good vibes and hope I get approved >:)", "repo": "https://github.com/Jotaro-Kujo0/Gunter", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BNH85PGS3"}]...
|
[{"post_id": 43399, "ts": "202 [{"post_id": 43399, "ts": "2026-08-08T16:53:33Z", "hours": 0.9925, "text": "I finally finished and deployed my bot and its testable on a custom channel I made! its #gunter-test. Try it :)))"}, {"post_id": 31841, "ts": "2026-07-20T15:15:03Z", "hours": 0.9933, "text": "I completed the guide and currently waiting for my nest application to be improved. I added some goofy commands and some useful ones. I tried to be faithful to gunter’s character and I hope it turns out good."}]...
|
Title: Gunter by @Boyra_Zeren | Stardance
Devlogs Title: Gunter by @Boyra_Zeren | Stardance
Devlogs:
I completed the guide and currently waiting for my nest application to be improved. I added some goofy commands and some useful ones. I tried to be faithful to gunter’s character and I hope it turns out good.
I finally finished and deployed my bot and its testable on a custom channel I made! its #gunter-test. Try it :)))
Ships:
I made a bot to mimic gunter from adventure time and tried some free APIs to make it more fun! I attached a photo of gunter for good vibes and hope I get approved >:)...
|
1793501488.4877799
|
1793587888.4877799
|
|
21895
|
My first slack bot! by @aditikhanal | Stardance
|
aditikhanal
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T22:17:14Z", "hours": 1.0, "multiplier": 1.01, "payout": 1, "blessing": "neutral", "text": "I made a slack bot that runs even when my computer is closed. I struggled with the javascript as it was a new language I had to learn.", "repo": "https://github.com/aditikhanal-wq/slackbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BCXSF9HAA"}]...
|
[{"post_id": 15330, "ts": "202 [{"post_id": 15330, "ts": "2026-06-24T22:07:40Z", "hours": 1.4606, "text": "I made my first slack bot! It has the 3 commands of a joke, the cat fact, and pong! It runs on its own!"}]...
|
Title: My first slack bot! by @aditikhanal | Stard Title: My first slack bot! by @aditikhanal | Stardance
Devlogs:
I made my first slack bot! It has the 3 commands of a joke, the cat fact, and pong! It runs on its own!
Ships:
I made a slack bot that runs even when my computer is closed. I struggled with the javascript as it was a new language I had to learn....
|
1793501494.6512034
|
1793587894.6512034
|
|
51474
|
F1 details page by @Britto | Stardance
|
Britto
|
1
|
3.0
|
13
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-21T09:40:02Z", "hours": 3.0, "multiplier": 3.79, "payout": 13, "blessing": "neutral", "text": "i made a website tht let people see the current f1 stadning the current f1 race position and the gap between them and with map", "repo": "https://github.com/themanpluck2/f1-details", "demo": "https://themanpluck2.github.io/f1-details/"}]...
|
[{"post_id": 51544, "ts": "202 [{"post_id": 51544, "ts": "2026-08-21T09:39:10Z", "hours": 2.6178, "text": "hey my f1 dashboard has been complete after alot of frustration of fixing error it finally is done and working i think because the race day is sunday and it is friday rn u can check it feature current standing the race standing the gap between them and the team theyre running and the map they are in"}, {"post_id": 51444, "ts": "2026-08-21T04:53:12Z", "hours": 0.7817, "text": "hey i dont normally post devlogs and stuff like that in github but i decided to post it cause why not im making this f1 dashboard thing where it shows the f1 current race details and the racemap but its not finished there is still the main js stuff which fetch details on which position they are and what gap they are it is in interval format and i got a idea on how to make the js and yea i made the css and html files and ill be making the jss pretty soon when i finish it full ill post it in github and leave the link to the website"}]...
|
Title: F1 details page by @Britto | Stardance
Dev Title: F1 details page by @Britto | Stardance
Devlogs:
hey i dont normally post devlogs and stuff like that in github but i decided to post it cause why not im making this f1 dashboard thing where it shows the f1 current race details and the racemap but its not finished there is still the main js stuff which fetch details on which position they are and what gap they are it is in interval format and i got a idea on how to make the js and yea i made the css and html files and ill be making the jss pretty soon when i finish it full ill post it in github and leave the link to the website
hey my f1 dashboard has been complete after alot of frustration of fixing error it finally is done and working i think because the race day is sunday and it is friday rn u can check it feature current standing the race standing the gap between them and the team theyre running and the map they are in
Ships:
i made a website tht let people see the current f1 stadning the current f1 race position and the gap between them and with map...
|
1793501502.517906
|
1793587902.517906
|
|
21365
|
Disdrometer by @dylanyfraser | Stardance
|
dylanyfraser
|
1
|
2.97
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T02:29:41Z", "hours": 2.0, "multiplier": 4.95, "payout": 0, "blessing": "neutral", "text": "A macOS menu-bar app that overlays realistic rain animations on your desktop. It provides a subtle, customizable weather effect that can be used for ambience, presentations, or just for fun.", "repo": "https://github.com/SimplyPickles/disdrometer/", "demo": "https://github.com/SimplyPickles/disdrometer/releases"}]...
|
[{"post_id": 11742, "ts": "202 [{"post_id": 11742, "ts": "2026-06-19T03:51:46Z", "hours": 0.9703, "text": "new settings menu, drop style, and background dimming"}, {"post_id": 11045, "ts": "2026-06-18T02:28:07Z", "hours": 2.2122, "text": "Settings page in menubar & main app functionality finished"}]...
|
Title: Disdrometer by @dylanyfraser | Stardance
D Title: Disdrometer by @dylanyfraser | Stardance
Devlogs:
Settings page in menubar & main app functionality finished
new settings menu, drop style, and background dimming
Ships:
A macOS menu-bar app that overlays realistic rain animations on your desktop. It provides a subtle, customizable weather effect that can be used for ambience, presentations, or just for fun....
|
1793501512.9199462
|
1793587912.9199462
|
|
17674
|
Orion Bot by @KoushikT | Stardance
|
KoushikT
|
2
|
6.0
|
18
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T23:03:57Z", "hours": 1.0, "multiplier": 3.61, "payout": 4, "blessing": "neutral", "text": "I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and what it is like on Mars right now. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars. This is my first project in the organization, and my first ever time using slack. It runs on Nest, with code I made on VSCODE. I wish you all love it! Thanks!", "repo": "https://github.com/Koushik919-del/orionbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}, {"ship_num": 2, "ts": "2026-06-21T18:09:43Z", "hours": 5.0, "multiplier": 2.63, "payout": 14, "blessing": "neutral", "text": "I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and pictures from the Mars rover. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars.", "repo": "https://github.com/Koushik919-del/orionbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 24423, "ts": "202 [{"post_id": 24423, "ts": "2026-07-07T23:28:45Z", "hours": 0.7861, "text": "Made it so it doesn’t have any more errors or not too much loading time with nest"}, {"post_id": 14564, "ts": "2026-06-23T18:48:06Z", "hours": 0.3, "text": "Fixed up a few problems like the README. And make sure not to use it all channels. Only use it DMs to yourself or in the bot-spam."}, {"post_id": 12710, "ts": "2026-06-20T19:11:46Z", "hours": 1.9322, "text": "Finally finished, go to Slack now to test it out. the commands are /mars, /apod, and /iss!"}, {"post_id": 11420, "ts": "2026-06-18T18:01:59Z", "hours": 1.0906, "text": "I am now adding the feature where we can see the weather on Mars."}, {"post_id": 10229, "ts": "2026-06-16T21:12:45Z", "hours": 2.25, "text": "This is like a Slack Bot that will help you know where the ISS is, and also how Mars’ weather is. It still is in progress."}]...
|
Title: Orion Bot by @KoushikT | Stardance
Devlogs Title: Orion Bot by @KoushikT | Stardance
Devlogs:
This is like a Slack Bot that will help you know where the ISS is, and also how Mars’ weather is. It still is in progress.
I am now adding the feature where we can see the weather on Mars.
Finally finished, go to Slack now to test it out. the commands are /mars, /apod, and /iss!
Fixed up a few problems like the README. And make sure not to use it all channels. Only use it DMs to yourself or in the bot-spam.
Made it so it doesn’t have any more errors or not too much loading time with nest
Ships:
I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and pictures from the Mars rover. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars.
I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and what it is like on Mars right now. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars. This is my first project in the organization, and my first ever time using slack. It runs on Nest, with code I made on VSCODE. I wish you all love it! Thanks!...
|
1793501517.36271
|
1793587917.36271
|
|
37120
|
Niri scratch window script/writeup by @username123 Niri scratch window script/writeup by @username123115 | Stardance...
|
username123115
|
1
|
3.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T09:05:08Z", "hours": 3.0, "multiplier": 1.97, "payout": 5, "blessing": "neutral", "text": "I made a writeup on writing scripts in Niri that walks through making a scratch window script. This turned out to be very time consuming, as writing the article took much more time then doing research and writing the script itself.", "repo": "https://github.com/username123115/niri-scripts", "demo": "https://cdn.hackclub.com/019f83dd-a74d-782e-b0b7-01609e1fe907/niri-script.mp4"}]...
|
[{"post_id": 32242, "ts": "202 [{"post_id": 32242, "ts": "2026-07-21T09:00:02Z", "hours": 0.6947, "text": "Finished writing a section on jq and therefore writeup is done! Also recorded a demo video and uploaded to hackclub CDN"}, {"post_id": 32220, "ts": "2026-07-21T07:54:07Z", "hours": 0.8389, "text": "script now hides scratch windows by tiling them and having niri place them off screen. Readme has been updated to account for this"}, {"post_id": 31108, "ts": "2026-07-19T07:36:38Z", "hours": 0.5786, "text": "I’ve finished writing up working with niri msg , there’s a primer on jq that’s missing that is very important but otherwise most of the useful info is there"}, {"post_id": 31092, "ts": "2026-07-19T06:55:26Z", "hours": 0.6206, "text": "I want this to be a writeup/blog post kinda thing where I walk over writing my first niri script. the goal is to include enough info that anyone/me in the future(when I inevitably forget) can get a solid idea/start working with niri ipc. Intro section/overview is done. Script was finished before setting up hackatime but I have a feeling most of my time will be spent on the readme…"}]...
|
Title: Niri scratch window script/writeup by @user Title: Niri scratch window script/writeup by @username123115 | Stardance
Devlogs:
I want this to be a writeup/blog post kinda thing where I walk over writing my first niri script. the goal is to include enough info that anyone/me in the future(when I inevitably forget) can get a solid idea/start working with niri ipc. Intro section/overview is done. Script was finished before setting up hackatime but I have a feeling most of my time will be spent on the readme…
I’ve finished writing up working with niri msg , there’s a primer on jq that’s missing that is very important but otherwise most of the useful info is there
script now hides scratch windows by tiling them and having niri place them off screen. Readme has been updated to account for this
Finished writing a section on jq and therefore writeup is done! Also recorded a demo video and uploaded to hackclub CDN
Ships:
I made a writeup on writing scripts in Niri that walks through making a scratch window script. This turned out to be very time consuming, as writing the article took much more time then doing research and writing the script itself....
|
1793501522.7306242
|
1793587922.7306242
|
|
8699
|
Whisper-API by @myroslavrepin | Stardance
|
myroslavrepin
|
1
|
13.82
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T02:55:16Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I wanted to transcribe my audio meetings into text, but everything I found was either paid or behind a subscription. So I thought, why should I pay for something I can build myself? So I did. The real challenge was getting the model to actually run on a Raspberry Pi 5. With only 4GB of RAM it choked badly at first. I fixed it by splitting the audio into chunks and transcribing them one at a time instead of loading the whole file into memory at once. Drop your audio, get your text back, fully self-hosted, running on a Pi.", "repo": "https://github.com/MyroslavRepin/whisper-api", "demo": "https://whisper.myroslavrepin.com/"}]...
|
[{"post_id": 37382, "ts": "202 [{"post_id": 37382, "ts": "2026-07-30T02:01:50Z", "hours": 0.8217, "text": "minor fixes and deployment"}, {"post_id": 18331, "ts": "2026-06-29T13:11:06Z", "hours": 3.6767, "text": "I was working on deployment and creating Vue.js dashboard"}, {"post_id": 9289, "ts": "2026-06-15T16:23:01Z", "hours": 0.7839, "text": "I was working on deploying to my PI 5 and testing its abilities (it did ended well). Also I added a to_email field."}, {"post_id": 8503, "ts": "2026-06-14T04:16:14Z", "hours": 1.0808, "text": "I finally stopped chasing perfections and shipped MVP. I mean like real MVP. I have almost no UI, but fully working transcription"}, {"post_id": 7812, "ts": "2026-06-13T01:14:46Z", "hours": 6.875, "text": "Just finished building MVP backend"}, {"post_id": 3290, "ts": "2026-06-06T04:36:46Z", "hours": 0.5197, "text": "Created base project portfolio"}]...
|
Title: Whisper-API by @myroslavrepin | Stardance
Title: Whisper-API by @myroslavrepin | Stardance
Devlogs:
Created base project portfolio
Just finished building MVP backend
I finally stopped chasing perfections and shipped MVP. I mean like real MVP. I have almost no UI, but fully working transcription
I was working on deploying to my PI 5 and testing its abilities (it did ended well). Also I added a to_email field.
I was working on deployment and creating Vue.js dashboard
minor fixes and deployment
Ships:
I wanted to transcribe my audio meetings into text, but everything I found was either paid or behind a subscription. So I thought, why should I pay for something I can build myself? So I did. The real challenge was getting the model to actually run on a Raspberry Pi 5. With only 4GB of RAM it choked badly at first. I fixed it by splitting the audio into chunks and transcribing them one at a time instead of loading the whole file into memory at once. Drop your audio, get your text back, fully self-hosted, running on a Pi....
|
1793501526.796152
|
1793587926.796152
|
|
53702
|
Untrusted Forest by @ducki | Stardance
|
ducki
|
1
|
33.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-30T01:25:04Z", "hours": 33.0, "multiplier": 10.75, "payout": 0, "blessing": "neutral", "text": "Untrusted Forest is now available play in a few clicks To play the game instantly just click here Untrusted forest is a survival game where you are challenged to stay alive, all while trying to hunt down the monster that is hunting you. The game runs in your browser on itch.io The game is quite packed with stuff to do, may be a bit hard sometimes and take a long time. My own playthrough took 9 minutes. (This is without any dying or restarting) I recommend trying the game out, seeing how for you can get. Then afterwards I have uploaded my playthrough to youtube (Can be found in the README and in the itch.io page) for you to watch, so you can understand and see the full game without having to spend too much time in these busy last few stardance days. The game has had a bunch of ups and downs. Trying to figure out the best way to generate the map. Balancing ( SO MUCH BALANCING ). Making a bunch of items. Monster behaviour. After all the stress of fighting the approaching deadline, I am proud to have finished this project. A tutorial is available in the main menu of the game. Check out the README for more details. Hop into the game blind, or start by checking out the playthrough. I hope you will like it, just like my friends who laughed (and screamed) while playing it.", "repo": "https://github.com/Duckwastakon/brackeysJam", "demo": "https://duc-k.itch.io/untrusted-forest"}]...
|
[{"post_id": 84659, "ts": "202 [{"post_id": 84659, "ts": "2026-10-30T01:00:46Z", "hours": 0.9286, "text": "Preship devlog For this devlog I Made a README Exported the project Made a itch.io page Recorded a full playthrough of the game I am so happy to be about to ship this project"}, {"post_id": 84619, "ts": "2026-10-29T22:40:10Z", "hours": 4.1558, "text": "Post Game jam devlog Thank you to everyone who gave amazing feedback about the game. After reading all the feedback I made some adjustments to the game Added colors so it is easier to understand what is what, while keeping mostly the player, monster, animals to make the most important things pop out as white. Main menu redesign/cleaup. Expanded the tutorial a bit. A Bunch of balancing, the game was waaaay too hard. A notifier that tells the user if they need better tools some file cleanup And now the game feels atleast 2x better to play"}, {"post_id": 58014, "ts": "2026-08-30T11:04:36Z", "hours": 6.0986, "text": "Devlog 5 DEADLINE 28 seconds We did it me and my team managed to publish the game in time, the whole last hour was a blur with how fast everything was moving. new features game balancing main menu ending screen sfx background music game balancing The game in the start was almost impossible, after tweaking atleast 99 variables it play waaaaay better. It is still no easy game tho. Quite the challenge still. exporting the game This was the most stressful part. It decided if we would get the deadline or not…. …………………………………………………………………. luckily it exported succesfully… with bugs .-. So we rushed to fix multiple crashing bugs in the last 10 minutes of submiting, not knowing if we will make it. In the end , we prevailed. The game is now available for others to rate I am interested to see what bugs people will find and what idea they have for the game"}, {"post_id": 57159, "ts": "2026-08-29T08:22:41Z", "hours": 5.1919, "text": "Devlog 4 DEADLINE: 1 day 2h left before submitions close Monster, items and lot more Say hi to the monster my teammate drew. His moveset : Disguise Chase Wander Be careful when killing mobs to get food, maybe one of them will bite back! items: A bunch of new item, some of the next items : Crafting table -> for more complex crafting recipes smelter -> smelt iron apples -> early game food source wood/stone/iron tools new resources: Iron nodes gold tress bushes cherry bush (yes on this monsters planet they grow on bushes) apple trees other progress: Made a cooldown between swinging weapons/attakcing to prevent mouse spaming. Also found a duplication bug, hopefully I will have time to fix that."}, {"post_id": 56220, "ts": "2026-08-27T21:49:58Z", "hours": 7.2839, "text": "Devlog 3 huge new features crafting: The crafting system is fully done, only have to polish it. The idea is that you craft with items and surrounding structures. for example to make cooked meat you need 1x raw meat and a campfire next to you. This should make it so the crafting tab never has too many crafting options at a random time. Building system okay not sure if it can be called building it is a system for placing down placeable items on the floor, currently only campfires, but soon also smelter and worktable. Idea is that your character also gets cold, so you have to every once in a moment warm up, which a campfire is an excellent way to achieve. resources/tool I made a very dynamic system for tool, where each tool has ofcourse a specific action it is effective it. axes -> 3x damage to tress pickaxes -> 5x damage to rocks swords -> 3x damage to mobs As well as food, eating, delays between actions have all been added. As this is a game jam, the game should not take that long, so maybe we will be pushing it a bit, but we are planned to have a whole 3 types of tools, wood -> rock -> iron. my teammate My teammate has been continuing to make incredible art, I really like all of the designs. The main monster art is also done, cant wait for everyone to see that. map generation my teammate also worked on the map generation to get chunks spawning overall Progress has been very good, game loop is almost done, just missing the possibility to loose"}, {"post_id": 54763, "ts": "2026-08-25T21:23:24Z", "hours": 6.0517, "text": "Devlog 2 Resources Mainly worked on the inventory system and resources. Created a very fast and easy way to create new resources, a bunch of math to calculate drop amounts. Meanwhile the inventory system had 100 duplication bugs. Took a while to fix, but now there is a fully fledged inventory system and crafting system. All of which I will showcase in the next devlog. artwork My teammate has worked on a load of artwork, I really like this artstyle. Progress Overall I would say we are on track to finish the main gameplay in the next 2 days, but that could randomly get thrown out the window if anyone else is doing the game jam, let me know, would love to check out what you are working on!"}, {"post_id": 53824, "ts": "2026-08-24T14:56:57Z", "hours": 3.2978, "text": "#Devlog 1 I have found out that game jams increase my average development time hours per day, so I have decided to compete in the brackeys game jam in a team. The theme : trust no one Game idea You are in a forest, where you must survive, get resource, hunt animals. The trust no one part comes from the animals no always being what they truly are, there is a shapeshifting monster. The task is to eventually find a gun and kill the monster, all while surviving the nights. Progress Currently I have made: Player movement attack/item swinging resource blocks Hope to finish the gameplay loop already today!"}]...
|
Title: Untrusted Forest by @ducki | Stardance
Dev Title: Untrusted Forest by @ducki | Stardance
Devlogs:
#Devlog 1 I have found out that game jams increase my average development time hours per day, so I have decided to compete in the brackeys game jam in a team. The theme : trust no one Game idea You are in a forest, where you must survive, get resource, hunt animals. The trust no one part comes from the animals no always being what they truly are, there is a shapeshifting monster. The task is to eventually find a gun and kill the monster, all while surviving the nights. Progress Currently I have made: Player movement attack/item swinging resource blocks Hope to finish the gameplay loop already today!
Devlog 2 Resources Mainly worked on the inventory system and resources. Created a very fast and easy way to create new resources, a bunch of math to calculate drop amounts. Meanwhile the inventory system had 100 duplication bugs. Took a while to fix, but now there is a fully fledged inventory system and crafting system. All of which I will showcase in the next devlog. artwork My teammate has worked on a load of artwork, I really like this artstyle. Progress Overall I would say we are on track to finish the main gameplay in the next 2 days, but that could randomly get thrown out the window if anyone else is doing the game jam, let me know, would love to check out what you are working on!
Devlog 3 huge new features crafting: The crafting system is fully done, only have to polish it. The idea is that you craft with items and surrounding structures. for example to make cooked meat you need 1x raw meat and a campfire next to you. This should make it so the crafting tab never has too many crafting options at a random time. Building system okay not sure if it can be called building it is a system for placing down placeable items on the floor, currently only campfires, but soon also smelter and worktable. Idea is that your character also gets cold, so you have to every once in a moment warm up, which a campfire is an excellent way to achieve. resources/tool I made a very dynamic system for tool, where each tool has ofcourse a specific action it is effective it. axes -> 3x damage to tress pickaxes -> 5x damage to rocks swords -> 3x damage to mobs As well as food, eating, delays between actions have all been added. As this is a game jam, the game should not take that long, so maybe we will be pushing it a bit, but we are planned to have a whole 3 types of tools, wood -> rock -> iron. my teammate My teammate has been continuing to make incredible art, I really like all of the designs. The main monster art is also done, cant wait for everyone to see that. map generation my teammate also worked on the map generation to get chunks spawning overall Progress has been very good, game loop is almost done, just missing the possibility to loose
Devlog 4 DEADLINE: 1 day 2h left before submitions close Monster, items and lot more Say hi to the monster my teammate drew. His moveset : Disguise Chase Wander Be careful when killing mobs to get food, maybe one of them will bite back! items: A bunch of new item, some of the next items : Crafting table -> for more complex crafting recipes smelter -> smelt iron apples -> early game food source wood/stone/iron tools new resources: Iron nodes gold tress bushes cherry bush (yes on this monsters planet they grow on bushes) apple trees other progress: Made a cooldown between swinging weapons/attakcing to prevent mouse spaming. Also found a duplication bug, hopefully I will have time to fix that.
Devlog 5 DEADLINE 28 seconds We did it me and my team managed to publish the game in time, the whole last hour was a blur with how fast everything was moving. new features game balancing main menu ending screen sfx background music game balancing The game in the start was almost impossible, after tweaking atleast 99 variables it play waaaaay better. It is still no easy game tho. Quite the challenge still. exporting the game This was the most stressful part. It decided if we would get the deadline or not…. …………………………………………………………………. luckily it exported succesfully… with bugs .-. So we rushed to fix multiple crashing bugs in the last 10 minutes of submiting, not knowing if we will make it. In the end , we prevailed. The game is now available for others to rate I am interested to see what bugs people will find and what idea they have for the game
Post Game jam devlog Thank you to everyone who gave amazing feedback about the game. After reading all the feedback I made some adjustments to the game Added colors so it is easier to understand what is what, while keeping mostly the player, monster, animals to make the most important things pop out as white. Main menu redesign/cleaup. Expanded the tutorial a bit. A Bunch of balancing, the game was waaaay too hard. A notifier that tells the user if they need better tools some file cleanup And now the game feels atleast 2x better to play
Preship devlog For this devlog I Made a README Exported the project Made a itch.io page Recorded a full playthrough of the game I am so happy to be about to ship this project
Ships:
Untrusted Forest is now available play in a few clicks To play the game instantly just click here Untrusted forest is a survival game where you are challenged to stay alive, all while trying to hunt down the monster that is hunting you. The game runs in your browser on itch.io The game is quite packed with stuff to do, may be a bit hard sometimes and take a long time. My own playthrough took 9 minutes. (This is without any dying or restarting) I recommend trying the game out, seeing how for you can get. Then afterwards I have uploaded my playthrough to youtube (Can be found in the README and in the itch.io page) for you to watch, so you can understand and see the full game without having to spend too much time in these busy last few stardance days. The game has had a bunch of ups and downs. Trying to figure out the best way to generate the map. Balancing ( SO MUCH BALANCING ). Making a bunch of items. Monster behaviour. After all the stress of fighting the approaching deadline, I am proud to have finished this project. A tutorial is available in the main menu of the game. Check out the README for more details. Hop into the game blind, or start by checking out the playthrough. I hope you will like it, just like my friends who laughed (and screamed) while playing it....
|
1793501530.8536007
|
1793587930.8536007
|
|
51486
|
WebPersonal by @meroquixel | Stardance
|
meroquixel
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T18:20:05Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is my personal website. For now, it has some lack of information and decorated simply.", "repo": "https://github.com/umaar1104/WebPersonal", "demo": "https://umaar1104.github.io/WebPersonal/"}]...
|
[{"post_id": 53209, "ts": "202 [{"post_id": 53209, "ts": "2026-08-23T17:29:39Z", "hours": 2.5225, "text": "Big changes on colors and decoration. It is almost done."}, {"post_id": 52523, "ts": "2026-08-22T17:59:23Z", "hours": 1.0517, "text": "This is my starter personal website so far."}]...
|
Title: WebPersonal by @meroquixel | Stardance
Dev Title: WebPersonal by @meroquixel | Stardance
Devlogs:
This is my starter personal website so far.
Big changes on colors and decoration. It is almost done.
Ships:
It is my personal website. For now, it has some lack of information and decorated simply....
|
1793501532.1644301
|
1793587932.1644301
|
|
54008
|
Luqman's Office by @theluqmn | Stardance
|
theluqmn
|
1
|
9.0
|
21
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T17:03:17Z", "hours": 9.0, "multiplier": 2.4, "payout": 21, "blessing": "neutral", "text": "I made a webserver using go, to host a URL shortener, my portfolio site, as well as parsing and serving of my journal entries. It has been a challenge as I haven’t been coding much this year due to school, and because its my first website not hosted on GitHub Pages. The design of the website is inspired by the original Bloomberg Terminal, with an CRT amber monitor ahh styling. There are also some HTML canvas every now and then but I havent’ built any games for it yet.", "repo": "https://github.com/theluqmn/office", "demo": "https://theluqmn.hackclub.app"}]...
|
[{"post_id": 55148, "ts": "202 [{"post_id": 55148, "ts": "2026-08-26T16:56:14Z", "hours": 1.5783, "text": "imported my old blog posts (now into journal entries), i think journal system development is done? its 1 am and ill go to bed now lol"}, {"post_id": 55081, "ts": "2026-08-26T15:03:08Z", "hours": 1.2219, "text": "journals are now in a separate repository (still compiled by the office), and the office is now up and running online!"}, {"post_id": 54476, "ts": "2026-08-25T14:27:46Z", "hours": 1.7597, "text": "added canvas for HTML games, projects and journals now have its content dynamic and requires no recompilation to show new content. very happy!"}, {"post_id": 54349, "ts": "2026-08-25T09:34:06Z", "hours": 1.4622, "text": "added a projects list, its dynamic. also added URL shorteners!"}, {"post_id": 54232, "ts": "2026-08-25T03:55:10Z", "hours": 1.2483, "text": "done with the landing page. whats left now is building a minigame next to the About section so visitors get to play and stay for a bit longer"}, {"post_id": 54192, "ts": "2026-08-25T02:07:49Z", "hours": 1.6528, "text": "the web server works, figured out a CRT-based design i liked, built a header and wrote some JS to make it cooler!"}]...
|
Title: Luqman's Office by @theluqmn | Stardanc Title: Luqman's Office by @theluqmn | Stardance
Devlogs:
the web server works, figured out a CRT-based design i liked, built a header and wrote some JS to make it cooler!
done with the landing page. whats left now is building a minigame next to the About section so visitors get to play and stay for a bit longer
added a projects list, its dynamic. also added URL shorteners!
added canvas for HTML games, projects and journals now have its content dynamic and requires no recompilation to show new content. very happy!
journals are now in a separate repository (still compiled by the office), and the office is now up and running online!
imported my old blog posts (now into journal entries), i think journal system development is done? its 1 am and ill go to bed now lol
Ships:
I made a webserver using go, to host a URL shortener, my portfolio site, as well as parsing and serving of my journal entries. It has been a challenge as I haven’t been coding much this year due to school, and because its my first website not hosted on GitHub Pages. The design of the website is inspired by the original Bloomberg Terminal, with an CRT amber monitor ahh styling. There are also some HTML canvas every now and then but I havent’ built any games for it yet....
|
1793501537.2496705
|
1793587937.2496705
|
|
34207
|
Houseplant Analyzer by @cognitayohan | Stardance
|
cognitayohan
|
1
|
1.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-13T05:37:53Z", "hours": 1.0, "multiplier": 9.03, "payout": 9, "blessing": "neutral", "text": "This is an edge-computed indoor plant identification and care assistant that runs entirely within your web browser. It analyzes images locally on your device using ONNX runtime execution without sending any visual data to external servers, ensuring maximum privacy and zero latency. Works offline! I made this using parts from a previous project while debugging to make sure two quanitized.onnx files would run. Hope you enjoy!", "repo": "https://github.com/robot3-track/houseplant-analyzer", "demo": "https://houseplant-analyzer.vercel.app"}]...
|
[{"post_id": 27493, "ts": "202 [{"post_id": 27493, "ts": "2026-07-13T03:26:19Z", "hours": 0.3233, "text": "Devlog 3: Debugging medical model_quanitzed.onnx file currently due to restrictions in model size."}, {"post_id": 27475, "ts": "2026-07-13T02:17:55Z", "hours": 0.3686, "text": "Devlog 2: Additional build! Added another model_quanitzed.onnx file to describe medical conditions. More to add in the future!"}, {"post_id": 27433, "ts": "2026-07-13T00:09:52Z", "hours": 0.4239, "text": "Devlog 1: Initial build! I first borrowed some regular framework code from my previous project on Agricultural plant identification and medical tips. Now, I have edited the files to use the proper ONNX model of household plants, as well as precise identification. Furthermore, I have updated Readme files and the UI to match the new system!"}]...
|
Title: Houseplant Analyzer by @cognitayohan | Star Title: Houseplant Analyzer by @cognitayohan | Stardance
Devlogs:
Devlog 1: Initial build! I first borrowed some regular framework code from my previous project on Agricultural plant identification and medical tips. Now, I have edited the files to use the proper ONNX model of household plants, as well as precise identification. Furthermore, I have updated Readme files and the UI to match the new system!
Devlog 2: Additional build! Added another model_quanitzed.onnx file to describe medical conditions. More to add in the future!
Devlog 3: Debugging medical model_quanitzed.onnx file currently due to restrictions in model size.
Ships:
This is an edge-computed indoor plant identification and care assistant that runs entirely within your web browser. It analyzes images locally on your device using ONNX runtime execution without sending any visual data to external servers, ensuring maximum privacy and zero latency. Works offline! I made this using parts from a previous project while debugging to make sure two quanitized.onnx files would run. Hope you enjoy!...
|
1793501540.363098
|
1793587940.363098
|
|
51487
|
water hero by @Mohamedd | Stardance
|
Mohamedd
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-21T20:30:33Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hello everyone! 👋 I’m sharing Water Hero 🌊—a smart web app with a simulator and cost calculator that instantly measures water usage and cost based on activity time, fully supporting 3 languages (Arabic, English, French). My main challenge was modeling accurate water flow rates per minute, and I’m proud of turning water saving into clear numbers. To try it: pick a language, tap “Record”, select an activity, and set the minutes to see your impact instantly!", "repo": "https://github.com/hemoalam27-alt/water-hero", "demo": "https://hemoalam27-alt.github.io/water-hero/website-v1/"}]...
|
[{"post_id": 51903, "ts": "202 [{"post_id": 51903, "ts": "2026-08-21T20:13:35Z", "hours": 0.3606, "text": "Progress Update 🛠️Upgraded the web app to support 3 languages: Arabic, English, and French with dynamic RTL & LTR text alignment. Users can now seamlessly switch languages with a flawless UI experience! 🌐✨"}, {"post_id": 51763, "ts": "2026-08-21T16:31:28Z", "hours": 1.9444, "text": "Working on improving the UI to make it fully responsive for wider landscape screens. Also planning to package the project into an Android APK soon! 🚀"}]...
|
Title: water hero by @Mohamedd | Stardance
Devlog Title: water hero by @Mohamedd | Stardance
Devlogs:
Working on improving the UI to make it fully responsive for wider landscape screens. Also planning to package the project into an Android APK soon! 🚀
Progress Update 🛠️Upgraded the web app to support 3 languages: Arabic, English, and French with dynamic RTL & LTR text alignment. Users can now seamlessly switch languages with a flawless UI experience! 🌐✨
Ships:
Hello everyone! 👋 I’m sharing Water Hero 🌊—a smart web app with a simulator and cost calculator that instantly measures water usage and cost based on activity time, fully supporting 3 languages (Arabic, English, French). My main challenge was modeling accurate water flow rates per minute, and I’m proud of turning water saving into clear numbers. To try it: pick a language, tap “Record”, select an activity, and set the minutes to see your impact instantly!...
|
1793501546.4330683
|
1793587946.4330683
|
|
10216
|
Pendulum physics by @joebracken | Stardance
|
joebracken
|
1
|
9.01
|
38
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T01:04:56Z", "hours": 8.0, "multiplier": 4.52, "payout": 38, "blessing": "neutral", "text": "I made a simulation of a simple pendulum in python. I used newtonian physics and allow for initial velocity, initial radians and radius to be changed before simulation starts. I plot the pendulum on a matplotlib graph. This project was very hard as it was my first main project on python and I had to figure out the alpha = -g/lsintheta line. This was done by learning circular motion and simple pendulum physics; getting the relationship of tangential acceleration to angular acceleration and combining this with the -mgsintheta = ma (newtonian) to get a = -g/lsintheta. This was the main part of the project, however managing theta continued to be a big problem throughout the project. I did enjoy this and I will probably be sticking with python for a while now.", "repo": "https://github.com/madmanmr/PendulumSim2", "demo": "https://github.com/madmanmr/PendulumSim2/releases/download/PendSIm2/main.zip"}]...
|
[{"post_id": 10815, "ts": "202 [{"post_id": 10815, "ts": "2026-06-17T19:08:20Z", "hours": 1.0106, "text": "Fixed an error with the length of R not affecting the actual simulation."}, {"post_id": 7753, "ts": "2026-06-12T23:03:00Z", "hours": 8.4781, "text": "this may be my first devlog as i did not know of them, but here is the completed code"}]...
|
Title: Pendulum physics by @joebracken | Stardance Title: Pendulum physics by @joebracken | Stardance
Devlogs:
this may be my first devlog as i did not know of them, but here is the completed code
Fixed an error with the length of R not affecting the actual simulation.
Ships:
I made a simulation of a simple pendulum in python. I used newtonian physics and allow for initial velocity, initial radians and radius to be changed before simulation starts. I plot the pendulum on a matplotlib graph. This project was very hard as it was my first main project on python and I had to figure out the alpha = -g/lsintheta line. This was done by learning circular motion and simple pendulum physics; getting the relationship of tangential acceleration to angular acceleration and combining this with the -mgsintheta = ma (newtonian) to get a = -g/lsintheta. This was the main part of the project, however managing theta continued to be a big problem throughout the project. I did enjoy this and I will probably be sticking with python for a while now....
|
1793501552.1462488
|
1793587952.1462488
|
|
7496
|
soul browser by @soulcloude | Stardance
|
soulcloude
|
1
|
124.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T09:57:29Z", "hours": 124.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built the Soul Browser! It’s a high-performance, privacy-first web browser built natively for macOS. Instead of relying on bloated web-wrappers like Electron, I built the entire UI natively in SwiftUI and hooked it into the Chromium Embedded Framework (CEF) backend. This gives it the lightning-fast V8 JavaScript engine and Blink rendering, wrapped in a beautiful, macOS-native shell. The biggest challenge was wrestling with memory optimization and IPC (Inter-Process Communication). Because I avoided Electron, I had to manually manage how the native Swift UI communicated with the underlying Chromium processes. I spent a lot of time stripping down site isolation overhead and tuning the V8 heap limits so the browser stays incredibly lightweight. We also had to build custom retry-logic to stabilize our local AI Codex server connection! I’m incredibly proud of the UI aesthetics and the performance metrics. The browser looks and feels like an expensive Apple product thanks to the frosted glassmorphism and native Swift animations. But more importantly, it runs like a dream. Features like the AI Tab Grouper and native !Bangs integration make it a genuine power-tool for developers. You can download the v1.0.0-beta directly from the Releases tab on GitHub! Since it’s a native macOS app in beta, you may need to right-click and hit “Open” to bypass the unverified developer warning. Try out the !w bangs in the address bar, or open 20 tabs to watch the AI Tab Grouper automatically organize them for you!", "repo": "https://github.com/soulcloude00/soul-browser", "demo": "https://github.com/soulcloude00/soul-browser/releases/tag/v1.0.1-beta"}]...
|
[{"post_id": 7376, "ts": "2026 [{"post_id": 7376, "ts": "2026-06-12T09:36:13Z", "hours": 9.7667, "text": "We just open-sourced the Soul Browser! 🚀 I wanted to build a browser that feels incredibly fast, native to macOS, and respects your privacy—without relying on heavy Electron wrappers. 🛠 The Stack: Built entirely in native Swift & SwiftUI for a buttery smooth UI, powered by the Chromium Embedded Framework (CEF) under the hood for world-class web rendering and V8 JavaScript performance. ✨ Core Features: • !Bangs Integration: Instantly search your favorite sites directly from the address bar (e.g., type !w macOS to jump straight to Wikipedia). • Built for Developers: First-class DevTools support natively integrated, plus aggressive memory optimization so your browser doesn’t compete with your compiler for RAM. • Privacy & Security First: Zero telemetry. No aggressive tracking. We baked in anti-phishing scanners, Tor-proxy support, and secure local keychain integration. If you’re tired of bloated web browsers, come check out the code, leave a ⭐, or contribute! 🔗 GitHub: https://github.com/soulcloude00/soul-browser Let me know what you think of the architecture! 👇 #swiftui #macos #opensource #buildinpublic"}, {"post_id": 6403, "ts": "2026-06-10T19:31:08Z", "hours": 14.0, "text": "done a full setting page for the browser took almost 14 hours , so basically its focused all all the use cases , developers , normal users and so many - planing to make a browser that no other browser has achieved"}, {"post_id": 2945, "ts": "2026-06-05T21:05:35Z", "hours": 0.5053, "text": "made an onboarding pages for the browser"}, {"post_id": 2687, "ts": "2026-06-05T11:17:35Z", "hours": 0.7861, "text": "added local ai assisted chat and navigation panel like comet browser on my browser it took lot of time lol"}, {"post_id": 2653, "ts": "2026-06-05T09:56:11Z", "hours": 13.3472, "text": "soul browser devlog 2 - creating a web page for the browser so that users can download from my website"}, {"post_id": 2372, "ts": "2026-06-04T20:35:41Z", "hours": 85.8667, "text": "crafting my own browser"}]...
|
Title: soul browser by @soulcloude | Stardance
De Title: soul browser by @soulcloude | Stardance
Devlogs:
crafting my own browser
soul browser devlog 2 - creating a web page for the browser so that users can download from my website
added local ai assisted chat and navigation panel like comet browser on my browser it took lot of time lol
made an onboarding pages for the browser
done a full setting page for the browser took almost 14 hours , so basically its focused all all the use cases , developers , normal users and so many - planing to make a browser that no other browser has achieved
We just open-sourced the Soul Browser! 🚀 I wanted to build a browser that feels incredibly fast, native to macOS, and respects your privacy—without relying on heavy Electron wrappers. 🛠 The Stack: Built entirely in native Swift & SwiftUI for a buttery smooth UI, powered by the Chromium Embedded Framework (CEF) under the hood for world-class web rendering and V8 JavaScript performance. ✨ Core Features: • !Bangs Integration: Instantly search your favorite sites directly from the address bar (e.g., type !w macOS to jump straight to Wikipedia). • Built for Developers: First-class DevTools support natively integrated, plus aggressive memory optimization so your browser doesn’t compete with your compiler for RAM. • Privacy & Security First: Zero telemetry. No aggressive tracking. We baked in anti-phishing scanners, Tor-proxy support, and secure local keychain integration. If you’re tired of bloated web browsers, come check out the code, leave a ⭐, or contribute! 🔗 GitHub: https://github.com/soulcloude00/soul-browser Let me know what you think of the architecture! 👇 #swiftui #macos #opensource #buildinpublic
Ships:
I built the Soul Browser! It’s a high-performance, privacy-first web browser built natively for macOS. Instead of relying on bloated web-wrappers like Electron, I built the entire UI natively in SwiftUI and hooked it into the Chromium Embedded Framework (CEF) backend. This gives it the lightning-fast V8 JavaScript engine and Blink rendering, wrapped in a beautiful, macOS-native shell. The biggest challenge was wrestling with memory optimization and IPC (Inter-Process Communication). Because I avoided Electron, I had to manually manage how the native Swift UI communicated with the underlying Chromium processes. I spent a lot of time stripping down site isolation overhead and tuning the V8 heap limits so the browser stays incredibly lightweight. We also had to build custom retry-logic to stabilize our local AI Codex server connection! I’m incredibly proud of the UI aesthetics and the performance metrics. The browser looks and feels like an expensive Apple product thanks to the frosted glassmorphism and native Swift animations. But more importantly, it runs like a dream. Features like the AI Tab Grouper and native !Bangs integration make it a genuine power-tool for developers. You can download the v1.0.0-beta directly from the Releases tab on GitHub! Since it’s a native macOS app in beta, you may need to right-click and hit “Open” to bypass the unverified developer warning. Try out the !w bangs in the address bar, or open 20 tabs to watch the AI Tab Grouper automatically organize them for you!...
|
1793501558.0162153
|
1793587958.0162153
|
|
58881
|
Witcher | WebOS 1 by @karoltoo11 | Stardance
|
karoltoo11
|
1
|
3.54
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T15:43:58Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? It made a fully custom (and in some way castomable) website based on Witcher 3: Wild Hunt universe. Also on other parts of games and books. I built it using: HTML, CCS and Javascript . It was my second time using this langues that much. I really wasn’t using them that much before. I’m happy that I hade a chance to do this. What was challenging? This was completly new form of work for me. Like, yea I created sites before, but they were meant to look like sitI made a builded in local audio player named Dandelion’s Lute after one of character from book.es, not Operating Systems. I think that getting out of that type of thinking that I am creating a website. What are you proud of? Of course I’m proud of myself! Probably the most of local audio player named Dandelion’s Lute after one of character from book. What should people know to test your project? Just click this link: https://karoltoo11.github.io/witcherwebos/", "repo": "https://github.com/karoltoo11/witcherwebos", "demo": "https://karoltoo11.github.io/witcherwebos/"}]...
|
[{"post_id": 65436, "ts": "202 [{"post_id": 65436, "ts": "2026-09-10T15:57:46Z", "hours": 0.5389, "text": "Devlog Number 4 Today I made a callendar located in Witcher 3 Times. You can acess it by clicking on the timer. Also: Fixed some small, very small bugs I saw"}, {"post_id": 64277, "ts": "2026-09-08T15:39:17Z", "hours": 0.6706, "text": "Devlog Number 3 Today I made a fully working audio player with 5 orginal songs from The Witcher 3: Wild Hunt Silver for monsters Kear Morhen Steel for Humans Geralt of Rivia Wilcza zamieć (The wolven storm) Polish Version Also: Added/Fixed option to customize wallpaper and color theme. Create new option that allows you to change System clock and Time Display You can see a working audio player on the video!"}, {"post_id": 63605, "ts": "2026-09-07T15:11:33Z", "hours": 0.5781, "text": "Devlog Number 2 Today I made some progress and tidied a few things up . Specifically: Added a job system and a currency. Added settings with options to change the background, etc. I fixed: An issue where windows moved very slowly; the movement wasn’t smooth and was just annoying. The inability to close or minimize windows. The buttons were purely decorative before, but not anymore. You can see a demonstration of everything I fixed in the video. I’ve also included a snippet of the code. I’m writing everything in Visual Studio Code !"}, {"post_id": 62948, "ts": "2026-09-06T14:33:52Z", "hours": 1.6669, "text": "Devlog Number 1 I’m currently creating my own operating system based on The Witcher universe. Especifically, the third game, The Witcher 3: Wild Hunt . I’ve managed to build a working bestiary application. In the future, I plan to add: Contract boards An alchemy guide Gwent A music player featuring tracks from the game, like “Silver for Monsters” If you have any other suggestions, please let me know! PS. The browser component is going to be removed! (Also site is “larger” I just zoomed to 200%)"}]...
|
Title: Witcher | WebOS 1 by @karoltoo11 | Stardanc Title: Witcher | WebOS 1 by @karoltoo11 | Stardance
Devlogs:
Devlog Number 1 I’m currently creating my own operating system based on The Witcher universe. Especifically, the third game, The Witcher 3: Wild Hunt . I’ve managed to build a working bestiary application. In the future, I plan to add: Contract boards An alchemy guide Gwent A music player featuring tracks from the game, like “Silver for Monsters” If you have any other suggestions, please let me know! PS. The browser component is going to be removed! (Also site is “larger” I just zoomed to 200%)
Devlog Number 2 Today I made some progress and tidied a few things up . Specifically: Added a job system and a currency. Added settings with options to change the background, etc. I fixed: An issue where windows moved very slowly; the movement wasn’t smooth and was just annoying. The inability to close or minimize windows. The buttons were purely decorative before, but not anymore. You can see a demonstration of everything I fixed in the video. I’ve also included a snippet of the code. I’m writing everything in Visual Studio Code !
Devlog Number 3 Today I made a fully working audio player with 5 orginal songs from The Witcher 3: Wild Hunt Silver for monsters Kear Morhen Steel for Humans Geralt of Rivia Wilcza zamieć (The wolven storm) Polish Version Also: Added/Fixed option to customize wallpaper and color theme. Create new option that allows you to change System clock and Time Display You can see a working audio player on the video!
Devlog Number 4 Today I made a callendar located in Witcher 3 Times. You can acess it by clicking on the timer. Also: Fixed some small, very small bugs I saw
Ships:
What did you make? It made a fully custom (and in some way castomable) website based on Witcher 3: Wild Hunt universe. Also on other parts of games and books. I built it using: HTML, CCS and Javascript . It was my second time using this langues that much. I really wasn’t using them that much before. I’m happy that I hade a chance to do this. What was challenging? This was completly new form of work for me. Like, yea I created sites before, but they were meant to look like sitI made a builded in local audio player named Dandelion’s Lute after one of character from book.es, not Operating Systems. I think that getting out of that type of thinking that I am creating a website. What are you proud of? Of course I’m proud of myself! Probably the most of local audio player named Dandelion’s Lute after one of character from book. What should people know to test your project? Just click this link: https://karoltoo11.github.io/witcherwebos/...
|
1793501572.2554774
|
1793587972.2554774
|
|
16632
|
Marunnundo by @Adarsh | Stardance
|
Adarsh
|
1
|
4.0
|
16
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T17:50:54Z", "hours": 4.0, "multiplier": 4.3, "payout": 16, "blessing": "neutral", "text": "I made a medicine finder for my state", "repo": "https://github.com/stairmoss/Marunnundo", "demo": "https://marunnundo.vercel.app/"}]...
|
[{"post_id": 8182, "ts": "2026 [{"post_id": 8182, "ts": "2026-06-13T17:05:42Z", "hours": 0.8606, "text": "made the portfolio website for this and also in this i have made a video from veo to animate which is showed in side"}, {"post_id": 8079, "ts": "2026-06-13T14:19:56Z", "hours": 0.8553, "text": "i have added a side bar which give the info about the pharmacy which redirects to the google search and changed the green button color to the blue"}, {"post_id": 8008, "ts": "2026-06-13T11:14:13Z", "hours": 0.8369, "text": "i have added dark mode with a lime green cuz blue wasnt perfect and also then also i added these satellite map and also the malayalam language"}, {"post_id": 6926, "ts": "2026-06-11T16:35:11Z", "hours": 0.7675, "text": "i have made the website working and which includes as we can give the current location it gives us near pharmacy and its google profile so that people get direction on map"}, {"post_id": 6853, "ts": "2026-06-11T14:41:47Z", "hours": 0.4817, "text": "worked on the UI"}]...
|
Title: Marunnundo by @Adarsh | Stardance
Devlogs: Title: Marunnundo by @Adarsh | Stardance
Devlogs:
worked on the UI
i have made the website working and which includes as we can give the current location it gives us near pharmacy and its google profile so that people get direction on map
i have added dark mode with a lime green cuz blue wasnt perfect and also then also i added these satellite map and also the malayalam language
i have added a side bar which give the info about the pharmacy which redirects to the google search and changed the green button color to the blue
made the portfolio website for this and also in this i have made a video from veo to animate which is showed in side
Ships:
I made a medicine finder for my state...
|
1793501579.1234362
|
1793587979.1234362
|
|
30742
|
XacOS by @xacobema | Stardance
|
xacobema
|
3
|
22.0
|
11
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-30T22:59:10Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "XacOS 2.0: A bloat-free (there are 6 apps) modern (it has blur) lightweight (it is HTML) operative system! What´s new on 2.0? Added Setup: now the first time you boot XacOS, you will get a simple tutorial, the option to choose your favourite font and set your name and profile picture. Taskbar calendar: hover over the date and time in the taskbar to see a calendar. Added a new stardance-themed wallpaper. Notepad: added a new feature to the notepad app, now you can open multiple notes at once and switch between them, and download them as a .txt file. You can also delete notes and edit their titles. Animations: added new animations to the taskbar, windows and the welcome screen. Paint: added a jspaint-based paint app, you can open it from the start menu. Added a low graphics mode, which disables animations and blur effects to improve performance on low-end devices. Added a security section in settings, where you can check if you´ve got the official and latest version of XacOS (Mostly a gimmick) Now all settings are saved in the browser´s local storage, so you can keep your settings even if you close the browser. Factory reset: now you can reset XacOS to its default settings from the settings app. Some minor extra features and improvements (Translation: I forgot to write them down, but they are there)", "repo": "https://github.com/xacb33/XacOS", "demo": "https://xacb33.github.io/XacOS/"}, {"ship_num": 2, "ts": "2026-09-08T14:18:45Z", "hours": 6.0, "multiplier": 1.98, "payout": 11, "blessing": "neutral", "text": "XacOS v1.0 [You will probably have to zoom out to see everything properly, I didn´t find a reliable and simple way to make everything fit every screen, altough there is probably a way] What’s new in 1.0 Fixed bugs, like the windows changing shape when dragged to the right corner of the screen Revamped settings: you can now add your own wallpaper, change the font of the whole OS and see some information about your PC Added very simple notes app Start menu: access it by clicking the XacOS logo in the corner of the taskbar, see and open all of your apps There was A LOT of debugging Honestly, since almost 2 months have passed since I made v0.1, and that being my first real experience with HTML, CSS and JavaScript, and also forgetting how I coded the project, this update was a little challenging. Obviously, a lot of googling and W3schools helped me. I still think that maybe in the future I will make a 1.1 or 2.0 with more interesting features, but as a first experience with web development, I think it was great. I would love to mke 1.1 now, but I start school tomorrow, so it’s going to be difficult… Also, thank you very much HackClub and all it’s volunteers for making these awesome projects, I hope summer next year I will be able to participate again, because it’s the last year before I turn 18 😭", "repo": "https://github.com/xacb33/XacOS", "demo": "https://xacb33.github.io/XacOS/"}, {"ship_num": 3, "ts": "2026-07-06T22:42:40Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I think I finally finished the first version of XacOS! It was quite challenging to fix up bugs, as I had never coded in HTML nor JavaScript", "repo": "https://github.com/xacb33/XacOS", "demo": "https://xacb33.github.io/XacOS/"}]...
|
[{"post_id": 85197, "ts": "202 [{"post_id": 85197, "ts": "2026-10-30T22:55:51Z", "hours": 1.8678, "text": "Fixed all bugs that remained (hopefully) 2. Now you can actually have multiple notes on the notes app, and delete them. 3. Correctly implemented the themes settings, now they actually work"}, {"post_id": 71402, "ts": "2026-09-20T19:12:24Z", "hours": 3.0508, "text": "Let’s see if I remember everything: 1. Changed the default system font to one that I think fits better 2. Added paint.js as an app 3. Added user profile customization, with profile picture and username (for now it doesn’t do much, just show it in the start menu) 4. Now there’s a little indicator in the taskbar on what app is currently on top 5. Changed the buttons of the notes apps to icons 6. Setup now tells you to choose your favourite font 7. A little calendar will appear when hovering over the date and time on the taskbar 8. Made most settings persist between page refresh with localStorage and some minor bug-fixes, like the aboutMe screen not going to the top when it’s taskbar icon was clicked. I thinks that’s everything, I also plan on adding at least one or two more apps coded by me and maybe something like a launcher or app store for iframe/embeded stuff by other people"}, {"post_id": 70565, "ts": "2026-09-19T11:31:46Z", "hours": 2.4183, "text": "I added quite some new features, including: 1. Most setup/OOBE is done, but I will probably add the cusomization options in there. 2. Added a low graphics mode, as some reviewers pointed out that XacOS ran badly on their PC, wich disables animations and disables blur. 3.Compressed all images, wich will also help with performane. 4.Added a new wallpaper by NASA, to resemble StarDance. 5. Added a Security section in settings, wich checks for the URL to make sure it is “genuine XacOS” (It is just a gimmick, XacOS is still completly open source) 6. Added a factory reset option in settings, wich deletes all settings and files saved in localStorage. 7. Added a start-up sound. Still have some things that I want to add but I’m happy on how this is turning out, altough I lost my streak because of school…"}, {"post_id": 65495, "ts": "2026-09-10T17:53:35Z", "hours": 1.4144, "text": "Started adding quite some things, but more work is required. (I plan on adding more features, this is v2.0, not v1.1 ;) ) 1. Changed the old welcome window for a placeholder OOBE/Setup, 2. Started working on locally saving the notes to be persistant even when you close the browser, 3. Moved my personal projects to a separate folder inside of file explorer, 4. Added an outline to program names in the desktop, so it can work with both dark and light wallpapers, 5. Fixed the problem of when selecting an icon it would move slightly. Wish me luck, I have no idea why the local saving is working (Why does it need a random cryptographic ID?)"}, {"post_id": 64887, "ts": "2026-09-09T16:23:43Z", "hours": 0.5356, "text": "Sticky Notes now has more functions and windows are animated! I still have to code all the saving to localstorage when you click save and displaying them as openeable files, but for now you can export your note to a txt file to view whenever. Also, looking at the screenshot, looks like I made Settings not be a square anymore, probably when making the text centered with the icon… I will fix that too"}, {"post_id": 64864, "ts": "2026-09-09T15:38:39Z", "hours": 0.5381, "text": "I know I said that I was starting school, but the first days we aren’t having a lot of work, and I was dissapointed on only getting a x1.98 multiplier in v1, so I’ve decided to fix everything the reviewers have pointed out, starting by making everything smaller, and using relative percentages, instead of fixed px values both in HTML and in CSS. Secondly, I have added a little animation on the opening and closing of the Start Menu, turns out it was way easier than I thought, I thought that you had to code the animation by hand. I will also add animations to the other windows (probably easier since they all have a common css class). Lastly, I renamed the welcome screen to About Me, as I plan to do an onboarding foor the OS, and some reviewers pointed out that XacOS v1 seemed more like a personal website instead of a WebOS. As you can read, I am also giving more details in the devlog, and doing them more often."}, {"post_id": 64225, "ts": "2026-09-08T14:06:15Z", "hours": 0.2781, "text": "Updated GitHub and touched up some minor things before shipping!"}, {"post_id": 64215, "ts": "2026-09-08T13:37:40Z", "hours": 1.9003, "text": "I figured out how to make windows not do weird things when they are dragged to the right (It was a very simple solution), gave Settings more functions, like changing the font and uploading your own wallpaper, fixed a couple of bugs and made a very simple Sticky Notes app. I think I will update the repo, do some slight changes, and ship XacOS v1.0! (Previous was beta)"}, {"post_id": 63486, "ts": "2026-09-07T11:25:59Z", "hours": 0.7506, "text": "Found a way to preview the page without having to redownload the files every single time, wich was much needed. Added a working start menuthat opens when you click XacOS and closes by clicking it again, opening an app with it or clicking a window. I still have to fix the problem of windows deforming when they get to the right side of the screen…"}, {"post_id": 31831, "ts": "2026-07-20T15:00:58Z", "hours": 1.7636, "text": "Of course it didn’t work after reorganizing the code. After fixing it up I started implementing the Start Menu (still needs a lot of work) , and only had opened Welome Screen, so I din’t realise that every other window closed with the start Menu, so I started re-cheking the code and found nothing, changed a couple of things that I thought hat was causing that, nothing. I gave up and asked Github AI what was going on but it DIDN’T KNOW (and tried rewriting my code)… I ended up checking again the html….. there was a missing div ending declaration. AAAAAAAAA"}, {"post_id": 27254, "ts": "2026-07-12T17:27:11Z", "hours": 0.9331, "text": "Tidied up a lot the JavaScript code. Much needed! Now to try if it still works… fingers crossed"}, {"post_id": 23785, "ts": "2026-07-06T22:39:30Z", "hours": 0.5344, "text": "Fixing up the README and setting up github pages"}, {"post_id": 23772, "ts": "2026-07-06T22:06:57Z", "hours": 2.1356, "text": "Hooray! I think version 1 of XacOS is finished. It is still pretty barebones and the code is a mess (compared to what others have done this is worthless), but I hope I can polish everything in WebOS 2. All the basics are done and I added the feature of icons of open apps in the taskbar, and when you click it it brings the window to the top"}, {"post_id": 23673, "ts": "2026-07-06T19:43:09Z", "hours": 2.3122, "text": "Project is going great! Alough I’m going crazy trying to figure out why The pop up projects movat the same time as the main projects window…"}, {"post_id": 22881, "ts": "2026-07-05T14:44:56Z", "hours": 0.6561, "text": "I didn’t have Hackatime set up properly… But yesterday I locked in and did 71 different versions of XacOS (Each one with a little bit more things than the one before) Last thing I have done fllowing the guide was making the window openable and closable. I kinda panicked when tidying up the code a little bit all the JS stopped working, but it’s fixed now. (btw, I spent way more than 37min on this)"}]...
|
Title: XacOS by @xacobema | Stardance
Devlogs:
I Title: XacOS by @xacobema | Stardance
Devlogs:
I didn’t have Hackatime set up properly… But yesterday I locked in and did 71 different versions of XacOS (Each one with a little bit more things than the one before) Last thing I have done fllowing the guide was making the window openable and closable. I kinda panicked when tidying up the code a little bit all the JS stopped working, but it’s fixed now. (btw, I spent way more than 37min on this)
Project is going great! Alough I’m going crazy trying to figure out why The pop up projects movat the same time as the main projects window…
Hooray! I think version 1 of XacOS is finished. It is still pretty barebones and the code is a mess (compared to what others have done this is worthless), but I hope I can polish everything in WebOS 2. All the basics are done and I added the feature of icons of open apps in the taskbar, and when you click it it brings the window to the top
Fixing up the README and setting up github pages
Tidied up a lot the JavaScript code. Much needed! Now to try if it still works… fingers crossed
Of course it didn’t work after reorganizing the code. After fixing it up I started implementing the Start Menu (still needs a lot of work) , and only had opened Welome Screen, so I din’t realise that every other window closed with the start Menu, so I started re-cheking the code and found nothing, changed a couple of things that I thought hat was causing that, nothing. I gave up and asked Github AI what was going on but it DIDN’T KNOW (and tried rewriting my code)… I ended up checking again the html….. there was a missing div ending declaration. AAAAAAAAA
Found a way to preview the page without having to redownload the files every single time, wich was much needed. Added a working start menuthat opens when you click XacOS and closes by clicking it again, opening an app with it or clicking a window. I still have to fix the problem of windows deforming when they get to the right side of the screen…
I figured out how to make windows not do weird things when they are dragged to the right (It was a very simple solution), gave Settings more functions, like changing the font and uploading your own wallpaper, fixed a couple of bugs and made a very simple Sticky Notes app. I think I will update the repo, do some slight changes, and ship XacOS v1.0! (Previous was beta)
Updated GitHub and touched up some minor things before shipping!
I know I said that I was starting school, but the first days we aren’t having a lot of work, and I was dissapointed on only getting a x1.98 multiplier in v1, so I’ve decided to fix everything the reviewers have pointed out, starting by making everything smaller, and using relative percentages, instead of fixed px values both in HTML and in CSS. Secondly, I have added a little animation on the opening and closing of the Start Menu, turns out it was way easier than I thought, I thought that you had to code the animation by hand. I will also add animations to the other windows (probably easier since they all have a common css class). Lastly, I renamed the welcome screen to About Me, as I plan to do an onboarding foor the OS, and some reviewers pointed out that XacOS v1 seemed more like a personal website instead of a WebOS. As you can read, I am also giving more details in the devlog, and doing them more often.
Sticky Notes now has more functions and windows are animated! I still have to code all the saving to localstorage when you click save and displaying them as openeable files, but for now you can export your note to a txt file to view whenever. Also, looking at the screenshot, looks like I made Settings not be a square anymore, probably when making the text centered with the icon… I will fix that too
Started adding quite some things, but more work is required. (I plan on adding more features, this is v2.0, not v1.1 ;) ) 1. Changed the old welcome window for a placeholder OOBE/Setup, 2. Started working on locally saving the notes to be persistant even when you close the browser, 3. Moved my personal projects to a separate folder inside of file explorer, 4. Added an outline to program names in the desktop, so it can work with both dark and light wallpapers, 5. Fixed the problem of when selecting an icon it would move slightly. Wish me luck, I have no idea why the local saving is working (Why does it need a random cryptographic ID?)
I added quite some new features, including: 1. Most setup/OOBE is done, but I will probably add the cusomization options in there. 2. Added a low graphics mode, as some reviewers pointed out that XacOS ran badly on their PC, wich disables animations and disables blur. 3.Compressed all images, wich will also help with performane. 4.Added a new wallpaper by NASA, to resemble StarDance. 5. Added a Security section in settings, wich checks for the URL to make sure it is “genuine XacOS” (It is just a gimmick, XacOS is still completly open source) 6. Added a factory reset option in settings, wich deletes all settings and files saved in localStorage. 7. Added a start-up sound. Still have some things that I want to add but I’m happy on how this is turning out, altough I lost my streak because of school…
Let’s see if I remember everything: 1. Changed the default system font to one that I think fits better 2. Added paint.js as an app 3. Added user profile customization, with profile picture and username (for now it doesn’t do much, just show it in the start menu) 4. Now there’s a little indicator in the taskbar on what app is currently on top 5. Changed the buttons of the notes apps to icons 6. Setup now tells you to choose your favourite font 7. A little calendar will appear when hovering over the date and time on the taskbar 8. Made most settings persist between page refresh with localStorage and some minor bug-fixes, like the aboutMe screen not going to the top when it’s taskbar icon was clicked. I thinks that’s everything, I also plan on adding at least one or two more apps coded by me and maybe something like a launcher or app store for iframe/embeded stuff by other people
Fixed all bugs that remained (hopefully) 2. Now you can actually have multiple notes on the notes app, and delete them. 3. Correctly implemented the themes settings, now they actually work
Ships:
I think I finally finished the first version of XacOS! It was quite challenging to fix up bugs, as I had never coded in HTML nor JavaScript
XacOS v1.0 [You will probably have to zoom out to see everything properly, I didn´t find a reliable and simple way to make everything fit every screen, altough there is probably a way] What’s new in 1.0 Fixed bugs, like the windows changing shape when dragged to the right corner of the screen Revamped settings: you can now add your own wallpaper, change the font of the whole OS and see some information about your PC Added very simple notes app Start menu: access it by clicking the XacOS logo in the corner of the taskbar, see and open all of your apps There was A LOT of debugging Honestly, since almost 2 months have passed since I made v0.1, and that being my first real experience with HTML, CSS and JavaScript, and also forgetting how I coded the project, this update was a little challenging. Obviously, a lot of googling and W3schools helped me. I still think that maybe in the future I will make a 1.1 or 2.0 with more interesting features, but as a first experience with web development, I think it was great. I would love to mke 1.1 now, but I start school tomorrow, so it’s going to be difficult… Also, thank you very much HackClub and all it’s volunteers for making these awesome projects, I hope summer next year I will be able to participate again, because it’s the last year before I turn 18 😭
XacOS 2.0: A bloat-free (there are 6 apps) modern (it has blur) lightweight (it is HTML) operative system! What´s new on 2.0? Added Setup: now the first time you boot XacOS, you will get a simple tutorial, the option to choose your favourite font and set your name and profile picture. Taskbar calendar: hover over the date and time in the taskbar to see a calendar. Added a new stardance-themed wallpaper. Notepad: added a new feature to the notepad app, now you can open multiple notes at once and switch between them, and download them as a .txt file. You can also delete notes and edit their titles. Animations: added new animations to the taskbar, windows and the welcome screen. Paint: added a jspaint-based paint app, you can open it from the start menu. Added a low graphics mode, which disables animations and blur effects to improve performance on low-end devices. Added a security section in settings, where you can check if you´ve got the official and latest version of XacOS (Mostly a gimmick) Now all settings are saved in the browser´s local storage, so you can keep your settings even if you close the browser. Factory reset: now you can reset XacOS to its default settings from the settings app. Some minor extra features and improvements (Translation: I forgot to write them down, but they are there)...
|
1793501586.7017632
|
1793587986.7017632
|
|
58639
|
Personal Portfolio by @s_ray9 | Stardance
|
s_ray9
|
1
|
28.38
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-28T03:35:59Z", "hours": 18.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A neat personal portfolio with metaball animations! Finally, I get to ship this thing for once. This personal portfolio is the culmination of all my hard work, from trying to learn web development to figuring out the best practices. I’ve encountered so many more problems than I could ever imagine, whether it’s figuring out how I actually wanted it to look, adapting to what modular code looks like in web development, or even trying to figure out how to set up the project folder in itself. Actually, now that I recall, one of the absolute worst parts must have been trying to figure out the favicon business. Who knew that I had to literally learn how different browsers cache favicons differently… and on an unrelated note, merge Tailwind classes…? That aside, I am so glad that I added the metaballs animation. It’s inspired by this article , just with my own spin on how it’s done. Please try it out! Honestly, the interactive animation stuff can be quite addicting. The actual webpage stuff is for later. I’m still caught in writing all that.", "repo": "https://github.com/s-ray9/personal-portfolio", "demo": "https://s-ray9.vercel.app"}]...
|
[{"post_id": 85689, "ts": "202 [{"post_id": 85689, "ts": "2026-10-31T16:52:57Z", "hours": 10.3761, "text": "Devlog 6: Finalizing the metaballs rewrite and updating dependencies after weeks of falling behind I have finally finished rewriting the metaballs animation! After going on a hiatus due to school and still trying to figure out why one thing broke after another, I had broken free from it. The slightly overheating fans of my laptop deserved better every time I opened my website. I could hardly remember what I had done a while ago, but I knew that, frankly, as much as the metaball animations were cool (or hot, I should say…), it was just as costly: the frame rate and resolution were too high. The main problem: there was too much work per pixel. Stuff was quite literally being computed millions of times. (More changes to be discussed in my ship.) For the past few days, I think I spent too much time trying to figure out how to reorder classes because I updated all my tools. Some releases came out very recently; Node.js 26 entered LTS literally three days ago. From the start I suspected it had something to do with the versions. Then after a while of searching I found this issue , which was exactly the problem I had. Then, I decided I would downgrade Typescript from v1.x and pin it to 0.14.1 because it’s unsupported. The solution might sound obvious, and frankly it really does when I think about it now, but it was a silent error, which are the worst kinds of issues. Cheers to progress."}, {"post_id": 83526, "ts": "2026-10-28T03:22:07Z", "hours": 4.3058, "text": "Devlog 5: More quality of life updates Alright, so it has definitely been a while since I last did anything at all, but this devlog logs any and all leftover changes (especially changes to the sections). I’m still working on the actual pages… such as restructuring the main navigation and footer, as well as adding a colophon!"}, {"post_id": 68929, "ts": "2026-09-16T01:59:26Z", "hours": 0.7094, "text": "Devlog 4: Migrated fully to pnpm 12.1 and fixed a concerning phantom dependency! A dozen or so more hours into this project since I started logging, and I just realized I could migrate to the “better npm.” Not a very eventful devlog, but it’s weird that I just now realize I have free will. It’s literally better in every way. (What am I doing?) What’s important to highlight, though, is that this decision literally exposed an implicit coupling in my dependencies. Brittle architecture, if you will. Once upon a while ago, I imported clsx while using tailwind-merge and then I never thought about it again because it worked out of the box. However, I never actually installed clsx independently… It was a phantom dependency, which just so happened to resolve itself because npm just makes it work while pnpm actually cares about what’s good for your codebase. I can’t believe this kind of code smell really just started fouling now. As a side note, I fixed some other bugs that accidentally showed up along the way, such as the Vercel badge not linking to the website properly, as well as README improvements, some of which, of course, reflect the new documentation."}, {"post_id": 67650, "ts": "2026-09-13T20:06:43Z", "hours": 9.6706, "text": "Devlog #3: 10 hours of bugfixes, QoL improvements, and… METABALLS!!! This devlog seriously took me forever to do, and I still haven’t even gotten to designing and writing pages. First of all, I seriously did not expect to go nearly 10 hours without uploading a devlog. A lot of the time was actually spent just trying to figure out why the Prettier plugin for Astro wasn’t working while overhauling my project configuration… Seriously. I still don’t entirely know why. So, as you may have noticed, what’s new is that now there are cool metaball animations! They merge together and stuff, and it’s so cool, and it’s all thanks to this article . I just adapted it and just made floating balls, with my own tweaks, of course. In no way is any of anything done. There is still a long way to go, but everything is slowly but surely falling into place… Anyways, since there was so much work put in at once, here’s a rundown of what’s up: chore(dx): optimize project layout structure and update formatting configuration : The main philosophy here was to clean up my project workspace before moving onto the big stuff, so that involves cleaning up Prettier configurations and shifting reliance: .vscode/settings.json -> .prettierrc.mjs -> .editorconfig . That way, everything becomes minimal, and I don’t end up with a maintenance nightmare. Plus, I made some tiny additional polishes, such as to the README. style: standardize tokens matrix and streamline base component layouts : These changes mostly involve improving the token standards that I have established across my webpages. For example, rather than dealing with class conflicts using tailwind-merge , I’ve kept things more minimal and decided on cleaner conventions. Also, I realized I could tokenize some additional values. fix: resolve theme contrast boundaries and polish navigation assets : This one was a problem I actually missed, and I’m glad I caught it. I forgot to consider that the logo SVG I was using for my header was adaptive to theme. Depending on the user’s theme, the logo changes appearance. Rather, it should strictly use the dark theme. I wrapped that in a Logo.astro component and realized some additional improvements to Layout.astro . feat: implement high-performance fluid matrix canvas background : Of course, the best for last. I already decided I wanted to use Three.js so what I did was I actually found a metaballs animation online that I really liked. I ended up using it as inspiration and created my own floating metaballs. This was one of the coolest effects I’ve ever done! Code-wise, I’ve set up a basic render pipeline. Overall, this was a very ambitious devlog, but it still lived up to greatness! I tried to maintain my project as best as possible, and that was honestly the hard part of this project. As a next step, I think I should really start turning it into an actual website… Cheers to nearly 10 hours of work!"}, {"post_id": 65775, "ts": "2026-09-11T04:26:38Z", "hours": 2.6175, "text": "Devlog #2: Cleaning up the repo and polishing the developer experience I’m still maintaining the repo! I plan to move past that soon, though. I migrated away from GitHub Pages and fully to Vercel, renamed the project for consistency, built on top of the environment cleanup, pinned Node 24 (not sure why that was out of date), and set up workspace formatting rules that I set up a couple of days ago. This devlog is more of an intermission, but I am looking forward to cooler updates like Three.js animations in the near future! Metaballs are looking really cool right now…"}, {"post_id": 63417, "ts": "2026-09-07T07:42:23Z", "hours": 0.6594, "text": "Devlog #1: Building the foundation A month ago, I woke up one day and decided to build a personal portfolio from scratch. The funny part is that the website itself is basically just “coming soon” right now. I’ve spent maybe 50+ unlogged hours: 1. learning web development 2. designing the entire visual system 3. setting up: i. Astro, Tailwind CSS & TypeScript, ii. GitHub Actions, iii. Vercel deployment, iv. SEO, v. accessibility, vi. responsive behaviour, vii. and a proper development workflow …on a whim. I am genuinely at my limit, but I literally just started. Coming from a systems (and game) development background, I planned to use the same things I’ve learned along the way while adapting to the conventions and weird (terrible) nuances that come with web development. Yet, I haven’t even finished mobile accessibility for a header and a footer. Who knew you had to “rewrite” tailwind-merge itself to fix a class conflict? That alone took me several hours to figure out. The actual site is still mostly empty, but the foundation is finally starting to feel solid. Looking forward to some cool Three.js experiments soon, though…"}]...
|
Title: Personal Portfolio by @s_ray9 | Stardance
Title: Personal Portfolio by @s_ray9 | Stardance
Devlogs:
Devlog #1: Building the foundation A month ago, I woke up one day and decided to build a personal portfolio from scratch. The funny part is that the website itself is basically just “coming soon” right now. I’ve spent maybe 50+ unlogged hours: 1. learning web development 2. designing the entire visual system 3. setting up: i. Astro, Tailwind CSS & TypeScript, ii. GitHub Actions, iii. Vercel deployment, iv. SEO, v. accessibility, vi. responsive behaviour, vii. and a proper development workflow …on a whim. I am genuinely at my limit, but I literally just started. Coming from a systems (and game) development background, I planned to use the same things I’ve learned along the way while adapting to the conventions and weird (terrible) nuances that come with web development. Yet, I haven’t even finished mobile accessibility for a header and a footer. Who knew you had to “rewrite” tailwind-merge itself to fix a class conflict? That alone took me several hours to figure out. The actual site is still mostly empty, but the foundation is finally starting to feel solid. Looking forward to some cool Three.js experiments soon, though…
Devlog #2: Cleaning up the repo and polishing the developer experience I’m still maintaining the repo! I plan to move past that soon, though. I migrated away from GitHub Pages and fully to Vercel, renamed the project for consistency, built on top of the environment cleanup, pinned Node 24 (not sure why that was out of date), and set up workspace formatting rules that I set up a couple of days ago. This devlog is more of an intermission, but I am looking forward to cooler updates like Three.js animations in the near future! Metaballs are looking really cool right now…
Devlog #3: 10 hours of bugfixes, QoL improvements, and… METABALLS!!! This devlog seriously took me forever to do, and I still haven’t even gotten to designing and writing pages. First of all, I seriously did not expect to go nearly 10 hours without uploading a devlog. A lot of the time was actually spent just trying to figure out why the Prettier plugin for Astro wasn’t working while overhauling my project configuration… Seriously. I still don’t entirely know why. So, as you may have noticed, what’s new is that now there are cool metaball animations! They merge together and stuff, and it’s so cool, and it’s all thanks to this article . I just adapted it and just made floating balls, with my own tweaks, of course. In no way is any of anything done. There is still a long way to go, but everything is slowly but surely falling into place… Anyways, since there was so much work put in at once, here’s a rundown of what’s up: chore(dx): optimize project layout structure and update formatting configuration : The main philosophy here was to clean up my project workspace before moving onto the big stuff, so that involves cleaning up Prettier configurations and shifting reliance: .vscode/settings.json -> .prettierrc.mjs -> .editorconfig . That way, everything becomes minimal, and I don’t end up with a maintenance nightmare. Plus, I made some tiny additional polishes, such as to the README. style: standardize tokens matrix and streamline base component layouts : These changes mostly involve improving the token standards that I have established across my webpages. For example, rather than dealing with class conflicts using tailwind-merge , I’ve kept things more minimal and decided on cleaner conventions. Also, I realized I could tokenize some additional values. fix: resolve theme contrast boundaries and polish navigation assets : This one was a problem I actually missed, and I’m glad I caught it. I forgot to consider that the logo SVG I was using for my header was adaptive to theme. Depending on the user’s theme, the logo changes appearance. Rather, it should strictly use the dark theme. I wrapped that in a Logo.astro component and realized some additional improvements to Layout.astro . feat: implement high-performance fluid matrix canvas background : Of course, the best for last. I already decided I wanted to use Three.js so what I did was I actually found a metaballs animation online that I really liked. I ended up using it as inspiration and created my own floating metaballs. This was one of the coolest effects I’ve ever done! Code-wise, I’ve set up a basic render pipeline. Overall, this was a very ambitious devlog, but it still lived up to greatness! I tried to maintain my project as best as possible, and that was honestly the hard part of this project. As a next step, I think I should really start turning it into an actual website… Cheers to nearly 10 hours of work!
Devlog 4: Migrated fully to pnpm 12.1 and fixed a concerning phantom dependency! A dozen or so more hours into this project since I started logging, and I just realized I could migrate to the “better npm.” Not a very eventful devlog, but it’s weird that I just now realize I have free will. It’s literally better in every way. (What am I doing?) What’s important to highlight, though, is that this decision literally exposed an implicit coupling in my dependencies. Brittle architecture, if you will. Once upon a while ago, I imported clsx while using tailwind-merge and then I never thought about it again because it worked out of the box. However, I never actually installed clsx independently… It was a phantom dependency, which just so happened to resolve itself because npm just makes it work while pnpm actually cares about what’s good for your codebase. I can’t believe this kind of code smell really just started fouling now. As a side note, I fixed some other bugs that accidentally showed up along the way, such as the Vercel badge not linking to the website properly, as well as README improvements, some of which, of course, reflect the new documentation.
Devlog 5: More quality of life updates Alright, so it has definitely been a while since I last did anything at all, but this devlog logs any and all leftover changes (especially changes to the sections). I’m still working on the actual pages… such as restructuring the main navigation and footer, as well as adding a colophon!
Devlog 6: Finalizing the metaballs rewrite and updating dependencies after weeks of falling behind I have finally finished rewriting the metaballs animation! After going on a hiatus due to school and still trying to figure out why one thing broke after another, I had broken free from it. The slightly overheating fans of my laptop deserved better every time I opened my website. I could hardly remember what I had done a while ago, but I knew that, frankly, as much as the metaball animations were cool (or hot, I should say…), it was just as costly: the frame rate and resolution were too high. The main problem: there was too much work per pixel. Stuff was quite literally being computed millions of times. (More changes to be discussed in my ship.) For the past few days, I think I spent too much time trying to figure out how to reorder classes because I updated all my tools. Some releases came out very recently; Node.js 26 entered LTS literally three days ago. From the start I suspected it had something to do with the versions. Then after a while of searching I found this issue , which was exactly the problem I had. Then, I decided I would downgrade Typescript from v1.x and pin it to 0.14.1 because it’s unsupported. The solution might sound obvious, and frankly it really does when I think about it now, but it was a silent error, which are the worst kinds of issues. Cheers to progress.
Ships:
A neat personal portfolio with metaball animations! Finally, I get to ship this thing for once. This personal portfolio is the culmination of all my hard work, from trying to learn web development to figuring out the best practices. I’ve encountered so many more problems than I could ever imagine, whether it’s figuring out how I actually wanted it to look, adapting to what modular code looks like in web development, or even trying to figure out how to set up the project folder in itself. Actually, now that I recall, one of the absolute worst parts must have been trying to figure out the favicon business. Who knew that I had to literally learn how different browsers cache favicons differently… and on an unrelated note, merge Tailwind classes…? That aside, I am so glad that I added the metaballs animation. It’s inspired by this article , just with my own spin on how it’s done. Please try it out! Honestly, the interactive animation stuff can be quite addicting. The actual webpage stuff is for later. I’m still caught in writing all that....
|
1793501591.8825328
|
1793587991.8825328
|
|
5377
|
Fight Game by @Hamstersarus | Stardance
|
Hamstersarus
|
1
|
5.0
|
39
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T02:31:26Z", "hours": 5.0, "multiplier": 7.23, "payout": 39, "blessing": "neutral", "text": "This is a Java turn-based fighting game where monsters, creatures, and chaos agents battle on a 10×10 arena. The intent of this project is to demonstrate software development in Java with heavy use of a modern LLM tool. I used Anthropic’s Claude Sonnet 4.6 with occasional use of Opus 4.7. The development environment I chose is VSCode along with Claude CLI. This project serves as the final project in my APCSA Java programming class. The use of these AI tools is in contrast to everything we’ve done in the course where prior use of LLMs was prohibited.", "repo": "https://github.com/Hamstersarus/FightGame", "demo": "https://fight.hamstersarus.hackclub.app/"}]...
|
[{"post_id": 14089, "ts": "202 [{"post_id": 14089, "ts": "2026-06-23T02:25:50Z", "hours": 1.8631, "text": "I added a demo url. I have a docker file that I connect to Render which hosts my website."}, {"post_id": 5698, "ts": "2026-06-09T16:16:04Z", "hours": 1.8578, "text": "The quit option: Added a Q — Quit option to the action menu so it appears on every turn. Typing it exits the game cleanly with a goodbye message. It’s also documented on the instructions screen now. Trimming dead code: Character.java carried a full set of getters and setters that nothing in the game actually called — every field is accessed directly. I removed all of them, so Character.java is now just its fields, the ANSI color constants, and a constructor, which is exactly what a data-model class should be. Board.java documentation: Added thorough inline comments throughout Board.java, explaining the grid primitives, the ANSI cursor-positioning trick used in printBoard() (the CELL/START column math that keeps emoji aligned), and every map-object method. The big one — an automated test harness: The headline addition is TestHarness.java, a standalone tool that stress-tests the whole combat system. It runs every character against every character — all 100 matchups, 20 times each, in two passes (once with map objects, once without) for roughly 4,000 battles. Both fighters are driven by the existing opponent AI, so no input is needed. Each battle is wrapped to catch any exception or assertion failure, and a turn cap catches any battle that never ends. At the end it prints a win-rate matrix plus a count of any crashes or timeouts. Making this fast required one small change to Fight.java: an animationsEnabled flag, because the attack animation uses Thread.sleep and 4,000 battles of real-time animation would take hours. The flag defaults to on, so normal play is unaffected; the harness flips it off. I wrote the full design into CLAUDE.md before building it. The first run came back completely clean — 0 exceptions, 0 timeouts, all in about 300ms — and the results matrix matched expectations (Dragon dominates, Goblin and Zombie struggle), which is a good sign the combat, ability, shield, and map-object systems all hold up under every pairing. Smaller touches: Added a credits line under the title screen, updated the README with the quit option, the new file, and a testing section."}, {"post_id": 1238, "ts": "2026-06-03T02:52:11Z", "hours": 1.7181, "text": "The biggest change this session was a major refactor of how the code is organized across files. Fight.java was getting bloated as the game controller, so logic was redistributed to the classes that actually own it. Board.java gained five new methods: printBoard() (the bordered grid renderer), spawnObjects(), checkObjectInteraction(), restoreHouseIfVacating(), and ejectFromHouseIfExpired(). All of the map object logic now lives alongside the board data it operates on, rather than sitting in the game controller as static helpers. Opponent.java absorbed moveOpponentToward() and opponentAI() as instance methods. An opponent now knows how to move and take its turn — Fight.java just calls opponent.opponentAI(…) instead of running all that logic externally. Fight.java is now significantly leaner, focused only on game setup, the turn loop, player input, and UI rendering. On the bug fix side, the shield raise failure messages (“Something is in the way”) were moved out of raiseShield() and into the player-only call site. Previously these messages would print whenever the opponent AI tried and failed to raise its shield, which confused players who weren’t doing anything with their shield. The board display was also reworked to use ANSI cursor column positioning (\\033[nG) to force each cell to a fixed terminal column, solving a long-standing alignment issue where emoji with different display widths would push cells out of place. The instructions screen was rewritten — cleaner language, shorter sentences, and a new map objects section explaining how the house, hospital, and heart work. The “(I) How to play” hint was moved to sit next to the “Choose your character” header so it’s visible before scrolling through the roster. The README was also reviewed and is current."}]...
|
Title: Fight Game by @Hamstersarus | Stardance
De Title: Fight Game by @Hamstersarus | Stardance
Devlogs:
The biggest change this session was a major refactor of how the code is organized across files. Fight.java was getting bloated as the game controller, so logic was redistributed to the classes that actually own it. Board.java gained five new methods: printBoard() (the bordered grid renderer), spawnObjects(), checkObjectInteraction(), restoreHouseIfVacating(), and ejectFromHouseIfExpired(). All of the map object logic now lives alongside the board data it operates on, rather than sitting in the game controller as static helpers. Opponent.java absorbed moveOpponentToward() and opponentAI() as instance methods. An opponent now knows how to move and take its turn — Fight.java just calls opponent.opponentAI(…) instead of running all that logic externally. Fight.java is now significantly leaner, focused only on game setup, the turn loop, player input, and UI rendering. On the bug fix side, the shield raise failure messages (“Something is in the way”) were moved out of raiseShield() and into the player-only call site. Previously these messages would print whenever the opponent AI tried and failed to raise its shield, which confused players who weren’t doing anything with their shield. The board display was also reworked to use ANSI cursor column positioning (\033[nG) to force each cell to a fixed terminal column, solving a long-standing alignment issue where emoji with different display widths would push cells out of place. The instructions screen was rewritten — cleaner language, shorter sentences, and a new map objects section explaining how the house, hospital, and heart work. The “(I) How to play” hint was moved to sit next to the “Choose your character” header so it’s visible before scrolling through the roster. The README was also reviewed and is current.
The quit option: Added a Q — Quit option to the action menu so it appears on every turn. Typing it exits the game cleanly with a goodbye message. It’s also documented on the instructions screen now. Trimming dead code: Character.java carried a full set of getters and setters that nothing in the game actually called — every field is accessed directly. I removed all of them, so Character.java is now just its fields, the ANSI color constants, and a constructor, which is exactly what a data-model class should be. Board.java documentation: Added thorough inline comments throughout Board.java, explaining the grid primitives, the ANSI cursor-positioning trick used in printBoard() (the CELL/START column math that keeps emoji aligned), and every map-object method. The big one — an automated test harness: The headline addition is TestHarness.java, a standalone tool that stress-tests the whole combat system. It runs every character against every character — all 100 matchups, 20 times each, in two passes (once with map objects, once without) for roughly 4,000 battles. Both fighters are driven by the existing opponent AI, so no input is needed. Each battle is wrapped to catch any exception or assertion failure, and a turn cap catches any battle that never ends. At the end it prints a win-rate matrix plus a count of any crashes or timeouts. Making this fast required one small change to Fight.java: an animationsEnabled flag, because the attack animation uses Thread.sleep and 4,000 battles of real-time animation would take hours. The flag defaults to on, so normal play is unaffected; the harness flips it off. I wrote the full design into CLAUDE.md before building it. The first run came back completely clean — 0 exceptions, 0 timeouts, all in about 300ms — and the results matrix matched expectations (Dragon dominates, Goblin and Zombie struggle), which is a good sign the combat, ability, shield, and map-object systems all hold up under every pairing. Smaller touches: Added a credits line under the title screen, updated the README with the quit option, the new file, and a testing section.
I added a demo url. I have a docker file that I connect to Render which hosts my website.
Ships:
This is a Java turn-based fighting game where monsters, creatures, and chaos agents battle on a 10×10 arena. The intent of this project is to demonstrate software development in Java with heavy use of a modern LLM tool. I used Anthropic’s Claude Sonnet 4.6 with occasional use of Opus 4.7. The development environment I chose is VSCode along with Claude CLI. This project serves as the final project in my APCSA Java programming class. The use of these AI tools is in contrast to everything we’ve done in the course where prior use of LLMs was prohibited....
|
1793501593.146532
|
1793587993.146532
|
|
54030
|
BroTurnYourHead by @Afraz | Stardance
|
Afraz
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T17:19:21Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a head tracker for Simulators/Games. It is called BroTurnYourHead, It Tracks Your Head with an MPU 6050 and sends HID Mouse Signals with an Arduino UNO R4 WiFi The Most challenging part was definitely calibrating the MPU 6050 to my head movements, I had to use the help from chatgpt, otherwise everything else was easy and went smooth like butter.", "repo": "https://github.com/afrazakbar/BroTurnYourHead", "demo": ""}]...
|
[{"post_id": 54868, "ts": "202 [{"post_id": 54868, "ts": "2026-08-26T02:05:41Z", "hours": 1.5667, "text": "gave the uno an enclosure and put the mpu in a helmet so it is easy to wear"}, {"post_id": 54833, "ts": "2026-08-26T00:03:53Z", "hours": 0.6131, "text": "Programmed HID Functions using the Mouse.h library"}, {"post_id": 54251, "ts": "2026-08-25T04:29:14Z", "hours": 0.7142, "text": "Programming the Arduino !! it is just a test code to see of the sensors work"}, {"post_id": 54222, "ts": "2026-08-25T03:42:29Z", "hours": 0.3833, "text": "Built the circuit for BTYH BTYH Stands for BroTurnYourHead which is a head tracker for flight sims and car sims"}]...
|
Title: BroTurnYourHead by @Afraz | Stardance
Devl Title: BroTurnYourHead by @Afraz | Stardance
Devlogs:
Built the circuit for BTYH BTYH Stands for BroTurnYourHead which is a head tracker for flight sims and car sims
Programming the Arduino !! it is just a test code to see of the sensors work
Programmed HID Functions using the Mouse.h library
gave the uno an enclosure and put the mpu in a helmet so it is easy to wear
Ships:
I made a head tracker for Simulators/Games. It is called BroTurnYourHead, It Tracks Your Head with an MPU 6050 and sends HID Mouse Signals with an Arduino UNO R4 WiFi The Most challenging part was definitely calibrating the MPU 6050 to my head movements, I had to use the help from chatgpt, otherwise everything else was easy and went smooth like butter....
|
1793501597.1151195
|
1793587997.1151195
|
|
29967
|
Trivia Game by @starkiller261 | Stardance
|
starkiller261
|
2
|
34.0
|
82
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T16:52:41Z", "hours": 22.0, "multiplier": 1.59, "payout": 35, "blessing": "neutral", "text": "NO AI– completely coded by hand. Spent 20 more hours on this new redesign following the recommendations from my last ship about changing the ui. This is a self hosted kubernetes cluster and full stack website with a flutter ui, Spring Boot backend, connected using a RESTful architectured api. I also used postgresql to store user information and that was seperately hosted using supabase. I then used tailscale to tunnel traffic to my home lab setup. It all works be allowing a user to sign in with jwt authentication through the spring boot backend and generating trivia questions through the open trivia database api.", "repo": "https://github.com/petevass/Trivia-Generator", "demo": "https://stardance-frontend.tail5b0cb9.ts.net/"}, {"ship_num": 2, "ts": "2026-07-22T02:52:42Z", "hours": 12.0, "multiplier": 4.01, "payout": 47, "blessing": "neutral", "text": "This a fullstack app using the spring mvc framework which allows users to test their knowledge to the limits through the variety of trivia topics and questions in the app. The webstack is a Spring MVC, Thymeleaf, and Postgres app with supabase used to host the database and ngrok used to tunnel from a self-hosting rig", "repo": "https://github.com/petevass/Trivia-Generator", "demo": "https://stardance-frontend.tail5b0cb9.ts.net/"}]...
|
[{"post_id": 46589, "ts": "202 [{"post_id": 46589, "ts": "2026-08-13T22:36:31Z", "hours": 6.3025, "text": "Finished Game Play UI"}, {"post_id": 37423, "ts": "2026-07-30T04:01:22Z", "hours": 8.8994, "text": "Working on the Leaderboard"}, {"post_id": 35331, "ts": "2026-07-26T17:26:18Z", "hours": 6.865, "text": "New Flutter Frontend in the works"}, {"post_id": 32041, "ts": "2026-07-20T22:33:58Z", "hours": 3.5997, "text": "UIs Finnaly Done"}, {"post_id": 31269, "ts": "2026-07-19T15:23:08Z", "hours": 4.86, "text": "Trivia API is finished, now I just have to make the frontend"}, {"post_id": 29885, "ts": "2026-07-17T01:32:18Z", "hours": 3.2933, "text": "Just finished configuring my data base and jwt authentication system"}]...
|
Title: Trivia Game by @starkiller261 | Stardance
Title: Trivia Game by @starkiller261 | Stardance
Devlogs:
Just finished configuring my data base and jwt authentication system
Trivia API is finished, now I just have to make the frontend
UIs Finnaly Done
New Flutter Frontend in the works
Working on the Leaderboard
Finished Game Play UI
Ships:
This a fullstack app using the spring mvc framework which allows users to test their knowledge to the limits through the variety of trivia topics and questions in the app. The webstack is a Spring MVC, Thymeleaf, and Postgres app with supabase used to host the database and ngrok used to tunnel from a self-hosting rig
NO AI– completely coded by hand. Spent 20 more hours on this new redesign following the recommendations from my last ship about changing the ui. This is a self hosted kubernetes cluster and full stack website with a flutter ui, Spring Boot backend, connected using a RESTful architectured api. I also used postgresql to store user information and that was seperately hosted using supabase. I then used tailscale to tunnel traffic to my home lab setup. It all works be allowing a user to sign in with jwt authentication through the spring boot backend and generating trivia questions through the open trivia database api....
|
1793501600.9310694
|
1793588000.9310694
|
|
58646
|
Alarm Clock by @aarav_shrivastava | Stardance
|
aarav_shrivastava
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-30T16:09:29Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a ALARM CLOCK in BLARE MISSION . It is a custom 4-key digital alarm clock built around the Seeed Studio XIAO ESP32-C3, a 2.25-inch ST7789P3 TFT display, four mechanical switches, and a passive buzzer. I designed a custom PCB and a 3D-printed enclosure specifically for the project, along with custom firmware for clock and alarm functions. It is my first hardware project and I learned a lot of things like schematic, PCB designing, 3D enclosure making and many more things. PCB is ordered but its delivery is late and it is expected to be delivered within 2-3 days. Currently I have used breadboard for temporary connections, but when PCB will arrive I will complete it by attaching components to it. Also, currently I have used tactical push buttons instead of mechanical switch I got in BLARE KIT because they can’t be connected in breadboard but I will attach mechanical switch in PCB.", "repo": "https://github.com/aaravshrivastava4129/Alarm-Clock", "demo": ""}]...
|
[{"post_id": 84934, "ts": "202 [{"post_id": 84934, "ts": "2026-10-30T16:00:15Z", "hours": 3.3669, "text": "ALARM CLOCK The design and prototype are completed. The final PCB has been designed and ordered, but the components are currently connected using temporary breadboard wiring because the PCB has not been delivered yet. Currently I have used tactical push button because buttons i got from BLARE KIT can be attached to breadboard but i will use BLARE KIT buttons in PCB The final PCB assembly will be completed once the board arrives. For Reviewer: Sorry but my PCB is not delivered but it is expected to be delivered in 2-3 days then I will immediately connect components and ship it."}, {"post_id": 67918, "ts": "2026-09-14T07:01:52Z", "hours": 2.1903, "text": "Alarm Clock Added timer function in clock. For the reviewer - Can you please check my PCB connection. Because this is my first ever PCB design so I’m worried if connections are wrong."}, {"post_id": 65357, "ts": "2026-09-10T13:24:59Z", "hours": 1.3578, "text": "Alarm Clock Added basic firmware."}, {"post_id": 63764, "ts": "2026-09-07T18:42:01Z", "hours": 7.3436, "text": "Alarm Clock Everything is completed. Now design will be summited soon."}, {"post_id": 63135, "ts": "2026-09-06T19:28:03Z", "hours": 6.5347, "text": "Alarm Clock PCB design is completed and now I have moved to make enclosure"}, {"post_id": 62748, "ts": "2026-09-06T08:11:34Z", "hours": 2.4153, "text": "Alarm Clock My PCB was ready but since this is my first time in hardware so I didn’t know how to design PCB so all my files become messy so I deleted everything and now I will start from beginning."}, {"post_id": 62448, "ts": "2026-09-05T19:59:23Z", "hours": 1.7358, "text": "Alarm Clock Schematic is completed and PCB design is one-way. This is my first time in hardware so I’m facing a lot of challenges. But I’m sure I can make it."}]...
|
Title: Alarm Clock by @aarav_shrivastava | Stardan Title: Alarm Clock by @aarav_shrivastava | Stardance
Devlogs:
Alarm Clock Schematic is completed and PCB design is one-way. This is my first time in hardware so I’m facing a lot of challenges. But I’m sure I can make it.
Alarm Clock My PCB was ready but since this is my first time in hardware so I didn’t know how to design PCB so all my files become messy so I deleted everything and now I will start from beginning.
Alarm Clock PCB design is completed and now I have moved to make enclosure
Alarm Clock Everything is completed. Now design will be summited soon.
Alarm Clock Added basic firmware.
Alarm Clock Added timer function in clock. For the reviewer - Can you please check my PCB connection. Because this is my first ever PCB design so I’m worried if connections are wrong.
ALARM CLOCK The design and prototype are completed. The final PCB has been designed and ordered, but the components are currently connected using temporary breadboard wiring because the PCB has not been delivered yet. Currently I have used tactical push button because buttons i got from BLARE KIT can be attached to breadboard but i will use BLARE KIT buttons in PCB The final PCB assembly will be completed once the board arrives. For Reviewer: Sorry but my PCB is not delivered but it is expected to be delivered in 2-3 days then I will immediately connect components and ship it.
Ships:
I made a ALARM CLOCK in BLARE MISSION . It is a custom 4-key digital alarm clock built around the Seeed Studio XIAO ESP32-C3, a 2.25-inch ST7789P3 TFT display, four mechanical switches, and a passive buzzer. I designed a custom PCB and a 3D-printed enclosure specifically for the project, along with custom firmware for clock and alarm functions. It is my first hardware project and I learned a lot of things like schematic, PCB designing, 3D enclosure making and many more things. PCB is ordered but its delivery is late and it is expected to be delivered within 2-3 days. Currently I have used breadboard for temporary connections, but when PCB will arrive I will complete it by attaching components to it. Also, currently I have used tactical push buttons instead of mechanical switch I got in BLARE KIT because they can’t be connected in breadboard but I will attach mechanical switch in PCB....
|
1793501602.2953243
|
1793588002.2953243
|
|
17344
|
Privournal by @Manonit | Stardance
|
Manonit
|
2
|
48.0
|
664
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-07T18:09:56Z", "hours": 14.0, "multiplier": 13.4, "payout": 184, "blessing": "neutral", "text": "I made Privournal, a retro CLI application for private journaling and custom text encryption featuring basic ciphers, advanced encryption (Swiption, Randomised, Manual Modes Hehe), and new features like Show Keys and View Account. Pheww you’re gonna love this if you’ve people trying to read your journals 😭 The hardest part was restructuring the whole flow so as to make it less repetitive and cleaner , fixing CLI table alignment glitches, and honestly, if you saw my last ship you’d know that the Swiption feature I made gave me a pretty tough time, Lol. Though I’m really proud of creating a seamless terminal workflow and getting it published live on PyPI as well as GitHub, this is one of the few things I’ve worked on and completed in my life. To test it out, run pip install –upgrade privournal, and type privournal in your terminal, and try encrypting and immediately decrypting a short sentence with or without an account!", "repo": "https://github.com/sermanoire/Privournal", "demo": "https://pypi.org/project/privournal/"}, {"ship_num": 2, "ts": "2026-06-19T01:48:24Z", "hours": 34.0, "multiplier": 17.48, "payout": 480, "blessing": "neutral", "text": "I built Privournal, a command-line journal encryptor that allows users to encrypt and decrypt journal entries locally on their own device. Because for me, someone reading my journal is a legit nightmare, and Privournal is something I can use to keep my digital journals secure. For me that’s a clear quality-of-life improvement : ) Write your journal anywhere (Notes, Notion, etc), paste it into Privournal, get back unreadable text, paste that back into your app. No journal content is ever stored - only the encryption key, and that too locally, if you make an account. To read it yourself you can again head to Privournal and decrypt it! It supports multiple encryption modes, including Basic Encryption, Advanced Encryption, Randomized Encryption, and Swiption - a dynamic encryption system that changes a letter’s cover after a particular number of occurrences, making it impossible to crack. The biggest challenge was implementing Swiption and its decryption logic. Managing occurrence tracking, rotating covers, JSON storage, database integration, and reliable decryption took multiple iterations and a lot of debugging. I also migrated the project from a MySQL-based architecture to SQLite after realizing a shared database conflicted with the goal of being fully offline and private. I’m most proud of turning an idea into a complete, usable package that can be installed through PyPI. I’ve never worked on something so religiously on something of this complexity. The project ended up being over 1400 lines of code and taught me a huge amount about python, databases, GitHub and packaging, debugging, and obviously logical thinking. I’ve never worked on something so religiously on something of this complexity. 3 Major Quality-of-Life Improvements : Zero-setup local encryption - Works completely offline with automatic SQLite database. No server or complicated config needed. Powerful & flexible encryption - Multiple modes + Swiption (dynamic rotating covers) makes it much stronger than simple substitution ciphers. Seamless workflow - Write anywhere -> encrypt -> paste back -> decrypt easily with account or manual key. Perfect for daily journaling : ) Try creating an account (or continue without an account), encrypting a journal entry, saving it, and then decrypting it again. Swiption and Randomised Modes are the most interesting and secure features to experiment with. To test it, run these on terminal : pip install privournal python import MainCode MainCode.start() Thank you so much for reading! : )", "repo": "https://github.com/sermanoire/Privournal", "demo": "https://pypi.org/project/privournal/"}]...
|
[{"post_id": 77627, "ts": "202 [{"post_id": 77627, "ts": "2026-10-07T17:55:59Z", "hours": 2.0183, "text": "Devlog 16! — Okay, NOW It’s Done. 😭 Phew. I thought Privournal was finally finished, but while making the final ASCII recording, I found a bunch of small errors (Some was huge), inconsistencies and table issues that I had to fix. What I worked on: Added two new functions: Show Keys and View Account . Show Keys lets users view all their saved encryption keys. View Account displays their account details neatly in a table. Fixed several encryption and decryption bugs , including issues with journal selection, menu choices and input validation. Fixed problems with database values and journal data being handled incorrectly. Improved table formatting, spacing and alignment throughout the program. Cleaned up various small inconsistencies and errors that appeared during full end-to-end testing. Made the new ASCII recording . There was some old test data already stored, which was causing confusing duplicate entries and messing up the tables. After clearing that out, everything worked properly. And finally… The entire thing worked perfectly. 🎉 Most of this Devlog was about fixing the small things rather than adding huge new features, but it made Privournal more consistent and reliable."}, {"post_id": 77302, "ts": "2026-10-06T14:14:50Z", "hours": 6.5342, "text": "Devlog 15! It’s done. Phew. Finally, Privournal is DONE. Complete, everything’s perfect. In this final version I’ve made so many improvements! Instead of using time.sleep() to give pauses/time to copy the details, now the users can copy and paste encrypted text and its key without a time limit, and then they can simply press Enter to move ahead. I also made HUGE changes to the code. Earlier, the code used to run and at multiple steps ask for login/signup, which was fine but it was confusing. Now the first page is for login/signup, then the rest of the code flows smoothly accordingly. This restructuring required writing many parts of the code again and breaking a lot of functions into 2 parts. I also renamed some variables. I also worked on spacing and formatting. Now the user details are printed cleanly in a table. Overall, the code outputs are much more uniform. I made a new ASCII recording. It is yet to be updated on my GitHub, though. I’ve also published this new version on PyPI. If you had already installed Privournal, you can just update it. Now the main thing. I’m going to make a Website for Privournal where users wouldn’t need to install anything and can just go straight to encrypting or decrypting their journals. This version will still exist, though. It’ll be a rather Retro CLI version for people who like it this way. Phew. I’ll work on that now."}, {"post_id": 15049, "ts": "2026-06-24T13:23:31Z", "hours": 5.1881, "text": "##Devlog #14 - The Reviewer Arc 🥲 . Well… . The reviewer found some issues 😭 . So I went back and tested basically the ENTIRE project again. . While testing, I found and fixed a bunch of errors, especially in Advanced Encryption. I also added a lot of fallback checks throughout the code so Privournal doesn’t randomly decide to crash anymore 😭 . I also improved the decryption flow. . Earlier users had to select journals using IDs, now they can simply choose them by name, which feels way cleaner. . Another addition was a user guide in menu. I was short on time and it was a no brainer, so I used Claude to help generate the guide content and then integrated it into Privournal. The goal was simply to make the different encryption modes easier to understand :) . Apart from code changes, I also polished the project page, uploaded a sample flowchart, improved formatting and timing, and recorded a completely new asciinema demo PLUS I updated the README too. . Then came final testing, packaging, uploading the latest release, and requesting review again 🤞🏻 . Hopefully Privournal passes thru this time 😭 . Thank you : )"}, {"post_id": 11681, "ts": "2026-06-19T01:11:08Z", "hours": 16.0992, "text": "Devlog #13 - IT’S DONE DONE! The Final Chapter. FINALLY. After two intense days and 16+ hours of grinding, Privournal is officially complete and ready for Stardance! 😭🎉 OH AND Yeah, it’s been two days - Long time no see 😭 . Sorry for disappearing without posting Devlog #13 🥲 . These last 16+ hours were so packed with debugging, packaging, testing, and polishing that I kept postponing the devlog. So this one covers the entire final stretch. . Btw hey I’ll upload the clean Flowchart on Git repo, and yk I was gonna write a LOT here with complete details, but damn there’s a limit. Well it’s oki i’ll add a list of all my devlogs to the repo too :) What Happened? I thought Devlog #12 was the “everything works” moment, but the final stretch turned out to be the work. Audited every function in the codebase Fixed dozens of lingering bugs Cleaned up the entire code Updated the README 10+ times Set up PyPI packaging and releases Recorded asciinema demos (Took enormous time 😭) Added prettier output/interface functions Tested every scenario I could think of Major Change: MySQL → SQLite One of the biggest changes was moving away from MySQL. . Originally, Privournal used MySQL with accounts and a shared database. Later I realized that requires a server, hosting, maintenance, and introduces privacy concerns. . So I redesigned everything around SQLite. . Benefits: Fully offline More private Easier installation Simpler deployment Probably the biggest architectural change in the entire project. Biggest Bugs Fixed Login/signup flow issues Missing database commits Foreign key linking problems JSON serialization/loading bugs The infamous “extra spaces everywhere” decryption bug Variable scope and traversal issues Randomised Mode integration By the end of Day 1, the core encryption/decryption system was finally reliable. The Swiption Demon 😭 Swiption and SwipDe took forever. . The idea sounds simple: letters rotate through multiple covers after a certain number of occurrences. . Actually implementing occurrence tracking, rotation logic, life values, multiple dictionaries, JSON storage, and decryption logic nearly broke my brain 😭 . The funniest part? . After hours of struggling I realized I had overcomplicated everything. Since every cover uniquely maps to a letter, I could simply search through the dictionaries instead of tracking a ton of extra information. LIKE DAMN. Swiption is now fully functional and ended up becoming my coolest feature in the project. Packaging & Shipping Cleaned up the repository Improved README and documentation Fixed PyPI packaging issues Tested in fresh virtual environments Published releases Recorded final demos ✨ Project Complete Privournal is now a real, usable command-line journal encryptor. Thanks to: My brother for catching early logic flaws GPT for quick syntax rescues Everyone who followed the devlogs And myself for not giving up 😭 **Privournal is shipped and ready for Stardance! ** I’d love your feedback once you try it. . This project taught me something exams never did : . Working religiously on something with all your heart to make it real. . Thank you for reading all 13 devlogs ❤️ . ✨ See you in the next project ✨ | Project Complete | Ready to Submit | 🎉"}, {"post_id": 10031, "ts": "2026-06-16T16:23:14Z", "hours": 1.6072, "text": "Devlog #12 - IT WORKS! FINALLY! After an hour of debugging, EVERYTHING WORKS! -Encryption -Decryption -Uploading to & Fetching from the Database -Sign Up -Login . The only things that aren’t fully working yet are Swiption and Random Mode, and honestly that’s on me 😭. I got way too focused on making everything else work first AND GOD I had to improvise whole sections of the decryption logic, you won’t believe it. . If you compare the code I committed before this and the code I committed today, I had to improvise so much! . I removed and added so much. My old decryption was code wrong, I mean the logic was on point but the syntax and a few other things were off that’s why it wasn’t working. . Some of the errors were genuinely silly, again 😅 . All my elifs somehow had the same condition, and people this is why you don’t copy paste conditions to save time (I still don’t know how I missed that) 🥲 . My traversal i was a string, and I kept accidentally treating it like an int iterator, I mean ugh. . A lot of bugs were literally sitting right in front of my eyes. . Some bugs were much bigger tho. One of the weirdest happened after I finally got decryption working - The decrypted text had way too many spaces between words. . After staring at it for a while, I noticed that the number of spaces was exactly the same as the number of unique letters in the text. That’s when it hit me - the loop was continuing to run even after finding a match. Few “breaks” later hehe, everything worked 😭 . After Swiption and Random Mode, those 2 really aren’t done right now, I’m sorry I type so slow 😭 . Yeah so after that I’ll focus on making the code look real pretty, like -Fixing my silly variable names -Comment notes ig? -Better spacing and formatting -Cleaning up extra files -Writing a proper README and project description . And yes… On the 13th Devlog, the project will be done done 🤞🏻 . Note : I improvised all my previous devlogs, with proper format so that it’s easier to read, you can tell me if it’s better 🙃 . See you in the next one!"}, {"post_id": 9530, "ts": "2026-06-15T22:02:49Z", "hours": 3.1286, "text": "Devlog #11 - First Successful Test! Let’s go!!! . First successful test done 😇 . The database fetching works, the encryption flow works - it wasn’t working earlier tho (And I spent an hour finding errors, like i’d run it again n again and also ended up rewriting portions, like my Advanced Encyption code was all messed up 😭) . But yes, now it’s working, i’m sure there are a couple more errors but i’m on my way to fix em! . And yk some of the errors were so silly - I had written input(“Enter cover for”,x), and damn i failed to realise what the issue was. . Then after a lot of trying I asked GPT and it said it’s cuz input() can only have one argument in the braces 😅 . A lot of other errors too were like me getting all confused btw variable names, function not being global and so on. . But yeah, one at a time i fixed em, fixed the code and now only the refining of the code and some other bugs remain. . And um I had said i’d do it in 10 devlogs, but ah now it looks like 12th would be the last one. . But hey, the more the better, ig? 😭 . See ya in the next devlog!"}, {"post_id": 9123, "ts": "2026-06-15T08:21:26Z", "hours": 4.0792, "text": "Devlog #10 - A Slight Setback This is going to be the biggest devlog. And this one’s gonna be a disappointing one 🥲 . First of all, I was talking to my brother and he asked such a good question - It pointed to a flaw which I didn’t notice at all. . Let’s say there’s a word “am” in the journal, a’s cover is 1 and m’s cover is 27 (so am = 127). Now cuz there’s not spacing the decryption code will actually traverse thru each of number at a time in the encrypted text (127), so it’ll literally convert 1 and then 2 and then 7 separately. This was such a major flaw in my logic and I’m still agonizing internally over the fact that my eyes missed it. . But ah it’s ok, I’m fixing that by simply making adding a trailing space after the cover to separate each letter’s cover. . There was so much running and errors and staring at screen and all that. . Another thing I noticed is that in Advanced Encryption when the user will choose covers for 52 letters, he might accidentally repeat a cover - which obvi will make it impossible to distinguish btw 2 letters. So I gotta add each cover to a list and then every time the user adds a cover i’ll see if it’s already there in the list or not. . Now these flaws I got to know when I was talking to my brother, and it was past midnight. So almost immediately after waking up I was onto fixing these flaws, and it’s in progress :) . Apart from that, I’ve been refining the code (Found some silly errors in functions) and fixing more logic issues. . Earlier the Encryption Key that I was using to decrypt, it was a dictionary - with the keys as letters and values as the cover. So before uploading them to the db table, I converted them into text. But then while fixing decryption code, I did tried dict(the string key) and later found out that it all doesn’t work like that, the syntax. . I checked online, asked GPT, he suggested that I use the json module, and so I did. Json made it pretty easy, now the conversion was smooth and 2 liner. . Also I fixed all the login/signup system, it works as smooth as butter now Hehe . I’d say the main issue wasn’t the code it was following where am I. . Like cuz there are so many functions and steps and paths that I was getting overwhelmed (plus the code is like 600 lines), so I basically carefully went thru each line of code and arranged each function in an order and side by side made the final flowchart (It made following the code super easy and looks cool tbh) - But yes that’s hectic work right there. . Now after all that… Does the code run? HELL NO IT DOESNT! . It’s still showing 21 errors 😭 Plus, Swiption’s still left. . So right now, I’m trying to fix the flaws and errors and get this code up and running without Swiption, once it is smooth then at the end I can code Swiption into it. . See ya in the next devlog!"}, {"post_id": 8726, "ts": "2026-06-14T14:26:44Z", "hours": 1.1836, "text": "Devlog #9 - This was unexpected… Turns out there were some issues in the decryption function. It completely ignored spaces while decrypting, which definitely wasn’t ideal 😭 . I’ve fixed that tho. . Also I remade the tables in database with much more info such as date of encryption and email (for forgot password purposes) . And this code was getting too long, like more than 400 lines long. . So, I’ve started splitting things into different files to keep everything organized. Db code has its own file, big functions like AdvEn() have their own file, and the same goes for Swiption and Random Encryption logic. . Target’s to finish the code tonight. . Thanks for reading!"}, {"post_id": 8602, "ts": "2026-06-14T09:32:39Z", "hours": 1.1364, "text": "Devlog #8 - The Eights. . So this would be Privournal’s 8th devlog, and this one feels kinda special :) . My birthday falls on an 8th too, and I just love the number 8. . Anyways, I was actually supposed to be done with the Swiption feature by now, but I just couldn’t help myself and started working on the Random Encryption feature. . Reason’s that it just came to me - . Why not make Random Encryption available for both Advanced Encryption AND Swiption too?? . This would make the whole Encryption process super fast if some user doesn’t want to manually encrypt each letter. So I’m onto that, then I’ll immediately look into Swiption. . Then finally I’ll refine the whole code and just go through all the variables, functions and rename them if needed (I’m one of those people who name the variable something silly and forget what it was for 😭) . I’ve also started mapping out the overall visual flow of Privournal cuz it was getting a bit confusing. . I’m thinking abt wrapping this project up in about 12 devlogs, and then launching it. . You can also check out the GitHub - I’ve been committing code changes on it regularly :) . Thanks for reading!"}, {"post_id": 8359, "ts": "2026-06-13T21:56:30Z", "hours": 1.7153, "text": "Devlog #7 - Almost There! Only the Swiption feature remains! . I’ve also been thinking about adding another cool feature where the covers are randomly chosen using Python’s random module. The idea is that it’ll be added in Custom Encryption. . Also, my bad 😭 . I sometimes refered to the Custom Encryption as Advanced Encrytion, that might confuse you - but i’ll be consistent with names now. It’s just that it’s the start and so many features and ideas just mush into my head 🙃 . Once Swiption is done, the Python version should basically be mostly complete, and then it’ll be time for da next step . Getting all this on a website, tho that is gonna be really difficult for me, I really don’t know how to make websites 🥲. . Not gonna lie, that part scares me a a lot cuz I don’t wanna use AI for the website 😭 . I really don’t know much about web development, but I guess that’s part of building a project. You learn whatever you need as you go. . Thank you so much for reading these devlogs tho :) . Hopefully tmrw the code will be done and I’ll be one step closer to completing Privournal!"}, {"post_id": 8152, "ts": "2026-06-13T16:24:59Z", "hours": 1.0783, "text": "Devlog #6 - Advanced Encryption! Pheww, this part took some effort! . Today I worked on the main encryption logic for Advanced Encryption, and after a lot of thinking, coding, testing, and rethinking, I finally got the foundation for it down :) . This is one of the core features of Privournal, so it feels really good seeing it slowly come together. . That said, this is only a small win . The real challenge is gonna be the “Swiption” feature. Bet Swiption is gonna take half my brain cells 😭"}, {"post_id": 8096, "ts": "2026-06-13T14:51:13Z", "hours": 0.4681, "text": "Devlog #5 - Database Established! . Now the basic outline has to be perfected, with each and every thing being functional. . After spending some time figuring out SQL, databases, connections, and all that stuff, I finally managed to get Python talking to the database successfully :) . Seeing actual records being fetched felt pretty satisfying not gonna lie. For now, the goal’s Add features and make everything functional Connect everything together Improve the overall structure On the way to do that!"}, {"post_id": 8033, "ts": "2026-06-13T12:07:47Z", "hours": 0.9758, "text": "Devlog #4 - Still on the Db thing . Hehe, my highschool Python-SQL interface notes are coming in handy! . When I was studying this stuff, I honestly didn’t think I’d ever end up using most of it cuz it seemed too basic Turns out I was wrong :) . Since Privournal is gonna need a database for account credentials and all that, I’ve started revising my old notes and figuring out how everything fits together. . Let’s see how this goes!"}, {"post_id": 7690, "ts": "2026-06-12T21:00:25Z", "hours": 0.6611, "text": "Devlog #3 - The Plan’s Shape Guys! . Errors fixed and a basic outline has been made (This time on a paper Hehe) . AND i’ve thought about how i’m gonna go about it! . I’ve also spent some time thinking about how I’m actually gonna build this thing. . I’ll have to make a sql database ig (For account credentials and encryption details) and link it to my python code. I’m still new so i’m not sure if the sql database method for keeping records is how the real companies operate, but still seems pretty nice. . And I mean these are journals that we’re talking about, - so security and privacy matter a lot. . Tho my whole idea and code is that the actual journal entry is never stored. Only the encryption sequence and logic is. . That way, even if some dummy somehow got access to the database, they wouldn’t find the journal itself (Hehe can’t outsmart me) . For now, the plan pretty clear: Finish the Python main code Get encryption working properly Add database support Convert it into a website Well, that’s it ig. . I’m gonna go and tmrw complete the whole thing in python and then yes - hopefully convert it into a website :)"}, {"post_id": 7639, "ts": "2026-06-12T19:21:01Z", "hours": 0.9731, "text": "Devlog #2 - The First Error and an Outline . Ran into the first error, phewww! . Honestly, had it coming - things were going way too smoothly for a rather newbie like me 😭 . I was working on the account system and trying to get the signup and login flow working when I hit the error. I also created a basic outline of flow (In my mind 😅) . Spent a good chunk of time staring, retracing my code, and trying to figure out what exactly I had written wrong. But yes, I’m on it!"}, {"post_id": 7568, "ts": "2026-06-12T17:29:14Z", "hours": 0.5239, "text": "Devlog #1 - The Beginning . Today wasn’t about building features but about getting everything ready. . I finished setting up the Github thing (Took me an hour lol), cleaned things up, and wrote the first version of the README. . It might not seem like much, but damn did it feel so hectic, maybe cuz it’s my first time working on a real software project :) . After the setup, I finally started writing the core code. . Right now it’s just the foundation and an outline that I’ve set out to achieve :) . The journey begins!"}]...
|
Title: Privournal by @Manonit | Stardance
Devlogs Title: Privournal by @Manonit | Stardance
Devlogs:
Devlog #1 - The Beginning . Today wasn’t about building features but about getting everything ready. . I finished setting up the Github thing (Took me an hour lol), cleaned things up, and wrote the first version of the README. . It might not seem like much, but damn did it feel so hectic, maybe cuz it’s my first time working on a real software project :) . After the setup, I finally started writing the core code. . Right now it’s just the foundation and an outline that I’ve set out to achieve :) . The journey begins!
Devlog #2 - The First Error and an Outline . Ran into the first error, phewww! . Honestly, had it coming - things were going way too smoothly for a rather newbie like me 😭 . I was working on the account system and trying to get the signup and login flow working when I hit the error. I also created a basic outline of flow (In my mind 😅) . Spent a good chunk of time staring, retracing my code, and trying to figure out what exactly I had written wrong. But yes, I’m on it!
Devlog #3 - The Plan’s Shape Guys! . Errors fixed and a basic outline has been made (This time on a paper Hehe) . AND i’ve thought about how i’m gonna go about it! . I’ve also spent some time thinking about how I’m actually gonna build this thing. . I’ll have to make a sql database ig (For account credentials and encryption details) and link it to my python code. I’m still new so i’m not sure if the sql database method for keeping records is how the real companies operate, but still seems pretty nice. . And I mean these are journals that we’re talking about, - so security and privacy matter a lot. . Tho my whole idea and code is that the actual journal entry is never stored. Only the encryption sequence and logic is. . That way, even if some dummy somehow got access to the database, they wouldn’t find the journal itself (Hehe can’t outsmart me) . For now, the plan pretty clear: Finish the Python main code Get encryption working properly Add database support Convert it into a website Well, that’s it ig. . I’m gonna go and tmrw complete the whole thing in python and then yes - hopefully convert it into a website :)
Devlog #4 - Still on the Db thing . Hehe, my highschool Python-SQL interface notes are coming in handy! . When I was studying this stuff, I honestly didn’t think I’d ever end up using most of it cuz it seemed too basic Turns out I was wrong :) . Since Privournal is gonna need a database for account credentials and all that, I’ve started revising my old notes and figuring out how everything fits together. . Let’s see how this goes!
Devlog #5 - Database Established! . Now the basic outline has to be perfected, with each and every thing being functional. . After spending some time figuring out SQL, databases, connections, and all that stuff, I finally managed to get Python talking to the database successfully :) . Seeing actual records being fetched felt pretty satisfying not gonna lie. For now, the goal’s Add features and make everything functional Connect everything together Improve the overall structure On the way to do that!
Devlog #6 - Advanced Encryption! Pheww, this part took some effort! . Today I worked on the main encryption logic for Advanced Encryption, and after a lot of thinking, coding, testing, and rethinking, I finally got the foundation for it down :) . This is one of the core features of Privournal, so it feels really good seeing it slowly come together. . That said, this is only a small win . The real challenge is gonna be the “Swiption” feature. Bet Swiption is gonna take half my brain cells 😭
Devlog #7 - Almost There! Only the Swiption feature remains! . I’ve also been thinking about adding another cool feature where the covers are randomly chosen using Python’s random module. The idea is that it’ll be added in Custom Encryption. . Also, my bad 😭 . I sometimes refered to the Custom Encryption as Advanced Encrytion, that might confuse you - but i’ll be consistent with names now. It’s just that it’s the start and so many features and ideas just mush into my head 🙃 . Once Swiption is done, the Python version should basically be mostly complete, and then it’ll be time for da next step . Getting all this on a website, tho that is gonna be really difficult for me, I really don’t know how to make websites 🥲. . Not gonna lie, that part scares me a a lot cuz I don’t wanna use AI for the website 😭 . I really don’t know much about web development, but I guess that’s part of building a project. You learn whatever you need as you go. . Thank you so much for reading these devlogs tho :) . Hopefully tmrw the code will be done and I’ll be one step closer to completing Privournal!
Devlog #8 - The Eights. . So this would be Privournal’s 8th devlog, and this one feels kinda special :) . My birthday falls on an 8th too, and I just love the number 8. . Anyways, I was actually supposed to be done with the Swiption feature by now, but I just couldn’t help myself and started working on the Random Encryption feature. . Reason’s that it just came to me - . Why not make Random Encryption available for both Advanced Encryption AND Swiption too?? . This would make the whole Encryption process super fast if some user doesn’t want to manually encrypt each letter. So I’m onto that, then I’ll immediately look into Swiption. . Then finally I’ll refine the whole code and just go through all the variables, functions and rename them if needed (I’m one of those people who name the variable something silly and forget what it was for 😭) . I’ve also started mapping out the overall visual flow of Privournal cuz it was getting a bit confusing. . I’m thinking abt wrapping this project up in about 12 devlogs, and then launching it. . You can also check out the GitHub - I’ve been committing code changes on it regularly :) . Thanks for reading!
Devlog #9 - This was unexpected… Turns out there were some issues in the decryption function. It completely ignored spaces while decrypting, which definitely wasn’t ideal 😭 . I’ve fixed that tho. . Also I remade the tables in database with much more info such as date of encryption and email (for forgot password purposes) . And this code was getting too long, like more than 400 lines long. . So, I’ve started splitting things into different files to keep everything organized. Db code has its own file, big functions like AdvEn() have their own file, and the same goes for Swiption and Random Encryption logic. . Target’s to finish the code tonight. . Thanks for reading!
Devlog #10 - A Slight Setback This is going to be the biggest devlog. And this one’s gonna be a disappointing one 🥲 . First of all, I was talking to my brother and he asked such a good question - It pointed to a flaw which I didn’t notice at all. . Let’s say there’s a word “am” in the journal, a’s cover is 1 and m’s cover is 27 (so am = 127). Now cuz there’s not spacing the decryption code will actually traverse thru each of number at a time in the encrypted text (127), so it’ll literally convert 1 and then 2 and then 7 separately. This was such a major flaw in my logic and I’m still agonizing internally over the fact that my eyes missed it. . But ah it’s ok, I’m fixing that by simply making adding a trailing space after the cover to separate each letter’s cover. . There was so much running and errors and staring at screen and all that. . Another thing I noticed is that in Advanced Encryption when the user will choose covers for 52 letters, he might accidentally repeat a cover - which obvi will make it impossible to distinguish btw 2 letters. So I gotta add each cover to a list and then every time the user adds a cover i’ll see if it’s already there in the list or not. . Now these flaws I got to know when I was talking to my brother, and it was past midnight. So almost immediately after waking up I was onto fixing these flaws, and it’s in progress :) . Apart from that, I’ve been refining the code (Found some silly errors in functions) and fixing more logic issues. . Earlier the Encryption Key that I was using to decrypt, it was a dictionary - with the keys as letters and values as the cover. So before uploading them to the db table, I converted them into text. But then while fixing decryption code, I did tried dict(the string key) and later found out that it all doesn’t work like that, the syntax. . I checked online, asked GPT, he suggested that I use the json module, and so I did. Json made it pretty easy, now the conversion was smooth and 2 liner. . Also I fixed all the login/signup system, it works as smooth as butter now Hehe . I’d say the main issue wasn’t the code it was following where am I. . Like cuz there are so many functions and steps and paths that I was getting overwhelmed (plus the code is like 600 lines), so I basically carefully went thru each line of code and arranged each function in an order and side by side made the final flowchart (It made following the code super easy and looks cool tbh) - But yes that’s hectic work right there. . Now after all that… Does the code run? HELL NO IT DOESNT! . It’s still showing 21 errors 😭 Plus, Swiption’s still left. . So right now, I’m trying to fix the flaws and errors and get this code up and running without Swiption, once it is smooth then at the end I can code Swiption into it. . See ya in the next devlog!
Devlog #11 - First Successful Test! Let’s go!!! . First successful test done 😇 . The database fetching works, the encryption flow works - it wasn’t working earlier tho (And I spent an hour finding errors, like i’d run it again n again and also ended up rewriting portions, like my Advanced Encyption code was all messed up 😭) . But yes, now it’s working, i’m sure there are a couple more errors but i’m on my way to fix em! . And yk some of the errors were so silly - I had written input(“Enter cover for”,x), and damn i failed to realise what the issue was. . Then after a lot of trying I asked GPT and it said it’s cuz input() can only have one argument in the braces 😅 . A lot of other errors too were like me getting all confused btw variable names, function not being global and so on. . But yeah, one at a time i fixed em, fixed the code and now only the refining of the code and some other bugs remain. . And um I had said i’d do it in 10 devlogs, but ah now it looks like 12th would be the last one. . But hey, the more the better, ig? 😭 . See ya in the next devlog!
Devlog #12 - IT WORKS! FINALLY! After an hour of debugging, EVERYTHING WORKS! -Encryption -Decryption -Uploading to & Fetching from the Database -Sign Up -Login . The only things that aren’t fully working yet are Swiption and Random Mode, and honestly that’s on me 😭. I got way too focused on making everything else work first AND GOD I had to improvise whole sections of the decryption logic, you won’t believe it. . If you compare the code I committed before this and the code I committed today, I had to improvise so much! . I removed and added so much. My old decryption was code wrong, I mean the logic was on point but the syntax and a few other things were off that’s why it wasn’t working. . Some of the errors were genuinely silly, again 😅 . All my elifs somehow had the same condition, and people this is why you don’t copy paste conditions to save time (I still don’t know how I missed that) 🥲 . My traversal i was a string, and I kept accidentally treating it like an int iterator, I mean ugh. . A lot of bugs were literally sitting right in front of my eyes. . Some bugs were much bigger tho. One of the weirdest happened after I finally got decryption working - The decrypted text had way too many spaces between words. . After staring at it for a while, I noticed that the number of spaces was exactly the same as the number of unique letters in the text. That’s when it hit me - the loop was continuing to run even after finding a match. Few “breaks” later hehe, everything worked 😭 . After Swiption and Random Mode, those 2 really aren’t done right now, I’m sorry I type so slow 😭 . Yeah so after that I’ll focus on making the code look real pretty, like -Fixing my silly variable names -Comment notes ig? -Better spacing and formatting -Cleaning up extra files -Writing a proper README and project description . And yes… On the 13th Devlog, the project will be done done 🤞🏻 . Note : I improvised all my previous devlogs, with proper format so that it’s easier to read, you can tell me if it’s better 🙃 . See you in the next one!
Devlog #13 - IT’S DONE DONE! The Final Chapter. FINALLY. After two intense days and 16+ hours of grinding, Privournal is officially complete and ready for Stardance! 😭🎉 OH AND Yeah, it’s been two days - Long time no see 😭 . Sorry for disappearing without posting Devlog #13 🥲 . These last 16+ hours were so packed with debugging, packaging, testing, and polishing that I kept postponing the devlog. So this one covers the entire final stretch. . Btw hey I’ll upload the clean Flowchart on Git repo, and yk I was gonna write a LOT here with complete details, but damn there’s a limit. Well it’s oki i’ll add a list of all my devlogs to the repo too :) What Happened? I thought Devlog #12 was the “everything works” moment, but the final stretch turned out to be the work. Audited every function in the codebase Fixed dozens of lingering bugs Cleaned up the entire code Updated the README 10+ times Set up PyPI packaging and releases Recorded asciinema demos (Took enormous time 😭) Added prettier output/interface functions Tested every scenario I could think of Major Change: MySQL → SQLite One of the biggest changes was moving away from MySQL. . Originally, Privournal used MySQL with accounts and a shared database. Later I realized that requires a server, hosting, maintenance, and introduces privacy concerns. . So I redesigned everything around SQLite. . Benefits: Fully offline More private Easier installation Simpler deployment Probably the biggest architectural change in the entire project. Biggest Bugs Fixed Login/signup flow issues Missing database commits Foreign key linking problems JSON serialization/loading bugs The infamous “extra spaces everywhere” decryption bug Variable scope and traversal issues Randomised Mode integration By the end of Day 1, the core encryption/decryption system was finally reliable. The Swiption Demon 😭 Swiption and SwipDe took forever. . The idea sounds simple: letters rotate through multiple covers after a certain number of occurrences. . Actually implementing occurrence tracking, rotation logic, life values, multiple dictionaries, JSON storage, and decryption logic nearly broke my brain 😭 . The funniest part? . After hours of struggling I realized I had overcomplicated everything. Since every cover uniquely maps to a letter, I could simply search through the dictionaries instead of tracking a ton of extra information. LIKE DAMN. Swiption is now fully functional and ended up becoming my coolest feature in the project. Packaging & Shipping Cleaned up the repository Improved README and documentation Fixed PyPI packaging issues Tested in fresh virtual environments Published releases Recorded final demos ✨ Project Complete Privournal is now a real, usable command-line journal encryptor. Thanks to: My brother for catching early logic flaws GPT for quick syntax rescues Everyone who followed the devlogs And myself for not giving up 😭 **Privournal is shipped and ready for Stardance! ** I’d love your feedback once you try it. . This project taught me something exams never did : . Working religiously on something with all your heart to make it real. . Thank you for reading all 13 devlogs ❤️ . ✨ See you in the next project ✨ | Project Complete | Ready to Submit | 🎉
##Devlog #14 - The Reviewer Arc 🥲 . Well… . The reviewer found some issues 😭 . So I went back and tested basically the ENTIRE project again. . While testing, I found and fixed a bunch of errors, especially in Advanced Encryption. I also added a lot of fallback checks throughout the code so Privournal doesn’t randomly decide to crash anymore 😭 . I also improved the decryption flow. . Earlier users had to select journals using IDs, now they can simply choose them by name, which feels way cleaner. . Another addition was a user guide in menu. I was short on time and it was a no brainer, so I used Claude to help generate the guide content and then integrated it into Privournal. The goal was simply to make the different encryption modes easier to understand :) . Apart from code changes, I also polished the project page, uploaded a sample flowchart, improved formatting and timing, and recorded a completely new asciinema demo PLUS I updated the README too. . Then came final testing, packaging, uploading the latest release, and requesting review again 🤞🏻 . Hopefully Privournal passes thru this time 😭 . Thank you : )
Devlog 15! It’s done. Phew. Finally, Privournal is DONE. Complete, everything’s perfect. In this final version I’ve made so many improvements! Instead of using time.sleep() to give pauses/time to copy the details, now the users can copy and paste encrypted text and its key without a time limit, and then they can simply press Enter to move ahead. I also made HUGE changes to the code. Earlier, the code used to run and at multiple steps ask for login/signup, which was fine but it was confusing. Now the first page is for login/signup, then the rest of the code flows smoothly accordingly. This restructuring required writing many parts of the code again and breaking a lot of functions into 2 parts. I also renamed some variables. I also worked on spacing and formatting. Now the user details are printed cleanly in a table. Overall, the code outputs are much more uniform. I made a new ASCII recording. It is yet to be updated on my GitHub, though. I’ve also published this new version on PyPI. If you had already installed Privournal, you can just update it. Now the main thing. I’m going to make a Website for Privournal where users wouldn’t need to install anything and can just go straight to encrypting or decrypting their journals. This version will still exist, though. It’ll be a rather Retro CLI version for people who like it this way. Phew. I’ll work on that now.
Devlog 16! — Okay, NOW It’s Done. 😭 Phew. I thought Privournal was finally finished, but while making the final ASCII recording, I found a bunch of small errors (Some was huge), inconsistencies and table issues that I had to fix. What I worked on: Added two new functions: Show Keys and View Account . Show Keys lets users view all their saved encryption keys. View Account displays their account details neatly in a table. Fixed several encryption and decryption bugs , including issues with journal selection, menu choices and input validation. Fixed problems with database values and journal data being handled incorrectly. Improved table formatting, spacing and alignment throughout the program. Cleaned up various small inconsistencies and errors that appeared during full end-to-end testing. Made the new ASCII recording . There was some old test data already stored, which was causing confusing duplicate entries and messing up the tables. After clearing that out, everything worked properly. And finally… The entire thing worked perfectly. 🎉 Most of this Devlog was about fixing the small things rather than adding huge new features, but it made Privournal more consistent and reliable.
Ships:
I built Privournal, a command-line journal encryptor that allows users to encrypt and decrypt journal entries locally on their own device. Because for me, someone reading my journal is a legit nightmare, and Privournal is something I can use to keep my digital journals secure. For me that’s a clear quality-of-life improvement : ) Write your journal anywhere (Notes, Notion, etc), paste it into Privournal, get back unreadable text, paste that back into your app. No journal content is ever stored - only the encryption key, and that too locally, if you make an account. To read it yourself you can again head to Privournal and decrypt it! It supports multiple encryption modes, including Basic Encryption, Advanced Encryption, Randomized Encryption, and Swiption - a dynamic encryption system that changes a letter’s cover after a particular number of occurrences, making it impossible to crack. The biggest challenge was implementing Swiption and its decryption logic. Managing occurrence tracking, rotating covers, JSON storage, database integration, and reliable decryption took multiple iterations and a lot of debugging. I also migrated the project from a MySQL-based architecture to SQLite after realizing a shared database conflicted with the goal of being fully offline and private. I’m most proud of turning an idea into a complete, usable package that can be installed through PyPI. I’ve never worked on something so religiously on something of this complexity. The project ended up being over 1400 lines of code and taught me a huge amount about python, databases, GitHub and packaging, debugging, and obviously logical thinking. I’ve never worked on something so religiously on something of this complexity. 3 Major Quality-of-Life Improvements : Zero-setup local encryption - Works completely offline with automatic SQLite database. No server or complicated config needed. Powerful & flexible encryption - Multiple modes + Swiption (dynamic rotating covers) makes it much stronger than simple substitution ciphers. Seamless workflow - Write anywhere -> encrypt -> paste back -> decrypt easily with account or manual key. Perfect for daily journaling : ) Try creating an account (or continue without an account), encrypting a journal entry, saving it, and then decrypting it again. Swiption and Randomised Modes are the most interesting and secure features to experiment with. To test it, run these on terminal : pip install privournal python import MainCode MainCode.start() Thank you so much for reading! : )
I made Privournal, a retro CLI application for private journaling and custom text encryption featuring basic ciphers, advanced encryption (Swiption, Randomised, Manual Modes Hehe), and new features like Show Keys and View Account. Pheww you’re gonna love this if you’ve people trying to read your journals 😭 The hardest part was restructuring the whole flow so as to make it less repetitive and cleaner , fixing CLI table alignment glitches, and honestly, if you saw my last ship you’d know that the Swiption feature I made gave me a pretty tough time, Lol. Though I’m really proud of creating a seamless terminal workflow and getting it published live on PyPI as well as GitHub, this is one of the few things I’ve worked on and completed in my life. To test it out, run pip install –upgrade privournal, and type privournal in your terminal, and try encrypting and immediately decrypting a short sentence with or without an account!...
|
1793501608.4317052
|
1793588008.4317052
|
|
8455
|
Wills Bot! by @Gooderswills | Stardance
|
Gooderswills
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T12:54:56Z", "hours": 0.0, "multiplier": 1.3, "payout": 0, "blessing": "neutral", "text": "I followed the slack bot tutorial, added some new commands and used javascript and ssh’d into a server for the first time. This is my first project", "repo": "https://github.com/Gooderswills/Wbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0266FRGV"}]...
|
[{"post_id": 3708, "ts": "2026 [{"post_id": 3708, "ts": "2026-06-06T19:18:17Z", "hours": 0.3494, "text": "I followed the tutorial completely, got the bot on a nest server and now it is fully functional on slack, I also added another command to it and then updated the server with the new code reflected"}]...
|
Title: Wills Bot! by @Gooderswills | Stardance
De Title: Wills Bot! by @Gooderswills | Stardance
Devlogs:
I followed the tutorial completely, got the bot on a nest server and now it is fully functional on slack, I also added another command to it and then updated the server with the new code reflected
Ships:
I followed the slack bot tutorial, added some new commands and used javascript and ssh’d into a server for the first time. This is my first project...
|
1793501615.5839953
|
1793588015.5839953
|
|
16190
|
Apollo mission simulator by @prajithvishnur | Star Apollo mission simulator by @prajithvishnur | Stardance...
|
prajithvishnur
|
1
|
1.0
|
15
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T02:48:52Z", "hours": 1.0, "multiplier": 15.2, "payout": 15, "blessing": "neutral", "text": "I think I have finished version one of the game. I am now going to ship. I hope you all enjoy it, and I can’t wait for the feedback!!!", "repo": "https://github.com/prajith-vishnu/apollo13-mission-critical", "demo": "https://prajith-vishnu.github.io/apollo13-mission-critical/"}]...
|
[{"post_id": 8891, "ts": "2026 [{"post_id": 8891, "ts": "2026-06-14T20:06:57Z", "hours": 0.5925, "text": "Got a lot of scenarios for the game built. It’s going pretty well, also hosting it on git."}, {"post_id": 6893, "ts": "2026-06-11T15:40:09Z", "hours": 0.3906, "text": "created a start screen that i think looks rlly cool. hope to turn this into an awesome space game."}]...
|
Title: Apollo mission simulator by @prajithvishnur Title: Apollo mission simulator by @prajithvishnur | Stardance
Devlogs:
created a start screen that i think looks rlly cool. hope to turn this into an awesome space game.
Got a lot of scenarios for the game built. It’s going pretty well, also hosting it on git.
Ships:
I think I have finished version one of the game. I am now going to ship. I hope you all enjoy it, and I can’t wait for the feedback!!!...
|
1793501625.2971394
|
1793588025.2971394
|
|
22958
|
Tung tung tung sahur by @Arjav | Stardance
|
Arjav
|
1
|
4.23
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T11:30:00Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Ship message", "repo": "https://github.com/arjav0703/site", "demo": "https://www.youtube.com/watch?v=G9-pi6_15fI"}]...
|
[{"post_id": 37126, "ts": "202 [{"post_id": 37126, "ts": "2026-07-29T16:45:31Z", "hours": 0.8603, "text": "sahur"}, {"post_id": 21418, "ts": "2026-07-03T10:59:27Z", "hours": 1.3686, "text": "ig vro"}, {"post_id": 12473, "ts": "2026-06-20T11:27:36Z", "hours": 1.5417, "text": "woah test devlog"}]...
|
Title: Tung tung tung sahur by @Arjav | Stardance
Title: Tung tung tung sahur by @Arjav | Stardance
Devlogs:
woah test devlog
ig vro
sahur
Ships:
Ship message...
|
1793501629.6056478
|
1793588029.6056478
|
|
34277
|
Gravity simulator by @Krys | Stardance
|
Krys
|
1
|
96.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T15:39:24Z", "hours": 96.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simulator of Gravity between bodies in space. The simulator is fully customizable, so you can change the mass of your objects, their positions and even their shades they left behind. You can create any simulation you want.", "repo": "https://github.com/krysjank/Gravity-simulator", "demo": "https://scratch.mit.edu/projects/1376605963/"}]...
|
[{"post_id": 58940, "ts": "202 [{"post_id": 58940, "ts": "2026-08-31T14:36:41Z", "hours": 5.1353, "text": "Final adjustements, no errors and no bugs. The project is finally ready to be sent. The only things that I had to compromise on were the Save and Load function. Cause due to scratch’s simplicity, it couldn’t subtract all of my variables at once. But nonetheless I was working on this project really hard and I hope it comes out great."}, {"post_id": 58726, "ts": "2026-08-31T08:41:44Z", "hours": 6.1681, "text": "Time flew by so fast last six hours. I’m deep in the Save and Load functions right now. It isn’t just designing buttons and texts, I also need to make sure the buttons react properly and with no error. I created new room for load screen too. If the Save and Load functions will come up right, it’s gonna be huge."}, {"post_id": 54026, "ts": "2026-08-24T19:35:22Z", "hours": 4.0647, "text": "I added two more buttons for Save/Import option, so the user could temporarily save his gravity scenes to show them to someone later. I was also facing problems about resetting the second half of the settings. There was a bug associated with a very early ending of an event that affects other events, resulting in no reaction."}, {"post_id": 42744, "ts": "2026-08-07T16:52:07Z", "hours": 4.1339, "text": "Today, I implemented the option to decide if the x or y positions of each body could be shown. I located it into the second page of settings. It was kind of hard to figure out how to effect six different checkboxes in one single sprite at once. Next time, I’ll add more options for the users.:)))"}, {"post_id": 42532, "ts": "2026-08-07T10:26:54Z", "hours": 4.0836, "text": "Today, I added a new skip button for users that already played gravity simulator. By pressing the button they could skip the tutorial and head on straight to the simulation."}, {"post_id": 42089, "ts": "2026-08-06T17:32:29Z", "hours": 4.1506, "text": "AFTER COUNTLESS HOURS OF DIFFERENT CHANGES, I FINALLY MANAGED TO FIGURE OUT THE SOLUTION FOR THE PROBLEM WITH POSITION MEMORY OF THE BODIES. I redesigned the structure of the code and added some new blocks to it. This major improvement results in a version with literally no bugs in all fields. I can thankfully begin upgrading the settings menu I started making before, because now, I have a solid base for future improvements. THANK GOD I FIGURED IT OUT :)))))))"}, {"post_id": 41870, "ts": "2026-08-06T10:49:36Z", "hours": 4.0669, "text": "My only chance is to go compare different versions of the code, so I’m working on two of the codes at once. The bug that the bodies don’t stay at their positions after returning back to the menu is I think only solvable by separating the code and going through all of it."}, {"post_id": 41388, "ts": "2026-08-05T15:50:18Z", "hours": 4.0739, "text": "Oh daaamn, this session was so annoying!! I was facing crucial bugs in the main simulation, I tried everything just to solve it and I couldn’t figure out why it was happening for 2 whole hours. Then I had a lunchbreak and I returned to programming and I restarted my slow comp…. The program was out of nowhere working and now I came across different problems, at the time I solved the buttons problems. I can’t no more……. :(((((( Once I solve a problem, two others come alive. It’s getting very hard for me."}, {"post_id": 40856, "ts": "2026-08-04T17:27:10Z", "hours": 8.1803, "text": "I succesfully implemented the menu for settings with functioning buttons(pic. 2). It took quite a lot of time to design. And as I was testing the whole application, I came across different bugs, for instance(pic. 1). It happens during the act of pressing the mouse and sliding between both of the next/back buttons and then letting the mouse down. It’s sadly still in process, I can’t figure it out right now."}, {"post_id": 40091, "ts": "2026-08-03T14:05:22Z", "hours": 4.1336, "text": "Today, I added a new button for settings, it comes with animation. I also fixed the problem with the little helper, cause it was lagging sometimes during the usage of it. It was a pain creating the sprocket design by the way ; )"}, {"post_id": 34284, "ts": "2026-07-24T21:12:31Z", "hours": 4.2681, "text": "So, I added the new version of gravity to all of the bodies that could move. The new version’s secret is, that its made in only one column. I also upgraded the small helper hidden in the left high corner. You can see its main code lower. I tested it and it reacts to all of the events it should respond to."}, {"post_id": 33979, "ts": "2026-07-24T11:10:26Z", "hours": 4.2872, "text": "I hope I solved the problem with the bodies sometimes not moving. I invented a new way how to act between pressing space and simulating gravity. The problem that they didn’t move was maybe because the simulation was divided into two programmed groups. One was activated when entering a certain room and the second activated later when pressing space. At least I hope so… I spent a lot of time going through the code and couldn’t find any other solution :("}, {"post_id": 33615, "ts": "2026-07-23T17:51:54Z", "hours": 4.1336, "text": "As I mentioned in previous devlog, I really had to invent a special sprite for each moving body. The shadow under the bodies collided with bodies, so I really didn’t have any different solution. There was also a bug in a cycle. It was about sending messages to other communicators more times than the loop actually looped. So I implemented this code to all of the special sprites for shadows (the code was different every single time)"}, {"post_id": 33428, "ts": "2026-07-23T11:12:06Z", "hours": 4.0333, "text": "I inicialized the gravity for the third body (oh yes, finaly) –> It took me a lot of time, because the more bodies you have, the bigger amount of code is needed. But just as I tried it, I came across a different problem. Bodies collide not only between them, but also with the trajectories of the bodies. This got me really thinking. I might create for each trajectory a sprite."}, {"post_id": 33028, "ts": "2026-07-22T16:09:41Z", "hours": 4.0333, "text": "This time, my programming session was a brutal nightmare. I was trying to fix a very uncomfortable bug and it was hidden in the code below. As more than one sprites had this code, one was experiencing active condition and the second passive. I also upgraded the guide menu with a new design of the mass system."}, {"post_id": 32891, "ts": "2026-07-22T10:49:34Z", "hours": 4.1003, "text": "Now I added a ton of code to another ball, so it could interact with others. I also made a requirement if user wants the ball to move or not, so it could act just as gravity provider or even be attracted by the gravity too. Big changes will happen also to other bodies. See you later : )"}, {"post_id": 32425, "ts": "2026-07-21T16:33:36Z", "hours": 4.2006, "text": "I finally managed to finish the complete guide for users. I added a step-back button so everyone can return to the guide if they missed something. I also added a menu for giving speeds right from the start. It means that the simulations won’t neccesarily be from stable positions. -> I hope I don’t need to mention the bug fixes everyone knows about :"}, {"post_id": 32274, "ts": "2026-07-21T10:42:31Z", "hours": 17.5858, "text": "I recently made a huge jump with the gravity simulator. I added a third body to interact with and I also added kind of a huge guide for the users. The most annoying thing to do was the debugging part. It’s always hard to find the roots of the problem. I hope this simulator ’ll get as much stardust as it can because I´m working hard to get the results I want."}, {"post_id": 27697, "ts": "2026-07-13T14:12:02Z", "hours": 1.5503, "text": "I’m working on simulation between bodies in space. Today, I finally figured out how to do it for the first time. Months before I struggled to perform such a difficult physics simulation. I didn’t really ever understand how dx and dy works. So I tried it and it works pretty well even in scratch."}]...
|
Title: Gravity simulator by @Krys | Stardance
Dev Title: Gravity simulator by @Krys | Stardance
Devlogs:
I’m working on simulation between bodies in space. Today, I finally figured out how to do it for the first time. Months before I struggled to perform such a difficult physics simulation. I didn’t really ever understand how dx and dy works. So I tried it and it works pretty well even in scratch.
I recently made a huge jump with the gravity simulator. I added a third body to interact with and I also added kind of a huge guide for the users. The most annoying thing to do was the debugging part. It’s always hard to find the roots of the problem. I hope this simulator ’ll get as much stardust as it can because I´m working hard to get the results I want.
I finally managed to finish the complete guide for users. I added a step-back button so everyone can return to the guide if they missed something. I also added a menu for giving speeds right from the start. It means that the simulations won’t neccesarily be from stable positions. -> I hope I don’t need to mention the bug fixes everyone knows about :
Now I added a ton of code to another ball, so it could interact with others. I also made a requirement if user wants the ball to move or not, so it could act just as gravity provider or even be attracted by the gravity too. Big changes will happen also to other bodies. See you later : )
This time, my programming session was a brutal nightmare. I was trying to fix a very uncomfortable bug and it was hidden in the code below. As more than one sprites had this code, one was experiencing active condition and the second passive. I also upgraded the guide menu with a new design of the mass system.
I inicialized the gravity for the third body (oh yes, finaly) –> It took me a lot of time, because the more bodies you have, the bigger amount of code is needed. But just as I tried it, I came across a different problem. Bodies collide not only between them, but also with the trajectories of the bodies. This got me really thinking. I might create for each trajectory a sprite.
As I mentioned in previous devlog, I really had to invent a special sprite for each moving body. The shadow under the bodies collided with bodies, so I really didn’t have any different solution. There was also a bug in a cycle. It was about sending messages to other communicators more times than the loop actually looped. So I implemented this code to all of the special sprites for shadows (the code was different every single time)
I hope I solved the problem with the bodies sometimes not moving. I invented a new way how to act between pressing space and simulating gravity. The problem that they didn’t move was maybe because the simulation was divided into two programmed groups. One was activated when entering a certain room and the second activated later when pressing space. At least I hope so… I spent a lot of time going through the code and couldn’t find any other solution :(
So, I added the new version of gravity to all of the bodies that could move. The new version’s secret is, that its made in only one column. I also upgraded the small helper hidden in the left high corner. You can see its main code lower. I tested it and it reacts to all of the events it should respond to.
Today, I added a new button for settings, it comes with animation. I also fixed the problem with the little helper, cause it was lagging sometimes during the usage of it. It was a pain creating the sprocket design by the way ; )
I succesfully implemented the menu for settings with functioning buttons(pic. 2). It took quite a lot of time to design. And as I was testing the whole application, I came across different bugs, for instance(pic. 1). It happens during the act of pressing the mouse and sliding between both of the next/back buttons and then letting the mouse down. It’s sadly still in process, I can’t figure it out right now.
Oh daaamn, this session was so annoying!! I was facing crucial bugs in the main simulation, I tried everything just to solve it and I couldn’t figure out why it was happening for 2 whole hours. Then I had a lunchbreak and I returned to programming and I restarted my slow comp…. The program was out of nowhere working and now I came across different problems, at the time I solved the buttons problems. I can’t no more……. :(((((( Once I solve a problem, two others come alive. It’s getting very hard for me.
My only chance is to go compare different versions of the code, so I’m working on two of the codes at once. The bug that the bodies don’t stay at their positions after returning back to the menu is I think only solvable by separating the code and going through all of it.
AFTER COUNTLESS HOURS OF DIFFERENT CHANGES, I FINALLY MANAGED TO FIGURE OUT THE SOLUTION FOR THE PROBLEM WITH POSITION MEMORY OF THE BODIES. I redesigned the structure of the code and added some new blocks to it. This major improvement results in a version with literally no bugs in all fields. I can thankfully begin upgrading the settings menu I started making before, because now, I have a solid base for future improvements. THANK GOD I FIGURED IT OUT :)))))))
Today, I added a new skip button for users that already played gravity simulator. By pressing the button they could skip the tutorial and head on straight to the simulation.
Today, I implemented the option to decide if the x or y positions of each body could be shown. I located it into the second page of settings. It was kind of hard to figure out how to effect six different checkboxes in one single sprite at once. Next time, I’ll add more options for the users.:)))
I added two more buttons for Save/Import option, so the user could temporarily save his gravity scenes to show them to someone later. I was also facing problems about resetting the second half of the settings. There was a bug associated with a very early ending of an event that affects other events, resulting in no reaction.
Time flew by so fast last six hours. I’m deep in the Save and Load functions right now. It isn’t just designing buttons and texts, I also need to make sure the buttons react properly and with no error. I created new room for load screen too. If the Save and Load functions will come up right, it’s gonna be huge.
Final adjustements, no errors and no bugs. The project is finally ready to be sent. The only things that I had to compromise on were the Save and Load function. Cause due to scratch’s simplicity, it couldn’t subtract all of my variables at once. But nonetheless I was working on this project really hard and I hope it comes out great.
Ships:
I made a simulator of Gravity between bodies in space. The simulator is fully customizable, so you can change the mass of your objects, their positions and even their shades they left behind. You can create any simulation you want....
|
1793501632.4285614
|
1793588032.4285614
|
|
51412
|
Wibei by @EVINJSUBIN | Stardance
|
EVINJSUBIN
|
1
|
21.64
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T09:37:07Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Wibei is a real-time 3D music visualizer built with Three.js and Web Audio API. It features reactive visualizer modes (Pulse Ring, Waveform, and 3D Grid), bloom glow themes, 3D mouse drag controls, YouTube search, live mic input, and local MP3 uploads.How to test Open https://wibei-production.up.railway.app/ Search for any song in the bottom right, click 🎤 to use your mic, or click 📁 to upload an MP3. Click & drag anywhere on the screen to rotate in 3D, and use the top dropdowns to switch styles (Pulse Ring, Wave, Grid) and themes.What I learned Learned how to use the Web Audio API (FFT frequency analysis) to drive 3D Three.js meshes, write smooth idle wave animations, configure bloom shaders, and build 3D mouse orbit controls.", "repo": "https://github.com/EVINJSUBIN/Wibei", "demo": "https://wibei.onrender.com/"}]...
|
[{"post_id": 61342, "ts": "202 [{"post_id": 61342, "ts": "2026-09-04T06:47:47Z", "hours": 10.9883, "text": "🎛️ Wibei Devlog: 3D Holographic Album Art & the VOID Overhaul Project: Wibei (3D Audio Spectrograph & Real-Time DSP Lab) Built for: Hack Club Stardance Creators: @EVINJSUBIN & @aamosm Repo: github.com/EVINJSUBIN/Wibei | Live: wibei.onrender.com 🚀 Elevating the Cockpit Audio visualization isn’t just about moving bars — it’s about tactile feedback, visual hierarchy, and immersive atmosphere. In this sprint, we overhauled Wibei into a commercial-grade glassmorphism workstation , added a 3D holographic album art core , wrote a zero-dependency ID3 tag parser , and redesigned our landing page in our signature VOID aesthetic. 💎 1. Commercial-Grade Glassmorphism Cockpit We replaced flat panels with an ergonomic, floating dual-deck hardware layout: Left Deck (Ingest): Quick-switch tabs for DEMOS , STREAM (YouTube/Spotify live audio), QUEUE (playlist management), and LOCAL (drag-and-drop). Right Deck (Synthesis & FX): Instant geometry matrix switching ( RING , WAVE , GRID , ORB ), real-time biquad muffler, sub-bass drive, nightcore tempo shifters, and camera auto-orbit. Floating Transport Bar: Ergonomic bottom bar with real-time master VU meter bars, peak telemetry ( dBFS ), elapsed timers, track metadata, and volume scrubber. Frosted Material System: Deep obsidian glass ( rgba(10, 10, 14, 0.72) ) with backdrop-filter: blur(28px) , subtle rim lighting, and responsive LED indicators. 💿 2. 3D Holographic Center Album Art In our RING (Pulse) visualizer, tracks with rich artwork now come to life in 3D: Hologram Disc: High-def circular disc ( CircleGeometry(4.2) ) with dark tinted glass backing and an audio-reactive neon border ring. Adaptive Gyro-Core: When artwork is present, the wireframe octahedron scales outward to 1.55x , orbiting as an open crystal gimbal cage. Without artwork (or on mic input), it docks back to its native 1.0x center scale. Vinyl Dynamics: Spins with bass-accelerated inertia, tilts dynamically in 3D pitch/roll, and pulses to sub-bass hits. 📦 3. Zero-Dependency In-Browser ID3 Extractor To keep local playback instant without server uploads, we wrote id3.js from scratch: Direct binary parsing of ID3v2.3, ID3v2.4, and ID3v1 tags via ArrayBuffer slices. Extracts APIC frames into instant in-memory blob: URLs for album covers. Parses title, artist, album, and genre instantly with zero latency. 🌌 4. The “VOID” Aesthetic & Minimalist Landing Page Serious Void Default: Distraction-free interstellar abyss ( #050507 ), crisp starlight typography ( #f8fafc ), and titanium slate accents ( #8b95a5 ). Calibrated Bloom: Re-tuned UnrealBloomPass threshold to 0.82 — eliminating blinding white glare while keeping geometry razor-sharp. Minimalist Landing Page: Clean terminal layout with a 1,800-star WebGL starfield and a 3D gyro-core that pulses with kinetic shockwaves on live DSP audition clicks! 💻 100% Client-Side Engine Built entirely with vanilla JS, Three.js (r128), and native Web Audio API — zero bulky UI frameworks, locked 60+ FPS, and zero-latency 32-bit floating DSP."}, {"post_id": 59649, "ts": "2026-09-01T15:50:39Z", "hours": 0.7556, "text": "⚡ Wibei // 3D Audio Spectrograph & Real-Time DSP Lab Live Site: https://wibei.onrender.com | GitHub: EVINJSUBIN/Wibei Built for: Hack Club Stardance | Collaborators: @EVINJSUBIN & @aamosm 🌌 What We Built Wibei is an open-source web synthesizer and 3D audio spectrograph built with Three.js WebGL and the native Web Audio API . It lets anyone route audio, manipulate live DSP filter nodes, and render acoustic harmonics in 3D space with zero latency. ✨ Key Features Sound Shaper DSP Suite: Real-time 650Hz Lowpass Muffler (“club bathroom” vibe), +16dB Bass Overdrive EQ, and 1.25x/0.85x Speed Modulator. 4 Spatial 3D Geometries: 128-bar Radial Pulse Ring, Waveform Ribbon, Isometric 3D Voxel Matrix, and the new harmonic Pulsar Sphere . Beat Drop Shockwaves: Sub-bass transient detector triggering expanding 3D ring particles on drops. Cinematic Auto-Pilot Cam: Dynamic drone camera orbiting to musical energy. Universal Audio Ingest: Instant lossless stems, fullscreen drag-and-drop MP3/WAV, live microphone, and YouTube stream engine. Hall of Fame: Live GitHub telemetry showcasing community contributors. 100% client-side WebGL & DSP running at 60 FPS."}, {"post_id": 58898, "ts": "2026-08-31T13:50:16Z", "hours": 4.8986, "text": "✨ What’s new:Clean Brand Pill: Removed the gold dot from the top-left logo pill. It now features clean, minimal typography (wibei v1.0).Interactive Mini Player:Added a Minimize Button (—) on the right side of the player bar.Clicking it collapses the large deck into a floating Mini Player Pill in the bottom corner (showing the album art, track title, animated mini EQ visualizer, play/pause toggle, and expand button).Expanding it restores the full control deck seamlessly.“Getting Started” Guide Modal (Guide):Added an interactive onboarding modal accessible via the top-right Guide button.Explains how to play audio (YouTube, Demos, Mic, Uploads), how to orbit in 3D, and how to switch visualizer shapes/bloom themes.Includes a 1-click “⚡ Play Synthwave Demo” button right inside the guide for instant reviewer onboarding.Animated Mini EQ Bars: Added dynamic dancing EQ waveform bars right next to the song title when audio is playing."}, {"post_id": 57193, "ts": "2026-08-29T09:34:55Z", "hours": 1.1614, "text": "🚀 Final Ship: Wibei is Live! 🎧✨After hours of refining the audio DSP pipeline, tweaking Three.js shaders, and perfecting the UI, Wibei is officially shipped!Try it out live here: 👉 https://wibei-production.up.railway.app/(Open it up, search your favorite track or click the 🎤 mic / 📁 upload button to watch it pulse in 3D!)"}, {"post_id": 56639, "ts": "2026-08-28T14:03:20Z", "hours": 3.5839, "text": "Progrees working on a new way to visulize"}, {"post_id": 50284, "ts": "2026-08-19T13:15:26Z", "hours": 0.4033, "text": "Starting of wibi a audio visualizer"}]...
|
Title: Wibei by @EVINJSUBIN | Stardance
Devlogs:
Title: Wibei by @EVINJSUBIN | Stardance
Devlogs:
Starting of wibi a audio visualizer
Progrees working on a new way to visulize
🚀 Final Ship: Wibei is Live! 🎧✨After hours of refining the audio DSP pipeline, tweaking Three.js shaders, and perfecting the UI, Wibei is officially shipped!Try it out live here: 👉 https://wibei-production.up.railway.app/(Open it up, search your favorite track or click the 🎤 mic / 📁 upload button to watch it pulse in 3D!)
✨ What’s new:Clean Brand Pill: Removed the gold dot from the top-left logo pill. It now features clean, minimal typography (wibei v1.0).Interactive Mini Player:Added a Minimize Button (—) on the right side of the player bar.Clicking it collapses the large deck into a floating Mini Player Pill in the bottom corner (showing the album art, track title, animated mini EQ visualizer, play/pause toggle, and expand button).Expanding it restores the full control deck seamlessly.“Getting Started” Guide Modal (Guide):Added an interactive onboarding modal accessible via the top-right Guide button.Explains how to play audio (YouTube, Demos, Mic, Uploads), how to orbit in 3D, and how to switch visualizer shapes/bloom themes.Includes a 1-click “⚡ Play Synthwave Demo” button right inside the guide for instant reviewer onboarding.Animated Mini EQ Bars: Added dynamic dancing EQ waveform bars right next to the song title when audio is playing.
⚡ Wibei // 3D Audio Spectrograph & Real-Time DSP Lab Live Site: https://wibei.onrender.com | GitHub: EVINJSUBIN/Wibei Built for: Hack Club Stardance | Collaborators: @EVINJSUBIN & @aamosm 🌌 What We Built Wibei is an open-source web synthesizer and 3D audio spectrograph built with Three.js WebGL and the native Web Audio API . It lets anyone route audio, manipulate live DSP filter nodes, and render acoustic harmonics in 3D space with zero latency. ✨ Key Features Sound Shaper DSP Suite: Real-time 650Hz Lowpass Muffler (“club bathroom” vibe), +16dB Bass Overdrive EQ, and 1.25x/0.85x Speed Modulator. 4 Spatial 3D Geometries: 128-bar Radial Pulse Ring, Waveform Ribbon, Isometric 3D Voxel Matrix, and the new harmonic Pulsar Sphere . Beat Drop Shockwaves: Sub-bass transient detector triggering expanding 3D ring particles on drops. Cinematic Auto-Pilot Cam: Dynamic drone camera orbiting to musical energy. Universal Audio Ingest: Instant lossless stems, fullscreen drag-and-drop MP3/WAV, live microphone, and YouTube stream engine. Hall of Fame: Live GitHub telemetry showcasing community contributors. 100% client-side WebGL & DSP running at 60 FPS.
🎛️ Wibei Devlog: 3D Holographic Album Art & the VOID Overhaul Project: Wibei (3D Audio Spectrograph & Real-Time DSP Lab) Built for: Hack Club Stardance Creators: @EVINJSUBIN & @aamosm Repo: github.com/EVINJSUBIN/Wibei | Live: wibei.onrender.com 🚀 Elevating the Cockpit Audio visualization isn’t just about moving bars — it’s about tactile feedback, visual hierarchy, and immersive atmosphere. In this sprint, we overhauled Wibei into a commercial-grade glassmorphism workstation , added a 3D holographic album art core , wrote a zero-dependency ID3 tag parser , and redesigned our landing page in our signature VOID aesthetic. 💎 1. Commercial-Grade Glassmorphism Cockpit We replaced flat panels with an ergonomic, floating dual-deck hardware layout: Left Deck (Ingest): Quick-switch tabs for DEMOS , STREAM (YouTube/Spotify live audio), QUEUE (playlist management), and LOCAL (drag-and-drop). Right Deck (Synthesis & FX): Instant geometry matrix switching ( RING , WAVE , GRID , ORB ), real-time biquad muffler, sub-bass drive, nightcore tempo shifters, and camera auto-orbit. Floating Transport Bar: Ergonomic bottom bar with real-time master VU meter bars, peak telemetry ( dBFS ), elapsed timers, track metadata, and volume scrubber. Frosted Material System: Deep obsidian glass ( rgba(10, 10, 14, 0.72) ) with backdrop-filter: blur(28px) , subtle rim lighting, and responsive LED indicators. 💿 2. 3D Holographic Center Album Art In our RING (Pulse) visualizer, tracks with rich artwork now come to life in 3D: Hologram Disc: High-def circular disc ( CircleGeometry(4.2) ) with dark tinted glass backing and an audio-reactive neon border ring. Adaptive Gyro-Core: When artwork is present, the wireframe octahedron scales outward to 1.55x , orbiting as an open crystal gimbal cage. Without artwork (or on mic input), it docks back to its native 1.0x center scale. Vinyl Dynamics: Spins with bass-accelerated inertia, tilts dynamically in 3D pitch/roll, and pulses to sub-bass hits. 📦 3. Zero-Dependency In-Browser ID3 Extractor To keep local playback instant without server uploads, we wrote id3.js from scratch: Direct binary parsing of ID3v2.3, ID3v2.4, and ID3v1 tags via ArrayBuffer slices. Extracts APIC frames into instant in-memory blob: URLs for album covers. Parses title, artist, album, and genre instantly with zero latency. 🌌 4. The “VOID” Aesthetic & Minimalist Landing Page Serious Void Default: Distraction-free interstellar abyss ( #050507 ), crisp starlight typography ( #f8fafc ), and titanium slate accents ( #8b95a5 ). Calibrated Bloom: Re-tuned UnrealBloomPass threshold to 0.82 — eliminating blinding white glare while keeping geometry razor-sharp. Minimalist Landing Page: Clean terminal layout with a 1,800-star WebGL starfield and a 3D gyro-core that pulses with kinetic shockwaves on live DSP audition clicks! 💻 100% Client-Side Engine Built entirely with vanilla JS, Three.js (r128), and native Web Audio API — zero bulky UI frameworks, locked 60+ FPS, and zero-latency 32-bit floating DSP.
Ships:
Wibei is a real-time 3D music visualizer built with Three.js and Web Audio API. It features reactive visualizer modes (Pulse Ring, Waveform, and 3D Grid), bloom glow themes, 3D mouse drag controls, YouTube search, live mic input, and local MP3 uploads.How to test Open https://wibei-production.up.railway.app/ Search for any song in the bottom right, click 🎤 to use your mic, or click 📁 to upload an MP3. Click & drag anywhere on the screen to rotate in 3D, and use the top dropdowns to switch styles (Pulse Ring, Wave, Grid) and themes.What I learned Learned how to use the Web Audio API (FFT frequency analysis) to drive 3D Three.js meshes, write smooth idle wave animations, configure bloom shaders, and build 3D mouse orbit controls....
|
1793501637.4810276
|
1793588037.4810276
|
|
58899
|
Untitled project by @pavelX | Stardance
|
pavelX
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T16:05:19Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a python game, but only text RPG game where you chose your hero. You can fight fantasy features, and hastle some golds for fun or you can also craft many thiks which will make you stronger. The game end after you kill the end Dragon. I am proud of my project because this was my first big python project.", "repo": "https://github.com/pavel1010-code/coding/blob/main/project.py", "demo": "https://github.com/pavel1010-code/coding/releases/tag/v1.0.0"}]...
|
[{"post_id": 64874, "ts": "202 [{"post_id": 64874, "ts": "2026-09-09T16:00:23Z", "hours": 4.5083, "text": "I enden up making python game where you can play, craft, and fight."}, {"post_id": 63704, "ts": "2026-09-07T17:12:08Z", "hours": 3.2347, "text": "i am working on a python game. Where you’re fighting scifi creatures and after i upgrade it you can craft something."}]...
|
Title: Untitled project by @pavelX | Stardance
De Title: Untitled project by @pavelX | Stardance
Devlogs:
i am working on a python game. Where you’re fighting scifi creatures and after i upgrade it you can craft something.
I enden up making python game where you can play, craft, and fight.
Ships:
I made a python game, but only text RPG game where you chose your hero. You can fight fantasy features, and hastle some golds for fun or you can also craft many thiks which will make you stronger. The game end after you kill the end Dragon. I am proud of my project because this was my first big python project....
|
1793501644.3833072
|
1793588044.3833072
|
|
51414
|
Chronicle — Software Evolution Intelligence Platfo Chronicle — Software Evolution Intelligence Platform by @LAZX | Stardance...
|
LAZX
|
1
|
22.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T14:31:21Z", "hours": 22.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Chronicle, a local-first developer intelligence tool that scans a project’s history and changes, stores them as observations, analyzes those observations into findings, and then uses an AI interpreter to answer questions about how and why things changed in the project. The most challenging part for me was state management, especially keeping track of which observations had already been analyzed so Chronicle could process only new changes instead of repeatedly analyzing everything. I had to think carefully about scan state and analysis state, checkpoints, and how different scanners such as Git and Django migrations could work together without duplicating or losing information. I’m most proud of how Chronicle evolved into a proper pipeline rather than just a collection of commands: scanners produce observations, analyzers produce findings, and the interpretation layer connects those findings back to relevant project history to answer a developer’s questions. For someone testing the project, they should initialize Chronicle in a project with chronicle init , make sure the required AI provider and model are configured along with an API key, and then create some Git commits or Django migrations and run the appropriate scan, analyze, and interpret commands. The best way to test it is to make a change, scan it, analyze it, and then ask Chronicle a question about that change to see whether it can trace the history and explain what happened and why.", "repo": "https://github.com/Sakshyam-Xtha/Chronicle", "demo": "https://sakshyam-xtha.github.io/Chronicle/"}]...
|
[{"post_id": 57296, "ts": "202 [{"post_id": 57296, "ts": "2026-08-29T12:23:03Z", "hours": 1.8067, "text": "#Devlog-6 Fixed the bug of ai config not being set on init command"}, {"post_id": 57134, "ts": "2026-08-29T07:32:46Z", "hours": 10.7333, "text": "#Devlog-5 Finished the mvp of chronicle."}, {"post_id": 53152, "ts": "2026-08-23T16:12:49Z", "hours": 3.9156, "text": "#Devlog-4 Just integrated the django migration scan."}, {"post_id": 52130, "ts": "2026-08-22T06:55:05Z", "hours": 1.9022, "text": "#Devlog-3 Just finished the scan command to parse git commits and store it in a local db file using sqlite3."}, {"post_id": 51742, "ts": "2026-08-21T15:59:09Z", "hours": 1.2853, "text": "#Devlog-2 Completed the initializer command as now it creates a folder called .chronicle inside the project root and saves a simple configuration file"}, {"post_id": 51508, "ts": "2026-08-21T08:33:45Z", "hours": 2.1692, "text": "#Devlog-1 Made a simple init command that shows if the project root contains .git files or not"}]...
|
Title: Chronicle — Software Evolution Intelligence Title: Chronicle — Software Evolution Intelligence Platform by @LAZX | Stardance
Devlogs:
#Devlog-1 Made a simple init command that shows if the project root contains .git files or not
#Devlog-2 Completed the initializer command as now it creates a folder called .chronicle inside the project root and saves a simple configuration file
#Devlog-3 Just finished the scan command to parse git commits and store it in a local db file using sqlite3.
#Devlog-4 Just integrated the django migration scan.
#Devlog-5 Finished the mvp of chronicle.
#Devlog-6 Fixed the bug of ai config not being set on init command
Ships:
I built Chronicle, a local-first developer intelligence tool that scans a project’s history and changes, stores them as observations, analyzes those observations into findings, and then uses an AI interpreter to answer questions about how and why things changed in the project. The most challenging part for me was state management, especially keeping track of which observations had already been analyzed so Chronicle could process only new changes instead of repeatedly analyzing everything. I had to think carefully about scan state and analysis state, checkpoints, and how different scanners such as Git and Django migrations could work together without duplicating or losing information. I’m most proud of how Chronicle evolved into a proper pipeline rather than just a collection of commands: scanners produce observations, analyzers produce findings, and the interpretation layer connects those findings back to relevant project history to answer a developer’s questions. For someone testing the project, they should initialize Chronicle in a project with chronicle init , make sure the required AI provider and model are configured along with an API key, and then create some Git commits or Django migrations and run the appropriate scan, analyze, and interpret commands. The best way to test it is to make a change, scan it, analyze it, and then ask Chronicle a question about that change to see whether it can trace the history and explain what happened and why....
|
1793501646.314711
|
1793588046.314711
|
|
35722
|
GBWeb by @Doodl0 | Stardance
|
Doodl0
|
1
|
68.27
|
1244
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-28T00:42:33Z", "hours": 68.0, "multiplier": 18.35, "payout": 1244, "blessing": "neutral", "text": "GBWeb I’ve made GBWeb, a basic Gameboy emulator, written in C, designed to run in your browser using WebAssembly and Emscripten It can: Accurately emulate the Gameboy’s Z80 based CPU Run games with no memory bank controller, or with MBC1 Semi accurately emulate the Gameboy’s picture processing unit (PPU) And run locally on your device, entirely within a browser How to try it: Before you try it, I would like to mention that I cannot legally provide Gameboy game ROM files to play, so you must use your own ROMs. In addition, not all ROMs will work, as the emulator isn’t perfectly accurate. The ones I’ve tested that work are Tetris, and Super Mario Land If you cannot provide a ROM, or otherwise cannot test it, I have also attached a video of me playing Tetris and Super Mario Land on it as a demonstration. You can find it here, on the Github , and there’s also a screenshot below. You can use it by either pressing the demo button, or going to doodl0.github.io/gbweb/ Controls D-Pad -> WASD keys A button -> L key B button -> K key Select button -> Backspace key Start button -> Enter key These are also shown before loading a ROM Challenges This project really challenged my knowledge of low-level systems; especially since I had never made an emulator or even written an assembly program before. I had to rely on a lot of resources that other people had freely compiled, as the Gameboy is fairly advanced, however as it is so old, there’s been plenty of time for others to figure out how it works. (You can see the resources I used in the README) Simultaneously, this was also my first Emscripten project, which added more complexity. Through the devlogs, I also had to undergo lots of trial an error, until something finally was accurate enough, which felt especially frustrating at times What I’m proud of Mostly, I’m just proud that it even works a bit; at the start of the project, I was a little generous with how quickly I thought I could finish this, and as I got further, I got more unconfident. However, I’m glad I actually made something semi-usable, even if compatibility isn’t great at the moment. This is less important, but I’m also proud of the graphics I made for project, such as the banner. I tried to stay close to the original Gameboy’s palette and resolution for these, and I though it turned out well, if a bit overly green. Overall, I wish I just had more time in Stardance to continue working on this, but I’m happy with what I made so far.", "repo": "https://github.com/Doodl0/gbweb", "demo": "https://doodl0.github.io/gbweb/"}]...
|
[{"post_id": 84553, "ts": "202 [{"post_id": 84553, "ts": "2026-10-29T20:57:30Z", "hours": 0.27, "text": "Quick Devlog to address ROMs If you don’t have your own ROMs, I’ve added a download link on the site for you to download a free homebrew Tic-Tac-Toe ROM, so you can test the emulator. There’s also a demo video of me playing both Tetris and Super Mario Land, also on the site"}, {"post_id": 83459, "ts": "2026-10-27T23:57:02Z", "hours": 2.0928, "text": "Final Devlog (probably) - README and making the site pretty This will be a rather short devlog, but I’ve written the README.md file for the repo, and also uploaded the files to doodl0.github.io/gbweb/ , with a more Gameboy themed HTML page. You can visit yourself, or see it in the screenshot. I don’t think I can legally provide ROM files for you to play, so you have to upload your own. Currently, I can only guarantee Tetris and Super Mario Land work."}, {"post_id": 83378, "ts": "2026-10-27T21:26:21Z", "hours": 6.7483, "text": "Devlog 12 - Timers, HALT and MBCs Timers I’ve implemented the timer registers, which increment at a set interval based on the CPU clock. These are used for getting random numbers for Tetris, to pick random Tetriminos, and also used for other things, namely an interrupt is requested when one of the registers overflows and resets. These weren’t too hard to implement, and I based by implementation off of js-GB once again HALT and some interrupt fixes Previously, HALT, and some of the interrupt handling was basically a placeholder, meaning that it didn’t really run properly at all. I’ve now fixed that, meaning the emulator can now pass test ROM 2. I also implemented the STAT interrupt, although I’m not entirely sure it is accurate, as my PPU implementation still isn’t perfect. Memory Bank Controllers (MBCs) Finally, I added some basic support for the MBC1 chip that was frequently included on earlier Gameboy games. This allows the games to exceed the memory limit of 32KiB, instead including a mapper chip that allowed the switching of ROM banks. I based my implementation off of this blog of the development of the PlayKid emulator , and also partially off js-GB again. Now, the emulator is able to start bigger games, and I’ve tested Super Mario Land so far. This also allowed me to pass the combined version of all of the CPU instruction tests. Misc I also fixed a bug with the CPU instruction timing, allowing me to pass blargg’s CPU timing test"}, {"post_id": 82037, "ts": "2026-10-23T15:17:16Z", "hours": 8.1889, "text": "Devlog 11 - Input, Interrupts, and (semi-functional) Sprites The next thing I added was joypad input. I had already set up a basic keyboard key checker with SDL events, so I had to connect it to the Gameboy. The joypad in the Gameboy writes to address 0xFF00. The Gameboy uses this as basically a 2x4 matrix. When bit 4 is set, the d-pad buttons are readable, and when bit 5 is set, the A, B, select, and start buttons are readable. I based my implementation of this off of jsGB again, which means I basically just made an array of 2 bytes; one representing the first row of the matrix, and another representing the second. Then when a button is pressed down, I set the corresponding bit to 0, and when it is released, set it back to 1. Then when the Gameboy tries to write to the register, I instead set a column variable, and when it tries to read it, I check the current column and return the correct row. Then, I tried to implement some basic sprite rendering. You can see this in a few of the screenshots below, although my implementation is currently broken. It (should) work like the background renderer, only instead checking each of the 40 sprites in the OAM section of memory, and seeing if they are part of the current line. However currently, I forgot to implement one of the ways to copy sprite data to OAM, meaning that the rendering only actually works in some specific test ROMs, and not Tetris at the moment. Then, I implemented some of the CPU interrupts, namely the VBLANK interrupt, which is the only one Tetris needs to boot. Interrupts have a register (0xFFFF) to enable each one individually, which each bit corresponding to an interrupt. Then, if an interrupt is enabled, when a source triggers it, the corresponding interrupt flag in 0xFF0F is set. On the next CPU step, it checks the interrupt flags, and if one is set, it then calls the specific interrupt handler for that interrupt. Currently, the only fully implemented one is the VBLANK interrupt, which is simply called when the PPU enters the VBLANK mode. This allows Tetris to boot. Unfortunately, I spent a lot of the time in the devlog trying to actually get Tetris in game, as although after implementing interrupts, I could get through the menus, it just spat out a garbled screen when I actually tried to play the game or even watch the title screen demo. At first, I thought this was a rendering bug, so I spend a lot of time scrutinising the PPU code. I used the dmg-acid2 PPU test to try to troubleshoot this (you can see the current, still inaccurate result below), and although I did find out that my placeholder halt code was causing some issues, it didn’t manage to solve the problem. I found a reddit thread that seemed to have the same issue, and a frustratingly deleted comment that seemed to have a solution but obviously I couldn’t use that. However, I managed to find an archiving tool that showed me what the comment was ; Tetris incorrectly writes to some area of the ROM, which causes a crash. All I had to do to fix this was block writes to the ROM area in memory, and it finally worked, although the sprites didn’t work as mentioned previously. Next devlog, I want to fix sprite rendering, hopefully get the PPU more accurate, and implement some of the timer functions, as Tetris uses those to get random blocks, and without them, all the block are squares."}, {"post_id": 81110, "ts": "2026-10-19T22:32:59Z", "hours": 6.6672, "text": "Devlog 10 - (basically) Finishing the CPU After the last devlog, I did some cleaning up with the graphics, which included fixing the last scanline not being rendered, and also adding a screen before the ROM is loaded, telling the user which key to press to load the ROM. I also set up some functions to allow easier access to the I/O registers related to the PPU, such as the x and y scroll and the control flags. Afterwards, I felt a bit burnt out of the PPU, so I went back to finish off most of the CPU. This started with implementing the CFL, CPL, CF, CPL, SCF, SLA, SRA, RL, RLA, RLC, RRC, RLCA, and RRCA instructions, most of which are bit rotations, so once I had a few implemented, it got easier to add the rest. This allowed me to pass CPU test ROM 9. Then, I implemented the rest of the CB prefix instructions, which were all bit related; BIT, RES and SET, which allowed me to pass ROM 10 After those, I implemented some stack pointer related instructions; ADD SP,d and LD HL SP+d, which then allowed me to pass ROM 3 Finally, I added DAA. This one is a bit more unique, as it is designed to convert the result of an add or subtract with binary coded decimal numbers, into a binary coded decimal number. This gets a bit complicated, but I used these resources ( Demystifying the GameBoy/SM83’s DAA Instruction and the RGBDS assembler/linker instruction documentation ) to implement this properly, allowing me to also pass test ROM 1 With a semi-functioning PPU, and some fixes, I was also able to boot into the copyright screen of Tetris for the first time, although I couldn’t get any further without implementing interrupts. The image below shows that, and my emulator passing all of the previously mentioned test ROMs. The only test ROM I haven’t passed yet is the 2nd one, which also requires interrupts."}, {"post_id": 80353, "ts": "2026-10-17T11:17:07Z", "hours": 4.04, "text": "Devlog 9 - Basic graphics (finally) I’ve finally gotten some basic picture processing unit (PPU) functionality implemented into the emulator, which will hopefully make debugging a lot easier going forward. Firstly, to implement this, I had to move the timing logic out of cpu.c and into cycles.c . This was so that, when the loop calls a CPU step, it also calls a PPU step at the same time. I also refactored some of the cycle functions and removed the ones that were no longer being used Then, I implemented the timing code for the PPU. This part and the actual rendering were mostly based on this tutorial series that shows you how to make a GB emulator in javascript, which I based my C code on. Basically, the PPU runs on the clock as the CPU, and a ‘dot’ on the PPU is equal to a T-cycle on the CPU. The PPU renders progressively, like a CRT television, and so also has modes to move the nonexistent electron beam down and back to the start of a scanline before it continutes rendering, known as VBLANK and HBLANK, (vertical and horizontal blank). The Pan Docs were also quite helpful for understanding the basic functionality, although the tutorial was useful to understand the programmatic side. The PPU also has 2 other modes, used for scanning the Object Attribute Memory (OAM) and actually drawing, and all 4 modes have a precise amount of dots that they run for. In terms of actual rendering, the Gameboy doesn’t have a full framebuffer, and instead uses different tiles to create a full image. I implemented a function that, when the CPU writes to VRAM, also updates the data in a separate tileset variables, for easier access in the render pipeline. Each tile is 16 bytes, with 2 bits per pixel colour depth, and 8 x 8 pixels per tile. As the Gameboy renders progressively, I then implemented the function to draw a scanline to the screen, based on the tile data in the background layer. The afformentioned tutorial series helped a lot here, as the tiles need to have a specific offset and mapping applied which would be quite hard to figure out on my own. Then, that function calls a draw pixel function for each each of the 160 pixels in a scanline, which writes the corresponding colour from the palette to an SDL_Surface as the framebuffer. Once the frame is finished, the surface is converted into a texture, which is then scaled to fit the screen size and rendered, with another frame being made afterwards. Below you can see the screen of the previously mentioned blargg’s test ROM 7."}, {"post_id": 79179, "ts": "2026-10-12T22:23:50Z", "hours": 6.5228, "text": "Devlog 8 - Organisation, and timing, again Ok, so this didn’t exactly go how I wanted (again), but most of this devlog time was spent fixing the past devlog, and organising code in a better way Firstly: I realised that before, my timing code checked based on M-cycles, rather than T-cycles. There’s a specific reason for the distinction, but for now all you need to know is that there’s 4 T-cycles in an M-cycle, so my code was targeting a 4x faster speed. I changed this to be correct, but changed it again later so it doesn’t really matter. Then, I cleaned up a lot of cpu.c , changing functions to return values directly rather than using a local variable first, pre-calculating some variables, et cetera. This was an attempt to speed up the CPU, as I was having a bit of trouble meeting the target speed with debug builds (mentioned in devlog 7), but again, this was a bit pointless because I changed the way the timing worked later. While doing this, I also replaced all of the numerical types with their stdint.h counterparts; for example, an unsigned char became a Uint8 (SDL has macros for the stdint types, so they have a slight naming difference from standard C in my code). This was mainly done for specificity and some Hail Mary for performance (although fruitless), and should make the code at least a bit more portable and easy to maintain. I also implemented a couple of new instructions; RST and SWAP. RST effectively calls from a set of pre-specified addresses , and SWAP just swaps the upper and lower 8 bits in a byte, so these weren’t too hard. I also had to fix some bugs with the flags register´s value after an SBC A instruction, which admittedly did take me a while to fix because I basically banged my head against the wall to fix it. The main change in this devlog was switching the timing system (again). Previously, the CPU ran one instruction for each loop of the SDL_AppIterate function. After reading the documentation and realising that this function is supposed to run each frame, I realised that I was causing all of my speed issues by only doing one cycle per iteration. Instead, the code now does as many instructions as it can until it has run enough T-cycles for a full frame to render (70224). It then renders (to be implemented), and moves on to the next iteration. This is way more performant, and has the added benefit of being more cross-platform, as SDL specifies that sometimes AppIterate may only run at the refresh rate on some devices. Tbh, this took me a while, maybe too long, to conceptualise and implement, and basically made all of the time on the other timing system wasted, but in the end it was worth it for a much better system. You can see the uncapped FPS (in a debug build mind you) here, although when actually playing games, the framerate will be locked to around 60 FPS. Finally, there was a few more miscellaneous changes: copying a ROM file into memory uses memcpy instead of a loop, which may or may not be faster; memory is now a union of smaller arrays of memory banks, for each function, such as work ram (WRAM), high ram (HRAM), ROM banks 0-n and etc; and lastly, some register code has been moved out of cpu.c for organisation."}, {"post_id": 77175, "ts": "2026-10-05T22:31:28Z", "hours": 5.0036, "text": "Devlog 7 - Timing The next main thing I implemented were some more instructions - namely SRL, RR, RRA and ADD HL. These weren’t too hard, as the first 3 are similar to regular bit shifts, and ADD HL is just adding. While I was working on these, I also fixed some bugs with the existing instructions This allowed me to finally pass the cpu_instrs 6 test ROM, which although not really a massive goal, did help to signify the progress I had made. I then moved onto the 7th test, for which I implemented some load functions for the stack pointer register The biggest improvement of this devlog was getting everything timing correctly. The Gameboy is supposed to run at 4.19 MHz and 59.7 FPS, but at the time, the emulator was just running as fast as possible. To solve this, I first made each instruction call a function to add the amount of cycles it takes to a unwaitedCycles variable. Then, I saved the current time in nanoseconds since the program started (provided by the SDL_GetTicksNS() function) into a variable at the start of an instruction’s execution. After the instruction is executed, a function is then called that finds the expected execution time the by doing the amount of cycles multiplied by the period of 4.19MHz (about 238 nanoseconds). This expected time is then subtracted from the actual time, which is the start time stored previously subtracted from the current time. The program is then delayed by the result, which should keep the CPU at around 4.19MHz, unless it takes too long. I did have some concerns with my emulator’s performance, as when running as a debug build, it wasn’t running nearly fast enough to reach 4.19MHz, but after compiling as a release build with optimisation, it was much faster and ran under the required time. However, I’m not sure how consistent this will be between devices, so I may have to optimise later Finally, I added a similar function to limit the FPS to around 60 (technically 59.7), which just checks the time since the last frame was rendered, and if it hasn’t been long enough, it continues CPU execution and doesn’t render. You can see the frame limit working in the screenshot, where the frametime is a consistent 16.8 ms and the FPS is locked to 60, as opposed to before where it was unlimited. (Ignore the text, it doesn’t change yet to show a ROM has been loaded)"}, {"post_id": 76068, "ts": "2026-10-02T07:40:09Z", "hours": 5.4931, "text": "Devlog 6 - An unfortunate amount of debugging This devlog is probably going to be shorter than the other, simply because I haven’t done as much as I hoped The main reason for this is that I got completely stuck on a bug, and wasted so much time trying to find it. I first noticed this bug when I got this error message (screenshot) in gameboy-doctor, with a mismatch with a load from memory not being the right value. This got me so stuck, because I didn’t know where to find when the memory was supposed to be written to, so I was basically blindly guessing what was wrong with any previous loads or register writes. Eventually, I caved and asked for help online, and I got my answer after asking on the EmuDev subreddit , where I found out it was an issue with my implementation of the LD (FF00+u8), A instructions, where I wrote LD_n16_n8((0xFF00 + address + 1), registers.a); instead of the correct LD_n16_n8((0xFF00 + ReadMemory(address + 1)), registers.a); so basically any writes to memory using that function were in the complete wrong location. Stupid mistake on my part, and I wasted way too much time on it. I also did implement some basic instructions, like EI and RETI. EI simply enables the emi register, and RETI basically just does that, then calls RET to return from a subroutine. In addition, I also restructured quite a lot of the code, as too much was piling up in the cpu.c file, and I also renamed quite a few functions to follow a Component_Function syntax, so it was easier to tell where they were located in the code"}, {"post_id": 73310, "ts": "2026-09-24T20:22:22Z", "hours": 6.5411, "text": "Devlog 5 - Adding instructions, the stack and lots of debugging After the last devlog, the first think I did was implement some more instructions, namely the jump instructions, and the increment and decrement functions. Luckily these were pretty simple; all the jumps do are set the program counter (effectively the next instruction) to a specified value, and the increment and decrement are pretty self explanatory, increasing or decreasing a register or memory byte by 1; After this, I started implementing the stack. The stack is a section of memory that is ordered, with values being written to it (pushed) and read off of it (popped). You must read the “top” value, meaning the most recently pushed, which is then removed and the next highest is the next available to read. This wasn’t too hard, although I did have to introduce a new register, the stack pointer (sp). While I was at it, I also implemented load functions, which load data into a specified memory byte or register. After realising it would cause issues down the line, I walked back my previous decision to make the flags register a struct of booleans, and instead made it a single byte with 4 bits representing the 4 flags, making it more accurate. I also made some functions to easily set or reset each flag, rather than use bitwise operations everywhere. Finally, I implemented logging support, so that I could use Gameboy Doctor , a brilliant debugging script that reads a log file from your emulator with a known ROM, and compares it to the correct result. All you have to do is write a line to a log file with all the register values and some memory bytes after each instruction, and it automatically tells you where the first error is, what register or piece of memory is wrong, and even the last instruction to give you a hint as to the problem. This didn’t take much time to implement, but I did spend a considerable amount of time debugging, as previously I hadn’t actually got a way to check that my functions worked correctly (which is why this devlog has quite a few more hours on it). You can see an example of a error in the screenshot; I intentionally changed the SUB instruction to add instead because I forgot to take screenshots of the actual errors 🥀. Next time, I want to implement more of the CPU, especially more complex behaviours like halting and interrupts, and also implement some of the graphics, so that the games can actually be seen visually."}, {"post_id": 71263, "ts": "2026-09-20T15:22:40Z", "hours": 5.355, "text": "Devlog 4 - Memory mapping and instruction stepping The next thing I worked on was getting a basic function set up for stepping through instructions and calling the execute function. To do this, I also had to make a program counter, which is a 16 bit register storing the address of the next instruction. Currently, the step function is pretty barebones, but it simply calls the execute function, passes it the PC as a parameter, and then sets the program counter to be the returned address. The execute function has also been modified, meaning it reads the instruction from memory (more on that later) rather than being passed it directly, and return the address plus 1 to 3 bytes, depending on the instruction that was executed. The next bit I made was the Game Boy’s memory. This is simply an char array with 64K values, equivalent to 64KiB of memory. Then, any address can be accessed simply by accessing the array value at an address. After working on the other parts of the CPU, I went back to working on some instructions, implementing the rest of the disassembly tables , including the condition call table, which checks the flags register before executing an instruction. I also implemented some of the instructions that require inputting an address in memory to use instead of a number or register. Finally, I also worked on some quality of life features. First, I made a function to replace missing functions, which simply sends an error message with the function name, and quits with an error code. Secondly, I made / edited some functions to actually move the loaded ROM file into the main GB memory rather than the program memory. I had a little trouble troubleshooting this, as I didn’t at first have a reliable way to verify that the data had been copied successfully, and after I did, I still had trouble with pointers, as I am still pretty new to C’s manual memory management (I usually just keep things in the stack, or have global variables that will persist throughout the program’s lifetime.). I also added basic functionality for loading a ROM on desktop rather than the web, but it doesn’t use the system dialog yet, only loading a rom.gb file in the executable directory. After everything was working, I added a debug message to send the ROM’s header title, showing that it actually works. You can see this in the screenshot. It sends the message twice, once when the file is loaded, and once when it’s moved to GB memory, which I did to make sure that the transfer didn’t mess up the data accidentally."}, {"post_id": 68852, "ts": "2026-09-15T21:21:15Z", "hours": 3.9186, "text": "Devlog 3 - Algorithmically parsing opcodes After getting things functioning well in the browser, I wanted to move onto the actual emulator bit of the project. Firstly, I looked at a bunch of examples and info, mostly compiled from gbdev.io . At first, I followed both the development blog of Cinoop and the guide DMG-01 . I used these guides to first write the register struct, which is basically just a struct of bytes (in char form as I’m using C), as well as the flags register, which I took inspiration from DMG-01 by making it primarily a struct of 4 bools rather than a binary value, for easier setting. I also wrote functions for converting this into binary though so that I didn’t lose compatibility. Next, I used Decoding Gameboy Z80 Opcodes to write an algorithmic way to decide which instruction correlates to an opcode, instead of a large switch case (although admittedly it does have a lot of nested switch cases). Finally, I added in the “alu” table instructions as the first few instructions, which also happened to be quite simple as they were basically just addition, subtraction and some bitwise operations. Next, I plan to fill in the remaining instructions, add them all to the algorithm and get started on the actual control flow for the CPU"}, {"post_id": 47709, "ts": "2026-08-15T20:02:53Z", "hours": 3.5792, "text": "Devlog 2 - SDL3 and File Loading After setting up the project basics, I spent some time on another project, also using SDL, but a desktop app. This used SDL3 instead of SDL2, which is default for Emscripten. I decided to switch this project to SDL3 as well, since I feel more comfortable with it and it has some features like main callbacks that should help with Emscripten. Instead of using the SDL library bundled with Emscripten, I instead added the SDL3 repo as a submodule, so I should be able to make a desktop version of the program later relatively easily. After switching to SDL3, I researched how to load a file from the user in the web browser into the webasm program. I found a StackOverflow thread that helped a lot, which included a link to a more developed header library, however I opted not to use this, as it was C++ based, and I wanted to remain using C. Instead I just implemented the bits I needed from the thread in C, which wasn’t too hard, although included some JS, which I’ve never used and some pointers which I made a few stupid mistakes with, causing me to think it didn’t work for a while. Finally, I also added a keybind to open the file dialog, which currently is tab, and also made sure that the keys only register on the down press, and not the up as well."}, {"post_id": 29056, "ts": "2026-07-15T18:26:42Z", "hours": 3.6419, "text": "Devlog 1 - Setup and basic input I took a while to find a toolchain that I liked, but I’ve settled on using Emscripten, and it’s built in version of SDL2. Emscripten is a library and compiler for CXX that allows direct compilation to web assembly and JavaScript, also allowing graphics and input with SDL. This makes it a lot easier for me to write the program, as I don’t really need to know as much JS or find multiple different libraries to use. Originally I wanted to use SDL3, but I couldn’t get the input to work automatically with Emscripten, and with this being my first major C and web project, I decided to take the easier path and simply use the fully supported SDL2. I also spent some time setting up a simple CMake system and some scripts for building and running, which took me a while to figure out, especially as I was also learning Emscripten for the first time, however it will hopefully save me time in the long run. Just to test my implementation, I set up some keybinds for the eventual emulator to come. I just used SDL scancodes to check for the key press, and they printed the corresponding Gameboy button to the output. You can see this in the video below. For simplicity, I decided to just set keys in code, with WASD being the dpad, J being A, K being B, Return being Start and Backspace being select."}]...
|
Title: GBWeb by @Doodl0 | Stardance
Devlogs:
Devl Title: GBWeb by @Doodl0 | Stardance
Devlogs:
Devlog 1 - Setup and basic input I took a while to find a toolchain that I liked, but I’ve settled on using Emscripten, and it’s built in version of SDL2. Emscripten is a library and compiler for CXX that allows direct compilation to web assembly and JavaScript, also allowing graphics and input with SDL. This makes it a lot easier for me to write the program, as I don’t really need to know as much JS or find multiple different libraries to use. Originally I wanted to use SDL3, but I couldn’t get the input to work automatically with Emscripten, and with this being my first major C and web project, I decided to take the easier path and simply use the fully supported SDL2. I also spent some time setting up a simple CMake system and some scripts for building and running, which took me a while to figure out, especially as I was also learning Emscripten for the first time, however it will hopefully save me time in the long run. Just to test my implementation, I set up some keybinds for the eventual emulator to come. I just used SDL scancodes to check for the key press, and they printed the corresponding Gameboy button to the output. You can see this in the video below. For simplicity, I decided to just set keys in code, with WASD being the dpad, J being A, K being B, Return being Start and Backspace being select.
Devlog 2 - SDL3 and File Loading After setting up the project basics, I spent some time on another project, also using SDL, but a desktop app. This used SDL3 instead of SDL2, which is default for Emscripten. I decided to switch this project to SDL3 as well, since I feel more comfortable with it and it has some features like main callbacks that should help with Emscripten. Instead of using the SDL library bundled with Emscripten, I instead added the SDL3 repo as a submodule, so I should be able to make a desktop version of the program later relatively easily. After switching to SDL3, I researched how to load a file from the user in the web browser into the webasm program. I found a StackOverflow thread that helped a lot, which included a link to a more developed header library, however I opted not to use this, as it was C++ based, and I wanted to remain using C. Instead I just implemented the bits I needed from the thread in C, which wasn’t too hard, although included some JS, which I’ve never used and some pointers which I made a few stupid mistakes with, causing me to think it didn’t work for a while. Finally, I also added a keybind to open the file dialog, which currently is tab, and also made sure that the keys only register on the down press, and not the up as well.
Devlog 3 - Algorithmically parsing opcodes After getting things functioning well in the browser, I wanted to move onto the actual emulator bit of the project. Firstly, I looked at a bunch of examples and info, mostly compiled from gbdev.io . At first, I followed both the development blog of Cinoop and the guide DMG-01 . I used these guides to first write the register struct, which is basically just a struct of bytes (in char form as I’m using C), as well as the flags register, which I took inspiration from DMG-01 by making it primarily a struct of 4 bools rather than a binary value, for easier setting. I also wrote functions for converting this into binary though so that I didn’t lose compatibility. Next, I used Decoding Gameboy Z80 Opcodes to write an algorithmic way to decide which instruction correlates to an opcode, instead of a large switch case (although admittedly it does have a lot of nested switch cases). Finally, I added in the “alu” table instructions as the first few instructions, which also happened to be quite simple as they were basically just addition, subtraction and some bitwise operations. Next, I plan to fill in the remaining instructions, add them all to the algorithm and get started on the actual control flow for the CPU
Devlog 4 - Memory mapping and instruction stepping The next thing I worked on was getting a basic function set up for stepping through instructions and calling the execute function. To do this, I also had to make a program counter, which is a 16 bit register storing the address of the next instruction. Currently, the step function is pretty barebones, but it simply calls the execute function, passes it the PC as a parameter, and then sets the program counter to be the returned address. The execute function has also been modified, meaning it reads the instruction from memory (more on that later) rather than being passed it directly, and return the address plus 1 to 3 bytes, depending on the instruction that was executed. The next bit I made was the Game Boy’s memory. This is simply an char array with 64K values, equivalent to 64KiB of memory. Then, any address can be accessed simply by accessing the array value at an address. After working on the other parts of the CPU, I went back to working on some instructions, implementing the rest of the disassembly tables , including the condition call table, which checks the flags register before executing an instruction. I also implemented some of the instructions that require inputting an address in memory to use instead of a number or register. Finally, I also worked on some quality of life features. First, I made a function to replace missing functions, which simply sends an error message with the function name, and quits with an error code. Secondly, I made / edited some functions to actually move the loaded ROM file into the main GB memory rather than the program memory. I had a little trouble troubleshooting this, as I didn’t at first have a reliable way to verify that the data had been copied successfully, and after I did, I still had trouble with pointers, as I am still pretty new to C’s manual memory management (I usually just keep things in the stack, or have global variables that will persist throughout the program’s lifetime.). I also added basic functionality for loading a ROM on desktop rather than the web, but it doesn’t use the system dialog yet, only loading a rom.gb file in the executable directory. After everything was working, I added a debug message to send the ROM’s header title, showing that it actually works. You can see this in the screenshot. It sends the message twice, once when the file is loaded, and once when it’s moved to GB memory, which I did to make sure that the transfer didn’t mess up the data accidentally.
Devlog 5 - Adding instructions, the stack and lots of debugging After the last devlog, the first think I did was implement some more instructions, namely the jump instructions, and the increment and decrement functions. Luckily these were pretty simple; all the jumps do are set the program counter (effectively the next instruction) to a specified value, and the increment and decrement are pretty self explanatory, increasing or decreasing a register or memory byte by 1; After this, I started implementing the stack. The stack is a section of memory that is ordered, with values being written to it (pushed) and read off of it (popped). You must read the “top” value, meaning the most recently pushed, which is then removed and the next highest is the next available to read. This wasn’t too hard, although I did have to introduce a new register, the stack pointer (sp). While I was at it, I also implemented load functions, which load data into a specified memory byte or register. After realising it would cause issues down the line, I walked back my previous decision to make the flags register a struct of booleans, and instead made it a single byte with 4 bits representing the 4 flags, making it more accurate. I also made some functions to easily set or reset each flag, rather than use bitwise operations everywhere. Finally, I implemented logging support, so that I could use Gameboy Doctor , a brilliant debugging script that reads a log file from your emulator with a known ROM, and compares it to the correct result. All you have to do is write a line to a log file with all the register values and some memory bytes after each instruction, and it automatically tells you where the first error is, what register or piece of memory is wrong, and even the last instruction to give you a hint as to the problem. This didn’t take much time to implement, but I did spend a considerable amount of time debugging, as previously I hadn’t actually got a way to check that my functions worked correctly (which is why this devlog has quite a few more hours on it). You can see an example of a error in the screenshot; I intentionally changed the SUB instruction to add instead because I forgot to take screenshots of the actual errors 🥀. Next time, I want to implement more of the CPU, especially more complex behaviours like halting and interrupts, and also implement some of the graphics, so that the games can actually be seen visually.
Devlog 6 - An unfortunate amount of debugging This devlog is probably going to be shorter than the other, simply because I haven’t done as much as I hoped The main reason for this is that I got completely stuck on a bug, and wasted so much time trying to find it. I first noticed this bug when I got this error message (screenshot) in gameboy-doctor, with a mismatch with a load from memory not being the right value. This got me so stuck, because I didn’t know where to find when the memory was supposed to be written to, so I was basically blindly guessing what was wrong with any previous loads or register writes. Eventually, I caved and asked for help online, and I got my answer after asking on the EmuDev subreddit , where I found out it was an issue with my implementation of the LD (FF00+u8), A instructions, where I wrote LD_n16_n8((0xFF00 + address + 1), registers.a); instead of the correct LD_n16_n8((0xFF00 + ReadMemory(address + 1)), registers.a); so basically any writes to memory using that function were in the complete wrong location. Stupid mistake on my part, and I wasted way too much time on it. I also did implement some basic instructions, like EI and RETI. EI simply enables the emi register, and RETI basically just does that, then calls RET to return from a subroutine. In addition, I also restructured quite a lot of the code, as too much was piling up in the cpu.c file, and I also renamed quite a few functions to follow a Component_Function syntax, so it was easier to tell where they were located in the code
Devlog 7 - Timing The next main thing I implemented were some more instructions - namely SRL, RR, RRA and ADD HL. These weren’t too hard, as the first 3 are similar to regular bit shifts, and ADD HL is just adding. While I was working on these, I also fixed some bugs with the existing instructions This allowed me to finally pass the cpu_instrs 6 test ROM, which although not really a massive goal, did help to signify the progress I had made. I then moved onto the 7th test, for which I implemented some load functions for the stack pointer register The biggest improvement of this devlog was getting everything timing correctly. The Gameboy is supposed to run at 4.19 MHz and 59.7 FPS, but at the time, the emulator was just running as fast as possible. To solve this, I first made each instruction call a function to add the amount of cycles it takes to a unwaitedCycles variable. Then, I saved the current time in nanoseconds since the program started (provided by the SDL_GetTicksNS() function) into a variable at the start of an instruction’s execution. After the instruction is executed, a function is then called that finds the expected execution time the by doing the amount of cycles multiplied by the period of 4.19MHz (about 238 nanoseconds). This expected time is then subtracted from the actual time, which is the start time stored previously subtracted from the current time. The program is then delayed by the result, which should keep the CPU at around 4.19MHz, unless it takes too long. I did have some concerns with my emulator’s performance, as when running as a debug build, it wasn’t running nearly fast enough to reach 4.19MHz, but after compiling as a release build with optimisation, it was much faster and ran under the required time. However, I’m not sure how consistent this will be between devices, so I may have to optimise later Finally, I added a similar function to limit the FPS to around 60 (technically 59.7), which just checks the time since the last frame was rendered, and if it hasn’t been long enough, it continues CPU execution and doesn’t render. You can see the frame limit working in the screenshot, where the frametime is a consistent 16.8 ms and the FPS is locked to 60, as opposed to before where it was unlimited. (Ignore the text, it doesn’t change yet to show a ROM has been loaded)
Devlog 8 - Organisation, and timing, again Ok, so this didn’t exactly go how I wanted (again), but most of this devlog time was spent fixing the past devlog, and organising code in a better way Firstly: I realised that before, my timing code checked based on M-cycles, rather than T-cycles. There’s a specific reason for the distinction, but for now all you need to know is that there’s 4 T-cycles in an M-cycle, so my code was targeting a 4x faster speed. I changed this to be correct, but changed it again later so it doesn’t really matter. Then, I cleaned up a lot of cpu.c , changing functions to return values directly rather than using a local variable first, pre-calculating some variables, et cetera. This was an attempt to speed up the CPU, as I was having a bit of trouble meeting the target speed with debug builds (mentioned in devlog 7), but again, this was a bit pointless because I changed the way the timing worked later. While doing this, I also replaced all of the numerical types with their stdint.h counterparts; for example, an unsigned char became a Uint8 (SDL has macros for the stdint types, so they have a slight naming difference from standard C in my code). This was mainly done for specificity and some Hail Mary for performance (although fruitless), and should make the code at least a bit more portable and easy to maintain. I also implemented a couple of new instructions; RST and SWAP. RST effectively calls from a set of pre-specified addresses , and SWAP just swaps the upper and lower 8 bits in a byte, so these weren’t too hard. I also had to fix some bugs with the flags register´s value after an SBC A instruction, which admittedly did take me a while to fix because I basically banged my head against the wall to fix it. The main change in this devlog was switching the timing system (again). Previously, the CPU ran one instruction for each loop of the SDL_AppIterate function. After reading the documentation and realising that this function is supposed to run each frame, I realised that I was causing all of my speed issues by only doing one cycle per iteration. Instead, the code now does as many instructions as it can until it has run enough T-cycles for a full frame to render (70224). It then renders (to be implemented), and moves on to the next iteration. This is way more performant, and has the added benefit of being more cross-platform, as SDL specifies that sometimes AppIterate may only run at the refresh rate on some devices. Tbh, this took me a while, maybe too long, to conceptualise and implement, and basically made all of the time on the other timing system wasted, but in the end it was worth it for a much better system. You can see the uncapped FPS (in a debug build mind you) here, although when actually playing games, the framerate will be locked to around 60 FPS. Finally, there was a few more miscellaneous changes: copying a ROM file into memory uses memcpy instead of a loop, which may or may not be faster; memory is now a union of smaller arrays of memory banks, for each function, such as work ram (WRAM), high ram (HRAM), ROM banks 0-n and etc; and lastly, some register code has been moved out of cpu.c for organisation.
Devlog 9 - Basic graphics (finally) I’ve finally gotten some basic picture processing unit (PPU) functionality implemented into the emulator, which will hopefully make debugging a lot easier going forward. Firstly, to implement this, I had to move the timing logic out of cpu.c and into cycles.c . This was so that, when the loop calls a CPU step, it also calls a PPU step at the same time. I also refactored some of the cycle functions and removed the ones that were no longer being used Then, I implemented the timing code for the PPU. This part and the actual rendering were mostly based on this tutorial series that shows you how to make a GB emulator in javascript, which I based my C code on. Basically, the PPU runs on the clock as the CPU, and a ‘dot’ on the PPU is equal to a T-cycle on the CPU. The PPU renders progressively, like a CRT television, and so also has modes to move the nonexistent electron beam down and back to the start of a scanline before it continutes rendering, known as VBLANK and HBLANK, (vertical and horizontal blank). The Pan Docs were also quite helpful for understanding the basic functionality, although the tutorial was useful to understand the programmatic side. The PPU also has 2 other modes, used for scanning the Object Attribute Memory (OAM) and actually drawing, and all 4 modes have a precise amount of dots that they run for. In terms of actual rendering, the Gameboy doesn’t have a full framebuffer, and instead uses different tiles to create a full image. I implemented a function that, when the CPU writes to VRAM, also updates the data in a separate tileset variables, for easier access in the render pipeline. Each tile is 16 bytes, with 2 bits per pixel colour depth, and 8 x 8 pixels per tile. As the Gameboy renders progressively, I then implemented the function to draw a scanline to the screen, based on the tile data in the background layer. The afformentioned tutorial series helped a lot here, as the tiles need to have a specific offset and mapping applied which would be quite hard to figure out on my own. Then, that function calls a draw pixel function for each each of the 160 pixels in a scanline, which writes the corresponding colour from the palette to an SDL_Surface as the framebuffer. Once the frame is finished, the surface is converted into a texture, which is then scaled to fit the screen size and rendered, with another frame being made afterwards. Below you can see the screen of the previously mentioned blargg’s test ROM 7.
Devlog 10 - (basically) Finishing the CPU After the last devlog, I did some cleaning up with the graphics, which included fixing the last scanline not being rendered, and also adding a screen before the ROM is loaded, telling the user which key to press to load the ROM. I also set up some functions to allow easier access to the I/O registers related to the PPU, such as the x and y scroll and the control flags. Afterwards, I felt a bit burnt out of the PPU, so I went back to finish off most of the CPU. This started with implementing the CFL, CPL, CF, CPL, SCF, SLA, SRA, RL, RLA, RLC, RRC, RLCA, and RRCA instructions, most of which are bit rotations, so once I had a few implemented, it got easier to add the rest. This allowed me to pass CPU test ROM 9. Then, I implemented the rest of the CB prefix instructions, which were all bit related; BIT, RES and SET, which allowed me to pass ROM 10 After those, I implemented some stack pointer related instructions; ADD SP,d and LD HL SP+d, which then allowed me to pass ROM 3 Finally, I added DAA. This one is a bit more unique, as it is designed to convert the result of an add or subtract with binary coded decimal numbers, into a binary coded decimal number. This gets a bit complicated, but I used these resources ( Demystifying the GameBoy/SM83’s DAA Instruction and the RGBDS assembler/linker instruction documentation ) to implement this properly, allowing me to also pass test ROM 1 With a semi-functioning PPU, and some fixes, I was also able to boot into the copyright screen of Tetris for the first time, although I couldn’t get any further without implementing interrupts. The image below shows that, and my emulator passing all of the previously mentioned test ROMs. The only test ROM I haven’t passed yet is the 2nd one, which also requires interrupts.
Devlog 11 - Input, Interrupts, and (semi-functional) Sprites The next thing I added was joypad input. I had already set up a basic keyboard key checker with SDL events, so I had to connect it to the Gameboy. The joypad in the Gameboy writes to address 0xFF00. The Gameboy uses this as basically a 2x4 matrix. When bit 4 is set, the d-pad buttons are readable, and when bit 5 is set, the A, B, select, and start buttons are readable. I based my implementation of this off of jsGB again, which means I basically just made an array of 2 bytes; one representing the first row of the matrix, and another representing the second. Then when a button is pressed down, I set the corresponding bit to 0, and when it is released, set it back to 1. Then when the Gameboy tries to write to the register, I instead set a column variable, and when it tries to read it, I check the current column and return the correct row. Then, I tried to implement some basic sprite rendering. You can see this in a few of the screenshots below, although my implementation is currently broken. It (should) work like the background renderer, only instead checking each of the 40 sprites in the OAM section of memory, and seeing if they are part of the current line. However currently, I forgot to implement one of the ways to copy sprite data to OAM, meaning that the rendering only actually works in some specific test ROMs, and not Tetris at the moment. Then, I implemented some of the CPU interrupts, namely the VBLANK interrupt, which is the only one Tetris needs to boot. Interrupts have a register (0xFFFF) to enable each one individually, which each bit corresponding to an interrupt. Then, if an interrupt is enabled, when a source triggers it, the corresponding interrupt flag in 0xFF0F is set. On the next CPU step, it checks the interrupt flags, and if one is set, it then calls the specific interrupt handler for that interrupt. Currently, the only fully implemented one is the VBLANK interrupt, which is simply called when the PPU enters the VBLANK mode. This allows Tetris to boot. Unfortunately, I spent a lot of the time in the devlog trying to actually get Tetris in game, as although after implementing interrupts, I could get through the menus, it just spat out a garbled screen when I actually tried to play the game or even watch the title screen demo. At first, I thought this was a rendering bug, so I spend a lot of time scrutinising the PPU code. I used the dmg-acid2 PPU test to try to troubleshoot this (you can see the current, still inaccurate result below), and although I did find out that my placeholder halt code was causing some issues, it didn’t manage to solve the problem. I found a reddit thread that seemed to have the same issue, and a frustratingly deleted comment that seemed to have a solution but obviously I couldn’t use that. However, I managed to find an archiving tool that showed me what the comment was ; Tetris incorrectly writes to some area of the ROM, which causes a crash. All I had to do to fix this was block writes to the ROM area in memory, and it finally worked, although the sprites didn’t work as mentioned previously. Next devlog, I want to fix sprite rendering, hopefully get the PPU more accurate, and implement some of the timer functions, as Tetris uses those to get random blocks, and without them, all the block are squares.
Devlog 12 - Timers, HALT and MBCs Timers I’ve implemented the timer registers, which increment at a set interval based on the CPU clock. These are used for getting random numbers for Tetris, to pick random Tetriminos, and also used for other things, namely an interrupt is requested when one of the registers overflows and resets. These weren’t too hard to implement, and I based by implementation off of js-GB once again HALT and some interrupt fixes Previously, HALT, and some of the interrupt handling was basically a placeholder, meaning that it didn’t really run properly at all. I’ve now fixed that, meaning the emulator can now pass test ROM 2. I also implemented the STAT interrupt, although I’m not entirely sure it is accurate, as my PPU implementation still isn’t perfect. Memory Bank Controllers (MBCs) Finally, I added some basic support for the MBC1 chip that was frequently included on earlier Gameboy games. This allows the games to exceed the memory limit of 32KiB, instead including a mapper chip that allowed the switching of ROM banks. I based my implementation off of this blog of the development of the PlayKid emulator , and also partially off js-GB again. Now, the emulator is able to start bigger games, and I’ve tested Super Mario Land so far. This also allowed me to pass the combined version of all of the CPU instruction tests. Misc I also fixed a bug with the CPU instruction timing, allowing me to pass blargg’s CPU timing test
Final Devlog (probably) - README and making the site pretty This will be a rather short devlog, but I’ve written the README.md file for the repo, and also uploaded the files to doodl0.github.io/gbweb/ , with a more Gameboy themed HTML page. You can visit yourself, or see it in the screenshot. I don’t think I can legally provide ROM files for you to play, so you have to upload your own. Currently, I can only guarantee Tetris and Super Mario Land work.
Quick Devlog to address ROMs If you don’t have your own ROMs, I’ve added a download link on the site for you to download a free homebrew Tic-Tac-Toe ROM, so you can test the emulator. There’s also a demo video of me playing both Tetris and Super Mario Land, also on the site
Ships:
GBWeb I’ve made GBWeb, a basic Gameboy emulator, written in C, designed to run in your browser using WebAssembly and Emscripten It can: Accurately emulate the Gameboy’s Z80 based CPU Run games with no memory bank controller, or with MBC1 Semi accurately emulate the Gameboy’s picture processing unit (PPU) And run locally on your device, entirely within a browser How to try it: Before you try it, I would like to mention that I cannot legally provide Gameboy game ROM files to play, so you must use your own ROMs. In addition, not all ROMs will work, as the emulator isn’t perfectly accurate. The ones I’ve tested that work are Tetris, and Super Mario Land If you cannot provide a ROM, or otherwise cannot test it, I have also attached a video of me playing Tetris and Super Mario Land on it as a demonstration. You can find it here, on the Github , and there’s also a screenshot below. You can use it by either pressing the demo button, or going to doodl0.github.io/gbweb/ Controls D-Pad -> WASD keys A button -> L key B button -> K key Select button -> Backspace key Start button -> Enter key These are also shown before loading a ROM Challenges This project really challenged my knowledge of low-level systems; especially since I had never made an emulator or even written an assembly program before. I had to rely on a lot of resources that other people had freely compiled, as the Gameboy is fairly advanced, however as it is so old, there’s been plenty of time for others to figure out how it works. (You can see the resources I used in the README) Simultaneously, this was also my first Emscripten project, which added more complexity. Through the devlogs, I also had to undergo lots of trial an error, until something finally was accurate enough, which felt especially frustrating at times What I’m proud of Mostly, I’m just proud that it even works a bit; at the start of the project, I was a little generous with how quickly I thought I could finish this, and as I got further, I got more unconfident. However, I’m glad I actually made something semi-usable, even if compatibility isn’t great at the moment. This is less important, but I’m also proud of the graphics I made for project, such as the banner. I tried to stay close to the original Gameboy’s palette and resolution for these, and I though it turned out well, if a bit overly green. Overall, I wish I just had more time in Stardance to continue working on this, but I’m happy with what I made so far....
|
1793501651.5124521
|
1793588051.5124521
|
|
29073
|
MR. ELECTRIC! by @Nicholas-Reyne | Stardance
|
Nicholas-Reyne
|
2
|
35.0
|
403
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-28T02:17:38Z", "hours": 9.0, "multiplier": 6.27, "payout": 55, "blessing": "neutral", "text": "I made an electric field simulator, and added two new key features from the last ship. The first being a ring charge, the second being a permittivity changer. I found the physics behind the ring charge to be very challenging, and it required many hours of brainstorming and drafting on paper to figure out. I’m very happy with how it all turned out, and I think the actual html now looks very pretty with the new background and organization!", "repo": "https://github.com/RaduUdrea1/Mr_Electric2", "demo": "https://raduudrea1.github.io/Mr_Electric2/"}, {"ship_num": 2, "ts": "2026-08-29T02:34:50Z", "hours": 26.0, "multiplier": 14.95, "payout": 348, "blessing": "neutral", "text": "I made an electric field simulator. It took about the past two or so months to actually figure out how anything works. It’s designed to help people visualize electric fields when doing electrostatics. It took a long time to learn the HTML, Python and JS to actually code it but I’m proud of the fact that it even exists. Future modes will include more stuff, and I’m happy to get a chance to ship it!", "repo": "https://github.com/RaduUdrea1/Mr_Electric2", "demo": "https://raduudrea1.github.io/Mr_Electric2/"}]...
|
[{"post_id": 74721, "ts": "202 [{"post_id": 74721, "ts": "2026-09-28T02:15:44Z", "hours": 4.9092, "text": "Hello all: I replaced the buggy dirac-delta mode with two new modes. The first is the ring charge mode, this creates a superposition of 36 point charges, which effectively simulates a continuous charged ring (not perfectly, but close enough to minimize error). This is especially useful for physics problems, as tons of them involve ring charges. Next, I added a mode that allowed you to change the permittivity of the space the charge is in, with a handful of presets ranging from the vacuum (free space) to pure water, all the way to titanium dioxide. In so doing, I also modified the guide and physics, enjoy these modes as you please. Furthermore, electric potential and electric potential energy were added to each mode, denoted by variables V and U. More additions to come in the future, stay tuned!"}, {"post_id": 68954, "ts": "2026-09-16T03:25:31Z", "hours": 3.9431, "text": "Hello all: I added a new background to make Mr. Electric feel less bland. I organized the information in the pages into blocks, this way it is easier to read, and less info-dumpy. I introduced a slider mode for the charges as well, this way you could drag the slider along and it would update the charge. Future changes are coming: Potentials, Electric Potential Energy, Better Dirac-Delta and more! Stay tuned!"}, {"post_id": 56994, "ts": "2026-08-29T01:55:13Z", "hours": 4.7481, "text": "Devlog 3: I added the ability to set a probe point on the first three run modes, the probe point will return electric field magnitude at that point, but it will also return the x, y and z components of that magnitude, so that anyone doing electrostatics problems can check their work as well. The graph now takes inputs in nanocoulombs, and it grows when larger inputs are put in, rather than changing the color. Guide and gallery have been updated to include these changes as well. Inputs have also been stacked neatly rather than arrayed one by one. Honest limits: One single color for all the plots, Gaussian mode not yet helpful because it still only contains one charge, and Dirac Delta is still just cosmetic! Future work will fix these!"}, {"post_id": 53475, "ts": "2026-08-24T01:20:19Z", "hours": 13.0117, "text": "It’s been a while since I’ve posted a devlog! This is Mr. Electric updates. I’ve brought the simulator into the html proper with a new simulate page. The code uses python connected to javascript. New features: Smoothed out the html and cleaned up any bugs. Added a simulate.html page where the simulator actually runs using Pyodide. Added dropdown options and menus to input values for the simulator. Future features: Planned expansion of simulator with more probe points, and drag and drop feature for probes. Ability to do actual calculations with the fields, and more dynamic fields that are prettier and smoother. Cleaner html and better style and buttons, including a unified nav style."}, {"post_id": 34082, "ts": "2026-07-24T15:36:43Z", "hours": 8.5542, "text": "This is the first devlog for my Mr. Electric project, its a small scale passion project designed to simulate electric fields with user input. I designed it over the span of about eight hours, alongside working the physics problems myself from Griffiths Electrodynamics Fourth Edition. Cursor assisted in debugging the code. The code uses NumPy, SciPy and Matplotlib. There are a few honest limits: I had to scale the arrows so nothing was generated close to the origin, the result was monstrous arrows because of the divide by zero issue. Dirac Delta is furthermore, simply a cosmetic feature. Dirac Delta represents particles, and graphically it is just an infinitely tall spike, I tried to simulate that in 3d and ended up with the current delta cluster. The project contains four run modes, one charge, two charge, Gaussian sphere plus probe and delta cluster. The main issue for this log was simply setting up the functions, and making sure everything worked! Up next is a public demo, more features, and a heatmap to help indicate relative vector strength."}]...
|
Title: MR. ELECTRIC! by @Nicholas-Reyne | Stardanc Title: MR. ELECTRIC! by @Nicholas-Reyne | Stardance
Devlogs:
This is the first devlog for my Mr. Electric project, its a small scale passion project designed to simulate electric fields with user input. I designed it over the span of about eight hours, alongside working the physics problems myself from Griffiths Electrodynamics Fourth Edition. Cursor assisted in debugging the code. The code uses NumPy, SciPy and Matplotlib. There are a few honest limits: I had to scale the arrows so nothing was generated close to the origin, the result was monstrous arrows because of the divide by zero issue. Dirac Delta is furthermore, simply a cosmetic feature. Dirac Delta represents particles, and graphically it is just an infinitely tall spike, I tried to simulate that in 3d and ended up with the current delta cluster. The project contains four run modes, one charge, two charge, Gaussian sphere plus probe and delta cluster. The main issue for this log was simply setting up the functions, and making sure everything worked! Up next is a public demo, more features, and a heatmap to help indicate relative vector strength.
It’s been a while since I’ve posted a devlog! This is Mr. Electric updates. I’ve brought the simulator into the html proper with a new simulate page. The code uses python connected to javascript. New features: Smoothed out the html and cleaned up any bugs. Added a simulate.html page where the simulator actually runs using Pyodide. Added dropdown options and menus to input values for the simulator. Future features: Planned expansion of simulator with more probe points, and drag and drop feature for probes. Ability to do actual calculations with the fields, and more dynamic fields that are prettier and smoother. Cleaner html and better style and buttons, including a unified nav style.
Devlog 3: I added the ability to set a probe point on the first three run modes, the probe point will return electric field magnitude at that point, but it will also return the x, y and z components of that magnitude, so that anyone doing electrostatics problems can check their work as well. The graph now takes inputs in nanocoulombs, and it grows when larger inputs are put in, rather than changing the color. Guide and gallery have been updated to include these changes as well. Inputs have also been stacked neatly rather than arrayed one by one. Honest limits: One single color for all the plots, Gaussian mode not yet helpful because it still only contains one charge, and Dirac Delta is still just cosmetic! Future work will fix these!
Hello all: I added a new background to make Mr. Electric feel less bland. I organized the information in the pages into blocks, this way it is easier to read, and less info-dumpy. I introduced a slider mode for the charges as well, this way you could drag the slider along and it would update the charge. Future changes are coming: Potentials, Electric Potential Energy, Better Dirac-Delta and more! Stay tuned!
Hello all: I replaced the buggy dirac-delta mode with two new modes. The first is the ring charge mode, this creates a superposition of 36 point charges, which effectively simulates a continuous charged ring (not perfectly, but close enough to minimize error). This is especially useful for physics problems, as tons of them involve ring charges. Next, I added a mode that allowed you to change the permittivity of the space the charge is in, with a handful of presets ranging from the vacuum (free space) to pure water, all the way to titanium dioxide. In so doing, I also modified the guide and physics, enjoy these modes as you please. Furthermore, electric potential and electric potential energy were added to each mode, denoted by variables V and U. More additions to come in the future, stay tuned!
Ships:
I made an electric field simulator. It took about the past two or so months to actually figure out how anything works. It’s designed to help people visualize electric fields when doing electrostatics. It took a long time to learn the HTML, Python and JS to actually code it but I’m proud of the fact that it even exists. Future modes will include more stuff, and I’m happy to get a chance to ship it!
I made an electric field simulator, and added two new key features from the last ship. The first being a ring charge, the second being a permittivity changer. I found the physics behind the ring charge to be very challenging, and it required many hours of brainstorming and drafting on paper to figure out. I’m very happy with how it all turned out, and I think the actual html now looks very pretty with the new background and organization!...
|
1793501657.0000277
|
1793588057.0000277
|
|
30620
|
DIY Surveillance system by @suklaasukkulayt | Star DIY Surveillance system by @suklaasukkulayt | Stardance...
|
suklaasukkulayt
|
1
|
1.42
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T17:25:02Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I can’t upload the video here, but it’s in my devlog From my devlog: I made a DIY surveillance camera from an old (and broken :D) android phone. It uses the IP camera app and custom html code i made myself to show the camera feed in the apk file and the .html file. There isn’t any crazy features, like no remote control (you can do that with tailscale), but it still works well if you don’t need to use it without being home. The code supports live video and live audio but nothing else. I also 3d printed and modified (added a stand with tinkercad) a phone case for galaxy j5 (this is the phone i used), but it didn’t fit as you can see in the image. The apk file is kind of useless unless your camera is at the same ip as mine. Also i didn’t have hackatime properly set up when i started this, but 20min (which actually got logged) is actually pretty close to the time this took. Also @Makkonen helped me with this(i got the idea from him)", "repo": "https://github.com/suklaasukkulayt/kuuppacam", "demo": "https://suklaasukkulayt.github.io/kuuppacam/"}]...
|
[{"post_id": 35314, "ts": "202 [{"post_id": 35314, "ts": "2026-07-26T17:11:26Z", "hours": 1.4189, "text": "Big update to KuuppaCam! I made the site look way better and fixed some stuff. I used github copilot to add recording so you can now record from your camera and I also used it to add easy IP changing so you can use it without editing the code. Also the IP address is now in https so it’s more secure and hopefully works better. THIS IS THE FINAL VERSION OF KUUPPACAM, the old version is still in github (kuuppacam-old.html) (Also the video below has no audio because apparently the zorin os video recorder doesn’t have audio recording :D)"}, {"post_id": 22961, "ts": "2026-07-05T17:15:27Z", "hours": 0.3219, "text": "I made a DIY surveillance camera from an old (and broken :D) android phone. It uses the IP camera app and custom html code i made myself to show the camera feed in the apk file and the .html file. There isn’t any crazy features, like no remote control (you can do that with tailscale), but it still works well if you don’t need to use it without being home. The code supports live video and live audio but nothing else. I also 3d printed and modified (added a stand with tinkercad) a phone case for galaxy j5 (this is the phone i used), but it didn’t fit as you can see in the image. The apk file is kind of useless unless your camera is at the same ip as mine. Also i didn’t have hackatime properly set up when i started this, but 20min (which actually got logged) is actually pretty close to the time this took. Also @Makkonen helped me with this(i got the idea from him)"}]...
|
Title: DIY Surveillance system by @suklaasukkulayt Title: DIY Surveillance system by @suklaasukkulayt | Stardance
Devlogs:
I made a DIY surveillance camera from an old (and broken :D) android phone. It uses the IP camera app and custom html code i made myself to show the camera feed in the apk file and the .html file. There isn’t any crazy features, like no remote control (you can do that with tailscale), but it still works well if you don’t need to use it without being home. The code supports live video and live audio but nothing else. I also 3d printed and modified (added a stand with tinkercad) a phone case for galaxy j5 (this is the phone i used), but it didn’t fit as you can see in the image. The apk file is kind of useless unless your camera is at the same ip as mine. Also i didn’t have hackatime properly set up when i started this, but 20min (which actually got logged) is actually pretty close to the time this took. Also @Makkonen helped me with this(i got the idea from him)
Big update to KuuppaCam! I made the site look way better and fixed some stuff. I used github copilot to add recording so you can now record from your camera and I also used it to add easy IP changing so you can use it without editing the code. Also the IP address is now in https so it’s more secure and hopefully works better. THIS IS THE FINAL VERSION OF KUUPPACAM, the old version is still in github (kuuppacam-old.html) (Also the video below has no audio because apparently the zorin os video recorder doesn’t have audio recording :D)
Ships:
I can’t upload the video here, but it’s in my devlog From my devlog: I made a DIY surveillance camera from an old (and broken :D) android phone. It uses the IP camera app and custom html code i made myself to show the camera feed in the apk file and the .html file. There isn’t any crazy features, like no remote control (you can do that with tailscale), but it still works well if you don’t need to use it without being home. The code supports live video and live audio but nothing else. I also 3d printed and modified (added a stand with tinkercad) a phone case for galaxy j5 (this is the phone i used), but it didn’t fit as you can see in the image. The apk file is kind of useless unless your camera is at the same ip as mine. Also i didn’t have hackatime properly set up when i started this, but 20min (which actually got logged) is actually pretty close to the time this took. Also @Makkonen helped me with this(i got the idea from him)...
|
1793501662.4123988
|
1793588062.4123988
|
|
51437
|
VasuOS by @Paachu | Stardance
|
Paachu
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T17:28:49Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "VasuOS V1.0.0 Officially shipped Built over 5 days with around 5 hours of coding , starting from the Stardance WebOS 1 mission. Final Features File system File viewer Image viewer with multiple windows Terminal with an Easter egg Google Search App launcher Window dragging, resizing, minimizing and maximizing Credits page Built With HTML CSS JavaScript Python filesystem generator Live os.vasudevonden.in Status SHIPPED — VasuOS v1.0.0", "repo": "https://github.com/Along-the-skies/VasuOS", "demo": "https://os.vasudevonden.in/"}]...
|
[{"post_id": 55682, "ts": "202 [{"post_id": 55682, "ts": "2026-08-27T17:26:05Z", "hours": 0.5908, "text": "Devlog - Day 4 Final Log Before Ship VasuOS v1.0.0 is ready After around 5 days of working on this project and about 5 hours of coding, VasuOS is finally done. I found MeowOS while looking through Stardance projects and wondered how a website could look this good. Then I found the WebOS 1 beginner mission and decided to try it myself. Today, 27-08-2026 , I finished VasuOS. Features File system Terminal with an Easter egg Google Search File/Image Viewer with multiple windows Credits page My frontend-designer friend also said it looks good, so I’m calling that a win. This is just VasuOS v1.0.0 . Live os.vasudevonden.in"}, {"post_id": 52305, "ts": "2026-08-22T12:47:14Z", "hours": 2.0194, "text": "Devlog - Day 3💻 Today, I updated VasuOS with so many tiny Ux improvements What I built A Python script to initialise Virtual File system by Files directory in project root Folder navigation in Files app Files,Image Viewer and Unsupported Error handler Minimize-close functions rebuilt for better UX App running indicators STAY TUNED FOR UPDATES < VasuOS > by Vasudev"}, {"post_id": 51139, "ts": "2026-08-20T17:11:04Z", "hours": 1.2289, "text": "Devlog — Day 2 💻 Today , I wanted to level up VasuOS ! What I built 💻 VasuOS Terminal ⌨️ help command 🧹 clear command 📢 echo command with arguments ❓ Unknown command handling 🕐 Live system clock 🪟 Toggleable maximize / restore 📦 Split Terminal and Clock into separate JS files What I learned Basic command parsing with split() How to handle command arguments JavaScript modules Using Date() for a live clock More DOM manipulation Problems 💀 echo vasu was being treated as one whole command 😭 Terminal output formatting got weird script.js started getting pretty big file:// caused CORS issues while testing locally Had to switch to type=\"module\" for JS imports 🍌 – Easter egg: banana! Next 🚀 Add more Terminal commands Add window focus Polish the desktop UX Make VasuOS feel more like an actual OS 🖥️"}, {"post_id": 50410, "ts": "2026-08-19T15:57:00Z", "hours": 1.2833, "text": "Devlog — Day 1 🖥️ Today I started building VasuOS ! What I built 🖥️ Desktop 📊 Top bar 🚀 Floating dock 📁 Files window 🪟 Close / minimize / maximize 🖱️ Window dragging ↔️ Window resizing 🔒 Window boundaries What I learned How HTML + CSS positioning works JavaScript mouse events Event listeners Basic DOM manipulation How window dragging and resizing actually works Problems 💀 The legendary ant effect 🐜–Window TPs like a ant when touching mouse pointer Text selection while dragging Window escaping the screen transform causing positioning problems A few resize event bugs Next 🚀 Polish the window manager Improve minimize/maximize Add window focus Start building the Terminal 💻"}, {"post_id": 50330, "ts": "2026-08-19T14:30:16Z", "hours": 0.4931, "text": "VasuOS WebOs by Vasu First Look 👀"}]...
|
Title: VasuOS by @Paachu | Stardance
Devlogs:
Vas Title: VasuOS by @Paachu | Stardance
Devlogs:
VasuOS WebOs by Vasu First Look 👀
Devlog — Day 1 🖥️ Today I started building VasuOS ! What I built 🖥️ Desktop 📊 Top bar 🚀 Floating dock 📁 Files window 🪟 Close / minimize / maximize 🖱️ Window dragging ↔️ Window resizing 🔒 Window boundaries What I learned How HTML + CSS positioning works JavaScript mouse events Event listeners Basic DOM manipulation How window dragging and resizing actually works Problems 💀 The legendary ant effect 🐜–Window TPs like a ant when touching mouse pointer Text selection while dragging Window escaping the screen transform causing positioning problems A few resize event bugs Next 🚀 Polish the window manager Improve minimize/maximize Add window focus Start building the Terminal 💻
Devlog — Day 2 💻 Today , I wanted to level up VasuOS ! What I built 💻 VasuOS Terminal ⌨️ help command 🧹 clear command 📢 echo command with arguments ❓ Unknown command handling 🕐 Live system clock 🪟 Toggleable maximize / restore 📦 Split Terminal and Clock into separate JS files What I learned Basic command parsing with split() How to handle command arguments JavaScript modules Using Date() for a live clock More DOM manipulation Problems 💀 echo vasu was being treated as one whole command 😭 Terminal output formatting got weird script.js started getting pretty big file:// caused CORS issues while testing locally Had to switch to type="module" for JS imports 🍌 – Easter egg: banana! Next 🚀 Add more Terminal commands Add window focus Polish the desktop UX Make VasuOS feel more like an actual OS 🖥️
Devlog - Day 3💻 Today, I updated VasuOS with so many tiny Ux improvements What I built A Python script to initialise Virtual File system by Files directory in project root Folder navigation in Files app Files,Image Viewer and Unsupported Error handler Minimize-close functions rebuilt for better UX App running indicators STAY TUNED FOR UPDATES < VasuOS > by Vasudev
Devlog - Day 4 Final Log Before Ship VasuOS v1.0.0 is ready After around 5 days of working on this project and about 5 hours of coding, VasuOS is finally done. I found MeowOS while looking through Stardance projects and wondered how a website could look this good. Then I found the WebOS 1 beginner mission and decided to try it myself. Today, 27-08-2026 , I finished VasuOS. Features File system Terminal with an Easter egg Google Search File/Image Viewer with multiple windows Credits page My frontend-designer friend also said it looks good, so I’m calling that a win. This is just VasuOS v1.0.0 . Live os.vasudevonden.in
Ships:
VasuOS V1.0.0 Officially shipped Built over 5 days with around 5 hours of coding , starting from the Stardance WebOS 1 mission. Final Features File system File viewer Image viewer with multiple windows Terminal with an Easter egg Google Search App launcher Window dragging, resizing, minimizing and maximizing Credits page Built With HTML CSS JavaScript Python filesystem generator Live os.vasudevonden.in Status SHIPPED — VasuOS v1.0.0...
|
1793501668.207838
|
1793588068.207838
|
|
116
|
My first slack bot! by @remymoreau12 | Stardance
|
remymoreau12
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-01T22:38:33Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a slack bot! Thats so cool", "repo": "https://github.com/squeakycleanfreshie-cloud/Totoro-Slack-Bot", "demo": "https://hackclub.slack.com/archives/C0B9GUMA326"}]...
|
[{"post_id": 187, "ts": "2026- [{"post_id": 187, "ts": "2026-06-01T06:43:42Z", "hours": 0.4228, "text": "I setup my slack bot! I’m working on adding more functions soon"}]...
|
Title: My first slack bot! by @remymoreau12 | Star Title: My first slack bot! by @remymoreau12 | Stardance
Devlogs:
I setup my slack bot! I’m working on adding more functions soon
Ships:
I made a slack bot! Thats so cool...
|
1793501676.5578017
|
1793588076.5578017
|
|
23188
|
My very own WebOS by @Derpyman | Stardance
|
Derpyman
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-28T15:47:37Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an OS inspired by cats. The most challenging aspects were creating a grid based organizational system and creating the advanced app: Purrgram (Instagram but for cats). I’m proud of the chibi cat implementation akin to a companion extension.", "repo": "https://github.com/AC583/KittyOS", "demo": "https://ac583.github.io/KittyOS/"}]...
|
[{"post_id": 17667, "ts": "202 [{"post_id": 17667, "ts": "2026-06-28T15:36:11Z", "hours": 0.4833, "text": "Implemented an Instagram type app that allows the user to scroll through reels with cats."}, {"post_id": 13288, "ts": "2026-06-21T19:12:17Z", "hours": 0.8864, "text": "Added a chibi cat extension can be fed and pet and has different reactions."}, {"post_id": 12877, "ts": "2026-06-21T03:04:28Z", "hours": 1.5986, "text": "Basic Functionality"}]...
|
Title: My very own WebOS by @Derpyman | Stardance
Title: My very own WebOS by @Derpyman | Stardance
Devlogs:
Basic Functionality
Added a chibi cat extension can be fed and pet and has different reactions.
Implemented an Instagram type app that allows the user to scroll through reels with cats.
Ships:
I made an OS inspired by cats. The most challenging aspects were creating a grid based organizational system and creating the advanced app: Purrgram (Instagram but for cats). I’m proud of the chibi cat implementation akin to a companion extension....
|
1793501687.4496286
|
1793588087.4496286
|
|
38090
|
Frictionless by @BestSpark687090 | Stardance
|
BestSpark687090
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T05:14:05Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "heya! basically, this is a duplicate tab remover. it basically lets you remove your tabs based off of the url, icon url, or the title! if you’re like me, you always have TOO MANY TABS 😭 and you gotta got rid of them somehow. now i know it might be a lil weird, but hey, it works! and as they say usually, if something works, don’t try to fix it… or something like that. i definitely had some interesting times making this. maybe you’ll use it to its advantage?", "repo": "https://github.com/BestSpark687090/duplicate_tab_remover_extension", "demo": "https://github.com/BestSpark687090/duplicate_tab_remover_extension/releases"}]...
|
[{"post_id": 32780, "ts": "202 [{"post_id": 32780, "ts": "2026-07-22T05:02:46Z", "hours": 0.4472, "text": "devloggie numberie three styling has been done better i guess"}, {"post_id": 32760, "ts": "2026-07-22T03:42:05Z", "hours": 0.7867, "text": "devlog number 2 goofy styling has been added 0.25 transition between things btw yippee"}, {"post_id": 32637, "ts": "2026-07-21T22:28:53Z", "hours": 1.5975, "text": "devlog number one i guess? so i made the duplicate tab remover. basically, its entire goal is to remove your duplicate tabs based off of what you select. you can select all of them by the way if you wanted to. okay that’s it bye :)"}]...
|
Title: Frictionless by @BestSpark687090 | Stardanc Title: Frictionless by @BestSpark687090 | Stardance
Devlogs:
devlog number one i guess? so i made the duplicate tab remover. basically, its entire goal is to remove your duplicate tabs based off of what you select. you can select all of them by the way if you wanted to. okay that’s it bye :)
devlog number 2 goofy styling has been added 0.25 transition between things btw yippee
devloggie numberie three styling has been done better i guess
Ships:
heya! basically, this is a duplicate tab remover. it basically lets you remove your tabs based off of the url, icon url, or the title! if you’re like me, you always have TOO MANY TABS 😭 and you gotta got rid of them somehow. now i know it might be a lil weird, but hey, it works! and as they say usually, if something works, don’t try to fix it… or something like that. i definitely had some interesting times making this. maybe you’ll use it to its advantage?...
|
1793501691.501582
|
1793588091.501582
|
|
3228
|
gnn pcna by @advay_awesomer | Stardance
|
advay_awesomer
|
1
|
16.0
|
188
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T20:17:45Z", "hours": 16.0, "multiplier": 18.82, "payout": 188, "blessing": "neutral", "text": "Made GNN-PCNA: a graph neural network that scores which residues on PCNA — a notoriously hard cancer drug target — are worth investigating as hidden (“cryptic”) pockets. It reads a protein as two graphs at once (3D contacts + backbone chain) and fuses them with a learned attention gate — a GATv2 design the standard baseline (PocketMiner) doesn’t use. Hardest part wasn’t the model — it was catching homology leakage in my own data. My first benchmark looked great until I ran MMseqs2 and found near-identical proteins (99% identity!) sitting across the train/test split. So I deleted my own headline numbers and rebuilt everything on a clean 30%-homology split. The honest score came out lower — and that’s the whole point. Proud of: it’s engineered to not overclaim. Every output is framed as “hypothesis generation,” an automated verifier catches my own mistakes, and an ablation proves how much comes from sequence vs. structure. To test it: open the demo, pick a PCNA structure (try 8GLA or 1W60), and watch it score every residue in ~2s with a 3D viewer + heatmap. Heads-up: the live demo runs the lightweight model; the headline AUPRC/AUROC come from a heavier ESM2 model (too big to host free). Full story in the repo’s DEVLOG.", "repo": "https://github.com/advaycode/gnnpcna", "demo": "https://advaycode.github.io/gnnpcna/"}]...
|
[{"post_id": 13820, "ts": "202 [{"post_id": 13820, "ts": "2026-06-22T17:19:21Z", "hours": 15.8911, "text": "first making a memory base for the gnn"}]...
|
Title: gnn pcna by @advay_awesomer | Stardance
De Title: gnn pcna by @advay_awesomer | Stardance
Devlogs:
first making a memory base for the gnn
Ships:
Made GNN-PCNA: a graph neural network that scores which residues on PCNA — a notoriously hard cancer drug target — are worth investigating as hidden (“cryptic”) pockets. It reads a protein as two graphs at once (3D contacts + backbone chain) and fuses them with a learned attention gate — a GATv2 design the standard baseline (PocketMiner) doesn’t use. Hardest part wasn’t the model — it was catching homology leakage in my own data. My first benchmark looked great until I ran MMseqs2 and found near-identical proteins (99% identity!) sitting across the train/test split. So I deleted my own headline numbers and rebuilt everything on a clean 30%-homology split. The honest score came out lower — and that’s the whole point. Proud of: it’s engineered to not overclaim. Every output is framed as “hypothesis generation,” an automated verifier catches my own mistakes, and an ablation proves how much comes from sequence vs. structure. To test it: open the demo, pick a PCNA structure (try 8GLA or 1W60), and watch it score every residue in ~2s with a 3D viewer + heatmap. Heads-up: the live demo runs the lightweight model; the headline AUPRC/AUROC come from a heavier ESM2 model (too big to host free). Full story in the repo’s DEVLOG....
|
1793501698.97193
|
1793588098.97193
|
|
6841
|
Snake! by @zahran | Stardance
|
zahran
|
1
|
5.0
|
79
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T20:35:29Z", "hours": 5.0, "multiplier": 13.26, "payout": 79, "blessing": "neutral", "text": "I started learning Java at the beginning of June, and to test my skills I recreated Snake in Java. You can control the snake using WASD/arrow keys, and reset the game using R. It features modifiers that let you adjust the snake’s speed and board size, and you can enable other modifiers as well. During development, I faced a lot of minor challenges caused by me writing something incorrectly and then battling with the bug for 5-10 minutes or so. Since it’s my first project made using Java, I tried to do most things on my own but I did reference a video if I got too stuck on one thing. However, I’m super proud of achieving this, for two main reasons: It’s my first project made in Java, and it’s actually usable and fun to play. It’s a functional game that people can play. This is especially important because I’m planning to make a platformer in C++ soon, so this was a nice warmup for game development. Anyway, I hope you enjoy my Snake game! :)", "repo": "https://github.com/HughMann635/SnakeGame", "demo": "https://github.com/HughMann635/SnakeGame/releases/tag/Initializing"}]...
|
[{"post_id": 19396, "ts": "202 [{"post_id": 19396, "ts": "2026-06-30T18:21:18Z", "hours": 0.4228, "text": "I just fixed two bugs/issues: Made it so you can no longer click a button while the game is running Fixed a bug where if you mashed two inputs in the same frame, your snake could crash (e.g. moving down and mashing the right and up inputs). I fixed this by adding a check to make sure you can only switch directions once per frame. How I did it: I made a boolean called hasMoved, set it to false, and made it check for if hasMoved was false. It also sets hasMoved to true after you change direction and sets it back to false at the end of the frame."}, {"post_id": 19338, "ts": "2026-06-30T16:53:18Z", "hours": 2.1356, "text": "It’s been a hot minute since I posted a devlog, but I think I’ve more or less finished the game. Here’s what I’ve added: Interactive buttons that let you toggle/change the snake’s speed, size of the board, and different modifiers such as disabled collisions and mines that spawn randomly on the map Fixed a bunch of pre-existing bugs (like with score tracking) and new bugs (working out the mines was so annoying holy) yeah that’s pretty much it I think. Next steps: I’ll look into making it resizable/of different dimensions. Honestly, I might not do this one because a lot of my positions/coordinates were hard coded so it might be a pain to rework, but I’ll think about it. I’ll fix any remaining bugs that I can catch. I know there’s one that crashes the snake if you try to mash two directions together. And last but not least, I’m gonna start preparing to ship!"}, {"post_id": 17227, "ts": "2026-06-27T22:53:23Z", "hours": 0.7336, "text": "Ok so I went and fixed all the bugs, there were a LOT of bugs. here’s a couple: Snake movement and apple generation were happening incorrectly; I use a system where different variables like appleX, appleY, and an array for x and y values of each snake segment are stored as values between 1 and the length of the board (boardDim). They’re then multiplied by the dimension of each cell(cellDim). I initially forgot to multiply by cellDim so the snake was moving at a 1 pixel/second speed and the apple was confined to the top left corner. The borders of the cells were not being generated I didn’t initialize the arrays that contain the positions for each of the snake’s segments, causing the game to not run at all initially Up and down controls were reversed; borders did not work If you mash 2 directions, you can crash: e.g. if you’re going up, then mash left and down, the program interprets your down input as the latest one and essentially pushes you into yourself There are probably some more I haven’t explored yet, but for now I’m gonna work on the main menu."}, {"post_id": 17195, "ts": "2026-06-27T22:05:51Z", "hours": 1.1186, "text": "This time I completed pretty much all the basic gameplay mechanics and the game should technically work once I fix up any bugs. However, there are still bugs: quite a few of them, actually, since I kinda just brute forced my way through this stage of development with code that I thought should work. Anyway, once I get any bugs that stop me from running the game sorted out, I’ll refine the bugs that are impacting gameplay (there are def gonna be a couple of bugs there too). Then I’ll probably get started on designing a main menu."}, {"post_id": 16553, "ts": "2026-06-26T22:31:46Z", "hours": 0.5861, "text": "I started learning Java at the beginning of June, and to test my skills I’ making a guided project in Java. I decided to recreate Snake, using the video attached in the README file to help guide me. I’ll try to use it as minimally as possible, but if I get stuck I’ll watch the video to learn where to go next. So far I’ve just set up files and classes/functions as mentioned in the video, and I also set up a couple of variables and some code for a few functions on my own. Next time I’ll work on gameplay aspects, then I’ll move on to coding a death screen completely on my own."}]...
|
Title: Snake! by @zahran | Stardance
Devlogs:
I s Title: Snake! by @zahran | Stardance
Devlogs:
I started learning Java at the beginning of June, and to test my skills I’ making a guided project in Java. I decided to recreate Snake, using the video attached in the README file to help guide me. I’ll try to use it as minimally as possible, but if I get stuck I’ll watch the video to learn where to go next. So far I’ve just set up files and classes/functions as mentioned in the video, and I also set up a couple of variables and some code for a few functions on my own. Next time I’ll work on gameplay aspects, then I’ll move on to coding a death screen completely on my own.
This time I completed pretty much all the basic gameplay mechanics and the game should technically work once I fix up any bugs. However, there are still bugs: quite a few of them, actually, since I kinda just brute forced my way through this stage of development with code that I thought should work. Anyway, once I get any bugs that stop me from running the game sorted out, I’ll refine the bugs that are impacting gameplay (there are def gonna be a couple of bugs there too). Then I’ll probably get started on designing a main menu.
Ok so I went and fixed all the bugs, there were a LOT of bugs. here’s a couple: Snake movement and apple generation were happening incorrectly; I use a system where different variables like appleX, appleY, and an array for x and y values of each snake segment are stored as values between 1 and the length of the board (boardDim). They’re then multiplied by the dimension of each cell(cellDim). I initially forgot to multiply by cellDim so the snake was moving at a 1 pixel/second speed and the apple was confined to the top left corner. The borders of the cells were not being generated I didn’t initialize the arrays that contain the positions for each of the snake’s segments, causing the game to not run at all initially Up and down controls were reversed; borders did not work If you mash 2 directions, you can crash: e.g. if you’re going up, then mash left and down, the program interprets your down input as the latest one and essentially pushes you into yourself There are probably some more I haven’t explored yet, but for now I’m gonna work on the main menu.
It’s been a hot minute since I posted a devlog, but I think I’ve more or less finished the game. Here’s what I’ve added: Interactive buttons that let you toggle/change the snake’s speed, size of the board, and different modifiers such as disabled collisions and mines that spawn randomly on the map Fixed a bunch of pre-existing bugs (like with score tracking) and new bugs (working out the mines was so annoying holy) yeah that’s pretty much it I think. Next steps: I’ll look into making it resizable/of different dimensions. Honestly, I might not do this one because a lot of my positions/coordinates were hard coded so it might be a pain to rework, but I’ll think about it. I’ll fix any remaining bugs that I can catch. I know there’s one that crashes the snake if you try to mash two directions together. And last but not least, I’m gonna start preparing to ship!
I just fixed two bugs/issues: Made it so you can no longer click a button while the game is running Fixed a bug where if you mashed two inputs in the same frame, your snake could crash (e.g. moving down and mashing the right and up inputs). I fixed this by adding a check to make sure you can only switch directions once per frame. How I did it: I made a boolean called hasMoved, set it to false, and made it check for if hasMoved was false. It also sets hasMoved to true after you change direction and sets it back to false at the end of the frame.
Ships:
I started learning Java at the beginning of June, and to test my skills I recreated Snake in Java. You can control the snake using WASD/arrow keys, and reset the game using R. It features modifiers that let you adjust the snake’s speed and board size, and you can enable other modifiers as well. During development, I faced a lot of minor challenges caused by me writing something incorrectly and then battling with the bug for 5-10 minutes or so. Since it’s my first project made using Java, I tried to do most things on my own but I did reference a video if I got too stuck on one thing. However, I’m super proud of achieving this, for two main reasons: It’s my first project made in Java, and it’s actually usable and fun to play. It’s a functional game that people can play. This is especially important because I’m planning to make a platformer in C++ soon, so this was a nice warmup for game development. Anyway, I hope you enjoy my Snake game! :)...
|
1793501700.1957464
|
1793588100.1957464
|
|
32857
|
Personal Portfolio Website by @Sourish-D | Stardan Personal Portfolio Website by @Sourish-D | Stardance...
|
Sourish-D
|
1
|
38.0
|
444
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T16:54:04Z", "hours": 38.0, "multiplier": 12.86, "payout": 444, "blessing": "neutral", "text": "I made a site to showcase my projects, achievements, and skills using React, Vite, and deployed on Vercel. Initially, I planned to make this on HTML, CSS, and JS but then realized there were a lot of repeated components, and that adding more in the future would be a lot harder, so I made a full switch to react. This also allowed me to make use of state fields which made the animations so much easier. The API connections are also a little bit difficult at the moment, the leetcode API especially tends to lose it’s tokens really quickly and I tried circumventing that using local cache but it doesn’t seem to be working exactly as intended. I’ll probably fix that in the future, but the Last.FM (The music section) and the Github APIs work as intended. But yeah, I’m proud of the animations and the responsive design, and I believe this is the best site I’ve made. So, without further delay, welcome to my personal website!", "repo": "https://github.com/Sourish-D/Portfolio-Website", "demo": "https://my-portfolio-pi-sand-83.vercel.app/"}]...
|
[{"post_id": 56648, "ts": "202 [{"post_id": 56648, "ts": "2026-08-28T14:20:44Z", "hours": 7.8725, "text": "Final Devlog Before Ship! There was a LOT of changes I made in this devlog, mostly in preparation for ship. First, I added the Github and Leetcode API connections. Next, I made the site responsive, allowing phones and tablets to be able to view the site Afterwards, I did a LOT of refactoring in the code and reviewing the requirements to ship Changed the .readme file Found out that I was making HORRIBLE commit names and tried changing it and found out rebasing ruins your entire history and gave up on that Refactored my code to make it a cleaner (Found out what refactoring means too) Changed the Github and Leetcode APIs AGAIN because it kept running into rate limits But now it’s done and I believe ready to ship!"}, {"post_id": 54713, "ts": "2026-08-25T19:45:55Z", "hours": 2.9658, "text": "Beginning of backend! Today I managed to get the back-end started with Vercel and now I have Last.FM API integration! At first, I tried using Spotify for the API but then I found out it requires premium, so I decided to switch over to Last.FM for the statistics. Back-end integration was a HASSLE, it took me forever to find out that I had to put the .env.local api keys in the vercel page as well."}, {"post_id": 54145, "ts": "2026-08-24T23:44:22Z", "hours": 8.8431, "text": "This devlog, I added a bunch of animations and began styling. As you scroll, the arms move components on/off the screen and I added a parchment and gold border theme to all the blocks. Soon, I’m going to change it to have a more consistent and varied theme, and then I’ll connect the APIs."}, {"post_id": 47206, "ts": "2026-08-14T23:37:01Z", "hours": 13.0169, "text": "Devlog 3 I decided to change site from HTML / CSS to React. This was because I just like the React framework a lot more and it’ll make it easier to update it in the future. I also changed the entire structure of the page, adding a background and projects page. For now, it’s all in simple colors and styling, but soon I’ll add an opus magnum (video game) theme across the whole site. Currently I have basic animations, as I apply the theme across the site I may add several smaller animations just to add to the ‘mechanical’ feel of it. I also have to begin API integration with Spotify, Github, etc. to complete the site. The video is just a quick run-through of everything."}, {"post_id": 26254, "ts": "2026-07-10T22:43:55Z", "hours": 2.5003, "text": "Added Certificates Page and Web Dev Projects page. Modified the top bar a bit and added many more assets. The last stretch includes re-learning how to open my old java projects that use mySQL (I got locked out 😭😭) and to add a page talking about my current projects, stuff about the ESP2."}, {"post_id": 25097, "ts": "2026-07-09T02:38:17Z", "hours": 2.3428, "text": "Today, we began the project. Creating the home-bar and the drop-down associated with. Also began working on the “about me” section. Will work towards adding more information in that section. Tomorrow, will work on the certificates and languages pages."}]...
|
Title: Personal Portfolio Website by @Sourish-D | Title: Personal Portfolio Website by @Sourish-D | Stardance
Devlogs:
Today, we began the project. Creating the home-bar and the drop-down associated with. Also began working on the “about me” section. Will work towards adding more information in that section. Tomorrow, will work on the certificates and languages pages.
Added Certificates Page and Web Dev Projects page. Modified the top bar a bit and added many more assets. The last stretch includes re-learning how to open my old java projects that use mySQL (I got locked out 😭😭) and to add a page talking about my current projects, stuff about the ESP2.
Devlog 3 I decided to change site from HTML / CSS to React. This was because I just like the React framework a lot more and it’ll make it easier to update it in the future. I also changed the entire structure of the page, adding a background and projects page. For now, it’s all in simple colors and styling, but soon I’ll add an opus magnum (video game) theme across the whole site. Currently I have basic animations, as I apply the theme across the site I may add several smaller animations just to add to the ‘mechanical’ feel of it. I also have to begin API integration with Spotify, Github, etc. to complete the site. The video is just a quick run-through of everything.
This devlog, I added a bunch of animations and began styling. As you scroll, the arms move components on/off the screen and I added a parchment and gold border theme to all the blocks. Soon, I’m going to change it to have a more consistent and varied theme, and then I’ll connect the APIs.
Beginning of backend! Today I managed to get the back-end started with Vercel and now I have Last.FM API integration! At first, I tried using Spotify for the API but then I found out it requires premium, so I decided to switch over to Last.FM for the statistics. Back-end integration was a HASSLE, it took me forever to find out that I had to put the .env.local api keys in the vercel page as well.
Final Devlog Before Ship! There was a LOT of changes I made in this devlog, mostly in preparation for ship. First, I added the Github and Leetcode API connections. Next, I made the site responsive, allowing phones and tablets to be able to view the site Afterwards, I did a LOT of refactoring in the code and reviewing the requirements to ship Changed the .readme file Found out that I was making HORRIBLE commit names and tried changing it and found out rebasing ruins your entire history and gave up on that Refactored my code to make it a cleaner (Found out what refactoring means too) Changed the Github and Leetcode APIs AGAIN because it kept running into rate limits But now it’s done and I believe ready to ship!
Ships:
I made a site to showcase my projects, achievements, and skills using React, Vite, and deployed on Vercel. Initially, I planned to make this on HTML, CSS, and JS but then realized there were a lot of repeated components, and that adding more in the future would be a lot harder, so I made a full switch to react. This also allowed me to make use of state fields which made the animations so much easier. The API connections are also a little bit difficult at the moment, the leetcode API especially tends to lose it’s tokens really quickly and I tried circumventing that using local cache but it doesn’t seem to be working exactly as intended. I’ll probably fix that in the future, but the Last.FM (The music section) and the Github APIs work as intended. But yeah, I’m proud of the animations and the responsive design, and I believe this is the best site I’ve made. So, without further delay, welcome to my personal website!...
|
1793501702.5075943
|
1793588102.5075943
|
|
36725
|
JUMPZ by @CY3er | Stardance
|
CY3er
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T23:54:17Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a old arcade game simeler to the old game pong! it has a full phyisics system and scoring/high score system, also some fun easter eggs:3", "repo": "https://github.com/cheeseface533-creator/JUMPZ", "demo": "https://scratch.mit.edu/projects/1362933951/"}]...
|
[{"post_id": 31510, "ts": "202 [{"post_id": 31510, "ts": "2026-07-19T23:45:35Z", "hours": 2.5169, "text": "H1 JUMPZ #5 - DONE! I finished the Project!! I added some easter eggs, wrote the read me, fixed the bug that had been PLAGEING ME FOR SO LONG (even tho its only been 2 days…) I had SO MUCH FUN working on this project, and it was a nice intro into stardance with this being my first ship! (also my first time partisapating in hackclub ever!!!) I learned so much such as player movment with physiscs and alot of other things! link to the lapses –> https://lapse.hackclub.com/timelapse/2hNCXXXRIWAZ <– :3"}, {"post_id": 31361, "ts": "2026-07-19T18:03:24Z", "hours": 0.5839, "text": "JUMPZ #4 - BUGZ ;-; worked on makeing it so you cant just spam the super jump… made a oops and now need to figure out how to fix it not just spamming the sound… here is the link to the lapses: https://lapse.hackclub.com/timelapse/EhiV--gqZdOq :3"}, {"post_id": 30936, "ts": "2026-07-18T22:53:53Z", "hours": 1.3836, "text": "JUMPZ DEVLOG #3 - bug~ish fixing I worked on the fixing the problem of the imposible colectables. I very proud of the system i came up with! i made it so that there is a rotateing arrow around the balyou can press space and preforem a ‘jump’ mid air to get those hard to reach colectables! i also started work on the sounds! i also learned what the mod block does! and also ive been thinking of how to do the save load system my curent idea is to separadte into with dashes. but ill look and see what other people have done and learn from them! link to the lapse: –> https://lapse.hackclub.com/timelapse/8yy6O1TpfAjS <– thats it for now! :3"}, {"post_id": 30792, "ts": "2026-07-18T17:59:35Z", "hours": 1.6839, "text": "JUMPZ DEVLOG #2 - coin and scoring system Today i started on the socoreing system and the game over function. i made it so the scoreing system works by counding the number of time you hit the pattle. your ‘air time’ and the number of coins + the dificultey of geting them. i have ran into a problem… it just random chance if you get the coins so i need to come up with a way to make it skill based instead. so i got that going for me ;w; here is the link if you want to see the time lapse: https://lapse.hackclub.com/timelapse/ZDxZ--YPQKPx :3"}, {"post_id": 30515, "ts": "2026-07-18T04:39:43Z", "hours": 0.5986, "text": "JUMPZ DEVLOG #1 - Ball movement today i started working on a new game! it has been a long time since ive used scratch so im going to be useing it for this project! this game is called “JUMPZ” the goal for this game is to to keep you ball up and to not let it touch the floor (like from bluey:3) you get scored based on the amount of coins you get the number of times you hit the paddle and your “air time” some goals that i have for myself are to make a “save and load” system and also a working shop system! i did have to fix a werid bug that i created when i wanted the ball to jump around to the left and to the right randomly it would go that direction the just stop and start just bounding up and down nothing else but it turned out i just had a if statment i didnt need and it works just fine without it"}]...
|
Title: JUMPZ by @CY3er | Stardance
Devlogs:
JUMPZ Title: JUMPZ by @CY3er | Stardance
Devlogs:
JUMPZ DEVLOG #1 - Ball movement today i started working on a new game! it has been a long time since ive used scratch so im going to be useing it for this project! this game is called “JUMPZ” the goal for this game is to to keep you ball up and to not let it touch the floor (like from bluey:3) you get scored based on the amount of coins you get the number of times you hit the paddle and your “air time” some goals that i have for myself are to make a “save and load” system and also a working shop system! i did have to fix a werid bug that i created when i wanted the ball to jump around to the left and to the right randomly it would go that direction the just stop and start just bounding up and down nothing else but it turned out i just had a if statment i didnt need and it works just fine without it
JUMPZ DEVLOG #2 - coin and scoring system Today i started on the socoreing system and the game over function. i made it so the scoreing system works by counding the number of time you hit the pattle. your ‘air time’ and the number of coins + the dificultey of geting them. i have ran into a problem… it just random chance if you get the coins so i need to come up with a way to make it skill based instead. so i got that going for me ;w; here is the link if you want to see the time lapse: https://lapse.hackclub.com/timelapse/ZDxZ--YPQKPx :3
JUMPZ DEVLOG #3 - bug~ish fixing I worked on the fixing the problem of the imposible colectables. I very proud of the system i came up with! i made it so that there is a rotateing arrow around the balyou can press space and preforem a ‘jump’ mid air to get those hard to reach colectables! i also started work on the sounds! i also learned what the mod block does! and also ive been thinking of how to do the save load system my curent idea is to separadte into with dashes. but ill look and see what other people have done and learn from them! link to the lapse: –> https://lapse.hackclub.com/timelapse/8yy6O1TpfAjS <– thats it for now! :3
JUMPZ #4 - BUGZ ;-; worked on makeing it so you cant just spam the super jump… made a oops and now need to figure out how to fix it not just spamming the sound… here is the link to the lapses: https://lapse.hackclub.com/timelapse/EhiV--gqZdOq :3
H1 JUMPZ #5 - DONE! I finished the Project!! I added some easter eggs, wrote the read me, fixed the bug that had been PLAGEING ME FOR SO LONG (even tho its only been 2 days…) I had SO MUCH FUN working on this project, and it was a nice intro into stardance with this being my first ship! (also my first time partisapating in hackclub ever!!!) I learned so much such as player movment with physiscs and alot of other things! link to the lapses –> https://lapse.hackclub.com/timelapse/2hNCXXXRIWAZ <– :3
Ships:
I made a old arcade game simeler to the old game pong! it has a full phyisics system and scoring/high score system, also some fun easter eggs:3...
|
1793501707.4798589
|
1793588107.4798589
|
|
39243
|
My own site! by @ronitserva | Stardance
|
ronitserva
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-29T07:50:08Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my very-own personal website. This was the first website I’ve ever built. It did go through a lot of transformations before I arrived at a good enough design and structure for the website. One important thing is that the website might get clunky if you zoom in/zoom out the website too much. I recommend to keep a 100% zoom ratio.", "repo": "https://github.com/Ronit-Serva/My-Personal-Website", "demo": "https://ronit-serva.github.io/My-Personal-Website/"}]...
|
[{"post_id": 36879, "ts": "202 [{"post_id": 36879, "ts": "2026-07-29T07:44:56Z", "hours": 4.5631, "text": "I redesigned my website (twice) along the way I learnt about how to create a header & footer and how to center elements in the viewport. Throughout the session the most learning has come by just reading through the source code of other’s website and making sense of it. It has been a very good imparter of knowledge on me. HERE’S the transformation: before- on the left (black) AFTER- on the right (blue)"}, {"post_id": 35068, "ts": "2026-07-26T07:58:36Z", "hours": 3.1514, "text": "I completely redesigned my website. I added my profile photo, my Social links (accessible via icons; which I figured out myself how to do)."}, {"post_id": 34230, "ts": "2026-07-24T19:14:03Z", "hours": 0.5903, "text": "I just built the very first version of my personal Site."}]...
|
Title: My own site! by @ronitserva | Stardance
De Title: My own site! by @ronitserva | Stardance
Devlogs:
I just built the very first version of my personal Site.
I completely redesigned my website. I added my profile photo, my Social links (accessible via icons; which I figured out myself how to do).
I redesigned my website (twice) along the way I learnt about how to create a header & footer and how to center elements in the viewport. Throughout the session the most learning has come by just reading through the source code of other’s website and making sense of it. It has been a very good imparter of knowledge on me. HERE’S the transformation: before- on the left (black) AFTER- on the right (blue)
Ships:
I made my very-own personal website. This was the first website I’ve ever built. It did go through a lot of transformations before I arrived at a good enough design and structure for the website. One important thing is that the website might get clunky if you zoom in/zoom out the website too much. I recommend to keep a 100% zoom ratio....
|
1793501714.1150687
|
1793588114.1150687
|
|
1147
|
My first slack bot! by @project516 | Stardance
|
project516
|
2
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T14:36:12Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a slack bot, it’s really cool I was able to integrate it with slack and have it work in slack!", "repo": "https://github.com/Project516/project516sslackbot", "demo": "https://hackclub.enterprise.slack.com/archives/C0B971J716C"}, {"ship_num": 2, "ts": "2026-06-04T18:01:06Z", "hours": 1.0, "multiplier": 1.07, "payout": 1, "blessing": "neutral", "text": "i made a simple slack bot!!! its hosted on nest", "repo": "https://github.com/Project516/project516sslackbot", "demo": "https://hackclub.enterprise.slack.com/archives/C0B971J716C"}]...
|
[{"post_id": 2304, "ts": "2026 [{"post_id": 2304, "ts": "2026-06-04T18:29:42Z", "hours": 0.275, "text": "added documentation!"}, {"post_id": 2282, "ts": "2026-06-04T17:57:42Z", "hours": 0.8989, "text": "i made a slackbot that can do basic stuff!"}]...
|
Title: My first slack bot! by @project516 | Starda Title: My first slack bot! by @project516 | Stardance
Devlogs:
i made a slackbot that can do basic stuff!
added documentation!
Ships:
i made a simple slack bot!!! its hosted on nest
I made a slack bot, it’s really cool I was able to integrate it with slack and have it work in slack!...
|
1793501718.980459
|
1793588118.980459
|
|
53258
|
professional portfolio by @kavy | Stardance
|
kavy
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T13:01:46Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a 3D interactive professional portfolio using React and Vite to showcase my projects, skills, and development journey. The challenging part was balancing the visual 3D experience with usability, responsiveness, and performance. I’m most proud that it represents actual things I’m building rather than just being a collection of claims. My main project right now is Kavy’s AI, a full-stack AI workspace, and the portfolio gives people a way to explore that work. Anyone can test the portfolio by interacting with the 3D experience, exploring the projects, and checking it across different screen sizes.", "repo": "https://github.com/kavyjain15/kavy-portfolio", "demo": "https://kavyjain15.netlify.app"}]...
|
[{"post_id": 57211, "ts": "202 [{"post_id": 57211, "ts": "2026-08-29T09:58:51Z", "hours": 0.4247, "text": "My Professional Portfolio — Devlog I am building my professional portfolio as more than a personal website. My goal is to create a modern, professional platform that represents my technical skills, projects, learning journey, problem-solving ability, and future ambitions in technology and AI. The portfolio will showcase my introduction, skills, projects, achievements, development journey, and professional contact information. I want every section to communicate something meaningful rather than simply listing technologies or accomplishments. A major focus will be my projects. Each project will explain what I built, why I built it, the technologies I used, challenges I faced, how I solved them, and what I learned. This will demonstrate practical engineering ability rather than just theoretical knowledge. One of my key projects is Kavy’s AI, an AI-powered workspace built using Next.js, TypeScript, React, Tailwind CSS, NVIDIA’s GPT-OSS-20B API, Supabase, and PostgreSQL. The project is evolving from a simple chatbot into a complete AI workspace with persistent conversations and plans for authentication, usage limits, projects, agents, file uploads, and other AI tools. I also want the portfolio to document my development journey through devlogs. These logs will record milestones, experiments, bugs, solutions, and lessons learned. I believe documenting failures is just as valuable as documenting successes because it shows how I approach real-world problems. My philosophy is to understand what I build instead of blindly copying solutions. When something breaks, I want to understand why it happened, how to diagnose it, and how to prevent it from happening again. The portfolio will continuously evolve as I learn and build more. My long-term goal is for it to demonstrate a clear progression from learning and experimenting to building, solving problems, deploying, and improving real technology projects. This portfolio is not just a website. It is a record of my growth as a technology professional and a showcase of what I can build."}]...
|
Title: professional portfolio by @kavy | Stardance Title: professional portfolio by @kavy | Stardance
Devlogs:
My Professional Portfolio — Devlog I am building my professional portfolio as more than a personal website. My goal is to create a modern, professional platform that represents my technical skills, projects, learning journey, problem-solving ability, and future ambitions in technology and AI. The portfolio will showcase my introduction, skills, projects, achievements, development journey, and professional contact information. I want every section to communicate something meaningful rather than simply listing technologies or accomplishments. A major focus will be my projects. Each project will explain what I built, why I built it, the technologies I used, challenges I faced, how I solved them, and what I learned. This will demonstrate practical engineering ability rather than just theoretical knowledge. One of my key projects is Kavy’s AI, an AI-powered workspace built using Next.js, TypeScript, React, Tailwind CSS, NVIDIA’s GPT-OSS-20B API, Supabase, and PostgreSQL. The project is evolving from a simple chatbot into a complete AI workspace with persistent conversations and plans for authentication, usage limits, projects, agents, file uploads, and other AI tools. I also want the portfolio to document my development journey through devlogs. These logs will record milestones, experiments, bugs, solutions, and lessons learned. I believe documenting failures is just as valuable as documenting successes because it shows how I approach real-world problems. My philosophy is to understand what I build instead of blindly copying solutions. When something breaks, I want to understand why it happened, how to diagnose it, and how to prevent it from happening again. The portfolio will continuously evolve as I learn and build more. My long-term goal is for it to demonstrate a clear progression from learning and experimenting to building, solving problems, deploying, and improving real technology projects. This portfolio is not just a website. It is a record of my growth as a technology professional and a showcase of what I can build.
Ships:
I built a 3D interactive professional portfolio using React and Vite to showcase my projects, skills, and development journey. The challenging part was balancing the visual 3D experience with usability, responsiveness, and performance. I’m most proud that it represents actual things I’m building rather than just being a collection of claims. My main project right now is Kavy’s AI, a full-stack AI workspace, and the portfolio gives people a way to explore that work. Anyone can test the portfolio by interacting with the 3D experience, exploring the projects, and checking it across different screen sizes....
|
1793501725.0348587
|
1793588125.0348587
|
|
53271
|
personalTerminal by @Lunn | Stardance
|
Lunn
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T02:52:01Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "helloooooo world! I built a personal site that processes inputs just like a real Linux CLI. The terminal includes several fun commands you can try, such as ‘whoami’ to learn about me, and ‘neofetch’ which displays Arch Linux setup. The feature i’m most proud is the ‘music’ command. if you type ‘music play 1’, you can listen to my favorite track previews. Just type ‘help’ in the terminal to get started!", "repo": "https://github.com/ZeroLogicDev/ahlun-localhost", "demo": "https://zerologicdev.github.io/ahlun-localhost/"}]...
|
[{"post_id": 57751, "ts": "202 [{"post_id": 57751, "ts": "2026-08-30T00:56:52Z", "hours": 1.6242, "text": "Devlog #3 Updated the music section to make it functional! Users can now list my top 10 favorite tracks and play previews directly inside the terminal using “music play [number]”."}, {"post_id": 57246, "ts": "2026-08-29T10:58:28Z", "hours": 0.7347, "text": "Devlog #2 Added my top ten favorite tracks to the music section and hid some easter eggs. My next mission is figuring out how to make the audio work so we can actually play these tracks straight from the terminal!"}, {"post_id": 56870, "ts": "2026-08-28T20:59:48Z", "hours": 4.5769, "text": "Devlog #1 Just cooked up the MVP for my personal site… Welcome to my first devlog, getting ready to ship!"}]...
|
Title: personalTerminal by @Lunn | Stardance
Devl Title: personalTerminal by @Lunn | Stardance
Devlogs:
Devlog #1 Just cooked up the MVP for my personal site… Welcome to my first devlog, getting ready to ship!
Devlog #2 Added my top ten favorite tracks to the music section and hid some easter eggs. My next mission is figuring out how to make the audio work so we can actually play these tracks straight from the terminal!
Devlog #3 Updated the music section to make it functional! Users can now list my top 10 favorite tracks and play previews directly inside the terminal using “music play [number]”.
Ships:
helloooooo world! I built a personal site that processes inputs just like a real Linux CLI. The terminal includes several fun commands you can try, such as ‘whoami’ to learn about me, and ‘neofetch’ which displays Arch Linux setup. The feature i’m most proud is the ‘music’ command. if you type ‘music play 1’, you can listen to my favorite track previews. Just type ‘help’ in the terminal to get started!...
|
1793501729.098478
|
1793588129.098478
|