|
66138
|
Self-webOS by @blowupthenoobs | Stardance
|
blowupthenoobs
|
1
|
10.59
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T03:21:12Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I got the basic stuff done. Namely draggable windows, opening and closing em, as well as the time on the task bar. Tried to fulfill the reqs for the webOS 1 mission as fast as I could given the fixed payout, but my decision to put it on a Vite React project made it take longer than it should’ve, so I think I can count that as my non-tutorial feature (though I didn’t even get to use the tutorial that much since I had to change so much of the code to make it work in the way I wanted it to.)", "repo": "https://github.com/blowupthenoobs/WebbingAnOS", "demo": "https://webbinganos.netlify.app/"}]...
|
[{"post_id": 82669, "ts": "202 [{"post_id": 82669, "ts": "2026-10-25T15:29:16Z", "hours": 0.2567, "text": "Made some small QOL stuff with the terminal such as removing the outline when focused, and making the input box focus whenever you click into the terminal. Was surprisingly easy, and my first results upon looking em up pretty much just gave me the answer for everything, lol."}, {"post_id": 82488, "ts": "2026-10-24T23:47:12Z", "hours": 5.3292, "text": "Figured out how to make the windows order each other and added some stuff to the diary window"}, {"post_id": 75056, "ts": "2026-09-29T00:49:04Z", "hours": 1.7292, "text": "Got the basic idea done, should be able to qualify for WebOS 1 given that I made this in React which made it kinda a doozy to figure out how to translate the code to here."}, {"post_id": 74805, "ts": "2026-09-28T09:53:33Z", "hours": 3.2192, "text": "Through some trial and error, I got the window to be draggable"}, {"post_id": 74261, "ts": "2026-09-27T02:55:08Z", "hours": 0.5042, "text": "took way too long to figure out, but I figured out why tailwind wasn’t working. Now it’s time to actually start on the project."}]...
|
Title: Self-webOS by @blowupthenoobs | Stardance
Title: Self-webOS by @blowupthenoobs | Stardance
Devlogs:
took way too long to figure out, but I figured out why tailwind wasn’t working. Now it’s time to actually start on the project.
Through some trial and error, I got the window to be draggable
Got the basic idea done, should be able to qualify for WebOS 1 given that I made this in React which made it kinda a doozy to figure out how to translate the code to here.
Figured out how to make the windows order each other and added some stuff to the diary window
Made some small QOL stuff with the terminal such as removing the outline when focused, and making the input box focus whenever you click into the terminal. Was surprisingly easy, and my first results upon looking em up pretty much just gave me the answer for everything, lol.
Ships:
I got the basic stuff done. Namely draggable windows, opening and closing em, as well as the time on the task bar. Tried to fulfill the reqs for the webOS 1 mission as fast as I could given the fixed payout, but my decision to put it on a Vite React project made it take longer than it should’ve, so I think I can count that as my non-tutorial feature (though I didn’t even get to use the tutorial that much since I had to change so much of the code to make it work in the way I wanted it to.)...
|
1793062171.4099529
|
1793148571.4099529
|
|
62539
|
Music PWA by @CyberIntruder | Stardance
|
CyberIntruder
|
0
|
58.74
|
0
|
[]
|
[{"post_id": 82667, "ts": "202 [{"post_id": 82667, "ts": "2026-10-25T15:28:38Z", "hours": 7.5017, "text": "I created this playlist page, it allows you to reorder, remove, add, etc. songs to playlists, play them and also shuffle and play them. Now I’m optimizing the app, fixing some bugs and making it more user-friendly. For example I fixed the offline navigation issue, now the app doesn’t use the browser navigation when offline, so the music continues playing."}, {"post_id": 80199, "ts": "2026-10-16T17:43:30Z", "hours": 8.3458, "text": "I stopped working on this project for a while, so I forgot every little detail I worked on/changed. But in general, I worked on the concept of custom playlists, what is currently working is creating new playlists, saving them, playing a playlist, etc. but there still is stuff that’s missing, like a playlist page for example"}, {"post_id": 74964, "ts": "2026-09-28T18:23:30Z", "hours": 7.9267, "text": "I fixed the issue with the song stopping when the phone screen turned off. It turns out putting a video with a single frame (the thumbnail) into an audio component does some video things and needs the hardware decoder, which was why it was stopping. I fixed it by converting the video file into an audio file in the download route. I also moved the logic that played the songs (next song when the current one finishes, etc.) from the watch page to a context, so it works on every page, not just the watch one."}, {"post_id": 73181, "ts": "2026-09-24T15:17:07Z", "hours": 3.4886, "text": "I tried to add the actual PWA support, and I did get the app to actually install (in chrome, not firefox) and cache the pages. It works offline, but there still are many issues that I don’t know how to fix, for example it reloading (resulting in the audio stopping) when I click a link, which wouldn’t normally happen when online. Also the audio stops playing when the screen turns off in chrome, but it doesn’t in firefox. I can start it again through the media session notification and then it plays."}, {"post_id": 72687, "ts": "2026-09-23T14:40:05Z", "hours": 6.8056, "text": "I made the lists reorderable, added media session support, created this lyrics player and added a three dot menu that now contains the old download functionality and moved the offline data indicators next to the three dots (I also added the option to add/remove the current song from the playlist)."}, {"post_id": 71329, "ts": "2026-09-20T17:10:36Z", "hours": 9.1097, "text": "I made the playlist/play next list at the right of the screenshot. The functionality is inspired by youtube music – if the current song finishes, play the next one. If there isn’t a next one in this playlist, play the first from a “suggests” list and move it from the bottom list to the top one. This was really hard to do, because I wanted the url to update the song id without reloading the page, actually autoplaying the next song, etc. I also fixed some UI/layout issues."}, {"post_id": 70535, "ts": "2026-09-19T10:21:43Z", "hours": 5.9447, "text": "I added a responsive sidebar with a downloaded songs list. Later I added this layout to the main layout.tsx so it is on every page. I also made a global system for playing music so it doesn’t pause when you go to another page, and because of that I had to make my own UI controls component for it. And finally, I made the currently playing song to display on the bottom."}, {"post_id": 70100, "ts": "2026-09-18T13:39:00Z", "hours": 9.6167, "text": "Firstly I made this search page that shows the search results, and then later I made this watch page where the user can download a song and play it."}]...
|
Title: Music PWA by @CyberIntruder | Stardance
De Title: Music PWA by @CyberIntruder | Stardance
Devlogs:
Firstly I made this search page that shows the search results, and then later I made this watch page where the user can download a song and play it.
I added a responsive sidebar with a downloaded songs list. Later I added this layout to the main layout.tsx so it is on every page. I also made a global system for playing music so it doesn’t pause when you go to another page, and because of that I had to make my own UI controls component for it. And finally, I made the currently playing song to display on the bottom.
I made the playlist/play next list at the right of the screenshot. The functionality is inspired by youtube music – if the current song finishes, play the next one. If there isn’t a next one in this playlist, play the first from a “suggests” list and move it from the bottom list to the top one. This was really hard to do, because I wanted the url to update the song id without reloading the page, actually autoplaying the next song, etc. I also fixed some UI/layout issues.
I made the lists reorderable, added media session support, created this lyrics player and added a three dot menu that now contains the old download functionality and moved the offline data indicators next to the three dots (I also added the option to add/remove the current song from the playlist).
I tried to add the actual PWA support, and I did get the app to actually install (in chrome, not firefox) and cache the pages. It works offline, but there still are many issues that I don’t know how to fix, for example it reloading (resulting in the audio stopping) when I click a link, which wouldn’t normally happen when online. Also the audio stops playing when the screen turns off in chrome, but it doesn’t in firefox. I can start it again through the media session notification and then it plays.
I fixed the issue with the song stopping when the phone screen turned off. It turns out putting a video with a single frame (the thumbnail) into an audio component does some video things and needs the hardware decoder, which was why it was stopping. I fixed it by converting the video file into an audio file in the download route. I also moved the logic that played the songs (next song when the current one finishes, etc.) from the watch page to a context, so it works on every page, not just the watch one.
I stopped working on this project for a while, so I forgot every little detail I worked on/changed. But in general, I worked on the concept of custom playlists, what is currently working is creating new playlists, saving them, playing a playlist, etc. but there still is stuff that’s missing, like a playlist page for example
I created this playlist page, it allows you to reorder, remove, add, etc. songs to playlists, play them and also shuffle and play them. Now I’m optimizing the app, fixing some bugs and making it more user-friendly. For example I fixed the offline navigation issue, now the app doesn’t use the browser navigation when offline, so the music continues playing....
|
1793044493.2091386
|
1793649293.2091386
|
|
62280
|
discord-poll-bot by @ArHIM | Stardance
|
ArHIM
|
2
|
11.0
|
22
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T18:04:44Z", "hours": 8.0, "multiplier": 10.84, "payout": 0, "blessing": "neutral", "text": "A major ship after creation. There were a lot of changes, especially complicated ones. I learned a lot about how to deal with external services like APIs, webhooks, etc. I feel like the most challenging part has to be aligning with external services’ standards. What I mean is making MY product compatible with other ones. The AI models sometimes take too long to respond or throw temporary errors, so the bot had to retry quietly and switch to backups. Discord also has a strict 55-character limit on poll answer buttons. Early on, the AI would generate great answers that were slightly too long, causing the post to fail completely until text trimming was put in place. Another tricky part was multi-server isolation, making sure a missing channel or permission error in one server would never delay or crash the daily poll for other servers. The thing I am most proud of is the bot’s flexibility. The fact that it can work anywhere, pick any channel, handle invites, join any server, catch up if something messes up, and correct itself. It can do all of that itself. It’s very flexible and “agentic” and autonomous, since humans don’t really need to babysit it. Once it’s running, it manages trivia, scoring, weekly recaps, etc. Lastly, how to actually run it: All the info is in the README, but to summarize, Locally: clone the repo, fill in .env.example, and run npm run Click Try Project; it should take you to a server where you can test it out. Invite it to your own server! HAVE FUN AND THANK YOU!", "repo": "https://github.com/ArhamBafna/discord-poll-bot", "demo": "https://discord.gg/NeTz4gzm32"}, {"ship_num": 2, "ts": "2026-09-19T03:42:43Z", "hours": 3.0, "multiplier": 6.23, "payout": 22, "blessing": "neutral", "text": "A bot that posts AI polls daily but is wayy cooler than you think. Core Features Daily AI Polls: Automatically posts fresh AI-related polls in your server every day. AI Summaries: Provides a weekly AI summary every Sunday (customizable scheduling coming soon). Poll Memory: Remembers previously asked polls to prevent repeats. Points & Leaderboard: Awards points to users who answer polls correctly Maintains a dynamic leaderboard for your server Chat with the Bot: Mention the bot or set it to respond without direct pings Can be customized for retroactive message responses Additional Features Custom Polls: Create your own polls with custom options and durations Anonymous Voting: Option for anonymous poll participation Poll Results: View poll results after voting ends Poll Scheduling: Schedule polls for specific dates and times Role-Restricted Polls: Limit poll participation to specific roles Poll Management: Edit, close, or delete polls as needed Archive past polls for reference User-Friendly Commands: Simple, clear command structure for creating and managing polls Rich Poll Embeds: Visually appealing poll display using Discord embeds Extensible: Open-source and easy to customize/extend for your own needs For the full list of features and setup instructions, refer to the README.", "repo": "https://github.com/ArhamBafna/discord-poll-bot", "demo": "https://discord.gg/NeTz4gzm32"}]...
|
[{"post_id": 82665, "ts": "202 [{"post_id": 82665, "ts": "2026-10-25T15:24:55Z", "hours": 6.4386, "text": "I foolishly didn’t make a devlog in a while becuase I thought that I couldn’t while my project was being reviewed. Sorry. But now I’ll try to summarize the changes made, and there were a LOT LOT: From what I recall: Support multiple servers the bot will automatically join and run in any discord server immediately. (before I needed to manually add the server ID) Server admins can use “/setpollchannel” to specify where they want the polls to go. Servers can individually set if they want polls to @everyone or a specific role or none (before it was set to @everyone which was not a good thing to do). More consistent daily polls Moved to newer free AI models for generating the questions for the polls. Automatically retry the AI service if it is too slow or has an error. (before it quit fast resulting in lots of errors.) Auto-cut answers to fit within the <55 character limit for buttons on discord. (avoiding failure) If there are issues posting a scheduled morning poll to one server, it won’t block it from posting other scheduled polls for other servers. also the same poll goes to all servers instead of a seperate poll being generated for each one. Command changes Merged some overlapping commands for a simpler command list. MAJOR BUG: “/knowledge” command could potentially overwrite/destroy the existing bot settings. Resolved that issue. Updated /help Other Automated tests were tweaked to increase performance. Upgraded project deps"}, {"post_id": 71976, "ts": "2026-09-21T21:47:45Z", "hours": 0.8306, "text": "More README.md edits. And, I tried making testing the product easier/more accessible. Either just watch the demo video, or join the servere in which you can use the bot freely! Both in the project desc. PLEASE ALLOW MY SHIP, SHIPWRITERSS 🥹🥹"}, {"post_id": 70853, "ts": "2026-09-19T21:26:06Z", "hours": 0.2669, "text": "Turns out my readme SOUNDED AI generated. I changed up the whole format and structure. Idk if that made it easier or harder to read but now I ship again!"}, {"post_id": 70279, "ts": "2026-09-18T21:16:16Z", "hours": 2.5156, "text": "Longggg session today. shipped a lot of cool features tho. made multi-server management much easy just in case this blows up (fingers crossed) toggled the AI prompt for generating summary a bit cuz we all hate niche ai outputs cleaned up docs improved messages and templates it uses to send discord messages. made it simpler. otherwise, it was all accross the place."}, {"post_id": 68397, "ts": "2026-09-15T01:56:32Z", "hours": 0.9486, "text": "Code quality matters much more than people realize. This session was all about clearing up the code. Merging duplicate parts, unifying systems, and making it just easier to read and understand overall. Also, TESTS help a lot. Run a suite of tests after every change. Keep adding tests for new changes too!"}]...
|
Title: discord-poll-bot by @ArHIM | Stardance
Dev Title: discord-poll-bot by @ArHIM | Stardance
Devlogs:
Code quality matters much more than people realize. This session was all about clearing up the code. Merging duplicate parts, unifying systems, and making it just easier to read and understand overall. Also, TESTS help a lot. Run a suite of tests after every change. Keep adding tests for new changes too!
Longggg session today. shipped a lot of cool features tho. made multi-server management much easy just in case this blows up (fingers crossed) toggled the AI prompt for generating summary a bit cuz we all hate niche ai outputs cleaned up docs improved messages and templates it uses to send discord messages. made it simpler. otherwise, it was all accross the place.
Turns out my readme SOUNDED AI generated. I changed up the whole format and structure. Idk if that made it easier or harder to read but now I ship again!
More README.md edits. And, I tried making testing the product easier/more accessible. Either just watch the demo video, or join the servere in which you can use the bot freely! Both in the project desc. PLEASE ALLOW MY SHIP, SHIPWRITERSS 🥹🥹
I foolishly didn’t make a devlog in a while becuase I thought that I couldn’t while my project was being reviewed. Sorry. But now I’ll try to summarize the changes made, and there were a LOT LOT: From what I recall: Support multiple servers the bot will automatically join and run in any discord server immediately. (before I needed to manually add the server ID) Server admins can use “/setpollchannel” to specify where they want the polls to go. Servers can individually set if they want polls to @everyone or a specific role or none (before it was set to @everyone which was not a good thing to do). More consistent daily polls Moved to newer free AI models for generating the questions for the polls. Automatically retry the AI service if it is too slow or has an error. (before it quit fast resulting in lots of errors.) Auto-cut answers to fit within the <55 character limit for buttons on discord. (avoiding failure) If there are issues posting a scheduled morning poll to one server, it won’t block it from posting other scheduled polls for other servers. also the same poll goes to all servers instead of a seperate poll being generated for each one. Command changes Merged some overlapping commands for a simpler command list. MAJOR BUG: “/knowledge” command could potentially overwrite/destroy the existing bot settings. Resolved that issue. Updated /help Other Automated tests were tweaked to increase performance. Upgraded project deps
Ships:
A bot that posts AI polls daily but is wayy cooler than you think. Core Features Daily AI Polls: Automatically posts fresh AI-related polls in your server every day. AI Summaries: Provides a weekly AI summary every Sunday (customizable scheduling coming soon). Poll Memory: Remembers previously asked polls to prevent repeats. Points & Leaderboard: Awards points to users who answer polls correctly Maintains a dynamic leaderboard for your server Chat with the Bot: Mention the bot or set it to respond without direct pings Can be customized for retroactive message responses Additional Features Custom Polls: Create your own polls with custom options and durations Anonymous Voting: Option for anonymous poll participation Poll Results: View poll results after voting ends Poll Scheduling: Schedule polls for specific dates and times Role-Restricted Polls: Limit poll participation to specific roles Poll Management: Edit, close, or delete polls as needed Archive past polls for reference User-Friendly Commands: Simple, clear command structure for creating and managing polls Rich Poll Embeds: Visually appealing poll display using Discord embeds Extensible: Open-source and easy to customize/extend for your own needs For the full list of features and setup instructions, refer to the README.
A major ship after creation. There were a lot of changes, especially complicated ones. I learned a lot about how to deal with external services like APIs, webhooks, etc. I feel like the most challenging part has to be aligning with external services’ standards. What I mean is making MY product compatible with other ones. The AI models sometimes take too long to respond or throw temporary errors, so the bot had to retry quietly and switch to backups. Discord also has a strict 55-character limit on poll answer buttons. Early on, the AI would generate great answers that were slightly too long, causing the post to fail completely until text trimming was put in place. Another tricky part was multi-server isolation, making sure a missing channel or permission error in one server would never delay or crash the daily poll for other servers. The thing I am most proud of is the bot’s flexibility. The fact that it can work anywhere, pick any channel, handle invites, join any server, catch up if something messes up, and correct itself. It can do all of that itself. It’s very flexible and “agentic” and autonomous, since humans don’t really need to babysit it. Once it’s running, it manages trivia, scoring, weekly recaps, etc. Lastly, how to actually run it: All the info is in the README, but to summarize, Locally: clone the repo, fill in .env.example, and run npm run Click Try Project; it should take you to a server where you can test it out. Invite it to your own server! HAVE FUN AND THANK YOU!...
|
1793058567.5846522
|
1793144967.5846522
|
|
70171
|
zero-hour by @jakub-ginal | Stardance
|
jakub-ginal
|
0
|
119.43
|
0
|
[]
|
[{"post_id": 82659, "ts": "202 [{"post_id": 82659, "ts": "2026-10-25T15:16:16Z", "hours": 9.9333, "text": "v1.13.0 - Saved Launches and Subscribable Calendars Saved Launches - Added browser-based bookmarks, a saved-only filter, live count, and empty state. Full Launch Manifest - Added up to 100 upcoming missions, displayed 24 at a time with a Load More button. Calendar Feed - Added /api/calendar for subscribing to confirmed launches, excluding tentative dates until schedules become more certain. Calendar Setup Page - Added a copyable feed URL, .ics downloads, and subscription instructions. Mission Calendar Files - Added individual calendar events with launch details and links back to mission briefings. API Performance - Added ETags, 304 responses, gzip compression, and stale-cache fallback. Calendar Download Fix - Redirected browser visits to the setup page and fixed download handling. Interface Polish - Improved accessibility, bookmark controls, responsive layouts, and saved-launch indicators. Published - v1.13.0 is now available on GitHub."}, {"post_id": 82472, "ts": "2026-10-24T22:17:34Z", "hours": 8.1708, "text": "v1.12.0 - Honest Launch Dates and Shareable Mission Briefings Date Precision - Unconfirmed launch dates now display as NET Q4 2026 or NET May 2026 and appear under “Date to be confirmed”. Mission Briefing Redesign - Added status and live pills, image credits, country codes, launch windows, weather, webcast links, maps, and copy-link actions. Shareable Launch Links - Added #launch/<id> links that open the correct briefing on page load or when pasted, including launches outside the initially loaded page. Enhanced Launch Cards - Added orbit badges, success and failure colors, and a visual highlight for imminent launches. Visual Polish - Added muted country codes and added a hero word-reveal animation, scroll-aware navigation, and a subtle card spotlight effect. Smarter Calendar Files - Added shareable launch links to calendar files and warnings when launch dates are not final. Published - v1.12.0 is now available on GitHub."}, {"post_id": 82226, "ts": "2026-10-24T10:18:21Z", "hours": 10.1667, "text": "v1.11.0 - Sticky Navigation and Launch Manifest Sticky Navigation - Added a fixed top bar with a new logo mark, ZERO HOUR wordmark, Manifest and About links, live clock, and Local / UTC switch. Launch Manifest Section - Added a dedicated section header with a live launch count and status note. Lost Signal Panel - Added a dedicated error panel with a Retry button when the launch feed is unreachable. Hero Scroll Cue - Added a scroll indicator and smooth anchor scrolling with an offset for the sticky header. Active Navigation - Highlighted the section currently being viewed and hid section links on mobile. Branding and Credits - Updated the footer branding and data credits, and added the logo to the boot screen. Reduced Motion Support - Extended reduced-motion support to the new animations. Published - v1.11.0 is now available on GitHub."}, {"post_id": 82070, "ts": "2026-10-23T18:20:04Z", "hours": 10.0611, "text": "v1.10.0 - Live Clock and Enhanced Launch Dashboard Live Clock - Added a header clock with a pulsing status indicator that follows the selected Local or UTC time zone. Hero Metadata - Added provider, launch pad, and launch window details to the hero section. Launch Actions - Added Mission Briefing and Add to Calendar actions for the next launch. Calendar Confirmation - Added toast notifications to confirm successful calendar downloads. Radar Statistics - Added launch counts for the next 24 hours, the current week, and Go-status launches. About Section - Added information explaining the data source and launch status meanings. Search Shortcut - Added the / keyboard shortcut to jump directly to search. Hero Button Polish - Kept the primary hero button subtle to maintain visual balance. Published - v1.10.0 is now available on GitHub."}, {"post_id": 81893, "ts": "2026-10-22T21:34:09Z", "hours": 12.0217, "text": "v1.9.0 - Testing, Security, and UI Polish Automated Tests - Added a pytest suite covering the API, provider filtering, cache reuse, stale data fallback, and 503 responses. Secure Rendering - Escaped launch data before rendering and restricted links to HTTP and HTTPS. Focus Management - Restored keyboard focus to the launch card after closing the detail dialog. Accessibility Improvements - Added a skip link, live status region, aria-busy state, and an accessible dialog label. Error Handling - Added a Retry button and an Offline footer state when loading fails. Reduced Motion Support - Disabled radar, blip, and skeleton animations when reduced motion is enabled. Typography - Added Space Grotesk, Inter, and JetBrains Mono with system font fallbacks. Visual Polish - Added a gradient hero title, card hover lift and zoom effects, and accent-colored text selection. Favicon - Added favicon.svg Published - v1.9.0 is now available on GitHub."}, {"post_id": 81709, "ts": "2026-10-22T05:31:23Z", "hours": 12.3517, "text": "v1.8.0 - FastAPI Backend and Data Caching FastAPI Backend - Added API endpoints for listing launches, retrieving the next launch, fetching launch details, and checking service health. Normalized Launch Data - Converted Launch Library 2 records into a consistent launch model. 10-Minute Cache - Cached upstream data for 10 minutes to reduce API requests and extend free-tier usage. Single-Flight Refresh - Added a lock to prevent concurrent requests from triggering duplicate data refreshes. Stale Data Fallback - Kept serving the last successful data with a stale flag when the upstream API fails. Refresh Backoff - Added a 60-second cooldown after a failed refresh to avoid repeated requests. Frontend API Integration - Switched the frontend to fetch launches from /api/launches and use normalized fields. Local Development Mode - Added local run instructions and a development mode that serves the frontend directly from the API. Published - v1.8.0 is now available on GitHub."}, {"post_id": 81523, "ts": "2026-10-21T15:54:03Z", "hours": 8.9514, "text": "v1.7.0 - Live Launch Radar and Boot Sequence Launch Radar - Added a hero radar panel with rings, a crosshair, and a rotating sweep. Launch Pad Tracking - Plotted launch pads as pulsing blips based on their latitude and longitude. Hero Stats - Added live stats for tracked launches, providers, and the next lift-off time. Boot Sequence - Added an animated startup overlay with staged telemetry lines and a progress bar. Session-Based Startup - Made the boot sequence appear once per browser session and skip automatically when reduced motion is enabled. Responsive Hero Layout - Hid the radar on small screens and stacked the hero layout for better mobile support. Published - v1.7.0 is now available on GitHub."}, {"post_id": 81353, "ts": "2026-10-20T22:47:48Z", "hours": 7.0, "text": "v1.6.0 - Animated Starfield and Rocket Launch Animated Starfield - Added a full-page starfield with twinkling stars, depth layers, and mouse parallax. Warp Effects - Made stars streak into warp lines based on scroll speed. Rocket Launch Animation - Added a rocket lifting off from a glowing planetary horizon in the hero section. Realistic Flight Effects - Added a curved gravity turn with a rocket plume, smoke, and contrail. Motion Accessibility - Made animations respect reduced-motion settings and pause when the hero is offscreen. Persistent Animations - Kept hero canvases mounted across data refreshes to prevent animations from restarting. Published - v1.6.0 is now available on GitHub."}, {"post_id": 81172, "ts": "2026-10-20T05:46:02Z", "hours": 6.3839, "text": "v1.5.0 - Daily Launch Groups and Time Zones Daily Launch Groups - Grouped launches by day with sticky labels for Today, Tomorrow, weekdays, and dates. Loading Skeletons - Added placeholder cards while launch data loads. Time Zone Toggle - Added a Local / UTC toggle that remembers your preference. Live Time Zone Updates - Made the toggle update the hero, launch list, and currently open detail view. Sync Status - Added a footer indicator showing when the data was last updated. Automatic Refresh - Added automatic data refresh every 5 minutes. Unified Date Formatting - Routed date and time formatting through a single time zone-aware helper. Published - v1.5.0 is now available on GitHub."}, {"post_id": 81048, "ts": "2026-10-19T17:35:33Z", "hours": 9.6347, "text": "v1.4.0 - Launch Detail View Clickable Launch Cards - Made each launch card clickable to open a detailed view. Live Countdown and Facts - Added a large live countdown and a facts grid with liftoff time, launch window, rocket, provider, mission type, orbit, launch pad, and location. Mission Description - Added mission descriptions when available. Launch Pad Map - Embedded a map showing the launch pad location. Launch Actions - Added links for webcasts and live streams, .ics calendar downloads, Open in Maps, and mission information. Improved Dialog Controls - Added a close button, backdrop click, and Esc key support. Published - v1.4.0 is now available on GitHub."}, {"post_id": 80886, "ts": "2026-10-19T05:01:16Z", "hours": 7.9964, "text": "v1.3.0 - Launch Search and Filters Added a search box matching missions, rockets, providers, orbits, and launch pads. Added multi-word search with a short debounce delay to avoid filtering on every keystroke. Added status filter chips for All, Go, TBC, and TBD. Added a provider dropdown generated automatically from launch data, including launch counts. Added an empty state for unmatched searches with a Clear Filters button. Refactored the filtering logic around a shared filter state for cleaner list rendering. Published v1.3.0 on GitHub."}, {"post_id": 80634, "ts": "2026-10-18T11:03:32Z", "hours": 9.5139, "text": "v1.2.0 - Live Launch Countdowns Added a “Next Launch” hero section highlighting the soonest upcoming launch. Added a live countdown displaying days, hours, minutes, and seconds, updated every second. Automatically switched to T+ elapsed time once a launch time had passed. Added a compact live countdown to every launch card. Styled the hero section and countdown displays to fit the dark theme. Published v1.2.0 on GitHub."}, {"post_id": 80516, "ts": "2026-10-17T23:39:13Z", "hours": 5.7417, "text": "v1.1.0 - Launch Board Redesign Added a dark theme and structured page layout with a header, status section, and footer. Redesigned each launch as a card displaying an image, provider, mission, rocket, launch time, and launch pad. Added colored status indicators for Go, TBC, TBD, and Hold. Added a responsive card grid that adapts to mobile screens. Separated the styling into styles.css and moved the JavaScript into app.js . Published v1.1.0 on GitHub."}, {"post_id": 80444, "ts": "2026-10-17T17:19:55Z", "hours": 1.5028, "text": "v1.0.0 - zero-hour - Initial Release Zero Hour shows every upcoming orbital rocket launch with a live countdown. Added index.html to fetch upcoming launches from Launch Library 2 and display their names and dates. Added README.md with basic instructions for running the project. Added an MIT LICENSE . Initialized the local repository, pushed it to GitHub, and tagged the release as v1.0.0 . Published v1.0.0 on the GitHub project page."}]...
|
Title: zero-hour by @jakub-ginal | Stardance
Devl Title: zero-hour by @jakub-ginal | Stardance
Devlogs:
v1.0.0 - zero-hour - Initial Release Zero Hour shows every upcoming orbital rocket launch with a live countdown. Added index.html to fetch upcoming launches from Launch Library 2 and display their names and dates. Added README.md with basic instructions for running the project. Added an MIT LICENSE . Initialized the local repository, pushed it to GitHub, and tagged the release as v1.0.0 . Published v1.0.0 on the GitHub project page.
v1.1.0 - Launch Board Redesign Added a dark theme and structured page layout with a header, status section, and footer. Redesigned each launch as a card displaying an image, provider, mission, rocket, launch time, and launch pad. Added colored status indicators for Go, TBC, TBD, and Hold. Added a responsive card grid that adapts to mobile screens. Separated the styling into styles.css and moved the JavaScript into app.js . Published v1.1.0 on GitHub.
v1.2.0 - Live Launch Countdowns Added a “Next Launch” hero section highlighting the soonest upcoming launch. Added a live countdown displaying days, hours, minutes, and seconds, updated every second. Automatically switched to T+ elapsed time once a launch time had passed. Added a compact live countdown to every launch card. Styled the hero section and countdown displays to fit the dark theme. Published v1.2.0 on GitHub.
v1.3.0 - Launch Search and Filters Added a search box matching missions, rockets, providers, orbits, and launch pads. Added multi-word search with a short debounce delay to avoid filtering on every keystroke. Added status filter chips for All, Go, TBC, and TBD. Added a provider dropdown generated automatically from launch data, including launch counts. Added an empty state for unmatched searches with a Clear Filters button. Refactored the filtering logic around a shared filter state for cleaner list rendering. Published v1.3.0 on GitHub.
v1.4.0 - Launch Detail View Clickable Launch Cards - Made each launch card clickable to open a detailed view. Live Countdown and Facts - Added a large live countdown and a facts grid with liftoff time, launch window, rocket, provider, mission type, orbit, launch pad, and location. Mission Description - Added mission descriptions when available. Launch Pad Map - Embedded a map showing the launch pad location. Launch Actions - Added links for webcasts and live streams, .ics calendar downloads, Open in Maps, and mission information. Improved Dialog Controls - Added a close button, backdrop click, and Esc key support. Published - v1.4.0 is now available on GitHub.
v1.5.0 - Daily Launch Groups and Time Zones Daily Launch Groups - Grouped launches by day with sticky labels for Today, Tomorrow, weekdays, and dates. Loading Skeletons - Added placeholder cards while launch data loads. Time Zone Toggle - Added a Local / UTC toggle that remembers your preference. Live Time Zone Updates - Made the toggle update the hero, launch list, and currently open detail view. Sync Status - Added a footer indicator showing when the data was last updated. Automatic Refresh - Added automatic data refresh every 5 minutes. Unified Date Formatting - Routed date and time formatting through a single time zone-aware helper. Published - v1.5.0 is now available on GitHub.
v1.6.0 - Animated Starfield and Rocket Launch Animated Starfield - Added a full-page starfield with twinkling stars, depth layers, and mouse parallax. Warp Effects - Made stars streak into warp lines based on scroll speed. Rocket Launch Animation - Added a rocket lifting off from a glowing planetary horizon in the hero section. Realistic Flight Effects - Added a curved gravity turn with a rocket plume, smoke, and contrail. Motion Accessibility - Made animations respect reduced-motion settings and pause when the hero is offscreen. Persistent Animations - Kept hero canvases mounted across data refreshes to prevent animations from restarting. Published - v1.6.0 is now available on GitHub.
v1.7.0 - Live Launch Radar and Boot Sequence Launch Radar - Added a hero radar panel with rings, a crosshair, and a rotating sweep. Launch Pad Tracking - Plotted launch pads as pulsing blips based on their latitude and longitude. Hero Stats - Added live stats for tracked launches, providers, and the next lift-off time. Boot Sequence - Added an animated startup overlay with staged telemetry lines and a progress bar. Session-Based Startup - Made the boot sequence appear once per browser session and skip automatically when reduced motion is enabled. Responsive Hero Layout - Hid the radar on small screens and stacked the hero layout for better mobile support. Published - v1.7.0 is now available on GitHub.
v1.8.0 - FastAPI Backend and Data Caching FastAPI Backend - Added API endpoints for listing launches, retrieving the next launch, fetching launch details, and checking service health. Normalized Launch Data - Converted Launch Library 2 records into a consistent launch model. 10-Minute Cache - Cached upstream data for 10 minutes to reduce API requests and extend free-tier usage. Single-Flight Refresh - Added a lock to prevent concurrent requests from triggering duplicate data refreshes. Stale Data Fallback - Kept serving the last successful data with a stale flag when the upstream API fails. Refresh Backoff - Added a 60-second cooldown after a failed refresh to avoid repeated requests. Frontend API Integration - Switched the frontend to fetch launches from /api/launches and use normalized fields. Local Development Mode - Added local run instructions and a development mode that serves the frontend directly from the API. Published - v1.8.0 is now available on GitHub.
v1.9.0 - Testing, Security, and UI Polish Automated Tests - Added a pytest suite covering the API, provider filtering, cache reuse, stale data fallback, and 503 responses. Secure Rendering - Escaped launch data before rendering and restricted links to HTTP and HTTPS. Focus Management - Restored keyboard focus to the launch card after closing the detail dialog. Accessibility Improvements - Added a skip link, live status region, aria-busy state, and an accessible dialog label. Error Handling - Added a Retry button and an Offline footer state when loading fails. Reduced Motion Support - Disabled radar, blip, and skeleton animations when reduced motion is enabled. Typography - Added Space Grotesk, Inter, and JetBrains Mono with system font fallbacks. Visual Polish - Added a gradient hero title, card hover lift and zoom effects, and accent-colored text selection. Favicon - Added favicon.svg Published - v1.9.0 is now available on GitHub.
v1.10.0 - Live Clock and Enhanced Launch Dashboard Live Clock - Added a header clock with a pulsing status indicator that follows the selected Local or UTC time zone. Hero Metadata - Added provider, launch pad, and launch window details to the hero section. Launch Actions - Added Mission Briefing and Add to Calendar actions for the next launch. Calendar Confirmation - Added toast notifications to confirm successful calendar downloads. Radar Statistics - Added launch counts for the next 24 hours, the current week, and Go-status launches. About Section - Added information explaining the data source and launch status meanings. Search Shortcut - Added the / keyboard shortcut to jump directly to search. Hero Button Polish - Kept the primary hero button subtle to maintain visual balance. Published - v1.10.0 is now available on GitHub.
v1.11.0 - Sticky Navigation and Launch Manifest Sticky Navigation - Added a fixed top bar with a new logo mark, ZERO HOUR wordmark, Manifest and About links, live clock, and Local / UTC switch. Launch Manifest Section - Added a dedicated section header with a live launch count and status note. Lost Signal Panel - Added a dedicated error panel with a Retry button when the launch feed is unreachable. Hero Scroll Cue - Added a scroll indicator and smooth anchor scrolling with an offset for the sticky header. Active Navigation - Highlighted the section currently being viewed and hid section links on mobile. Branding and Credits - Updated the footer branding and data credits, and added the logo to the boot screen. Reduced Motion Support - Extended reduced-motion support to the new animations. Published - v1.11.0 is now available on GitHub.
v1.12.0 - Honest Launch Dates and Shareable Mission Briefings Date Precision - Unconfirmed launch dates now display as NET Q4 2026 or NET May 2026 and appear under “Date to be confirmed”. Mission Briefing Redesign - Added status and live pills, image credits, country codes, launch windows, weather, webcast links, maps, and copy-link actions. Shareable Launch Links - Added #launch/<id> links that open the correct briefing on page load or when pasted, including launches outside the initially loaded page. Enhanced Launch Cards - Added orbit badges, success and failure colors, and a visual highlight for imminent launches. Visual Polish - Added muted country codes and added a hero word-reveal animation, scroll-aware navigation, and a subtle card spotlight effect. Smarter Calendar Files - Added shareable launch links to calendar files and warnings when launch dates are not final. Published - v1.12.0 is now available on GitHub.
v1.13.0 - Saved Launches and Subscribable Calendars Saved Launches - Added browser-based bookmarks, a saved-only filter, live count, and empty state. Full Launch Manifest - Added up to 100 upcoming missions, displayed 24 at a time with a Load More button. Calendar Feed - Added /api/calendar for subscribing to confirmed launches, excluding tentative dates until schedules become more certain. Calendar Setup Page - Added a copyable feed URL, .ics downloads, and subscription instructions. Mission Calendar Files - Added individual calendar events with launch details and links back to mission briefings. API Performance - Added ETags, 304 responses, gzip compression, and stale-cache fallback. Calendar Download Fix - Redirected browser visits to the setup page and fixed download handling. Interface Polish - Improved accessibility, bookmark controls, responsive layouts, and saved-launch indicators. Published - v1.13.0 is now available on GitHub....
|
1792958138.2726412
|
1793562938.2726412
|
|
70530
|
Find a song by @Siyam | Stardance
|
Siyam
|
2
|
12.0
|
66
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T15:13:03Z", "hours": 4.0, "multiplier": 7.22, "payout": 14, "blessing": "neutral", "text": "That’s my 2nd ship, I have added some updates like, Added song player, changed Some colors, Changed background etc. I hope that you will rate me well, and Thank you.", "repo": "https://github.com/Tanzil-Alam/Find-a-song", "demo": "https://tanzil-alam.github.io/Find-a-song/"}, {"ship_num": 2, "ts": "2026-10-20T20:14:03Z", "hours": 8.0, "multiplier": 6.18, "payout": 52, "blessing": "neutral", "text": "This is a project to find songs from just a link. if you ever like a song but dont know the name/artist you can just paste the link here, it will give the detail you want. i used ombed system which dont need any API to work. thats fully opensource.", "repo": "https://github.com/Tanzil-Alam/Find-a-song", "demo": "https://tanzil-alam.github.io/Find-a-song/"}]...
|
[{"post_id": 82656, "ts": "202 [{"post_id": 82656, "ts": "2026-10-25T15:11:02Z", "hours": 0.5003, "text": "Now You can hear song directly from my searcher."}, {"post_id": 82611, "ts": "2026-10-25T12:46:53Z", "hours": 1.0592, "text": "Did some little updates in css, iam trying to make it looks beautiful."}, {"post_id": 82582, "ts": "2026-10-25T09:43:09Z", "hours": 1.5539, "text": "Updated the low resolution image issue, Now the image is clear and updated the css a little bit."}, {"post_id": 81841, "ts": "2026-10-22T18:03:58Z", "hours": 0.7575, "text": "Updated some css, I wish my project time is now well. I used AI for researching and Analyzing, but it shows more then 30% AI coding. I think its solved now."}, {"post_id": 81319, "ts": "2026-10-20T20:13:43Z", "hours": 1.4786, "text": "Finalized the project completely. used a ombed method for finding song and no API needed. i deplyed it in github and its time to ship"}, {"post_id": 81287, "ts": "2026-10-20T16:58:02Z", "hours": 1.0319, "text": "I will change the plan, i have found that finding a song from link is so hard. its not working, no AI or any other tool can find a song via just a link, It will so hard. I will make a Song detail generator via title instead."}, {"post_id": 81228, "ts": "2026-10-20T11:19:41Z", "hours": 1.0917, "text": "Okay, so I tried to use gemini api key for finding song, but i found that, gemini can only find youtube song while i want to add Instagram and tiktok feature."}, {"post_id": 81106, "ts": "2026-10-19T21:38:31Z", "hours": 1.965, "text": "A lots of error, suddenly i have clicked something wrong and it has stopped working, i will solve the error, as fast as possible, i have used a little help of ai for frontend for now, i will also update it soon."}, {"post_id": 81031, "ts": "2026-10-19T16:49:45Z", "hours": 2.8169, "text": "Researched about song finders, checked a lot of github projects, finally i made a way to find song from social media links. the feature is almost working simply, i will update the design and add more perfection soon."}]...
|
Title: Find a song by @Siyam | Stardance
Devlogs: Title: Find a song by @Siyam | Stardance
Devlogs:
Researched about song finders, checked a lot of github projects, finally i made a way to find song from social media links. the feature is almost working simply, i will update the design and add more perfection soon.
A lots of error, suddenly i have clicked something wrong and it has stopped working, i will solve the error, as fast as possible, i have used a little help of ai for frontend for now, i will also update it soon.
Okay, so I tried to use gemini api key for finding song, but i found that, gemini can only find youtube song while i want to add Instagram and tiktok feature.
I will change the plan, i have found that finding a song from link is so hard. its not working, no AI or any other tool can find a song via just a link, It will so hard. I will make a Song detail generator via title instead.
Finalized the project completely. used a ombed method for finding song and no API needed. i deplyed it in github and its time to ship
Updated some css, I wish my project time is now well. I used AI for researching and Analyzing, but it shows more then 30% AI coding. I think its solved now.
Updated the low resolution image issue, Now the image is clear and updated the css a little bit.
Did some little updates in css, iam trying to make it looks beautiful.
Now You can hear song directly from my searcher.
Ships:
This is a project to find songs from just a link. if you ever like a song but dont know the name/artist you can just paste the link here, it will give the detail you want. i used ombed system which dont need any API to work. thats fully opensource.
That’s my 2nd ship, I have added some updates like, Added song player, changed Some colors, Changed background etc. I hope that you will rate me well, and Thank you....
|
1793033568.6237717
|
1793119968.6237717
|
|
70388
|
5-Axis 3D-Printer by @Alaxtor | Stardance
|
Alaxtor
|
0
|
21.92
|
0
|
[]
|
[{"post_id": 82655, "ts": "202 [{"post_id": 82655, "ts": "2026-10-25T15:10:08Z", "hours": 2.9833, "text": "Devlog#9 So decided what tool head am gonna use and currently i have having issues with the imported cad. I added rest of the pulleys and now just need to add the motors and Belts. Next part is making a costom enclosure for the Tool head and making it to be able to spin steadily. Ngl my brain is fried rn tryna draw up images in ma head and since my drawing talent is non existent mind is only thing i got rn. After am done with this its the Bed plate the spool handle and making eveyhritng perfect then the BOM. SO CLOSE GUYS SO CLOSS."}, {"post_id": 82409, "ts": "2026-10-24T18:48:05Z", "hours": 1.8167, "text": "Devlog#8 Hey a small dev log cuz i didnt do much other than fix some issues with my old design they are minor and not noticeble but essential. Now i am waiting for an answer with query from the stardance crew. And now need to figure out to move the bed plate up and down then add the rest of the pulleyes and rails."}, {"post_id": 82091, "ts": "2026-10-23T20:31:04Z", "hours": 2.7167, "text": "Devlog #7 Yippe only a few more things left to make and only one of them hard one and hope to finish this in another 8 hours of working. So what i made for today’s log is the idler Mount/Hotend beam support. Ik it looks simple and all but it took me some time to figure out a design which will let me utilise my pullies. What i need to make next my bed plate which can spin my hotend and its supports and add a motor on it so it can spin hence i get to switch plane which makes stuff without support. My main reason for makining this is fora challenge and i havent seen any large true 5 axis printers and I brainstormed and got a design which am implementing rn. And might try to make it multi colour in the furture if i have money for now i am trying to subsititute some parts for 3 Prints cuz ig it would be easier."}, {"post_id": 81856, "ts": "2026-10-22T19:10:40Z", "hours": 1.7333, "text": "Devlog #6 Am gonna do some off screen grinding cuz recording and tryna figure stuff out is kinda stress full for me and i did basically nothing for this dev long cuz i am tryna figure out a design for my idle pulley mount"}, {"post_id": 81614, "ts": "2026-10-21T19:28:42Z", "hours": 1.4833, "text": "Devlog #5 part-2 Another Small Devlog. It took some time to find the dimessions for the MGN9H Cuz most of them were confusing and now i need to add the main gantry and add my belts and my motros and am looking for an efficent design and how to design it cuz am lost as Zoro rn."}, {"post_id": 81473, "ts": "2026-10-21T12:18:42Z", "hours": 4.3092, "text": "Devlog #5 Hey so i got a few Hours in. So i went on to add the 2 Nema 17 Motors For the Z axis movement for the Gantry. Which didnt take much time since i already made the mount for it. Then i was brain storming a design so that i can make the bed plate rise and also spin to simulate the C Plane(a.k.a the 5th axis). Then made sketch of the design in my notebook but to make the bed plate and how high it should be i need to add the coreXY rails and its components so i can find my actual printable area so i can actually design the bed plate. So i made the linear rod for the 2 NEMA 17. Then i discovered that i need to add another motor on the other side of the so i can move the Bed plate from the other side and its needs to stay still so I added a Geared NEMA 17 with a a decent mount so it can be still and stable. Then i made the Guide rails for the the CoreXY and for the Geared NEMA 17. To file the 9mm rail i need a slimmer profle so i switched some of my profiles to 2040 so i can still get the support and add the rails. Then i made the rails and this took some time cuz was looking at its dimesions and the dimesnions sheet i had wasnt that good and i didnt wanna look for another one cuz idk why (I didnt think about looking for another one :p) And a small note i am using @panda ’s 3D printer as a reference cuz i think it looks cool and his Dev logs are pretty detailed.So for most parts am just reverse-engineering his 3D Printer while Incooperating my Ideas. And if you happen to be my Reviewer just know that your project has been very helpful in my journey."}, {"post_id": 81104, "ts": "2026-10-19T21:36:40Z", "hours": 1.8636, "text": "DEVLOG #4 This dev log is only a few hours after my last devlog. So i started building my z axis now i just need to figure out how to design it so that it can move up and down and rotate so I can have the 5th axis (C axis) AKA the bed plate spinning. For now i ma end this by adding the NEMA 17 motors. And i can be a bit Ambitous with my printer size cuz materials are relatively cheap here cuz less import costs.And literally the most populated country in the world"}, {"post_id": 81068, "ts": "2026-10-19T19:04:16Z", "hours": 1.55, "text": "Devlog #3 AHHHHH MY BRAIN ITS MELTING TRYNA VISUALISE THE STUFF I NEED TO BUILD. I LOWKEY NEED SOME INSPIRATION AND SOME DECENT TUTORIALS IF ANYONE READING THIS HAVE ANYHTING HELP PWES. So i remodeled my entire frame so i can work better wiht the parts and when i add the belts and motors it is easy to visualise and switched to a bit more optimised Gasket Brackets"}, {"post_id": 80937, "ts": "2026-10-19T09:14:23Z", "hours": 1.0667, "text": "Devlog #2 Hey,This is Day two of me building the Printer Tho i haven’t thought of a name yet and am still learning about its parts and how they work. And i have decided on a CoreXY Type design and plan to use a NEMA 14 or 17 to tilt My Printer head. I plan to finish and ship it before 29th of this month and I hope i will finish by then. As for this devlog i just added the L clamp Supports for the Frame. And need to add pulleys for the coreexy and make a good Housing s that my componest dont get cooked"}, {"post_id": 80818, "ts": "2026-10-18T21:37:15Z", "hours": 2.3947, "text": "Devlog #1 So this is day one of trying to build a 5 axis 3D-Printer And so far I am still figuring out 3D printers and how they are built.And how Dimensions of each part exert stress and effect the quality of the 3D print. For now am sketching out the Printer and Figuring out how to make the Printer head move and what profiles and how to set them in an effective and functional way. For now i spent a lot of time researching and need to find an optimal Design for my build or i will have to cut down to a regular CoreXY build due to budget Constraints."}]...
|
Title: 5-Axis 3D-Printer by @Alaxtor | Stardance
Title: 5-Axis 3D-Printer by @Alaxtor | Stardance
Devlogs:
Devlog #1 So this is day one of trying to build a 5 axis 3D-Printer And so far I am still figuring out 3D printers and how they are built.And how Dimensions of each part exert stress and effect the quality of the 3D print. For now am sketching out the Printer and Figuring out how to make the Printer head move and what profiles and how to set them in an effective and functional way. For now i spent a lot of time researching and need to find an optimal Design for my build or i will have to cut down to a regular CoreXY build due to budget Constraints.
Devlog #2 Hey,This is Day two of me building the Printer Tho i haven’t thought of a name yet and am still learning about its parts and how they work. And i have decided on a CoreXY Type design and plan to use a NEMA 14 or 17 to tilt My Printer head. I plan to finish and ship it before 29th of this month and I hope i will finish by then. As for this devlog i just added the L clamp Supports for the Frame. And need to add pulleys for the coreexy and make a good Housing s that my componest dont get cooked
Devlog #3 AHHHHH MY BRAIN ITS MELTING TRYNA VISUALISE THE STUFF I NEED TO BUILD. I LOWKEY NEED SOME INSPIRATION AND SOME DECENT TUTORIALS IF ANYONE READING THIS HAVE ANYHTING HELP PWES. So i remodeled my entire frame so i can work better wiht the parts and when i add the belts and motors it is easy to visualise and switched to a bit more optimised Gasket Brackets
DEVLOG #4 This dev log is only a few hours after my last devlog. So i started building my z axis now i just need to figure out how to design it so that it can move up and down and rotate so I can have the 5th axis (C axis) AKA the bed plate spinning. For now i ma end this by adding the NEMA 17 motors. And i can be a bit Ambitous with my printer size cuz materials are relatively cheap here cuz less import costs.And literally the most populated country in the world
Devlog #5 Hey so i got a few Hours in. So i went on to add the 2 Nema 17 Motors For the Z axis movement for the Gantry. Which didnt take much time since i already made the mount for it. Then i was brain storming a design so that i can make the bed plate rise and also spin to simulate the C Plane(a.k.a the 5th axis). Then made sketch of the design in my notebook but to make the bed plate and how high it should be i need to add the coreXY rails and its components so i can find my actual printable area so i can actually design the bed plate. So i made the linear rod for the 2 NEMA 17. Then i discovered that i need to add another motor on the other side of the so i can move the Bed plate from the other side and its needs to stay still so I added a Geared NEMA 17 with a a decent mount so it can be still and stable. Then i made the Guide rails for the the CoreXY and for the Geared NEMA 17. To file the 9mm rail i need a slimmer profle so i switched some of my profiles to 2040 so i can still get the support and add the rails. Then i made the rails and this took some time cuz was looking at its dimesions and the dimesnions sheet i had wasnt that good and i didnt wanna look for another one cuz idk why (I didnt think about looking for another one :p) And a small note i am using @panda ’s 3D printer as a reference cuz i think it looks cool and his Dev logs are pretty detailed.So for most parts am just reverse-engineering his 3D Printer while Incooperating my Ideas. And if you happen to be my Reviewer just know that your project has been very helpful in my journey.
Devlog #5 part-2 Another Small Devlog. It took some time to find the dimessions for the MGN9H Cuz most of them were confusing and now i need to add the main gantry and add my belts and my motros and am looking for an efficent design and how to design it cuz am lost as Zoro rn.
Devlog #6 Am gonna do some off screen grinding cuz recording and tryna figure stuff out is kinda stress full for me and i did basically nothing for this dev long cuz i am tryna figure out a design for my idle pulley mount
Devlog #7 Yippe only a few more things left to make and only one of them hard one and hope to finish this in another 8 hours of working. So what i made for today’s log is the idler Mount/Hotend beam support. Ik it looks simple and all but it took me some time to figure out a design which will let me utilise my pullies. What i need to make next my bed plate which can spin my hotend and its supports and add a motor on it so it can spin hence i get to switch plane which makes stuff without support. My main reason for makining this is fora challenge and i havent seen any large true 5 axis printers and I brainstormed and got a design which am implementing rn. And might try to make it multi colour in the furture if i have money for now i am trying to subsititute some parts for 3 Prints cuz ig it would be easier.
Devlog#8 Hey a small dev log cuz i didnt do much other than fix some issues with my old design they are minor and not noticeble but essential. Now i am waiting for an answer with query from the stardance crew. And now need to figure out to move the bed plate up and down then add the rest of the pulleyes and rails.
Devlog#9 So decided what tool head am gonna use and currently i have having issues with the imported cad. I added rest of the pulleys and now just need to add the motors and Belts. Next part is making a costom enclosure for the Tool head and making it to be able to spin steadily. Ngl my brain is fried rn tryna draw up images in ma head and since my drawing talent is non existent mind is only thing i got rn. After am done with this its the Bed plate the spool handle and making eveyhritng perfect then the BOM. SO CLOSE GUYS SO CLOSS....
|
1793008385.5867062
|
1793613185.5867062
|
|
34953
|
Ultimate Mob Farms by @OffsetMonkey538 | Stardance
|
OffsetMonkey538
|
1
|
144.43
|
2678
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T13:59:43Z", "hours": 125.0, "multiplier": 18.99, "payout": 2678, "blessing": "neutral", "text": "This is a Minecraft mod for making mob farms, something similar to for example Mob Grinding Utils. It features item and xp collection, entity movement, spawner relocation and crafting, single block mob farms and some other stuff. Honestly, I’m quite proud just over the fact that I finally did finish this project (or at least got it to the point of being comfortable releasing it publically) and it’s hard to choose any specific features, but here I go… I do really like how the particle effects for the soul fan turned out, they’re quite satisfying imo. This is kind of unrelated to the mod, but I’m also proud of having helped out with the development of RRV, the recipe viewer mod I added compat with. While adding support for it in this mod, I noticed some bugs and crashes and stuff, which I PRed fixes for. It’s a bigger project with many complex things, so coming up with a list of all the things I found hard or took a lot of time and explaining all of them would probably go over whatever character limit this text box has lol. One thing that was a big PITA was the compact mob farm inventory. The original implementation I wrote was just… completely wrong, so I had to rewrite it. Then later I realized I overlooked like the most important part of the item transfer api (transactions, which are used for rolling back changes and stuff) so I had to rewrite it again, and then after that I rewrote quite a bit of it one more time because, after the last rewrite, I had accidentally made it possible for other blocks to insert into the inventory, which isn’t something I wanted as that seems quite OP. Another thing that comes to mind is figuring out the code for the soul fan’s range based on upgrades and strength at a given distance. The problem was that the coordinate you have to increase/decrease depends on the orientation of the block, so as an example, the depth upgrade would need to increase the Y pos when the block is placed pointing up and decrease it when pointing down, the X pos when facing north/south and the Z pos when facing east/west. For pushing the entities, I had to find the coordinates of the middle of the face the block is pointing, and add/subtract the correct coordinate to get the range in the depth direction, and then find the distance between each entity currently in range and the fan in just that plane for calculating the strength. For people testing out the project, I definitely do recommend also installing the Reliable Recipe Viewer (RRV) and Item Description mods", "repo": "https://git.offsetmonkey538.top/OffsetMods538/Ultimate-Mob-Farms", "demo": "https://modrinth.com/mod/ultimate-mob-farms"}]...
|
[{"post_id": 82652, "ts": "202 [{"post_id": 82652, "ts": "2026-10-25T15:00:05Z", "hours": 5.1919, "text": "Set up empty pages for all the blocks and items, fought quite a bit with astro/typescript to get the PageTitle override to correctly display the icons. Turns out astro’s optimized Image stuff doesn’t support animated images, no matter how much you try to force it to, so I ended up having to use the basic img tag"}, {"post_id": 80728, "ts": "2026-10-18T17:03:06Z", "hours": 1.5967, "text": "Started working on setting up a docs page for the mod. Mainly want it for explaining the data driven configuration, but having full pages to give more detailed explanations of the different features is also probably a nice touch. Made a new icon for the mod as well, it’s pretty much the same but higher res because the 256x256 one looked weird on the docs page. The docs are done using Starlight like all my other docs pages (see those here ) and lives at https://ultimate-mob-farms.docs.cursedmods.com/ and on the docs/master branch in the repo Currently it’s just the landing page, but it’ll have more stuff soon enough"}, {"post_id": 79375, "ts": "2026-10-13T18:29:39Z", "hours": 3.9611, "text": "Added an RRV screen showing what items can be acquired from the Compact Mob Farm. Shows the entity, the items it drops and the required tier upgrade level. Hoping this also helps with confusion on how stuff works"}, {"post_id": 76204, "ts": "2026-10-02T17:34:45Z", "hours": 2.1567, "text": "Added a progress bar to the Compact Mob Farm GUI that hopefully makes it much easier to understand when it’ll damage the entity and it doesn’t look like it’s just doing nothing lol, especially with the 30 second default time"}, {"post_id": 75664, "ts": "2026-09-30T17:54:02Z", "hours": 6.5264, "text": "Waow that’s quite a bit of stardust 😅 Quite happy with this project and the ratings it got on the first ship :D (except the one that accused my devlogs of being written by ai… My writing is not that bad, right? ) I noticed in the shipwrights’ review video that how upgrades work is not very obvious, they were trying to put a tier upgrade into a soul fan, which only accepts width, height and depth upgrades. It was mentioned in ratings that stuff is a bit hard to figure out in the beginning as well. So to fix that, I added some silhouettes of the supported upgrades shown in the slots and also a hover tooltip saying what’s supported. Oh and i’ve also added 26.3 support now"}, {"post_id": 70575, "ts": "2026-09-19T11:52:49Z", "hours": 7.4719, "text": "School starting with september really hit my productivity on this mod like a truck I am realizing the deadline for stardance is getting real close, so I think this is probably the point where I’ll have to ship it. There are still some TODOs in the code and bugs that need to be squashed and porting to 26.3 (which released like this week, thanks mojang ) and so I haven’t been comfortable marking the latest release as 1.0.0 yet or making announcements elsewhere, but the mod is now perfectly usable and I like where it is. Changes since last devblog: 26.2 support Injecting some items into vanilla loot chests Advancements 26.2 wasn’t actually as painful as I thought it’d be, which was a nice surprise. Adding advancements was a bit more of a pain with 26.2 support though as I needed custom criteria for some of the advancements (one for putting a soul gem in the compact mob farm and another for using a soul gem on a spawner) and Mojang, in their infinite wisdom, decided to move a bunch of advancement stuff around in 26.2."}, {"post_id": 62252, "ts": "2026-09-05T15:04:19Z", "hours": 6.3956, "text": "Getting closer and closer to the actual release… could this be the last devblog before that? Still not quite 100% about if the required kills for each mob are balanced, but it’s probably good enough. Definitely better than everything being 10 kills tho. Felt very off-balance when withers, which are hard to spawn and hard to kill, and pigs, which are just everywhere, required the same amount of kills to capture. Notable changes: Show soul capturing recipe in rrv when checking usages of spawn eggs Show tooltip with entity name when hovering entity in soul capturing rrv recipe Add item descriptions Fix being able to insert items into the compact mob farm inventory Make amount of kills required for capturing an entity different per entity. Update compact mob farm recipe (now uses soul spikes in the middle instead of stone bricks) Store soul gem colors as hex strings in entity tiers config. Much more understandable and easier to manually change the overrides config or whatever Make built-in packs use the mod icon using a mixin instead of copying the icon into the packs. This shaves like 80kb off the final jar which is quite a bit of unnecessary duplicate crap Remove some log spam that was for debugging"}, {"post_id": 59802, "ts": "2026-09-01T19:04:17Z", "hours": 2.5989, "text": "checking the recipe for a specific soul gem now only shows that specific entity instead of all soul capturing recipes soul capturing recipe now shows up before the duplication recipe soul gems can now be searched by the name of the entity they contain fix compact mob farm gui not rendering vanilla background overlay allow filling soul gem when held in the main hand fix dedicated server crashing Running in a dedicated server would crash because there are quite a few places where I referenced client-only classes in places that the jvm will load on the dedicated server as well. Mostly in the different block entity classes, where I had a clientTick method that had ClientLevel as one of it’s parameters. Even though that method would never get called on the dedicated server, java still wants it to exist when loading the class because it’s part of a method’s definition. My current solution is very very awful… I moved those things into methods in the client initializer and… well… yeah… it just looks and is awful: https://git.offsetmonkey538.top/OffsetMods538/Ultimate-Mob-Farms/src/commit/0.0.7/modded/src/main/java/top/offsetmonkey538/ultimatemobfarms/modded/UltimateMobFarmsModdedClient.java#L65 The real, foolproof solution would be using the split sources feature of loom, which creates a second source set and makes the main source set unable to access client classes. Only problem is that it’d be a bit annoying to fully get set up in my multiloader-version gradle system and would most definitely need many changes on MonkeyLib538 as well and I just am not up for doing that atm."}, {"post_id": 58874, "ts": "2026-08-31T13:27:24Z", "hours": 8.6083, "text": "Fixed compact mob farm inventory not working correctly and being incompatible with other mods’ item movement stuff. The whole point of the transfer API on both fabric and neoforge is the transaction system, where each change must store a snapshot that can be returned to if needed; Turns out ignoring the TransactionContext and not saving any snapshots is a bad idea 😅 I’ve tested and it’s compatible with create fly (see screenshot where a compact mob farm with a blaze is being used to feed a blaze burner for a steam engine) and most probably other mods as well. Added Reliable Recipe Viewer integration that explains soul capturing"}, {"post_id": 54946, "ts": "2026-08-26T11:20:57Z", "hours": 7.2406, "text": "Bunch of refactoring, bug fixes, balancing, etc. Release notes can be seen on the forgejo release or on modrinth, I’m not gonna copy paste em here (this is version 0.0.5 right now) It is now actually reviewed on Modrinth, took two weeks for that to happen (Gosh I remember when review times were like less than 24 hours ). I’m still keeping it unlisted until I get a 1.0.0 release out, but if anyone wants to check it out and share feedback or anything, then it’s right over here: https://modrinth.com/mod/ultimate-mob-farms Before a v1, I still need better rrv and item descriptions integration, some more balancing changes, advancements, quite a few bugfixes and probably some other stuff I’m forgetting at the moment."}, {"post_id": 50153, "ts": "2026-08-19T08:08:41Z", "hours": 2.3531, "text": "Made soul fans placed at different locations use a different starting frame offset, so they don’t all look the same (see before and after videos). The way this is implemented is a bit interesting… There’s no easy “use this model but offset any texture’s animation by 1 frame” as afaik the frame index is global per texture. What Minecraft does allow is each block state variant actually being an array of variants that the game will choose between using afaik a hash derived from the block position. This is used in vanilla for things like stone and deepslate, which have mirrored and rotated variants so caves look less repetitive or whatever. As each texture has a global frame index, I am duplicating the soul fan texture and just changing the order of the frames in the accompanying animation metadata file and creating separate models which point to the different textures and then those models are used as variants in the blockstate. What’s even more fun is I am using datagen for duplicating the texture and creating the animation metadata files, which definitely isn’t concerning at all. This also required me to make a pull request to fabric api because the FabricCodecDataProvider assumes all files it generates are .json files, but animation metadata is .mcmeta. (The PR isn’t yet merged so I resorted to…. injecting a mixin into fabric api, definitely not cursed at all I swear)"}, {"post_id": 49673, "ts": "2026-08-18T15:46:30Z", "hours": 4.43, "text": "Added particle effects for soul fan. Figuring out where to spawn em was quite fun actually, though I did have to add a custom particle (reuses the vanilla “small gust” texture) because turns out most particles won’t obey the velocity you give them and just do their own thing, which was a bit annoying."}, {"post_id": 49138, "ts": "2026-08-17T19:28:11Z", "hours": 3.7422, "text": "Added range upgrades for the fan and collector blocks. It was a bit challenging figuring out actually extending the bounding box in the correct directions based on the block is facing, but I did get it working"}, {"post_id": 48767, "ts": "2026-08-17T09:17:16Z", "hours": 4.6397, "text": "Implemented functionality of the soul fan, getting the strength to scale based on distance was a bit of a pain cause i needed to get the position of the center of the face that the fan’s pointing in and only calculate the distance to the entity based on the correct axis cause otherwise giving it a larger range would make the farther to the side entities get pushed less and uhh yeah, took quite a bit of experimenting with stuff to get it to work correctly"}, {"post_id": 47706, "ts": "2026-08-15T19:55:20Z", "hours": 0.9575, "text": "Spent the last hour and a half faffing about with my loader abstraction in monkeylib (stardance only recorded an hour cause that’s technically a separate project) for creative tabs. All that just cause I really wanted the RRV stack group for the filled soul gems to show up next to the empty soul gem, instead of at the end of the list where it did previously"}, {"post_id": 47530, "ts": "2026-08-15T14:35:38Z", "hours": 3.0928, "text": "Spent a bunch of time on cleaning up some code and abstracting some things out of collector block classes to make it easier to add functionality of the soul fan later on, speaking of which! the soul fan is a block that exists in game now"}, {"post_id": 46880, "ts": "2026-08-14T12:46:12Z", "hours": 0.2881, "text": "Spent some time thinking about what I’m gonna do for the block that moves mobs around. I think I’ve decided on going with a basic “fan” type block and now started working on what it could look like. I’m imagining the souls kinda like escaping from the soul sand and also particles spawning and moving in the direction it’s pushing. As always I’m pretty bad at drawing textures, so the beginning here looks a bit crude, but it’s definitely a start. It’d be really nice if aseprite had a wakatime plugin…"}, {"post_id": 46845, "ts": "2026-08-14T11:27:58Z", "hours": 3.8683, "text": "Added the experience collector block, which obviously picks up xp orbs and turns em into bottles of enchanting. Kind of got so focused I forgot about making more detailed devlogs 😅"}, {"post_id": 46238, "ts": "2026-08-13T10:39:10Z", "hours": 3.695, "text": "Made the soul spikes actually deal extra fall damage when fell on. Current fall damage multiplier is at 5, not sure if that is too much or too little. The damage is done by a FakePlayer, so the mob will also drop loot that only drops from player kills, including experience orbs. (Seems like I need to add an XP Collector block in the future to deal with those). Oh and also did some boilerplate-ish things to soul spikes like adding a recipe, translation, etc Turns out minecraft decides that the block you fall on is the one that’s 0.2 blocks below you…. The model of the soul spikes (which i don’t really wanna change anymore) has the base at 3 pixels high, which makes it… 0.1875 block high 😮💨 Nothing that can’t be solved with a mixin to Entity#getOnPosLegacy that changes the BlockPos it returns if the the block above the “correct” block is soul spikes"}, {"post_id": 45189, "ts": "2026-08-11T14:44:28Z", "hours": 0.2731, "text": "Made an okay-ish texture for the soul spikes block (many of em at once looks kinda noisy but oh well, it’ll do. Hopefully it’ll be locked up in a farm killing chamber room anyway). Had to change the UV mapping again because for whatever reasons, minecraft decides to render a sliver of the neighboring pixel as well which looks super bad with two very contrasty colors next to each other. Solution was to move the blue parts to the bottom of the texture where there was room to have it separated by a row of blank pixels."}, {"post_id": 45107, "ts": "2026-08-11T11:51:36Z", "hours": 0.7186, "text": "Finished UV mapping the spikes…. this literally took like over an hour haha, sadly time spent in blockbench doesn’t count as it doesn’t have a plugin for wakatime or whatever :/ (the 43min this devlog logs was actually setting up oxipng to automatically run on every commit to optimize the png files) Next i guess will be to make an actual texture for it, yay. Here’s the super very interesting texture that currently just has all the different mapped sides in different colors"}, {"post_id": 44754, "ts": "2026-08-10T18:48:32Z", "hours": 2.0067, "text": "Started working on the soul spikes. First made a model for it, not sure if it’ll look good once I make a texture for the actual spikes part of it as well"}, {"post_id": 41521, "ts": "2026-08-05T19:39:30Z", "hours": 1.7181, "text": "Been doing some boring things like writing a description and making an icon and some miscellaneous fixes and whatnot as I actually think I want to get this in a state where I could send it in for review on modrinth. Otherwise if I sent it in once I was actually finished with the project, it probably wouldn’t get reviewed before stardance ends and then i’d have to tell people to download the mod from my git releases and that wouldn’t automatically tell em where to get dependencies and whatnot so yeah, want to get it in the queue asap. Here’s the icon I came up with btw"}, {"post_id": 40668, "ts": "2026-08-04T11:02:42Z", "hours": 2.4575, "text": "Added a texture and recipe to item collector, made it possible to disable it using redstone, made the sample collector only pick up items every 10 ticks."}, {"post_id": 39730, "ts": "2026-08-02T21:36:20Z", "hours": 1.855, "text": "Shift-right-clicking an item collector with an empty hand now shows its range. Drawing lines of particles between the correct corners for the outline took a bit of trial and error, also added a screenshot where it doesn’t look quite correct Also I’m not sure if the video from the previous devlog got uploaded correctly (my browser at least isn’t able to play it) so here it is again"}, {"post_id": 39564, "ts": "2026-08-02T16:40:59Z", "hours": 2.9042, "text": "Made item collector spawn a line of particles when picking up items Oh and also added compatibility to item collector with container blocks from other mods that use the fabric or neoforge transfer api instead of vanilla containers, more loader specific stuff, yay!"}, {"post_id": 38906, "ts": "2026-08-01T14:21:22Z", "hours": 1.0933, "text": "Implemented basic functionality of the item collector. Currently has a range of 2 blocks that it will pick things up from and put em straight into a connected inventory"}, {"post_id": 38761, "ts": "2026-08-01T10:08:52Z", "hours": 3.6756, "text": "Started work on adding the item collector, currently just got done with adding the block itself with some boilerplate stuff and a model. As the name suggests, it’ll be for picking up items in some range of it. Not quite sure if I want it to be a range all around the block, or maybe going outwards from the direction it’s facing? Also not yet quite sure if I want it to just put stuff into an internal inventory and require a hopper or something modded to pull out of it, or if it should act like a hopper pushing things out from the side it’s attached on"}, {"post_id": 37603, "ts": "2026-07-30T13:35:05Z", "hours": 1.1933, "text": "Received new textures and spent some time messing around in the mcmeta file for the animation timing. Looks quite good now. Also made the empty soul gem use the same texture, just with a soul light blue colors."}, {"post_id": 37190, "ts": "2026-07-29T18:31:37Z", "hours": 5.0456, "text": "Past while has been spent on fighting with gradle to extend my overly complicated setup ( monkeylogic, my gradle convention plugin ) and make it even more complicated allow adding dependencies from modrinth to projects. After that I could easily add RRV (Reliable Recipe Viewer) as a dependency and now lastly add integration with it. Currently I’ve got integration to the point of showing the custom duplication recipe, which is great"}, {"post_id": 35160, "ts": "2026-07-26T12:28:59Z", "hours": 2.7197, "text": "Finally fixed the soul gem duplication recipe, which was a bit of a pain to deal with… I initially went down a dumb rabbit hole of overcomplicating the matcher system when turns out having multiple of the same item in the recipe can easily be solved by storing a count for each ingredient instead of having multiple entries for them 😝"}, {"post_id": 34287, "ts": "2026-07-24T21:18:42Z", "hours": 2.5044, "text": "Made spawners craftable, made interacting with spawners using a filled soul gem set the entity in the spawner. Still not quite sure what to call the “filled” soul gem. One idea i had was to call it just a soul gem and call the not filled one an “Empty Soul Gem”, which is honestly a pretty good idea, but I’m not sure what to do when it’s in the process of being filled. Technically at that point it’s not empty , but maybe it’d be fine to call it that"}, {"post_id": 32839, "ts": "2026-07-22T07:47:33Z", "hours": 3.5317, "text": "Lots of fun stuff between this and the last devlog: Creative tab for filled soul gems now only contains supported ones (had to make creative tabs refresh when data is reloaded cause datapacks can change what’s supported) Removed the old SampleTakerItem and FilledSampleTakerItem classes and moved most logic to custom components or mixins. Soul gems can be filled by holding them in the off hand when killing the target entity ( https://imgur.com/a/Lz6PjZs ) Some optimizations"}, {"post_id": 32407, "ts": "2026-07-21T16:00:26Z", "hours": 1.9203, "text": "Optimized the EntityTiers lookup (which I mentioned I messed up last devlog) by using a map instead of a list, and it’s also now storing a reference to the Identifier instead of EntityType, so there’s less work converting between them for the packet codec (has to be sent as an Identifier (or, well, string) over the network) and also when doing some of the lookups (like from the tint provider, which has just the id by itself) Not sure what to put as the screenshot it requires me to add…. I guess have some prototypes of the new soul gem texture a person’s working on (the final shape will probably not be a perfectly round pearl)"}, {"post_id": 32271, "ts": "2026-07-21T10:39:38Z", "hours": 3.1261, "text": "Made “filled” soul gems have colors based on the entity they contain! (and also switched to a different (and probably even worse lmao) texture) The colors are the same as what spawn eggs used to have, thankfully the minecraft wiki has a list of what they all were before that was removed. Sadly I can’t steal the entity colors from vanilla anymore as that was removed in 1.21.5, so I had to add color fields to the entity tiers config and that messed with a lot of stuff and is a bit of a hit on performance when it’s not looping over stuff in weird ways as it’s a list of entries when it really should probably be a map… I’ll fix that i guess Also I know this texture is ass and someone a bit more talented in drawing is cooking up a new one which I’ll probably be able to show off in a few days. Question is… do I want the current one to show up when the vanilla programmer art pack is enabled or is that too embarrassing to show off?"}, {"post_id": 31810, "ts": "2026-07-20T14:25:41Z", "hours": 0.9456, "text": "Added recipes, translations, etc for soul essence and gem, removed spirit bottle, added recipe for spawner, made spawners drop with silk touch. Thanks to neoforge there have to be separate mixins for fabric and neo for disabling the xp drop when a spawner is broken with silk touch (would lead to infinite xp otherwise lol)…. if only neoforge was just fabric"}, {"post_id": 31751, "ts": "2026-07-20T12:04:50Z", "hours": 1.2917, "text": "Made soul essence drop from mobs killed on soul sand/soil. Also spawns fun particles! https://imgur.com/a/Qt5XxUI"}, {"post_id": 31695, "ts": "2026-07-20T09:44:19Z", "hours": 0.3378, "text": "So I’ve been doing some brainstorming and writing things down on paper (like a caveman) and have at least redesigned some of the features that already exist. Instead of a bottle of spirits that you get by right clicking a spawner, there’s going to be Soul Essence that you get by killing a mob while they’re standing on soul sand/soil. Instead of the Sample taker, there’s gonna be a soul gem crafted from a diamond and 4 soul essence that will be filled by holding it in your offhand while killing x amount of the target mob. Also thought of some recipes that I’m not gonna explain here rn. Sadly (or thankfully) I haven’t found a wakatime plugin for Aseprite, so nobody will know just how many hours I spent on the absolute trash textures I made for the soul gem and soul essence (I promise they’ll be better at some point maybe idk if I can do any better 😭 ). Soul essence just looks off somehow, and the soul gem looks like a duck spawn egg 😭 😭 😭 😭"}, {"post_id": 31122, "ts": "2026-07-19T08:32:28Z", "hours": 6.5108, "text": "It is now working on NeoForge as well! Getting the inventory to work with the neoforge transfer api was a bit of a pain, but I managed to get it to work! (Don’t mind the debug upgrades in the screenshot, they make it easier to test but dont have textures) Next up is uhh… some brainstorming and rethinking how the whole mod works and thinking about what’s in scope for this and what’s not: One thing I definitely want to add is a crafting recipe for spawners and making the sample takers (which will probably be renamed to something relating to souls and gems) usable as spawn eggs on spawners. I’m not quite sure if upgradeable spawners should be a part of this though as there’s already apotheosis for neoforge (and a port in the works for fabric) that does that and probably other mods as well. I also really wanted to add things for moving and killing mobs in the world, for which there are also already mods like Dark Utilities (got quite inspired by that) which afaik also is updated to the latest version and is for both fabric and neoforge…. Though it seems to have more random things unrelated to mob farming, and maybe it’d be fine if I really differentiate from it and other similar mods with the theme of this? Yeahhh this’ll need quite a bit more thinking."}, {"post_id": 28545, "ts": "2026-07-14T21:20:48Z", "hours": 2.0633, "text": "Finished getting everything out of :loader:fabric and into :modded that makes sense to move. The fabric subproject now only has 4 files, two of which are just the entrypoints that invoke the common initializer and the other two are using fabric api specific things and can’t be moved out without a lot of headache!"}, {"post_id": 28177, "ts": "2026-07-14T09:44:23Z", "hours": 0.2531, "text": "(the 15m were spent working on getting MenuProvider stuff out from fabric specific code and into the common modded subproject, butttt I’m making a post cause I wanna share…) Some funny screenshots from when I was porting from 1.21.1 to 26.1 (rendering changes here are a pain lol)"}, {"post_id": 28170, "ts": "2026-07-14T09:24:59Z", "hours": 17.9675, "text": "Just realized this is probably something I could submit to stardance as well 😅 Basically the initial idea was to have a mob farm contained in a single block. You craft a sample taker and have to click on 10 separate instances of an entity to get a filled sample of that entity. Then you put that into a Compact Mob Farm, turn it on, maybe give it some upgrades and a sword, and it’ll start farming the drops of the entity you took samples of. Here are some screenshots of what stuff looks like"}]...
|
Title: Ultimate Mob Farms by @OffsetMonkey538 | St Title: Ultimate Mob Farms by @OffsetMonkey538 | Stardance
Devlogs:
Just realized this is probably something I could submit to stardance as well 😅 Basically the initial idea was to have a mob farm contained in a single block. You craft a sample taker and have to click on 10 separate instances of an entity to get a filled sample of that entity. Then you put that into a Compact Mob Farm, turn it on, maybe give it some upgrades and a sword, and it’ll start farming the drops of the entity you took samples of. Here are some screenshots of what stuff looks like
(the 15m were spent working on getting MenuProvider stuff out from fabric specific code and into the common modded subproject, butttt I’m making a post cause I wanna share…) Some funny screenshots from when I was porting from 1.21.1 to 26.1 (rendering changes here are a pain lol)
Finished getting everything out of :loader:fabric and into :modded that makes sense to move. The fabric subproject now only has 4 files, two of which are just the entrypoints that invoke the common initializer and the other two are using fabric api specific things and can’t be moved out without a lot of headache!
It is now working on NeoForge as well! Getting the inventory to work with the neoforge transfer api was a bit of a pain, but I managed to get it to work! (Don’t mind the debug upgrades in the screenshot, they make it easier to test but dont have textures) Next up is uhh… some brainstorming and rethinking how the whole mod works and thinking about what’s in scope for this and what’s not: One thing I definitely want to add is a crafting recipe for spawners and making the sample takers (which will probably be renamed to something relating to souls and gems) usable as spawn eggs on spawners. I’m not quite sure if upgradeable spawners should be a part of this though as there’s already apotheosis for neoforge (and a port in the works for fabric) that does that and probably other mods as well. I also really wanted to add things for moving and killing mobs in the world, for which there are also already mods like Dark Utilities (got quite inspired by that) which afaik also is updated to the latest version and is for both fabric and neoforge…. Though it seems to have more random things unrelated to mob farming, and maybe it’d be fine if I really differentiate from it and other similar mods with the theme of this? Yeahhh this’ll need quite a bit more thinking.
So I’ve been doing some brainstorming and writing things down on paper (like a caveman) and have at least redesigned some of the features that already exist. Instead of a bottle of spirits that you get by right clicking a spawner, there’s going to be Soul Essence that you get by killing a mob while they’re standing on soul sand/soil. Instead of the Sample taker, there’s gonna be a soul gem crafted from a diamond and 4 soul essence that will be filled by holding it in your offhand while killing x amount of the target mob. Also thought of some recipes that I’m not gonna explain here rn. Sadly (or thankfully) I haven’t found a wakatime plugin for Aseprite, so nobody will know just how many hours I spent on the absolute trash textures I made for the soul gem and soul essence (I promise they’ll be better at some point maybe idk if I can do any better 😭 ). Soul essence just looks off somehow, and the soul gem looks like a duck spawn egg 😭 😭 😭 😭
Made soul essence drop from mobs killed on soul sand/soil. Also spawns fun particles! https://imgur.com/a/Qt5XxUI
Added recipes, translations, etc for soul essence and gem, removed spirit bottle, added recipe for spawner, made spawners drop with silk touch. Thanks to neoforge there have to be separate mixins for fabric and neo for disabling the xp drop when a spawner is broken with silk touch (would lead to infinite xp otherwise lol)…. if only neoforge was just fabric
Made “filled” soul gems have colors based on the entity they contain! (and also switched to a different (and probably even worse lmao) texture) The colors are the same as what spawn eggs used to have, thankfully the minecraft wiki has a list of what they all were before that was removed. Sadly I can’t steal the entity colors from vanilla anymore as that was removed in 1.21.5, so I had to add color fields to the entity tiers config and that messed with a lot of stuff and is a bit of a hit on performance when it’s not looping over stuff in weird ways as it’s a list of entries when it really should probably be a map… I’ll fix that i guess Also I know this texture is ass and someone a bit more talented in drawing is cooking up a new one which I’ll probably be able to show off in a few days. Question is… do I want the current one to show up when the vanilla programmer art pack is enabled or is that too embarrassing to show off?
Optimized the EntityTiers lookup (which I mentioned I messed up last devlog) by using a map instead of a list, and it’s also now storing a reference to the Identifier instead of EntityType, so there’s less work converting between them for the packet codec (has to be sent as an Identifier (or, well, string) over the network) and also when doing some of the lookups (like from the tint provider, which has just the id by itself) Not sure what to put as the screenshot it requires me to add…. I guess have some prototypes of the new soul gem texture a person’s working on (the final shape will probably not be a perfectly round pearl)
Lots of fun stuff between this and the last devlog: Creative tab for filled soul gems now only contains supported ones (had to make creative tabs refresh when data is reloaded cause datapacks can change what’s supported) Removed the old SampleTakerItem and FilledSampleTakerItem classes and moved most logic to custom components or mixins. Soul gems can be filled by holding them in the off hand when killing the target entity ( https://imgur.com/a/Lz6PjZs ) Some optimizations
Made spawners craftable, made interacting with spawners using a filled soul gem set the entity in the spawner. Still not quite sure what to call the “filled” soul gem. One idea i had was to call it just a soul gem and call the not filled one an “Empty Soul Gem”, which is honestly a pretty good idea, but I’m not sure what to do when it’s in the process of being filled. Technically at that point it’s not empty , but maybe it’d be fine to call it that
Finally fixed the soul gem duplication recipe, which was a bit of a pain to deal with… I initially went down a dumb rabbit hole of overcomplicating the matcher system when turns out having multiple of the same item in the recipe can easily be solved by storing a count for each ingredient instead of having multiple entries for them 😝
Past while has been spent on fighting with gradle to extend my overly complicated setup ( monkeylogic, my gradle convention plugin ) and make it even more complicated allow adding dependencies from modrinth to projects. After that I could easily add RRV (Reliable Recipe Viewer) as a dependency and now lastly add integration with it. Currently I’ve got integration to the point of showing the custom duplication recipe, which is great
Received new textures and spent some time messing around in the mcmeta file for the animation timing. Looks quite good now. Also made the empty soul gem use the same texture, just with a soul light blue colors.
Started work on adding the item collector, currently just got done with adding the block itself with some boilerplate stuff and a model. As the name suggests, it’ll be for picking up items in some range of it. Not quite sure if I want it to be a range all around the block, or maybe going outwards from the direction it’s facing? Also not yet quite sure if I want it to just put stuff into an internal inventory and require a hopper or something modded to pull out of it, or if it should act like a hopper pushing things out from the side it’s attached on
Implemented basic functionality of the item collector. Currently has a range of 2 blocks that it will pick things up from and put em straight into a connected inventory
Made item collector spawn a line of particles when picking up items Oh and also added compatibility to item collector with container blocks from other mods that use the fabric or neoforge transfer api instead of vanilla containers, more loader specific stuff, yay!
Shift-right-clicking an item collector with an empty hand now shows its range. Drawing lines of particles between the correct corners for the outline took a bit of trial and error, also added a screenshot where it doesn’t look quite correct Also I’m not sure if the video from the previous devlog got uploaded correctly (my browser at least isn’t able to play it) so here it is again
Added a texture and recipe to item collector, made it possible to disable it using redstone, made the sample collector only pick up items every 10 ticks.
Been doing some boring things like writing a description and making an icon and some miscellaneous fixes and whatnot as I actually think I want to get this in a state where I could send it in for review on modrinth. Otherwise if I sent it in once I was actually finished with the project, it probably wouldn’t get reviewed before stardance ends and then i’d have to tell people to download the mod from my git releases and that wouldn’t automatically tell em where to get dependencies and whatnot so yeah, want to get it in the queue asap. Here’s the icon I came up with btw
Started working on the soul spikes. First made a model for it, not sure if it’ll look good once I make a texture for the actual spikes part of it as well
Finished UV mapping the spikes…. this literally took like over an hour haha, sadly time spent in blockbench doesn’t count as it doesn’t have a plugin for wakatime or whatever :/ (the 43min this devlog logs was actually setting up oxipng to automatically run on every commit to optimize the png files) Next i guess will be to make an actual texture for it, yay. Here’s the super very interesting texture that currently just has all the different mapped sides in different colors
Made an okay-ish texture for the soul spikes block (many of em at once looks kinda noisy but oh well, it’ll do. Hopefully it’ll be locked up in a farm killing chamber room anyway). Had to change the UV mapping again because for whatever reasons, minecraft decides to render a sliver of the neighboring pixel as well which looks super bad with two very contrasty colors next to each other. Solution was to move the blue parts to the bottom of the texture where there was room to have it separated by a row of blank pixels.
Made the soul spikes actually deal extra fall damage when fell on. Current fall damage multiplier is at 5, not sure if that is too much or too little. The damage is done by a FakePlayer, so the mob will also drop loot that only drops from player kills, including experience orbs. (Seems like I need to add an XP Collector block in the future to deal with those). Oh and also did some boilerplate-ish things to soul spikes like adding a recipe, translation, etc Turns out minecraft decides that the block you fall on is the one that’s 0.2 blocks below you…. The model of the soul spikes (which i don’t really wanna change anymore) has the base at 3 pixels high, which makes it… 0.1875 block high 😮💨 Nothing that can’t be solved with a mixin to Entity#getOnPosLegacy that changes the BlockPos it returns if the the block above the “correct” block is soul spikes
Added the experience collector block, which obviously picks up xp orbs and turns em into bottles of enchanting. Kind of got so focused I forgot about making more detailed devlogs 😅
Spent some time thinking about what I’m gonna do for the block that moves mobs around. I think I’ve decided on going with a basic “fan” type block and now started working on what it could look like. I’m imagining the souls kinda like escaping from the soul sand and also particles spawning and moving in the direction it’s pushing. As always I’m pretty bad at drawing textures, so the beginning here looks a bit crude, but it’s definitely a start. It’d be really nice if aseprite had a wakatime plugin…
Spent a bunch of time on cleaning up some code and abstracting some things out of collector block classes to make it easier to add functionality of the soul fan later on, speaking of which! the soul fan is a block that exists in game now
Spent the last hour and a half faffing about with my loader abstraction in monkeylib (stardance only recorded an hour cause that’s technically a separate project) for creative tabs. All that just cause I really wanted the RRV stack group for the filled soul gems to show up next to the empty soul gem, instead of at the end of the list where it did previously
Implemented functionality of the soul fan, getting the strength to scale based on distance was a bit of a pain cause i needed to get the position of the center of the face that the fan’s pointing in and only calculate the distance to the entity based on the correct axis cause otherwise giving it a larger range would make the farther to the side entities get pushed less and uhh yeah, took quite a bit of experimenting with stuff to get it to work correctly
Added range upgrades for the fan and collector blocks. It was a bit challenging figuring out actually extending the bounding box in the correct directions based on the block is facing, but I did get it working
Added particle effects for soul fan. Figuring out where to spawn em was quite fun actually, though I did have to add a custom particle (reuses the vanilla “small gust” texture) because turns out most particles won’t obey the velocity you give them and just do their own thing, which was a bit annoying.
Made soul fans placed at different locations use a different starting frame offset, so they don’t all look the same (see before and after videos). The way this is implemented is a bit interesting… There’s no easy “use this model but offset any texture’s animation by 1 frame” as afaik the frame index is global per texture. What Minecraft does allow is each block state variant actually being an array of variants that the game will choose between using afaik a hash derived from the block position. This is used in vanilla for things like stone and deepslate, which have mirrored and rotated variants so caves look less repetitive or whatever. As each texture has a global frame index, I am duplicating the soul fan texture and just changing the order of the frames in the accompanying animation metadata file and creating separate models which point to the different textures and then those models are used as variants in the blockstate. What’s even more fun is I am using datagen for duplicating the texture and creating the animation metadata files, which definitely isn’t concerning at all. This also required me to make a pull request to fabric api because the FabricCodecDataProvider assumes all files it generates are .json files, but animation metadata is .mcmeta. (The PR isn’t yet merged so I resorted to…. injecting a mixin into fabric api, definitely not cursed at all I swear)
Bunch of refactoring, bug fixes, balancing, etc. Release notes can be seen on the forgejo release or on modrinth, I’m not gonna copy paste em here (this is version 0.0.5 right now) It is now actually reviewed on Modrinth, took two weeks for that to happen (Gosh I remember when review times were like less than 24 hours ). I’m still keeping it unlisted until I get a 1.0.0 release out, but if anyone wants to check it out and share feedback or anything, then it’s right over here: https://modrinth.com/mod/ultimate-mob-farms Before a v1, I still need better rrv and item descriptions integration, some more balancing changes, advancements, quite a few bugfixes and probably some other stuff I’m forgetting at the moment.
Fixed compact mob farm inventory not working correctly and being incompatible with other mods’ item movement stuff. The whole point of the transfer API on both fabric and neoforge is the transaction system, where each change must store a snapshot that can be returned to if needed; Turns out ignoring the TransactionContext and not saving any snapshots is a bad idea 😅 I’ve tested and it’s compatible with create fly (see screenshot where a compact mob farm with a blaze is being used to feed a blaze burner for a steam engine) and most probably other mods as well. Added Reliable Recipe Viewer integration that explains soul capturing
checking the recipe for a specific soul gem now only shows that specific entity instead of all soul capturing recipes soul capturing recipe now shows up before the duplication recipe soul gems can now be searched by the name of the entity they contain fix compact mob farm gui not rendering vanilla background overlay allow filling soul gem when held in the main hand fix dedicated server crashing Running in a dedicated server would crash because there are quite a few places where I referenced client-only classes in places that the jvm will load on the dedicated server as well. Mostly in the different block entity classes, where I had a clientTick method that had ClientLevel as one of it’s parameters. Even though that method would never get called on the dedicated server, java still wants it to exist when loading the class because it’s part of a method’s definition. My current solution is very very awful… I moved those things into methods in the client initializer and… well… yeah… it just looks and is awful: https://git.offsetmonkey538.top/OffsetMods538/Ultimate-Mob-Farms/src/commit/0.0.7/modded/src/main/java/top/offsetmonkey538/ultimatemobfarms/modded/UltimateMobFarmsModdedClient.java#L65 The real, foolproof solution would be using the split sources feature of loom, which creates a second source set and makes the main source set unable to access client classes. Only problem is that it’d be a bit annoying to fully get set up in my multiloader-version gradle system and would most definitely need many changes on MonkeyLib538 as well and I just am not up for doing that atm.
Getting closer and closer to the actual release… could this be the last devblog before that? Still not quite 100% about if the required kills for each mob are balanced, but it’s probably good enough. Definitely better than everything being 10 kills tho. Felt very off-balance when withers, which are hard to spawn and hard to kill, and pigs, which are just everywhere, required the same amount of kills to capture. Notable changes: Show soul capturing recipe in rrv when checking usages of spawn eggs Show tooltip with entity name when hovering entity in soul capturing rrv recipe Add item descriptions Fix being able to insert items into the compact mob farm inventory Make amount of kills required for capturing an entity different per entity. Update compact mob farm recipe (now uses soul spikes in the middle instead of stone bricks) Store soul gem colors as hex strings in entity tiers config. Much more understandable and easier to manually change the overrides config or whatever Make built-in packs use the mod icon using a mixin instead of copying the icon into the packs. This shaves like 80kb off the final jar which is quite a bit of unnecessary duplicate crap Remove some log spam that was for debugging
School starting with september really hit my productivity on this mod like a truck I am realizing the deadline for stardance is getting real close, so I think this is probably the point where I’ll have to ship it. There are still some TODOs in the code and bugs that need to be squashed and porting to 26.3 (which released like this week, thanks mojang ) and so I haven’t been comfortable marking the latest release as 1.0.0 yet or making announcements elsewhere, but the mod is now perfectly usable and I like where it is. Changes since last devblog: 26.2 support Injecting some items into vanilla loot chests Advancements 26.2 wasn’t actually as painful as I thought it’d be, which was a nice surprise. Adding advancements was a bit more of a pain with 26.2 support though as I needed custom criteria for some of the advancements (one for putting a soul gem in the compact mob farm and another for using a soul gem on a spawner) and Mojang, in their infinite wisdom, decided to move a bunch of advancement stuff around in 26.2.
Waow that’s quite a bit of stardust 😅 Quite happy with this project and the ratings it got on the first ship :D (except the one that accused my devlogs of being written by ai… My writing is not that bad, right? ) I noticed in the shipwrights’ review video that how upgrades work is not very obvious, they were trying to put a tier upgrade into a soul fan, which only accepts width, height and depth upgrades. It was mentioned in ratings that stuff is a bit hard to figure out in the beginning as well. So to fix that, I added some silhouettes of the supported upgrades shown in the slots and also a hover tooltip saying what’s supported. Oh and i’ve also added 26.3 support now
Added a progress bar to the Compact Mob Farm GUI that hopefully makes it much easier to understand when it’ll damage the entity and it doesn’t look like it’s just doing nothing lol, especially with the 30 second default time
Added an RRV screen showing what items can be acquired from the Compact Mob Farm. Shows the entity, the items it drops and the required tier upgrade level. Hoping this also helps with confusion on how stuff works
Started working on setting up a docs page for the mod. Mainly want it for explaining the data driven configuration, but having full pages to give more detailed explanations of the different features is also probably a nice touch. Made a new icon for the mod as well, it’s pretty much the same but higher res because the 256x256 one looked weird on the docs page. The docs are done using Starlight like all my other docs pages (see those here ) and lives at https://ultimate-mob-farms.docs.cursedmods.com/ and on the docs/master branch in the repo Currently it’s just the landing page, but it’ll have more stuff soon enough
Set up empty pages for all the blocks and items, fought quite a bit with astro/typescript to get the PageTitle override to correctly display the icons. Turns out astro’s optimized Image stuff doesn’t support animated images, no matter how much you try to force it to, so I ended up having to use the basic img tag
Ships:
This is a Minecraft mod for making mob farms, something similar to for example Mob Grinding Utils. It features item and xp collection, entity movement, spawner relocation and crafting, single block mob farms and some other stuff. Honestly, I’m quite proud just over the fact that I finally did finish this project (or at least got it to the point of being comfortable releasing it publically) and it’s hard to choose any specific features, but here I go… I do really like how the particle effects for the soul fan turned out, they’re quite satisfying imo. This is kind of unrelated to the mod, but I’m also proud of having helped out with the development of RRV, the recipe viewer mod I added compat with. While adding support for it in this mod, I noticed some bugs and crashes and stuff, which I PRed fixes for. It’s a bigger project with many complex things, so coming up with a list of all the things I found hard or took a lot of time and explaining all of them would probably go over whatever character limit this text box has lol. One thing that was a big PITA was the compact mob farm inventory. The original implementation I wrote was just… completely wrong, so I had to rewrite it. Then later I realized I overlooked like the most important part of the item transfer api (transactions, which are used for rolling back changes and stuff) so I had to rewrite it again, and then after that I rewrote quite a bit of it one more time because, after the last rewrite, I had accidentally made it possible for other blocks to insert into the inventory, which isn’t something I wanted as that seems quite OP. Another thing that comes to mind is figuring out the code for the soul fan’s range based on upgrades and strength at a given distance. The problem was that the coordinate you have to increase/decrease depends on the orientation of the block, so as an example, the depth upgrade would need to increase the Y pos when the block is placed pointing up and decrease it when pointing down, the X pos when facing north/south and the Z pos when facing east/west. For pushing the entities, I had to find the coordinates of the middle of the face the block is pointing, and add/subtract the correct coordinate to get the range in the depth direction, and then find the distance between each entity currently in range and the fan in just that plane for calculating the strength. For people testing out the project, I definitely do recommend also installing the Reliable Recipe Viewer (RRV) and Item Description mods...
|
1793004599.9761665
|
1793090999.9761665
|
|
33771
|
AtomSim by @yaasshh | Stardance
|
yaasshh
|
2
|
79.17
|
847
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T11:10:43Z", "hours": 12.0, "multiplier": 13.8, "payout": 163, "blessing": "neutral", "text": "AtomSim is a website I built that lets you actually see what an atom looks like. You pick an element, or hydrogen, and pick which electron shell you want to look at. Then it draws it. Not a cartoon of dots going around a circle like the diagrams in school, the real shape, the cloud where the electron actually is. Some of them look like spheres, some look like dumbbells, some look like weird four leaf clovers. All of that is real, it just falls out of the math. You can spin it around, slice it in half, look at it as a graph instead, or look at the colored lines of light the atom gives off when it gets hot. That last one is how we know what stars are made of, and you can watch it happen. The part I care about most is that it never fakes anything. Every single number on the screen carries a label saying how it was made. Some are exact, straight from the equations. Some are computed numerically with an error bar attached. Some are approximations, and it says which physical effects it left out. And a few are deliberate “what if” experiments, like turning off the rule that stops two electrons sitting in the same place, just to see the atom collapse. Those are labeled too. So if a picture is pretty rather than true, the app tells you. I wanted something a curious fifteen year old could poke at for an hour and come away with a correct picture in their head, not a comfortable wrong one. It runs in a browser, works on a phone, and every view has its own link you can share. PS: It also has mobile view now!", "repo": "https://github.com/yaasshh09/AtomSim", "demo": "https://atomsim.fly.dev"}, {"ship_num": 2, "ts": "2026-08-07T18:00:05Z", "hours": 58.0, "multiplier": 18.43, "payout": 684, "blessing": "neutral", "text": "Atom Sim is a browser app that solves atoms from scratch and shows you the result. Hydrogen comes out of closed-form math, real atoms like carbon and argon come out of a Hartree-Fock solver I wrote, and you can look at any of them as a 3D electron cloud, a 2D slice, a radial plot, an energy-level diagram or an emission spectrum. You can also break physics on purpose: switch off the Pauli exclusion principle, switch off electron exchange, or type in your own potential V(r) and see what kind of atom falls out. The rule I built everything around is that the model never quietly lies. Every number carries a tag saying how it was made: exact, numerical, approximation, counterfactual, or just a visual choice. That tag follows the number from the solver all the way to the label on screen. What was challenging Hartree-Fock was brutal. The angular coefficients in the Fock operator are easy to get slightly wrong, and when you do, the solver still converges and hands you smooth, beautiful, completely wrong orbitals. Nothing crashes, nothing warns you. I had to re-derive the algebra instead of nudging numbers until a benchmark matched. Error bars were the other trap. Mine looked great for a while and were simply lying, because the real error was coming from the box size, not the grid spacing I was measuring. Argon also took about an hour on a uniform grid until I moved to an exponential mesh, which cut it to seconds. What I’m proud of That it’s honest. Plenty of simulators draw a pretty orbital and say nothing about where it came from. Mine tells you, and the tests enforce it. The spectra are checked against real NIST data inside the test suite, so a physics regression fails CI rather than shipping quietly. How to test it It’s live at https://atomsim.fly.dev . The server sleeps when nobody is using it, so the very first load can take around 15 seconds. After that it’s quick. Good things to try: pick n=3, l=1 and rotate the cloud, then flip to Plane view for the cross-section. Switch the element to argon. Open a guided tour if you want the short version. Every view is a shareable URL, so you can link someone to an exact state.", "repo": "https://github.com/yaasshh09/AtomSim", "demo": "https://atomsim.fly.dev"}]...
|
[{"post_id": 82647, "ts": "202 [{"post_id": 82647, "ts": "2026-10-25T14:39:55Z", "hours": 2.1, "text": "Devlog #10 Since last time I’ve mostly been adding new physics, so here’s the list. Momentum space: The Radial view now shows how fast the electron is likely to be moving, not just where it is. This one is exact math too. Decay cascade: An excited hydrogen atom doesn’t fall straight to the bottom. It drops down step by step, and now you can watch every path it might take and how likely each one is. Lasers: There’s a new laser panel where you shine light on the atom and watch the electron flip back and forth between two levels (these are called Rabi oscillations). Relativity: For one-electron atoms you can now see the Dirac version of the wavefunction, which is what you get when you add Einstein’s relativity to quantum mechanics. The proton radius puzzle: The nucleus isn’t a perfect point. It has a size, and that shifts the energy levels a tiny bit. Two different experiments measured the proton’s size and got different answers, and you can see both predictions side by side. Antihydrogen: You can now make an atom out of antimatter. It matches normal hydrogen exactly, and the app explains why. Nuclear mass slider: You can drag the nucleus mass anywhere from as light as an electron to heavier than tritium and watch the atom change as you go. All of this is getting pushed to the live site now, so it should be up soon!"}, {"post_id": 82281, "ts": "2026-10-24T13:30:25Z", "hours": 5.4447, "text": "Devlog #9 God Ive got a lot show since the last update. First, the atom moves now. If you mix two states, you can watch the electron cloud slosh back and forth. Arrows show where the electron is flowing, and you can color the cloud by its phase. I also changed the look to seem more natural and less AI, I added a plain white theme with a dark mode, grids on every graph, and buttons to save any graph as a picture or a spreadsheet. Then I added a bunch of other features such as: Potassium and calcium, the first atoms past argon. There’s a mini experiment showing why 4s fills before 3d, even when 3d is lower in energy. A table that checks my calculations against real lab measurements for every atom from helium to calcium. sp, sp2 and sp3 hybrid orbitals, the shapes chemists use for bonds. Lines showing exactly where the electron can never be (nodes), and a scale bar in real units. A “measure the electron” button that drops dots one at a time until they build up the real shape. Some smaller things: Every graph has a “Reproduce in Python” box with code you can copy. Any number can be cited with one click. You can export 3D models for printing. Shared links now preview the actual orbital. There’s an API guide, a changelog and a feedback link. I also made the site faster by saving common results, and I fixed the phase colors so colorblind people can tell them apart. I still need to test it in a browser and then deploy it so stay tuned for that!"}, {"post_id": 79261, "ts": "2026-10-13T07:33:52Z", "hours": 1.625, "text": "Devlog #8 This update was mostly about cleaning things up. Firstly, I went through the whole site with a checklist of things that make websites feel cheap or fake. I took out the gradients, made the rounded pill-shaped buttons and badges square, and replaced an emoji warning icon with a normal one. Then I added a Terms page and a Privacy page, linked at the bottom of the side panel. The privacy page explains what the app does and doesn’t track, which isn’t much. All of this was to remove any “ALL AI” msgs ive received I also changed the license. AtomSim used to be MIT, which meant anyone could take it and sell it. Now it’s CC BY-NC 4.0, so people can still use it, share it and change it, as long as they credit me and don’t make money off it. Every font on the site is now Poppins, and it’s bundled with the app so it doesn’t have to load from Google. After that I reread all the text on the site and in the README and fixed anything that sounded robotic. That included a few curly quotes and one sentence that sounded like a press release. I also rewrote the line explaining “provenance” so it just says what it means. All of that is live on the site now. Next up is making the atom move. If you mix two states, the electron cloud sloshes back and forth at the exact frequency of the light the atom gives off. I’ve planned it out and I’m starting on it next. I also wrote down a big list of other ideas for later."}, {"post_id": 62105, "ts": "2026-09-05T11:07:13Z", "hours": 5.0147, "text": "DEVLOG : 7? Since that last update, the cleanup turned into actual features. I finished the frontend narrator pass. Every disclosure string, every physics note, every view intro is now plain prose instead of the app talking about itself in first person. Then I went after the parts of the app that were just annoying to use. Plots are zoomable now. Wheel to zoom, drag to pan, on all five analytic views. I also built a small notation layer so the ASCII the engine emits gets typeset properly at render time, subscripts and superscripts where they belong, without dragging in a whole math library. The big one was mobile. The app used to just refuse to render below a certain width. Now it works down to 320px: a proper mobile shell, view tabs instead of a sidebar list, controls that collapse, and per-view width floors so nothing spills sideways. That took a lot of small fixes I did not expect, a fixed SVG viewBox that hid fixed-width text, and an overflow rule that was already scrolling the page sideways before I touched anything. After that, the URL got a real history. Back and Forward actually work now, and moving between orbitals pushes a history entry while flipping a display toggle just replaces one. Added a copy-link button and keyboard shortcuts for stepping through n, l, m and switching views. Last thing, the title is now just AtomSim. The tagline was doing nothing for anyone."}, {"post_id": 61040, "ts": "2026-09-03T19:03:50Z", "hours": 6.8269, "text": "Devlog #5 or 6??? Since the site went live, most of the work has been cleanup rather than new physics. The whole app used to talk in first person. Every explanation said “I compute this” or “what I’m showing you.” It read like the code was narrating itself, which was odd. So I went through the entire Python engine module by module and rewrote it in plain technical prose. That’s done. Then I started on the frontend, which had way more of it. The disclosure text, the physics notes under each equation, the view intros. That’s still in progress. there were 2 things I had to be extra careful about. Some of those strings are checked word-for-word by tests, so rewording one has potential to break complete the build by itself. In addition, I also tidied the repo layout for public viewing, fixed a deploy pipeline failure, and added privacy-safe visitor counting. Right now i’m cutting padding, and pitching it so a high schooler can follow it without boring a physics grad."}, {"post_id": 42762, "ts": "2026-08-07T17:14:45Z", "hours": 7.2728, "text": "Devlog: Phase 30 to now Phase 30, Instrument frontend. Redesigned the UI to read like a physics instrument. Bundled the fonts, dropped four fields nothing actually measured, and learned that text-transform: uppercase turns 3d into 3D and α² into A², so uppercase is now confined to section headings only. Phase 31, Guided tours. Added walkthroughs that drive the app for you. Nearly shipped a tour that quoted the wrong hydrogen energy because it skipped reduced mass, and fixed two spotlight rings that measured their target before layout settled. Absorption band cleanup. Abutting sub-pixel SVG rects were drawing lines that weren’t in the data. Settled the mean vs deepest-per-column question and fixed decade ticks that failed at both ends of the axis. Housekeeping. Moved specs and plans out to docs/specs and docs/plans. Personal ignores went into .git/info/exclude so no tracked file carries tooling names. Rate limiting. Sized the burst from the app’s real fan-out per action rather than from click counts. The n=6 row plus an auto-refetch was quietly doubling the load. Web hosting. Containerized and deployed to Fly.io as a single process. Cold start from a snapshot is about 1.6s, occasionally up to 22s if the snapshot gets discarded. Argon solves in 2.8s on the deployed box against 1.4s locally. Suspended machines cost nothing, so occasional use stays near a dollar or two a month. Also added rate-limiter logging that identifies refused clients, and confirmed the proxy overwrites forged IP headers, so spoofing doesn’t get you past the limit."}, {"post_id": 41525, "ts": "2026-08-05T19:44:43Z", "hours": 10.8628, "text": "DevLog #3: New Frontend, Plus Small Bits Phase 22 to now. P22, distinguishable electrons. Turned off exchange in Hartree-Fock. Electrons still repel, they just stop being identical. Marked COUNTERFACTUAL. Helium came back exactly zero, so it was gone. P24, Pauli off. Dropped the occupancy cap and everything falls into the 1s. Argon becomes 1s^18 and the periodic table stops existing. P22’s slow convergence was shells, not exchange. P25, isosurfaces. Never size a box on the grid you draw on. The fraction error bar is blind to the box. A 90% p orbital is one piece, not two lobes. P26, HF in 3D. Now in Cloud, Plane, Radial and Surface. Whole-atom and one-orbital radii move opposite ways. Fidelity tiers were literals under the solve. P27, total density. Added D(r), the shape both models describe. A uniform grid steps over the 1s peak, so the test asserts convergence rate, not tolerance. P28, screened density. GSZ gets its own D(r). A density needs its own box. A log axis quietly breaks area = electron count. P29, comparison. Both models on one axis, gap measured. Caught a noise floor, a real number printing as zero, and a wrong caption. Sulfur, chlorine. Split ATOM_KEYS into identity and capability. Derive flags, never pass them. A client check exposed a deep-link race. P30, instrument frontend. Fonts bundled for offline. –edge is a border colour, never a fill. Dropped four fields with no engine behind them. Uppercase turned 3d into 3D, so headings only now. Plot polish. Zoomed line profile labels offsets from window centre, since absolute wavelengths printed the same string six times. Drew xyz axes through the cloud. Absorption, curve of growth. Stopped a zero equivalent width stretching the axis 300 decades. The band drew anti-aliasing seams as absorption lines where transmission was really 0.98 to 1.00. It now bins one column per unit and draws the deepest sample, beside what a real detector pixel would see."}, {"post_id": 38322, "ts": "2026-07-31T17:22:25Z", "hours": 11.9403, "text": "DevLog: Phase 18 to now P18, line shapes. Real lines are not infinitely thin spikes. Atoms move (Doppler) and get jostled by neighbours (pressure), so each line spreads into a bell shape, a Voigt profile. I added that, plus a zoom so you can look at one line up close. The useful trick was a flux-closure check: whatever area a line has before broadening, it has to still have after. That caught two grid bugs that were invisible on screen. P19, optical depth. Until now every line acted as if light escaped freely. In a thick gas strong lines saturate, so doubling the atoms stops doubling the brightness. That is the curve of growth. Lesson: decide which regime a line sits in from the physics, not by eyeballing the slope. Also the wavelength window has to widen as the column thickens, or you clip the wings you are trying to measure. P20, absorption. The mirror of emission. Shine a continuum through the gas, look at what is missing. The trap was that 14 hydrogen lines land on only 6 distinct wavelengths, so matching a profile to its source line by wavelength quietly pairs the wrong ones. I key on the transition instead. P21, Hartree-Fock. The big one. Instead of a fitted screening formula, each electron feels a potential built from all the others, solved over and over until it stops changing. That gets me sulfur and chlorine, which the old model could not touch, plus ions with no preset. Two things worth remembering: the solver’s own error bar was lying to me and needed re-deriving, and what made convergence fast was not a clever algorithm, it was the right mixing constant. P22, cleanup. Made features honest about where they apply. The classical ghost and the force-law lab only make sense for one-electron atoms, so they explain themselves now instead of erroring on a screened atom. Fixed He+ breaking every API call, because the “+” was never URL-encoded. Unknown systems say so instead of spinning. Right now I am fixing hint text that escapes its panel on narrow screens."}, {"post_id": 35332, "ts": "2026-07-26T17:27:28Z", "hours": 27.8683, "text": "Atom_Sim: Physics Simulator Dev Log An atom simulator built on one rule: Every number has a label ( exact , numerical , approximation , counterfactual , or visual_liberty ). Unlabeled numbers are treated as bugs. Stack: Python physics engine -> React + Three.js frontend. Phase Logs Phases 1–3: The Hydrogen Foundation Hydrogen Core: Uses exact math for energies and wavefunctions. Validates its electron clouds using statistical KS tests. Numerical Solver: Solves the Schrödinger equation for custom shapes. It calculates its own accuracy by halving the grid spacing. Constants Lab: Allows changing fundamental constants (hbar, e, c). It proves that changing individual units changes nothing if the ratio between them stays the same. Classical Ghost: Shows old Bohr orbits collapsing, proving why classical physics cannot explain atoms. Phases 4–6: Altered Potential & Real Atoms Fake Physics: Simulates universes with non-standard forces (like Yukawa or power laws) under a clear warning banner. Screened Atoms: Models elements from Helium to Argon using historic 1974 data. If an element (like Sulfur or Chlorine) lacks clean data, it is left out entirely rather than guessed. Phases 7–12: Fields, Relativity & Nuance Dirac Math: Tracks exact relativistic shifts and highlights what the math misses (the Lamb shift). External Fields: Simulates atoms splitting under magnetic fields (Zeeman effect) and electric fields (Stark effect). Hyperfine: Models the 21 cm hydrogen line using the precise electron-to-proton mass ratio. Phases 13–17: Light, Speed & Thermodynamics Fast Math: Uses a custom integration trick to calculate atomic lifetimes exactly and 13x faster. Doublet Ratios: Proves via quantum math (Wigner 6j) why certain spectral lines are twice as bright as others. Heat Sliders: Combines Saha and Boltzmann equations to turn raw rates into actual visible light. Dragging the temperature slider smoothly hands Lyman lines over to Balmer lines. Phase 18: Line Profiles (Current Work) Replaces infinitely sharp lines with realistic Voigt profiles using three combined factors: Natural Width: A Lorentzian shape caused by how fast an excited state decays. Doppler Width: A Gaussian shape caused by thermal motion. Works perfectly for normal hydrogen, positronium, and muonic hydrogen. Instrumental Width: A Gaussian blur based on the user’s chosen telescope or sensor resolution. Note on Missing Physics: Collision/pressure broadening is not simulated. Instead of a text disclaimer, the app calculates how large that missing effect would be and prints the raw margin of error right next to the chart. Core Development Rules No Smoke Tests: Every physics feature must pass an automated math test. No Live Fetches: All reference data is saved locally with a hard citation. No Silent Approximations: If the code cannot calculate something honestly, it stops and prints exactly what data is missing."}]...
|
Title: AtomSim by @yaasshh | Stardance
Devlogs:
A Title: AtomSim by @yaasshh | Stardance
Devlogs:
Atom_Sim: Physics Simulator Dev Log An atom simulator built on one rule: Every number has a label ( exact , numerical , approximation , counterfactual , or visual_liberty ). Unlabeled numbers are treated as bugs. Stack: Python physics engine -> React + Three.js frontend. Phase Logs Phases 1–3: The Hydrogen Foundation Hydrogen Core: Uses exact math for energies and wavefunctions. Validates its electron clouds using statistical KS tests. Numerical Solver: Solves the Schrödinger equation for custom shapes. It calculates its own accuracy by halving the grid spacing. Constants Lab: Allows changing fundamental constants (hbar, e, c). It proves that changing individual units changes nothing if the ratio between them stays the same. Classical Ghost: Shows old Bohr orbits collapsing, proving why classical physics cannot explain atoms. Phases 4–6: Altered Potential & Real Atoms Fake Physics: Simulates universes with non-standard forces (like Yukawa or power laws) under a clear warning banner. Screened Atoms: Models elements from Helium to Argon using historic 1974 data. If an element (like Sulfur or Chlorine) lacks clean data, it is left out entirely rather than guessed. Phases 7–12: Fields, Relativity & Nuance Dirac Math: Tracks exact relativistic shifts and highlights what the math misses (the Lamb shift). External Fields: Simulates atoms splitting under magnetic fields (Zeeman effect) and electric fields (Stark effect). Hyperfine: Models the 21 cm hydrogen line using the precise electron-to-proton mass ratio. Phases 13–17: Light, Speed & Thermodynamics Fast Math: Uses a custom integration trick to calculate atomic lifetimes exactly and 13x faster. Doublet Ratios: Proves via quantum math (Wigner 6j) why certain spectral lines are twice as bright as others. Heat Sliders: Combines Saha and Boltzmann equations to turn raw rates into actual visible light. Dragging the temperature slider smoothly hands Lyman lines over to Balmer lines. Phase 18: Line Profiles (Current Work) Replaces infinitely sharp lines with realistic Voigt profiles using three combined factors: Natural Width: A Lorentzian shape caused by how fast an excited state decays. Doppler Width: A Gaussian shape caused by thermal motion. Works perfectly for normal hydrogen, positronium, and muonic hydrogen. Instrumental Width: A Gaussian blur based on the user’s chosen telescope or sensor resolution. Note on Missing Physics: Collision/pressure broadening is not simulated. Instead of a text disclaimer, the app calculates how large that missing effect would be and prints the raw margin of error right next to the chart. Core Development Rules No Smoke Tests: Every physics feature must pass an automated math test. No Live Fetches: All reference data is saved locally with a hard citation. No Silent Approximations: If the code cannot calculate something honestly, it stops and prints exactly what data is missing.
DevLog: Phase 18 to now P18, line shapes. Real lines are not infinitely thin spikes. Atoms move (Doppler) and get jostled by neighbours (pressure), so each line spreads into a bell shape, a Voigt profile. I added that, plus a zoom so you can look at one line up close. The useful trick was a flux-closure check: whatever area a line has before broadening, it has to still have after. That caught two grid bugs that were invisible on screen. P19, optical depth. Until now every line acted as if light escaped freely. In a thick gas strong lines saturate, so doubling the atoms stops doubling the brightness. That is the curve of growth. Lesson: decide which regime a line sits in from the physics, not by eyeballing the slope. Also the wavelength window has to widen as the column thickens, or you clip the wings you are trying to measure. P20, absorption. The mirror of emission. Shine a continuum through the gas, look at what is missing. The trap was that 14 hydrogen lines land on only 6 distinct wavelengths, so matching a profile to its source line by wavelength quietly pairs the wrong ones. I key on the transition instead. P21, Hartree-Fock. The big one. Instead of a fitted screening formula, each electron feels a potential built from all the others, solved over and over until it stops changing. That gets me sulfur and chlorine, which the old model could not touch, plus ions with no preset. Two things worth remembering: the solver’s own error bar was lying to me and needed re-deriving, and what made convergence fast was not a clever algorithm, it was the right mixing constant. P22, cleanup. Made features honest about where they apply. The classical ghost and the force-law lab only make sense for one-electron atoms, so they explain themselves now instead of erroring on a screened atom. Fixed He+ breaking every API call, because the “+” was never URL-encoded. Unknown systems say so instead of spinning. Right now I am fixing hint text that escapes its panel on narrow screens.
DevLog #3: New Frontend, Plus Small Bits Phase 22 to now. P22, distinguishable electrons. Turned off exchange in Hartree-Fock. Electrons still repel, they just stop being identical. Marked COUNTERFACTUAL. Helium came back exactly zero, so it was gone. P24, Pauli off. Dropped the occupancy cap and everything falls into the 1s. Argon becomes 1s^18 and the periodic table stops existing. P22’s slow convergence was shells, not exchange. P25, isosurfaces. Never size a box on the grid you draw on. The fraction error bar is blind to the box. A 90% p orbital is one piece, not two lobes. P26, HF in 3D. Now in Cloud, Plane, Radial and Surface. Whole-atom and one-orbital radii move opposite ways. Fidelity tiers were literals under the solve. P27, total density. Added D(r), the shape both models describe. A uniform grid steps over the 1s peak, so the test asserts convergence rate, not tolerance. P28, screened density. GSZ gets its own D(r). A density needs its own box. A log axis quietly breaks area = electron count. P29, comparison. Both models on one axis, gap measured. Caught a noise floor, a real number printing as zero, and a wrong caption. Sulfur, chlorine. Split ATOM_KEYS into identity and capability. Derive flags, never pass them. A client check exposed a deep-link race. P30, instrument frontend. Fonts bundled for offline. –edge is a border colour, never a fill. Dropped four fields with no engine behind them. Uppercase turned 3d into 3D, so headings only now. Plot polish. Zoomed line profile labels offsets from window centre, since absolute wavelengths printed the same string six times. Drew xyz axes through the cloud. Absorption, curve of growth. Stopped a zero equivalent width stretching the axis 300 decades. The band drew anti-aliasing seams as absorption lines where transmission was really 0.98 to 1.00. It now bins one column per unit and draws the deepest sample, beside what a real detector pixel would see.
Devlog: Phase 30 to now Phase 30, Instrument frontend. Redesigned the UI to read like a physics instrument. Bundled the fonts, dropped four fields nothing actually measured, and learned that text-transform: uppercase turns 3d into 3D and α² into A², so uppercase is now confined to section headings only. Phase 31, Guided tours. Added walkthroughs that drive the app for you. Nearly shipped a tour that quoted the wrong hydrogen energy because it skipped reduced mass, and fixed two spotlight rings that measured their target before layout settled. Absorption band cleanup. Abutting sub-pixel SVG rects were drawing lines that weren’t in the data. Settled the mean vs deepest-per-column question and fixed decade ticks that failed at both ends of the axis. Housekeeping. Moved specs and plans out to docs/specs and docs/plans. Personal ignores went into .git/info/exclude so no tracked file carries tooling names. Rate limiting. Sized the burst from the app’s real fan-out per action rather than from click counts. The n=6 row plus an auto-refetch was quietly doubling the load. Web hosting. Containerized and deployed to Fly.io as a single process. Cold start from a snapshot is about 1.6s, occasionally up to 22s if the snapshot gets discarded. Argon solves in 2.8s on the deployed box against 1.4s locally. Suspended machines cost nothing, so occasional use stays near a dollar or two a month. Also added rate-limiter logging that identifies refused clients, and confirmed the proxy overwrites forged IP headers, so spoofing doesn’t get you past the limit.
Devlog #5 or 6??? Since the site went live, most of the work has been cleanup rather than new physics. The whole app used to talk in first person. Every explanation said “I compute this” or “what I’m showing you.” It read like the code was narrating itself, which was odd. So I went through the entire Python engine module by module and rewrote it in plain technical prose. That’s done. Then I started on the frontend, which had way more of it. The disclosure text, the physics notes under each equation, the view intros. That’s still in progress. there were 2 things I had to be extra careful about. Some of those strings are checked word-for-word by tests, so rewording one has potential to break complete the build by itself. In addition, I also tidied the repo layout for public viewing, fixed a deploy pipeline failure, and added privacy-safe visitor counting. Right now i’m cutting padding, and pitching it so a high schooler can follow it without boring a physics grad.
DEVLOG : 7? Since that last update, the cleanup turned into actual features. I finished the frontend narrator pass. Every disclosure string, every physics note, every view intro is now plain prose instead of the app talking about itself in first person. Then I went after the parts of the app that were just annoying to use. Plots are zoomable now. Wheel to zoom, drag to pan, on all five analytic views. I also built a small notation layer so the ASCII the engine emits gets typeset properly at render time, subscripts and superscripts where they belong, without dragging in a whole math library. The big one was mobile. The app used to just refuse to render below a certain width. Now it works down to 320px: a proper mobile shell, view tabs instead of a sidebar list, controls that collapse, and per-view width floors so nothing spills sideways. That took a lot of small fixes I did not expect, a fixed SVG viewBox that hid fixed-width text, and an overflow rule that was already scrolling the page sideways before I touched anything. After that, the URL got a real history. Back and Forward actually work now, and moving between orbitals pushes a history entry while flipping a display toggle just replaces one. Added a copy-link button and keyboard shortcuts for stepping through n, l, m and switching views. Last thing, the title is now just AtomSim. The tagline was doing nothing for anyone.
Devlog #8 This update was mostly about cleaning things up. Firstly, I went through the whole site with a checklist of things that make websites feel cheap or fake. I took out the gradients, made the rounded pill-shaped buttons and badges square, and replaced an emoji warning icon with a normal one. Then I added a Terms page and a Privacy page, linked at the bottom of the side panel. The privacy page explains what the app does and doesn’t track, which isn’t much. All of this was to remove any “ALL AI” msgs ive received I also changed the license. AtomSim used to be MIT, which meant anyone could take it and sell it. Now it’s CC BY-NC 4.0, so people can still use it, share it and change it, as long as they credit me and don’t make money off it. Every font on the site is now Poppins, and it’s bundled with the app so it doesn’t have to load from Google. After that I reread all the text on the site and in the README and fixed anything that sounded robotic. That included a few curly quotes and one sentence that sounded like a press release. I also rewrote the line explaining “provenance” so it just says what it means. All of that is live on the site now. Next up is making the atom move. If you mix two states, the electron cloud sloshes back and forth at the exact frequency of the light the atom gives off. I’ve planned it out and I’m starting on it next. I also wrote down a big list of other ideas for later.
Devlog #9 God Ive got a lot show since the last update. First, the atom moves now. If you mix two states, you can watch the electron cloud slosh back and forth. Arrows show where the electron is flowing, and you can color the cloud by its phase. I also changed the look to seem more natural and less AI, I added a plain white theme with a dark mode, grids on every graph, and buttons to save any graph as a picture or a spreadsheet. Then I added a bunch of other features such as: Potassium and calcium, the first atoms past argon. There’s a mini experiment showing why 4s fills before 3d, even when 3d is lower in energy. A table that checks my calculations against real lab measurements for every atom from helium to calcium. sp, sp2 and sp3 hybrid orbitals, the shapes chemists use for bonds. Lines showing exactly where the electron can never be (nodes), and a scale bar in real units. A “measure the electron” button that drops dots one at a time until they build up the real shape. Some smaller things: Every graph has a “Reproduce in Python” box with code you can copy. Any number can be cited with one click. You can export 3D models for printing. Shared links now preview the actual orbital. There’s an API guide, a changelog and a feedback link. I also made the site faster by saving common results, and I fixed the phase colors so colorblind people can tell them apart. I still need to test it in a browser and then deploy it so stay tuned for that!
Devlog #10 Since last time I’ve mostly been adding new physics, so here’s the list. Momentum space: The Radial view now shows how fast the electron is likely to be moving, not just where it is. This one is exact math too. Decay cascade: An excited hydrogen atom doesn’t fall straight to the bottom. It drops down step by step, and now you can watch every path it might take and how likely each one is. Lasers: There’s a new laser panel where you shine light on the atom and watch the electron flip back and forth between two levels (these are called Rabi oscillations). Relativity: For one-electron atoms you can now see the Dirac version of the wavefunction, which is what you get when you add Einstein’s relativity to quantum mechanics. The proton radius puzzle: The nucleus isn’t a perfect point. It has a size, and that shifts the energy levels a tiny bit. Two different experiments measured the proton’s size and got different answers, and you can see both predictions side by side. Antihydrogen: You can now make an atom out of antimatter. It matches normal hydrogen exactly, and the app explains why. Nuclear mass slider: You can drag the nucleus mass anywhere from as light as an electron to heavier than tritium and watch the atom change as you go. All of this is getting pushed to the live site now, so it should be up soon!
Ships:
Atom Sim is a browser app that solves atoms from scratch and shows you the result. Hydrogen comes out of closed-form math, real atoms like carbon and argon come out of a Hartree-Fock solver I wrote, and you can look at any of them as a 3D electron cloud, a 2D slice, a radial plot, an energy-level diagram or an emission spectrum. You can also break physics on purpose: switch off the Pauli exclusion principle, switch off electron exchange, or type in your own potential V(r) and see what kind of atom falls out. The rule I built everything around is that the model never quietly lies. Every number carries a tag saying how it was made: exact, numerical, approximation, counterfactual, or just a visual choice. That tag follows the number from the solver all the way to the label on screen. What was challenging Hartree-Fock was brutal. The angular coefficients in the Fock operator are easy to get slightly wrong, and when you do, the solver still converges and hands you smooth, beautiful, completely wrong orbitals. Nothing crashes, nothing warns you. I had to re-derive the algebra instead of nudging numbers until a benchmark matched. Error bars were the other trap. Mine looked great for a while and were simply lying, because the real error was coming from the box size, not the grid spacing I was measuring. Argon also took about an hour on a uniform grid until I moved to an exponential mesh, which cut it to seconds. What I’m proud of That it’s honest. Plenty of simulators draw a pretty orbital and say nothing about where it came from. Mine tells you, and the tests enforce it. The spectra are checked against real NIST data inside the test suite, so a physics regression fails CI rather than shipping quietly. How to test it It’s live at https://atomsim.fly.dev . The server sleeps when nobody is using it, so the very first load can take around 15 seconds. After that it’s quick. Good things to try: pick n=3, l=1 and rotate the cloud, then flip to Plane view for the cross-section. Switch the element to argon. Open a guided tour if you want the short version. Every view is a shareable URL, so you can link someone to an exact state.
AtomSim is a website I built that lets you actually see what an atom looks like. You pick an element, or hydrogen, and pick which electron shell you want to look at. Then it draws it. Not a cartoon of dots going around a circle like the diagrams in school, the real shape, the cloud where the electron actually is. Some of them look like spheres, some look like dumbbells, some look like weird four leaf clovers. All of that is real, it just falls out of the math. You can spin it around, slice it in half, look at it as a graph instead, or look at the colored lines of light the atom gives off when it gets hot. That last one is how we know what stars are made of, and you can watch it happen. The part I care about most is that it never fakes anything. Every single number on the screen carries a label saying how it was made. Some are exact, straight from the equations. Some are computed numerically with an error bar attached. Some are approximations, and it says which physical effects it left out. And a few are deliberate “what if” experiments, like turning off the rule that stops two electrons sitting in the same place, just to see the atom collapse. Those are labeled too. So if a picture is pretty rather than true, the app tells you. I wanted something a curious fifteen year old could poke at for an hour and come away with a correct picture in their head, not a comfortable wrong one. It runs in a browser, works on a phone, and every view has its own link you can share. PS: It also has mobile view now!...
|
1792990059.5776522
|
1793076459.5776522
|
|
29723
|
Monty Hall Simulator by @kingsuper195 | Stardance
|
kingsuper195
|
1
|
10.74
|
29
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T09:47:32Z", "hours": 6.0, "multiplier": 4.7, "payout": 29, "blessing": "neutral", "text": "A simulator for the famous Monty Hall problem, with two goats and a car. Includes manual choice and automatic.", "repo": "https://github.com/kingsuper195/MontyHall", "demo": "https://kingsuper195.github.io/MontyHall/"}]...
|
[{"post_id": 82645, "ts": "202 [{"post_id": 82645, "ts": "2026-10-25T14:33:10Z", "hours": 1.0183, "text": "Added an initial explanation of what the Monty Hall Paradox is, for people who’ve never heard of it"}, {"post_id": 82623, "ts": "2026-10-25T13:26:22Z", "hours": 0.9589, "text": "Improved statistic on the results page; made them far more readable, instead of just raw data."}, {"post_id": 80740, "ts": "2026-10-18T17:48:22Z", "hours": 1.5856, "text": "Added some more styling to the initial startup screen, including making the automatic toggle bigger and clearer, so that people don’t miss it."}, {"post_id": 71190, "ts": "2026-09-20T12:42:14Z", "hours": 0.4019, "text": "Added a progress bar using the HTML5 progress element."}, {"post_id": 70542, "ts": "2026-09-19T10:26:16Z", "hours": 0.7725, "text": "Added a current door highlight, and refactored to avoid the annoying door flicker when going at full automatic speed."}, {"post_id": 22729, "ts": "2026-07-05T09:46:53Z", "hours": 0.3067, "text": "Added README.md"}, {"post_id": 22719, "ts": "2026-07-05T09:22:14Z", "hours": 0.8339, "text": "Added some styling and a settings menu on the side."}, {"post_id": 21371, "ts": "2026-07-03T08:27:56Z", "hours": 0.5456, "text": "Added favicon and wait for seconds after each step in automatic mode."}, {"post_id": 20604, "ts": "2026-07-02T07:35:28Z", "hours": 4.4256, "text": "Began project, added automatic and manual modes, and a result page."}]...
|
Title: Monty Hall Simulator by @kingsuper195 | Sta Title: Monty Hall Simulator by @kingsuper195 | Stardance
Devlogs:
Began project, added automatic and manual modes, and a result page.
Added favicon and wait for seconds after each step in automatic mode.
Added some styling and a settings menu on the side.
Added README.md
Added a current door highlight, and refactored to avoid the annoying door flicker when going at full automatic speed.
Added a progress bar using the HTML5 progress element.
Added some more styling to the initial startup screen, including making the automatic toggle bigger and clearer, so that people don’t miss it.
Improved statistic on the results page; made them far more readable, instead of just raw data.
Added an initial explanation of what the Monty Hall Paradox is, for people who’ve never heard of it
Ships:
A simulator for the famous Monty Hall problem, with two goats and a car. Includes manual choice and automatic....
|
1793087678.6095037
|
1793174078.6095037
|
|
69980
|
presentware by @viivi | Stardance
|
viivi
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T14:56:21Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Presentware A website for showcasing both software and hardware. Because I didn’t find a site that would support both hardware and software very well and github (in my opinion) isn’t very good for finding similiar level projects as I build. My plan is to make it easier to find other builders with same level so people could connect and get inspired by others. I hope also that this could give young builders more visibility, because I often feel like only big companies or professionals get the attention they deserve. How to test: Create your own account or use: username: test_account password: tester1 I’d be very grateful if you added your Stardance project to presentware. You can add github link to the content field because projects don’t have link fields yet. Presentware is my first real fullstack project I’ve made so I learnt a lot about almost everything from coding to deploying an app. I’m very proud of myself because presentware works well enough even though the UI is still pretty bad but I will update it after Stardance.", "repo": "https://github.com/ViLP357/presentware", "demo": "https://presentware.vercel.app/"}]...
|
[{"post_id": 82644, "ts": "202 [{"post_id": 82644, "ts": "2026-10-25T14:33:03Z", "hours": 2.5644, "text": "#3 devlog, “finishing”, deploying Since stardance is ending soon, I’m going to ship this soon even though it’s not ready yet. It still has all core features and works pretty well. Today I added ProjectPage which appears on the right side of the project when a project is clicked. It shows some extra information about a project. UI is pretty bad but I don’t care about it right now."}, {"post_id": 81296, "ts": "2026-10-20T18:16:55Z", "hours": 0.9611, "text": "#2 devlog, working on frontend project page Today I started working with the main page, which shows all the created projects. I focused on project cards appearance. Border color of a card is determined by the type of the project (eg. orange = website) I also created a color palette using https://coolors.co/ which I will be using."}, {"post_id": 80357, "ts": "2026-10-17T12:11:40Z", "hours": 6.6417, "text": "#1 devlog, working backend, simple frontend Presentware will be an website for showcasing both hardware and software projects. It will have a search feature to find projects you are interested in and see what other people from your country are building. It will support project collaboration (add multiple contributors to a project). My plan is to make it easier to find other builders with same level so people could connect and get inspired by others. I hope also that this could give young builders more visibility, because I often feel like only big companies or professionals get the attention they deserve. Right now presentware has an working backend, which supports: adding new users and log in creating new projects with with all the necessary fields To do: Almost everything in the frontend Currently the frontend only supports creating a new account, login and it shows all the projects in database."}]...
|
Title: presentware by @viivi | Stardance
Devlogs: Title: presentware by @viivi | Stardance
Devlogs:
#1 devlog, working backend, simple frontend Presentware will be an website for showcasing both hardware and software projects. It will have a search feature to find projects you are interested in and see what other people from your country are building. It will support project collaboration (add multiple contributors to a project). My plan is to make it easier to find other builders with same level so people could connect and get inspired by others. I hope also that this could give young builders more visibility, because I often feel like only big companies or professionals get the attention they deserve. Right now presentware has an working backend, which supports: adding new users and log in creating new projects with with all the necessary fields To do: Almost everything in the frontend Currently the frontend only supports creating a new account, login and it shows all the projects in database.
#2 devlog, working on frontend project page Today I started working with the main page, which shows all the created projects. I focused on project cards appearance. Border color of a card is determined by the type of the project (eg. orange = website) I also created a color palette using https://coolors.co/ which I will be using.
#3 devlog, “finishing”, deploying Since stardance is ending soon, I’m going to ship this soon even though it’s not ready yet. It still has all core features and works pretty well. Today I added ProjectPage which appears on the right side of the project when a project is clicked. It shows some extra information about a project. UI is pretty bad but I don’t care about it right now.
Ships:
Presentware A website for showcasing both software and hardware. Because I didn’t find a site that would support both hardware and software very well and github (in my opinion) isn’t very good for finding similiar level projects as I build. My plan is to make it easier to find other builders with same level so people could connect and get inspired by others. I hope also that this could give young builders more visibility, because I often feel like only big companies or professionals get the attention they deserve. How to test: Create your own account or use: username: test_account password: tester1 I’d be very grateful if you added your Stardance project to presentware. You can add github link to the content field because projects don’t have link fields yet. Presentware is my first real fullstack project I’ve made so I learnt a lot about almost everything from coding to deploying an app. I’m very proud of myself because presentware works well enough even though the UI is still pretty bad but I will update it after Stardance....
|
1793047996.787743
|
1793134396.787743
|
|
33660
|
PartSourcer by @yaasshh | Stardance
|
yaasshh
|
1
|
47.23
|
515
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T14:26:23Z", "hours": 37.0, "multiplier": 18.84, "payout": 515, "blessing": "neutral", "text": "PartSourcer Find the cheapest in-stock part for your PCB in one search. Live at “part-sourcer.vercel.app” Search any electronic component and get its stock, price, footprint and datasheet in one place. Every number is stamped with the moment it was read, so you always know how new it is. The useful bit: for a part you searched, it looks for one cheaper drop-in that is actually in stock, and tells you why it counts as a match. Same package, matching specs, real stock, and both prices re-read the same way before any saving gets claimed. If it cannot find a genuine match, it elaborates so. Right now that works for resistors and capacitors. Everything else gets an “no match found”. (Perhaps later implementation) Rules it sticks to: No made-up stock or prices. If the data is stale, you get an error, not a number pretending to be fresh. A part with no published price says “no price”, never $0.00. A zero would read as free and win every comparison. Missing fields are left out rather than filled with a placeholder. Built with FastAPI and React, both on Vercel, with Postgres behind the price history. Part data comes from Mouser in real time, plus an open snapshot of the LCSC catalogue that refreshes about once a day. There is a DigiKey adapter too, and it switches on once credentials are set. Free, open source, no login, no paywall. MIT licensed.", "repo": "https://github.com/yaasshh09/PartSourcer", "demo": "https://part-sourcer.vercel.app"}]...
|
[{"post_id": 82642, "ts": "202 [{"post_id": 82642, "ts": "2026-10-25T14:22:03Z", "hours": 4.1617, "text": "Devlog 6 Since the last devlog I’ve been working through my list of 60 ideas. Part pages got a lot more useful. Each one now has a price history chart, a hint about when a sold-out part might come back, and whether the part is still being made or is on its way out. Sometimes it also suggests a part with better specs for the same money, and now it can show up to three cheaper swaps instead of just one. Search results also get small badges when a price or stock level changes. I added a currency picker, a watchlist for parts you care about, and RSS feeds that tell you when a part’s price or stock moves. For BOMs, you can now see whether buying everything from one store beats splitting the order between stores. I also made tools for people who don’t want to use the website. There’s a developer page for the API, a command line tool that prices a BOM, a GitHub Action that posts your BOM cost on pull requests, and a KiCad plugin. I tested the plugin on real KiCad boards and found it was missing some part number fields, so I fixed that. Other fixes: the BOM page works better on phones, the colors are easier to read, dark mode looks right, and downloaded BOMs can’t carry sneaky spreadsheet formulas anymore. The free data source I use still has broken search, so I’ve started applying for the official LCSC API. Fingers crossed it gets approved!"}, {"post_id": 79259, "ts": "2026-10-13T07:30:24Z", "hours": 6.0697, "text": "#Devlog 5 After the security pass, I mostly worked on new features. I added a Browse section, so you can look through six part categories without knowing a part number. Then I built a compare tray. You pin up to four parts from anywhere on the site and see them side by side. I moved the site to Vercel with a database in Singapore. A small job now runs every night and records prices, so later I can show how a part’s price changes over time. Search had some problems. The free data source I use started returning broken results, so I wrote up what was going wrong and reported it to the people who run it. I also stopped showing results that had nothing to do with what you searched, and I made the “part not found” message more clear. Now it says when a distributor just didn’t answer, instead of saying the part doesn’t exist. You can also sort results by price now. The biggest new thing is BOM check. You paste in your whole parts list, or load a spreadsheet, and it prices every line at the quantity you need. It tells you which lines it skipped and why, and you can share the checked list as a link. Part pages now show each distributor’s bulk pricing. There’s also a quantity box, so you see what you’d actually pay for 250 parts and not just one. If you click a part from your BOM, that box already has your quantity in it. Next, I made a list of 60 more ideas and started building them."}, {"post_id": 51003, "ts": "2026-08-20T14:21:47Z", "hours": 1.0139, "text": "Dev log #5?? Ran a 20-item polish checklist over the site. Ten things were already fine: links all work, buttons all do something, the 404 page is real, errors show up properly. Six items from the checklist were missing, so I built them. Fixed the page titles. Every page was showing the same title because nothing reloads in a single-page app. Now a part page names the part, a search names what you searched. Put a year in the footer, read live so it never goes stale. Dropped the “404 demo” link, that was a leftover dev thing sitting next to real links. Then two actual bugs I only found by measuring in a browser at phone size. The home page really was scrolling sideways: a card grid was asking for 400px inside a 319px space. About had the same thing at 340px. Fixed both. The header was the other one. It needed 390px of room for the logo and five links on a 375px phone. It had been wrapping onto three rows and leaving Contact stranded alone. Now the links tuck behind a menu button below 640px. Header went from 281px tall to 69px. Last thing: the pages were too narrow and floated in empty space. Widened them a lot, 1600px for the main shell and 1400px for the text pages. Width alone would’ve just made long ugly lines, so the card grids reshaped too. FAQ goes two across, the three how-it-works steps share a row, the four-card grids go four across and step down cleanly. Plus a few more minor changes, The project is built enough to be shipped!"}, {"post_id": 50904, "ts": "2026-08-20T11:35:02Z", "hours": 7.1633, "text": "Dev log #3 or #4?? After the site went multi-distributor, I kept going. I added a contact page with my email, Instagram and GitHub, dropped GitHub out of the header, gave the footer real columns with links that work, moved the data source note over to the About page and wrote more there. The front page got more to read too, and the About cards now sit in a clean 2x2 grid. Then I did a proper security pass. I added a middleware that stamps security headers on every API response, including CSP, frame options and HSTS. Wrote a rate limiter that reads the client IP from headers the platform actually writes, never the one a caller can fake, and capped its key table so the limiter itself cannot be turned into the attack. Added input caps: query at 200 characters, page at 50, part key at 128, all refused early so nobody can burn my distributor quota. Added a body size ceiling and tightened CORS. The static site got its own CSP through vercel.json, checked against the real built bundle. I also wrote guard tests: they fail if a stray .env gets committed, if a credential literal shows up in source, if SQL starts joining values instead of using placeholders, or if a Set-Cookie ever appears. Then I documented the whole posture in the backend README, including what I deliberately left out and why."}, {"post_id": 48452, "ts": "2026-08-16T20:03:22Z", "hours": 13.2792, "text": "PartSourcer devlog #2 Started with a simple annoyance: finding a part that is actually in stock means opening six distributor tabs per line of a BOM. Wrote a throwaway script to poke at the free jlcsearch API and see what the data really looked like. Turned out it has no brand and no datasheet. Decided early to show that as blank rather than show wrong results. Also built the backend. FastAPI, a swappable data source so the real LCSC API can drop in later. Also tweaked the frontend a bit. React, inline styles, a loud yellow-and-black look. Then deploy configs, and the site went live on Render. Implemented a price history recorder, so the data is there later even if nothing reads it yet. The big addition. The site finally became multi-distributor: Mouser and DigiKey alongside LCSC. Every part now carries a list of offers, one per distributor, and a per-source status so a partial failure shows as a partial answer rather than an error."}, {"post_id": 27780, "ts": "2026-07-13T17:10:53Z", "hours": 15.7958, "text": "I’ve been working on a personal project called PartSourcer. Essentially, it’s a database, a bit beautified, but a database nevertheless, that scours the internet for major electronic component distributors in bulk, such as Mouser, DigiKey, JLCPCB, and LCSC. It goes through all of these major component databases, fetching real-time data from API keys I generated myself, and outputs the components and their prices. So far, I have the frontend and most of the backend done. The next step is to actually implement the Mouser and DigiKey API keys. I have the Mouser one ready; DigiKey is a bit more confusing to get, but I will get it. I already have the LCSC and JLCPCB integration working for each component, showing real-time stock and unit prices per item. I’m going to keep a very early version of the project open source under the MIT license. Later on, I plan to remove the MIT license and host it on the internet for free, but it won’t remain open source. Only that very early version will stay under the MIT license. Moving forward, my roadmap for the project includes: Completing the actual API implementations. Implementing a side-by-side comparison tool. Adding a large-scale, bulk BOM (bill of materials) upload feature. Creating a price history chart. Implementing a “browse by category” feature. Adding a “biggest savings this week” section to show people where the best deals are and what they can save money on."}]...
|
Title: PartSourcer by @yaasshh | Stardance
Devlog Title: PartSourcer by @yaasshh | Stardance
Devlogs:
I’ve been working on a personal project called PartSourcer. Essentially, it’s a database, a bit beautified, but a database nevertheless, that scours the internet for major electronic component distributors in bulk, such as Mouser, DigiKey, JLCPCB, and LCSC. It goes through all of these major component databases, fetching real-time data from API keys I generated myself, and outputs the components and their prices. So far, I have the frontend and most of the backend done. The next step is to actually implement the Mouser and DigiKey API keys. I have the Mouser one ready; DigiKey is a bit more confusing to get, but I will get it. I already have the LCSC and JLCPCB integration working for each component, showing real-time stock and unit prices per item. I’m going to keep a very early version of the project open source under the MIT license. Later on, I plan to remove the MIT license and host it on the internet for free, but it won’t remain open source. Only that very early version will stay under the MIT license. Moving forward, my roadmap for the project includes: Completing the actual API implementations. Implementing a side-by-side comparison tool. Adding a large-scale, bulk BOM (bill of materials) upload feature. Creating a price history chart. Implementing a “browse by category” feature. Adding a “biggest savings this week” section to show people where the best deals are and what they can save money on.
PartSourcer devlog #2 Started with a simple annoyance: finding a part that is actually in stock means opening six distributor tabs per line of a BOM. Wrote a throwaway script to poke at the free jlcsearch API and see what the data really looked like. Turned out it has no brand and no datasheet. Decided early to show that as blank rather than show wrong results. Also built the backend. FastAPI, a swappable data source so the real LCSC API can drop in later. Also tweaked the frontend a bit. React, inline styles, a loud yellow-and-black look. Then deploy configs, and the site went live on Render. Implemented a price history recorder, so the data is there later even if nothing reads it yet. The big addition. The site finally became multi-distributor: Mouser and DigiKey alongside LCSC. Every part now carries a list of offers, one per distributor, and a per-source status so a partial failure shows as a partial answer rather than an error.
Dev log #3 or #4?? After the site went multi-distributor, I kept going. I added a contact page with my email, Instagram and GitHub, dropped GitHub out of the header, gave the footer real columns with links that work, moved the data source note over to the About page and wrote more there. The front page got more to read too, and the About cards now sit in a clean 2x2 grid. Then I did a proper security pass. I added a middleware that stamps security headers on every API response, including CSP, frame options and HSTS. Wrote a rate limiter that reads the client IP from headers the platform actually writes, never the one a caller can fake, and capped its key table so the limiter itself cannot be turned into the attack. Added input caps: query at 200 characters, page at 50, part key at 128, all refused early so nobody can burn my distributor quota. Added a body size ceiling and tightened CORS. The static site got its own CSP through vercel.json, checked against the real built bundle. I also wrote guard tests: they fail if a stray .env gets committed, if a credential literal shows up in source, if SQL starts joining values instead of using placeholders, or if a Set-Cookie ever appears. Then I documented the whole posture in the backend README, including what I deliberately left out and why.
Dev log #5?? Ran a 20-item polish checklist over the site. Ten things were already fine: links all work, buttons all do something, the 404 page is real, errors show up properly. Six items from the checklist were missing, so I built them. Fixed the page titles. Every page was showing the same title because nothing reloads in a single-page app. Now a part page names the part, a search names what you searched. Put a year in the footer, read live so it never goes stale. Dropped the “404 demo” link, that was a leftover dev thing sitting next to real links. Then two actual bugs I only found by measuring in a browser at phone size. The home page really was scrolling sideways: a card grid was asking for 400px inside a 319px space. About had the same thing at 340px. Fixed both. The header was the other one. It needed 390px of room for the logo and five links on a 375px phone. It had been wrapping onto three rows and leaving Contact stranded alone. Now the links tuck behind a menu button below 640px. Header went from 281px tall to 69px. Last thing: the pages were too narrow and floated in empty space. Widened them a lot, 1600px for the main shell and 1400px for the text pages. Width alone would’ve just made long ugly lines, so the card grids reshaped too. FAQ goes two across, the three how-it-works steps share a row, the four-card grids go four across and step down cleanly. Plus a few more minor changes, The project is built enough to be shipped!
#Devlog 5 After the security pass, I mostly worked on new features. I added a Browse section, so you can look through six part categories without knowing a part number. Then I built a compare tray. You pin up to four parts from anywhere on the site and see them side by side. I moved the site to Vercel with a database in Singapore. A small job now runs every night and records prices, so later I can show how a part’s price changes over time. Search had some problems. The free data source I use started returning broken results, so I wrote up what was going wrong and reported it to the people who run it. I also stopped showing results that had nothing to do with what you searched, and I made the “part not found” message more clear. Now it says when a distributor just didn’t answer, instead of saying the part doesn’t exist. You can also sort results by price now. The biggest new thing is BOM check. You paste in your whole parts list, or load a spreadsheet, and it prices every line at the quantity you need. It tells you which lines it skipped and why, and you can share the checked list as a link. Part pages now show each distributor’s bulk pricing. There’s also a quantity box, so you see what you’d actually pay for 250 parts and not just one. If you click a part from your BOM, that box already has your quantity in it. Next, I made a list of 60 more ideas and started building them.
Devlog 6 Since the last devlog I’ve been working through my list of 60 ideas. Part pages got a lot more useful. Each one now has a price history chart, a hint about when a sold-out part might come back, and whether the part is still being made or is on its way out. Sometimes it also suggests a part with better specs for the same money, and now it can show up to three cheaper swaps instead of just one. Search results also get small badges when a price or stock level changes. I added a currency picker, a watchlist for parts you care about, and RSS feeds that tell you when a part’s price or stock moves. For BOMs, you can now see whether buying everything from one store beats splitting the order between stores. I also made tools for people who don’t want to use the website. There’s a developer page for the API, a command line tool that prices a BOM, a GitHub Action that posts your BOM cost on pull requests, and a KiCad plugin. I tested the plugin on real KiCad boards and found it was missing some part number fields, so I fixed that. Other fixes: the BOM page works better on phones, the colors are easier to read, dark mode looks right, and downloaded BOMs can’t carry sneaky spreadsheet formulas anymore. The free data source I use still has broken search, so I’ve started applying for the official LCSC API. Fingers crossed it gets approved!
Ships:
PartSourcer Find the cheapest in-stock part for your PCB in one search. Live at “part-sourcer.vercel.app” Search any electronic component and get its stock, price, footprint and datasheet in one place. Every number is stamped with the moment it was read, so you always know how new it is. The useful bit: for a part you searched, it looks for one cheaper drop-in that is actually in stock, and tells you why it counts as a match. Same package, matching specs, real stock, and both prices re-read the same way before any saving gets claimed. If it cannot find a genuine match, it elaborates so. Right now that works for resistors and capacitors. Everything else gets an “no match found”. (Perhaps later implementation) Rules it sticks to: No made-up stock or prices. If the data is stale, you get an error, not a number pretending to be fresh. A part with no published price says “no price”, never $0.00. A zero would read as free and win every comparison. Missing fields are left out rather than filled with a placeholder. Built with FastAPI and React, both on Vercel, with Postgres behind the price history. Part data comes from Mouser in real time, plus an open snapshot of the LCSC catalogue that refreshes about once a day. There is a DigiKey adapter too, and it switches on once credentials are set. Free, open source, no login, no paywall. MIT licensed....
|
1792997802.160689
|
1793084202.160689
|
|
71322
|
Discord Bot by @kylethefox18 | Stardance
|
kylethefox18
|
0
|
12.33
|
0
|
[]
|
[{"post_id": 82636, "ts": "202 [{"post_id": 82636, "ts": "2026-10-25T14:06:08Z", "hours": 12.3294, "text": "ignore these hours if i can’t count them ig… putting the project back on here after i flunked outta terra. for a summary of what i’ve done so far, i think my project commit history is pretty legible :)"}]...
|
Title: Discord Bot by @kylethefox18 | Stardance
D Title: Discord Bot by @kylethefox18 | Stardance
Devlogs:
ignore these hours if i can’t count them ig… putting the project back on here after i flunked outta terra. for a summary of what i’ve done so far, i think my project commit history is pretty legible :)...
|
1792939639.8833437
|
1793544439.8833437
|
|
66766
|
Quantar by @Systemic_speed | Stardance
|
Systemic_speed
|
0
|
42.5
|
0
|
[]
|
[{"post_id": 82635, "ts": "202 [{"post_id": 82635, "ts": "2026-10-25T14:01:20Z", "hours": 1.5508, "text": "Devlog 7: Quantar hey there, for anyone new here, Quantar is a superset of python that can: run quantum simulations (those superposition thingies that can speed up math) run some physics allow you to make your own operators What we got guys, this is the LAST DEVLOG BEFORE SHIP , so we have got some basic stuff to recap on: we got an extension for Quantar (see it on the marketplace here ), still haven’t got a logo for it and the language I am currently learning rust to use it as the new backend of this language (since rust is way faster and has better memory management, so no segfaults) kinda small change, but we now are using uuid to identify functions well, see y’all at ship. (btw here is me realizing that i cut my pypirc instead of copying it when i was planning to change to linux)"}, {"post_id": 82187, "ts": "2026-10-24T06:20:50Z", "hours": 8.5667, "text": "Devlog 6: Quantar hey there, for anyone new here, Quantar is a superset of python that can: run quantum simulations (those superposition thingies that can speed up math) run some physics allow you to make your own operators What we got We got, some news, QUANTAR CAN RUN ON ANY COMPUTER WITH PYTHON AND 8 GIGS OF RAM!!!! now, it is time for me to try and speedrun making the lsp (which is actually just a ton of json, js and other stuff), which will color the code. Next steps Complete the LSP SHIP THAT THING BEFORE HALLOWEEN make a rust backend in a later program (coral ig??) so, see ya all either at ship or in the next devlog (btw, here is Quantar code running)"}, {"post_id": 81212, "ts": "2026-10-20T10:02:34Z", "hours": 7.0942, "text": "Devlog 5: Quantar hey there, for anyone new here, Quantar is a quantum programming language that allows its users to : use and easily control quantum stuff like qubits or gates use some cool physics stuff (in progress, gotta complete it fast) INFINITE OPERATORS : basically, for any function you want as an operators, you just add a @operator(name, kind) (name is how the operator will be invoked and kind can be of 4 types: unary (currently prefix only), binary, matrix and a generic callable thing) and you can use it in your program as an operator. What happened well, I only realized yesterday that THERE IS ONE WEEK LEFT FOR STARDANCE, so i cobbled up a plan to finally ship Quantar. so today was just a basic debugging session where i just cleaned up a few files, refactored the code using AI (if you refactor code yourself, plz teach me how to manage the import trees for such projects) What next tomorrow, we are just gonna speedrun completing the physics part and the language part (the lexer and other stuff) well, see ya dead, alive or as a cat. (here is me trying to figure out why “000” can’t be used in dictionary keys (spoiler, you can use them, i was just an idiot))"}, {"post_id": 78719, "ts": "2026-10-11T12:11:27Z", "hours": 9.9817, "text": "Devlog 4: Quantar hey there, for anyone new here, Quantar is a python superset (basically a language that can do what python does but with more features) that I have been making that allows people to easily do cool physics and quantum simulations without using some insane quantum computer or something. well, we can kinda see the light at the end of the tunnel, as i have made the basic systems for the interpreter and also implemented the second most feature of this language, the @operator decorator (basically a small line of code you add right before the function definition that allow you to use that thing as an operator in Quantar). we also completed most of the standard library (the stl) by adding quantum optimization and some high level classes and methods for them now, we just gotta manage parematerized gates, make an AST, run the ast, make an extension and then we would be mostly done. btw here is me trying out a version of factoring that uses a quantum optimizer (it is kinda slow because simulating a 512 dimensional state vector along with crazy multiplication is very, very bad for my 8 gigs of DDR4)"}, {"post_id": 77863, "ts": "2026-10-08T16:13:16Z", "hours": 4.9781, "text": "Devlog 3: Quantar hey there, today was ok (maybe, but it was too much math). completed making an optimized model of shor’s algorithm (gonna stop the stupidly complex algorithms there, basically shor’s alg just factors a number FAST and grover’s algorithm find a number based on a function FAST) So, for anyone new here, Quantar is a python library (going to be a language) that allows people to use quantum computers, make physics simulations (and one more random feature that no language has ever done)or for the layman, it helps you do physics and quantum stuff easily and fast. What happened made an optimized version of both shor’s and grover’s algorithms (shor can factor 143 in 8 - 12 seconds). added composite gates and circuit gates (basically, ways to make gates out of gates like QFT or the iQFT) began planning for the physics part. now, for a kinda big reveal (ngl, gonna sound cringe), but the new feature i am adding to my lang is INFINITE OPERATOR OVERLOADS , basically, any character or combination of characters that can be typed using a keyboard (like a prefix * or <->) can be made into an operator that people can use. the last one will really either help people be creative with libraries or allow code to look clean (btw here is me trying out shor’s algorithm on 403, took some time, so gonna implement qunatum optimization algs later)"}, {"post_id": 76635, "ts": "2026-10-04T07:10:12Z", "hours": 5.1464, "text": "Devlog 2: Quantar hey there, today was actually ok (ish), i was able to implement Grover’s Algorithm (some complicated ahh stuff that takes in a constraint func and will give you a high chance of seeing that number when you measure the qubits in the computer) for anyone new here, Quantar is a python library (going to be a language) that allows people to use quantum computers, make physics simulations (and one more random feature that no language has ever done) or for the layman, it helps you do physics and quantum stuff easily and fast What’s next making some basic quantum algorithms making the physics backend making plotter abstractions adding a really cool feature (btw here is a photo of how insane Grover’s algorithm is (we wanted 111))"}, {"post_id": 76115, "ts": "2026-10-02T10:45:20Z", "hours": 5.1772, "text": "Devlog 1: Quantar Quantar is going to be a quantum programming language that can take in average python commands and would also be used for physics (like differentials, fields and maybe even nuclear physics). What I did today today was a kind of ok, i am mostly done with the basics of the quantum abstractions (qubits, quantum computers and quantum gates), just gotta complete testing and uncomputation. Next steps (basically a todo list for myself) making accurate and useful physics abstractions (like dual numbers for differentials or vector verlets and vector fields (really confusing stuff)) designing a proper syntax for Quantar (along with the compiler) Maybe some other stuff (gonna think about it today) well, here is me making the gate matrices for a few basic gates"}]...
|
Title: Quantar by @Systemic_speed | Stardance
Dev Title: Quantar by @Systemic_speed | Stardance
Devlogs:
Devlog 1: Quantar Quantar is going to be a quantum programming language that can take in average python commands and would also be used for physics (like differentials, fields and maybe even nuclear physics). What I did today today was a kind of ok, i am mostly done with the basics of the quantum abstractions (qubits, quantum computers and quantum gates), just gotta complete testing and uncomputation. Next steps (basically a todo list for myself) making accurate and useful physics abstractions (like dual numbers for differentials or vector verlets and vector fields (really confusing stuff)) designing a proper syntax for Quantar (along with the compiler) Maybe some other stuff (gonna think about it today) well, here is me making the gate matrices for a few basic gates
Devlog 2: Quantar hey there, today was actually ok (ish), i was able to implement Grover’s Algorithm (some complicated ahh stuff that takes in a constraint func and will give you a high chance of seeing that number when you measure the qubits in the computer) for anyone new here, Quantar is a python library (going to be a language) that allows people to use quantum computers, make physics simulations (and one more random feature that no language has ever done) or for the layman, it helps you do physics and quantum stuff easily and fast What’s next making some basic quantum algorithms making the physics backend making plotter abstractions adding a really cool feature (btw here is a photo of how insane Grover’s algorithm is (we wanted 111))
Devlog 3: Quantar hey there, today was ok (maybe, but it was too much math). completed making an optimized model of shor’s algorithm (gonna stop the stupidly complex algorithms there, basically shor’s alg just factors a number FAST and grover’s algorithm find a number based on a function FAST) So, for anyone new here, Quantar is a python library (going to be a language) that allows people to use quantum computers, make physics simulations (and one more random feature that no language has ever done)or for the layman, it helps you do physics and quantum stuff easily and fast. What happened made an optimized version of both shor’s and grover’s algorithms (shor can factor 143 in 8 - 12 seconds). added composite gates and circuit gates (basically, ways to make gates out of gates like QFT or the iQFT) began planning for the physics part. now, for a kinda big reveal (ngl, gonna sound cringe), but the new feature i am adding to my lang is INFINITE OPERATOR OVERLOADS , basically, any character or combination of characters that can be typed using a keyboard (like a prefix * or <->) can be made into an operator that people can use. the last one will really either help people be creative with libraries or allow code to look clean (btw here is me trying out shor’s algorithm on 403, took some time, so gonna implement qunatum optimization algs later)
Devlog 4: Quantar hey there, for anyone new here, Quantar is a python superset (basically a language that can do what python does but with more features) that I have been making that allows people to easily do cool physics and quantum simulations without using some insane quantum computer or something. well, we can kinda see the light at the end of the tunnel, as i have made the basic systems for the interpreter and also implemented the second most feature of this language, the @operator decorator (basically a small line of code you add right before the function definition that allow you to use that thing as an operator in Quantar). we also completed most of the standard library (the stl) by adding quantum optimization and some high level classes and methods for them now, we just gotta manage parematerized gates, make an AST, run the ast, make an extension and then we would be mostly done. btw here is me trying out a version of factoring that uses a quantum optimizer (it is kinda slow because simulating a 512 dimensional state vector along with crazy multiplication is very, very bad for my 8 gigs of DDR4)
Devlog 5: Quantar hey there, for anyone new here, Quantar is a quantum programming language that allows its users to : use and easily control quantum stuff like qubits or gates use some cool physics stuff (in progress, gotta complete it fast) INFINITE OPERATORS : basically, for any function you want as an operators, you just add a @operator(name, kind) (name is how the operator will be invoked and kind can be of 4 types: unary (currently prefix only), binary, matrix and a generic callable thing) and you can use it in your program as an operator. What happened well, I only realized yesterday that THERE IS ONE WEEK LEFT FOR STARDANCE, so i cobbled up a plan to finally ship Quantar. so today was just a basic debugging session where i just cleaned up a few files, refactored the code using AI (if you refactor code yourself, plz teach me how to manage the import trees for such projects) What next tomorrow, we are just gonna speedrun completing the physics part and the language part (the lexer and other stuff) well, see ya dead, alive or as a cat. (here is me trying to figure out why “000” can’t be used in dictionary keys (spoiler, you can use them, i was just an idiot))
Devlog 6: Quantar hey there, for anyone new here, Quantar is a superset of python that can: run quantum simulations (those superposition thingies that can speed up math) run some physics allow you to make your own operators What we got We got, some news, QUANTAR CAN RUN ON ANY COMPUTER WITH PYTHON AND 8 GIGS OF RAM!!!! now, it is time for me to try and speedrun making the lsp (which is actually just a ton of json, js and other stuff), which will color the code. Next steps Complete the LSP SHIP THAT THING BEFORE HALLOWEEN make a rust backend in a later program (coral ig??) so, see ya all either at ship or in the next devlog (btw, here is Quantar code running)
Devlog 7: Quantar hey there, for anyone new here, Quantar is a superset of python that can: run quantum simulations (those superposition thingies that can speed up math) run some physics allow you to make your own operators What we got guys, this is the LAST DEVLOG BEFORE SHIP , so we have got some basic stuff to recap on: we got an extension for Quantar (see it on the marketplace here ), still haven’t got a logo for it and the language I am currently learning rust to use it as the new backend of this language (since rust is way faster and has better memory management, so no segfaults) kinda small change, but we now are using uuid to identify functions well, see y’all at ship. (btw here is me realizing that i cut my pypirc instead of copying it when i was planning to change to linux)...
|
1793101959.1990452
|
1793706759.1990452
|
|
55434
|
BKball by @Nanobi | Stardance
|
Nanobi
|
1
|
36.91
|
559
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T16:37:28Z", "hours": 31.0, "multiplier": 18.46, "payout": 559, "blessing": "neutral", "text": "BKball is an html game where you pull ropes to make a ball go up the wall without falling into the holes. It is playable on any platform :D You have 12 levels and you can edit them or create new ones with the level editor ! I did this project thinking about my other project: the BKpad, a custom keypad. Therefore, the game is designed to work primarily with this MacroPad, secondarily for a keyboard and then on mobile. The project is a simple html zip, made with vanilla javascript and no plugins! It is small with less than 1000 lines of code, but with more it would be difficult to make them all in one file :o Doing this project was cool! I never did javascript this much, it’s floppy but it is not too hard to code even if 0 == false ;-; I am proud of having done everything myself, especially the canvas which is not a canvas element but an svg using animated elements and curves as lines so I can bend them :3 If you want to test the project, go to bkball.rf.gd everything is updated automatically :) I am proud of my “BK” hardware project (the cat head you can see in the website at the left) and happy that now it has a new website linked to him :D", "repo": "https://github.com/Nan0b1/BKball", "demo": "https://nan0b1.github.io/BKball/"}]...
|
[{"post_id": 82634, "ts": "202 [{"post_id": 82634, "ts": "2026-10-25T13:54:43Z", "hours": 3.2014, "text": "Smol devlog 2 s2 Someone asked in the last shipment to do more devlogs so there it is What is my project It’s an html game made from scratch with no frameworks where you need to make a ball go up and not fall into other holes New things ! Brand new animations for when you win, loose, or swipe horizontally on your phone instead of vertically, all made in the svg canvas Sound ! When you win or fall in a hole, you get 4 different vfx Migrated website. The old website keeps getting blacklisted by google so I have now my website in github pages !!! I smoothed some movements and patched the keyboard response time (I was maybe checking inputs every 200ms so you had to wait the next tick :3) What’s next? I have no ideas :( For the moment I’ll finish my BKpad’s website to ship it :) If you think about a feature just ask me in comms"}, {"post_id": 82278, "ts": "2026-10-24T13:25:57Z", "hours": 2.7092, "text": "Small devlog 1 s2 What is my project? In this HTML game, you need to pull ropes to make a ball go up, but don’t fall in the holes What’s new? I tried my best to make the user experience feel better New computer controls (I keep the legacy ones hidden for the BKpad to work the best :o) Reworked gestures for phones and every touchable screen Clearer explanations for each platform A new level selector on top of the one existing, because I noticed nobody changed levels with my selector Bug fixes: ropes were bending when you used gestures and your death was delayed, but now everything works What next? A win animation? Sounds? translation fix Hope the devlog was fun to read :) Goodbye"}, {"post_id": 72679, "ts": "2026-09-23T14:11:02Z", "hours": 1.8417, "text": "SmallLog 5 :) What is my game? A hand made html/js game where you have to make the ball go up, featuring 12 levels and an entirely functional level editor where you can share your creations with others Last touches I polished the code (and added the last ; ) I added an on-close warning if you haven’t saved You can now change levels when in level editor and it saves what you did The readme is more complete now The decision was made to not make easter eggs (simpler is sometimes good and adding random things is not my priority (it’s what I did during 50 hours but nevermind)) You can test it on BKball’s official website !!!! I have completed my mission and have to say goodbye :o I won’t make new projects, I have personal work to do Goodbye, it was fun to be in the stardance hackClub :)"}, {"post_id": 72360, "ts": "2026-09-22T19:08:32Z", "hours": 9.0103, "text": "Devlog 4 !! :D What is this project about? In this html game, you have to make the ball go in the green hole, by pulling on the two lateral ropes. 8 hours of work: I worked on several things: I added a complete working level editor: functions to add holes functions to modify and delete holes ! with this I added 8 new levels! I completed french translation and integrated the language selector into the page I added many missing semicolons in the javascript because I normally code in python I added a favicon ! then I quickly fixed some bugs :) What’s next? Fix an editor mode where it edits 2 levels at once Change the mobile controls editor logo at the left one last devlog SHIP THE PROJECT!!!"}, {"post_id": 67168, "ts": "2026-09-13T07:33:07Z", "hours": 7.7208, "text": "Big Devlog 3 !!! What is this project about? I”m making a web game about pulling ropes to make a ball up but you can fall in the wall holes :o This project is pure html, javascript and css what does I added during those 7h40? I first cleaned the whole code I fixed all physics issue with reliable solutions, now if you pull too hard on one the other will loosen itself I transformed ropes lines into straight curves with the straight curves I can bend them if you push too many rope on one side I styled the whole website and added controls explanation + levels selection brand new gesture system for phones and everything that have a touchscreen I store the level you are so you can join without reselecting everything Some Minecraft Modder on github helped me to determine a localstorage related bug and implemented lang.js -> I have now french support ! I started implementing level edition! (not pushed) (it’s for me because now to do levels I need to tweak arrays in vsCode :/) An official website is now availiable , thanks to infinityfree, they are a simple and good solution! I added instant auto deployement from the github to the new website! Controls are unified, it don’t make the difference between AZERTY and QWERTY or any other random layout :) what’s next? continue level editor do levels with it add an easter egg Thanks for reading this really long devlog I didn’t saw the time going on (4h in half a day is a lot for my little brain but music helps!) Special thanks to Some Minecraft Modder for not only his help but for following my project!"}, {"post_id": 64834, "ts": "2026-09-09T15:01:19Z", "hours": 6.0619, "text": "Devlog 2 BKball !!! What is this? This is an html game where you have to make a ball up while not falling into the holes :) I do this with native html, css and javascript (with < svg> ) 5 hours of work: I added holes I added a way to win (it’s not common for a game i think ) I fixed some physics issues where you could go in the sky :o Brand new level system where you can choose a level and change with real ease -> two levels :) what I have to do? clean the code so I can dev easily :) add more level add a custom backroom level with “all of the lights” while you are being chased the whole website because for now I only have the “canvas” Thanks for reading it’s fun to do and thanks to “Some minecraft Modder” who is supporting me"}, {"post_id": 58799, "ts": "2026-08-31T11:44:44Z", "hours": 6.2797, "text": "Hello there! First devlog! I’m glad to lunch a new project: BKball What is it? You have a ball down a wall and you want to make it go up by pulling on 2 ropes :o Why is this a continuation of the BKpad? The game is designed to work directly with the potentiometers of the BKpad and later the ball will be BKthemed :) What have I done? 6h16 of work : launched the project ideas and things I would use I did the main frame, I will do native js, html and css I will not use game frameworks but items I did physics! I didn’t simulated the whole thing lol, I just used some equations :) (go see it’s fun) my grandma was with me and followed the whole process during some hours A friend of mine helped me with some css tweaks so the Github is updated :) For the future: I already have holes but I have to add collisions I need to do a level system! I will have to make a welcome popup to explain some things Goodbye :D"}]...
|
Title: BKball by @Nanobi | Stardance
Devlogs:
Hel Title: BKball by @Nanobi | Stardance
Devlogs:
Hello there! First devlog! I’m glad to lunch a new project: BKball What is it? You have a ball down a wall and you want to make it go up by pulling on 2 ropes :o Why is this a continuation of the BKpad? The game is designed to work directly with the potentiometers of the BKpad and later the ball will be BKthemed :) What have I done? 6h16 of work : launched the project ideas and things I would use I did the main frame, I will do native js, html and css I will not use game frameworks but items I did physics! I didn’t simulated the whole thing lol, I just used some equations :) (go see it’s fun) my grandma was with me and followed the whole process during some hours A friend of mine helped me with some css tweaks so the Github is updated :) For the future: I already have holes but I have to add collisions I need to do a level system! I will have to make a welcome popup to explain some things Goodbye :D
Devlog 2 BKball !!! What is this? This is an html game where you have to make a ball up while not falling into the holes :) I do this with native html, css and javascript (with < svg> ) 5 hours of work: I added holes I added a way to win (it’s not common for a game i think ) I fixed some physics issues where you could go in the sky :o Brand new level system where you can choose a level and change with real ease -> two levels :) what I have to do? clean the code so I can dev easily :) add more level add a custom backroom level with “all of the lights” while you are being chased the whole website because for now I only have the “canvas” Thanks for reading it’s fun to do and thanks to “Some minecraft Modder” who is supporting me
Big Devlog 3 !!! What is this project about? I”m making a web game about pulling ropes to make a ball up but you can fall in the wall holes :o This project is pure html, javascript and css what does I added during those 7h40? I first cleaned the whole code I fixed all physics issue with reliable solutions, now if you pull too hard on one the other will loosen itself I transformed ropes lines into straight curves with the straight curves I can bend them if you push too many rope on one side I styled the whole website and added controls explanation + levels selection brand new gesture system for phones and everything that have a touchscreen I store the level you are so you can join without reselecting everything Some Minecraft Modder on github helped me to determine a localstorage related bug and implemented lang.js -> I have now french support ! I started implementing level edition! (not pushed) (it’s for me because now to do levels I need to tweak arrays in vsCode :/) An official website is now availiable , thanks to infinityfree, they are a simple and good solution! I added instant auto deployement from the github to the new website! Controls are unified, it don’t make the difference between AZERTY and QWERTY or any other random layout :) what’s next? continue level editor do levels with it add an easter egg Thanks for reading this really long devlog I didn’t saw the time going on (4h in half a day is a lot for my little brain but music helps!) Special thanks to Some Minecraft Modder for not only his help but for following my project!
Devlog 4 !! :D What is this project about? In this html game, you have to make the ball go in the green hole, by pulling on the two lateral ropes. 8 hours of work: I worked on several things: I added a complete working level editor: functions to add holes functions to modify and delete holes ! with this I added 8 new levels! I completed french translation and integrated the language selector into the page I added many missing semicolons in the javascript because I normally code in python I added a favicon ! then I quickly fixed some bugs :) What’s next? Fix an editor mode where it edits 2 levels at once Change the mobile controls editor logo at the left one last devlog SHIP THE PROJECT!!!
SmallLog 5 :) What is my game? A hand made html/js game where you have to make the ball go up, featuring 12 levels and an entirely functional level editor where you can share your creations with others Last touches I polished the code (and added the last ; ) I added an on-close warning if you haven’t saved You can now change levels when in level editor and it saves what you did The readme is more complete now The decision was made to not make easter eggs (simpler is sometimes good and adding random things is not my priority (it’s what I did during 50 hours but nevermind)) You can test it on BKball’s official website !!!! I have completed my mission and have to say goodbye :o I won’t make new projects, I have personal work to do Goodbye, it was fun to be in the stardance hackClub :)
Small devlog 1 s2 What is my project? In this HTML game, you need to pull ropes to make a ball go up, but don’t fall in the holes What’s new? I tried my best to make the user experience feel better New computer controls (I keep the legacy ones hidden for the BKpad to work the best :o) Reworked gestures for phones and every touchable screen Clearer explanations for each platform A new level selector on top of the one existing, because I noticed nobody changed levels with my selector Bug fixes: ropes were bending when you used gestures and your death was delayed, but now everything works What next? A win animation? Sounds? translation fix Hope the devlog was fun to read :) Goodbye
Smol devlog 2 s2 Someone asked in the last shipment to do more devlogs so there it is What is my project It’s an html game made from scratch with no frameworks where you need to make a ball go up and not fall into other holes New things ! Brand new animations for when you win, loose, or swipe horizontally on your phone instead of vertically, all made in the svg canvas Sound ! When you win or fall in a hole, you get 4 different vfx Migrated website. The old website keeps getting blacklisted by google so I have now my website in github pages !!! I smoothed some movements and patched the keyboard response time (I was maybe checking inputs every 200ms so you had to wait the next tick :3) What’s next? I have no ideas :( For the moment I’ll finish my BKpad’s website to ship it :) If you think about a feature just ask me in comms
Ships:
BKball is an html game where you pull ropes to make a ball go up the wall without falling into the holes. It is playable on any platform :D You have 12 levels and you can edit them or create new ones with the level editor ! I did this project thinking about my other project: the BKpad, a custom keypad. Therefore, the game is designed to work primarily with this MacroPad, secondarily for a keyboard and then on mobile. The project is a simple html zip, made with vanilla javascript and no plugins! It is small with less than 1000 lines of code, but with more it would be difficult to make them all in one file :o Doing this project was cool! I never did javascript this much, it’s floppy but it is not too hard to code even if 0 == false ;-; I am proud of having done everything myself, especially the canvas which is not a canvas element but an svg using animated elements and curves as lines so I can bend them :3 If you want to test the project, go to bkball.rf.gd everything is updated automatically :) I am proud of my “BK” hardware project (the cat head you can see in the website at the left) and happy that now it has a new website linked to him :D...
|
1793004465.0669339
|
1793090865.0669339
|
|
71319
|
Website for my freinds bussiness 1 by @pmandal7355 Website for my freinds bussiness 1 by @pmandal7355 | Stardance...
|
pmandal7355
|
0
|
1.35
|
0
|
[]
|
[{"post_id": 82633, "ts": "202 [{"post_id": 82633, "ts": "2026-10-25T13:52:45Z", "hours": 1.3536, "text": "created some parts of the website for my friend"}]...
|
Title: Website for my freinds bussiness 1 by @pman Title: Website for my freinds bussiness 1 by @pmandal7355 | Stardance
Devlogs:
created some parts of the website for my friend...
|
1792939636.8348956
|
1793544436.8348956
|
|
395
|
ZhiXue Lite by @Makerlife | Stardance
|
Makerlife
|
2
|
25.0
|
59
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T12:56:28Z", "hours": 15.0, "multiplier": 1.97, "payout": 0, "blessing": "neutral", "text": "The Final Ship! [IMPORTANT]Since WAF is enabled on the backend, you may not be able to view the home page statistics properly. It is NOT a bug!!! You can log in to the site at demo/demo for a temporary preview. Please note that since my site retrieves and processes data from a third-party website, some content may still be in Chinese, and certain features may not be available with the shared account.", "repo": "https://github.com/amakerlife/ZhiXue-Lite-backend", "demo": "https://zxl.makerlife.top"}, {"ship_num": 2, "ts": "2026-07-05T14:04:31Z", "hours": 10.0, "multiplier": 5.7, "payout": 59, "blessing": "neutral", "text": "First release! In this update, I’ve strengthened backend authentication, added S3 support, and made some frontend optimizations. You can log in to the site at demo/demo for a temporary preview. Please note that since my site retrieves and processes data from a third-party website, some content may still be in Chinese, and certain features may not be available with the shared account. Since WAF is enabled on the backend, you may not be able to view the home page statistics properly.", "repo": "https://github.com/amakerlife/ZhiXue-Lite-backend", "demo": "https://zxl.makerlife.top"}]...
|
[{"post_id": 82615, "ts": "202 [{"post_id": 82615, "ts": "2026-10-25T12:53:46Z", "hours": 14.9442, "text": "This update adds S3 management APIs for viewing storage usage, listing cached answer sheets and score sheets, and deleting stored files. Exam results now have an all-scores API with pagination, filtering, search, and sorting. Score sheet export uses the VIEW_EXAM_DATA permission, with SCHOOL users limited to their own school. Administrators can now publish exams locally for individual schools before ZhiXue officially releases them. Students can access their own results when their scores are already stored. Score retrieval also handles missing totals and rankings while marking is still in progress. Answer sheets now show subquestion scores, step scores, and teacher scoring records more clearly, with improved indentation and positioning. The backend now requires Python 3.11 and uses psycopg 3. Dependencies were upgraded, and a database migration was added for per-school exam publication status."}, {"post_id": 22095, "ts": "2026-07-04T11:15:53Z", "hours": 6.275, "text": "Recently, on the backend, I added support for customizing the “from-address” for the SMTP service, rather than using the SMTP username directly as the sender’s email address as before. Additionally, to make the project more robust, I added support for S3 storage on the backend to store the generated answer sheets and score sheets, replacing the original local file system cache. Administrators can freely choose between the two options via environment variables. On the frontend, I first synchronized the changes related to the backend’s S3 storage support, then updated the loading animation to feature a logo that gradually changes in size as the central element, accompanied by a circular animation, replacing the previous simple Lucide React icon. Next, I will implement management features for S3 storage and synchronize the changes across both the front end and backend."}, {"post_id": 6877, "ts": "2026-06-11T15:13:25Z", "hours": 2.1092, "text": "This update fixes how the backend handles school_id in multi-school exam scenarios. Previously, some score and answersheet APIs accepted school_id from the client and used it during score lookup or teacher account selection. In multi-school exams, that could allow a SCHOOL-level user to query data outside their own school if the request parameters were crafted manually. The score and answer sheet APIs now resolve the effective student and school context on the server first. SELF users are always limited to their own bound student account, and any client-provided student_id, student_name, or school_id is ignored. SCHOOL users are always limited to their own school, even if another school_id is provided. GLOBAL users can still use school_id as an optional filter. Student name based lookup no longer requires school_id. The backend searches within the current user’s accessible scope. If multiple students match the same name, the error message now includes both school and class information for disambiguation. Score sheet export was also tightened. SCHOOL users always export their own school’s data, and any provided school_id is ignored. GLOBAL users can still export all schools or a specific school. Since this is just a backend fix related to permissions, I can only provide screenshots of the code I modified."}, {"post_id": 5554, "ts": "2026-06-09T11:44:43Z", "hours": 1.9978, "text": "In this update, I added a feature to the front end that remembers the user’s selection in this dropdown menu. In addition, I added a button to the exam details page so that users with the appropriate permissions can view more data about the exam directly in the “Data View” tab without having to copy and paste the exam_id. I fixed two race conditions caused by data desynchronization on the back end and manually cleaned up two rows of corrupted data from the prod database."}]...
|
Title: ZhiXue Lite by @Makerlife | Stardance
Devl Title: ZhiXue Lite by @Makerlife | Stardance
Devlogs:
In this update, I added a feature to the front end that remembers the user’s selection in this dropdown menu. In addition, I added a button to the exam details page so that users with the appropriate permissions can view more data about the exam directly in the “Data View” tab without having to copy and paste the exam_id. I fixed two race conditions caused by data desynchronization on the back end and manually cleaned up two rows of corrupted data from the prod database.
This update fixes how the backend handles school_id in multi-school exam scenarios. Previously, some score and answersheet APIs accepted school_id from the client and used it during score lookup or teacher account selection. In multi-school exams, that could allow a SCHOOL-level user to query data outside their own school if the request parameters were crafted manually. The score and answer sheet APIs now resolve the effective student and school context on the server first. SELF users are always limited to their own bound student account, and any client-provided student_id, student_name, or school_id is ignored. SCHOOL users are always limited to their own school, even if another school_id is provided. GLOBAL users can still use school_id as an optional filter. Student name based lookup no longer requires school_id. The backend searches within the current user’s accessible scope. If multiple students match the same name, the error message now includes both school and class information for disambiguation. Score sheet export was also tightened. SCHOOL users always export their own school’s data, and any provided school_id is ignored. GLOBAL users can still export all schools or a specific school. Since this is just a backend fix related to permissions, I can only provide screenshots of the code I modified.
Recently, on the backend, I added support for customizing the “from-address” for the SMTP service, rather than using the SMTP username directly as the sender’s email address as before. Additionally, to make the project more robust, I added support for S3 storage on the backend to store the generated answer sheets and score sheets, replacing the original local file system cache. Administrators can freely choose between the two options via environment variables. On the frontend, I first synchronized the changes related to the backend’s S3 storage support, then updated the loading animation to feature a logo that gradually changes in size as the central element, accompanied by a circular animation, replacing the previous simple Lucide React icon. Next, I will implement management features for S3 storage and synchronize the changes across both the front end and backend.
This update adds S3 management APIs for viewing storage usage, listing cached answer sheets and score sheets, and deleting stored files. Exam results now have an all-scores API with pagination, filtering, search, and sorting. Score sheet export uses the VIEW_EXAM_DATA permission, with SCHOOL users limited to their own school. Administrators can now publish exams locally for individual schools before ZhiXue officially releases them. Students can access their own results when their scores are already stored. Score retrieval also handles missing totals and rankings while marking is still in progress. Answer sheets now show subquestion scores, step scores, and teacher scoring records more clearly, with improved indentation and positioning. The backend now requires Python 3.11 and uses psycopg 3. Dependencies were upgraded, and a database migration was added for per-school exam publication status.
Ships:
First release! In this update, I’ve strengthened backend authentication, added S3 support, and made some frontend optimizations. You can log in to the site at demo/demo for a temporary preview. Please note that since my site retrieves and processes data from a third-party website, some content may still be in Chinese, and certain features may not be available with the shared account. Since WAF is enabled on the backend, you may not be able to view the home page statistics properly.
The Final Ship! [IMPORTANT]Since WAF is enabled on the backend, you may not be able to view the home page statistics properly. It is NOT a bug!!! You can log in to the site at demo/demo for a temporary preview. Please note that since my site retrieves and processes data from a third-party website, some content may still be in Chinese, and certain features may not be available with the shared account....
|
1792993842.3243418
|
1793080242.3243418
|
|
66335
|
3D AIM TRAINER by @brijeshkumar724282 | Stardance
|
brijeshkumar724282
|
2
|
37.52
|
262
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T08:00:07Z", "hours": 15.0, "multiplier": 15.47, "payout": 229, "blessing": "neutral", "text": "I have made a Web based AIM TRAINER written in html, CSS, JS and THREE.js. IT HAS 4 GAMEMODES FOR NOW: GRIDSHOT, SIXSHOT, PRECISION, AND TRACKING. The most challenging part was every mode has to be written the same code again and again when adding a new gamemode. So I had to move it all into one shared core code, Now adding new modes is easier. I am really proud of developing the shared core code. when I made it, It actually made my work easier. It’s now scalable and i can add add many gamemodes easier than before. Before it i had to write the same code again and again probably 400+ lines now cutdown to less than 100 (tracking.js is an exception) To test my game, A person needs a mouse to aim and shoot.", "repo": "https://github.com/brijeshkumar724282-beep/web-Aim-Trainer", "demo": "https://brijeshkumar724282-beep.github.io/web-Aim-Trainer/"}, {"ship_num": 2, "ts": "2026-10-09T04:29:04Z", "hours": 17.0, "multiplier": 1.97, "payout": 33, "blessing": "neutral", "text": "I made a 3D web based Aim trainer in html, css, JS and three.js. Few of the most challenging parts were funny, adjusting the texture packs evenly among all the walls, adjusting the lightning to make it look right and The aiming mechanism, I was getting tilting issues in the starting, its fixed now. I am proud of the menu animation and making 2 modes work well. They just need to know how to click and move their mouse! its so simple.", "repo": "https://github.com/brijeshkumar724282-beep/web-Aim-Trainer", "demo": "https://brijeshkumar724282-beep.github.io/web-Aim-Trainer/"}]...
|
[{"post_id": 82613, "ts": "202 [{"post_id": 82613, "ts": "2026-10-25T12:51:42Z", "hours": 5.515, "text": "MY 3D AIM TRAINER’S LATERST PROGRESS This time i have added a new gamemode “REACTION MODE”, 1 target spawns with a 1.2 seconds window, faster hits give more points, slower ones give lesser points, and the target respawns somewhere else. I was mainly working on supabase backend to add global leaderboard support. Then I also started working on login webpage and login.js, I also tuned the room lightning a little to give it a better look."}, {"post_id": 80909, "ts": "2026-10-19T07:00:48Z", "hours": 5.1058, "text": "REBUILT AND MADE THE GAME SCALABLE AND ADDED NEW MORE 2 GAME MODES , So basically each gamemode used to have everything built inside it. So if i ever wanted to add a new game mode, I will have to write the same code again and again, So I put the core parts they all shared into one place, So its easier to add new game modes now. ROOM, AIMING SYSTEM, TIMER, etc are built once and used by all of them, SO this made speeds up adding new game modes. I have added 2 new Modes : 1. TRACKING MODE, 2. PRECISION MODE. I have also changed the UI of The menu a little bit. The ROOM is Rebuilt too because the old one was way too flat looking for my game. Now I have also added Best score feature for each mode, i have used Local storage for storing your best score. Also added an sfx whenever you switch modes in the menu which gives life to the menu selection."}, {"post_id": 80380, "ts": "2026-10-17T13:48:48Z", "hours": 4.53, "text": "Finished the menu and most of the review feedback , Since the last post, I have been working mainly on the Menu and a few things : 1. The menu is now in a good shape too. 2.Added a settings popup where you could change sensitivity from. 3.removed the browser alert for results and made a dedicated page for results. 4.Added background music, So actually I used AI to generate the bgm. 5.Made a favicon and added an MIT License."}, {"post_id": 79717, "ts": "2026-10-15T06:21:39Z", "hours": 5.1894, "text": "REBUILDING AND FIXING EVERYTHING. After reading the reviews, I came to a conclusion that My game was hanging on most people’s device, it was more because of uncapped fps as of i think. here are a few things that I did: 1. I removed all the texture packs (made the game heavy and also caused lag for some people). 2. Using whitish color design (Flat colours) and added Grid helper. 3. Made the targets Blue colored and glossy looking. 4. I have already rebuilding the menu, the old one killed the whole gaming vibe (old one was kinda luxury lmao)."}, {"post_id": 77991, "ts": "2026-10-09T04:05:41Z", "hours": 5.2161, "text": "The enviroment and textures are in good shape now, It look right in the game!! The main work that I did since the last time file structuring and organizing files in folders, and removing the code that was crashing my game, and also solved few bugs, like screen freezing. menu.html is now index.html, added features to select and play different game modes using from menu. Only Gridshot and Sixshot are live for v1. I will ship this project v1. I am looking forward to add more game modes and make a seperate page for results."}, {"post_id": 75810, "ts": "2026-10-01T07:09:56Z", "hours": 3.6597, "text": "I have been working on the room and textures. I cant give proper finishing to the textures, they dont look good, so I skipped it for now. I am working on the Menu/Game mode selector. I have implemented smooth scroll to select animation using gsap, and its pretty smooth."}, {"post_id": 75513, "ts": "2026-09-30T10:22:58Z", "hours": 3.9586, "text": "spent most of my time working on the enviroment, the room i mean and optimizing the game a little. So i added 1 boxes each sides to add depth, etc. I had to adjust the sun light and the roof that wasted most of my time. The shadows were pixelated too much so I tried blurring them a little to smooth them out, also added score and accuracy system. I might work on the UI too."}, {"post_id": 74783, "ts": "2026-09-28T07:35:12Z", "hours": 3.9172, "text": "##Devlog 1, BUILDING A WEB BASED AIM TRAINER WRITTEN IN HTML, CSS AND JS I am building a broswer/web based Aim trainer for competitive games, like aimlabs but entirely written in HTML, CSS, JS and THREE.js.My primary goal was to match the aiming feel of competitive games like Valorant. Because three.js uses vertical field of vieww by default, i had to implement a dynamic conversion formula that would lock the horizontal FOV to 103. I also mapped shooter mouse sensitivity scaled directly into radian angle increaments per mouse count, to make the flick distances fell well and authentic. for handling movements, I integrated the pointer lock API for raw mouse input that will feel just like any competitive game. I fixed a bug that made the camera tilt sideways and also stopped the screen from flipping upside down when looking up and all. also added a \"+\" crosshair in the middle. Also built a training room with walls, roofs and floor, and also a little depth. added realisitc sunlight shadow casting. For testing, I built a 4x3 grid system that keeps three targets active. clicking mouse triggers center screen raycast to detect hits, free up occupied slots, etc. And also added fps counter and removed the fps cap restrictions. The target and aiming system is working fine and its fully responsive."}]...
|
Title: 3D AIM TRAINER by @brijeshkumar724282 | Sta Title: 3D AIM TRAINER by @brijeshkumar724282 | Stardance
Devlogs:
##Devlog 1, BUILDING A WEB BASED AIM TRAINER WRITTEN IN HTML, CSS AND JS I am building a broswer/web based Aim trainer for competitive games, like aimlabs but entirely written in HTML, CSS, JS and THREE.js.My primary goal was to match the aiming feel of competitive games like Valorant. Because three.js uses vertical field of vieww by default, i had to implement a dynamic conversion formula that would lock the horizontal FOV to 103. I also mapped shooter mouse sensitivity scaled directly into radian angle increaments per mouse count, to make the flick distances fell well and authentic. for handling movements, I integrated the pointer lock API for raw mouse input that will feel just like any competitive game. I fixed a bug that made the camera tilt sideways and also stopped the screen from flipping upside down when looking up and all. also added a "+" crosshair in the middle. Also built a training room with walls, roofs and floor, and also a little depth. added realisitc sunlight shadow casting. For testing, I built a 4x3 grid system that keeps three targets active. clicking mouse triggers center screen raycast to detect hits, free up occupied slots, etc. And also added fps counter and removed the fps cap restrictions. The target and aiming system is working fine and its fully responsive.
spent most of my time working on the enviroment, the room i mean and optimizing the game a little. So i added 1 boxes each sides to add depth, etc. I had to adjust the sun light and the roof that wasted most of my time. The shadows were pixelated too much so I tried blurring them a little to smooth them out, also added score and accuracy system. I might work on the UI too.
I have been working on the room and textures. I cant give proper finishing to the textures, they dont look good, so I skipped it for now. I am working on the Menu/Game mode selector. I have implemented smooth scroll to select animation using gsap, and its pretty smooth.
The enviroment and textures are in good shape now, It look right in the game!! The main work that I did since the last time file structuring and organizing files in folders, and removing the code that was crashing my game, and also solved few bugs, like screen freezing. menu.html is now index.html, added features to select and play different game modes using from menu. Only Gridshot and Sixshot are live for v1. I will ship this project v1. I am looking forward to add more game modes and make a seperate page for results.
REBUILDING AND FIXING EVERYTHING. After reading the reviews, I came to a conclusion that My game was hanging on most people’s device, it was more because of uncapped fps as of i think. here are a few things that I did: 1. I removed all the texture packs (made the game heavy and also caused lag for some people). 2. Using whitish color design (Flat colours) and added Grid helper. 3. Made the targets Blue colored and glossy looking. 4. I have already rebuilding the menu, the old one killed the whole gaming vibe (old one was kinda luxury lmao).
Finished the menu and most of the review feedback , Since the last post, I have been working mainly on the Menu and a few things : 1. The menu is now in a good shape too. 2.Added a settings popup where you could change sensitivity from. 3.removed the browser alert for results and made a dedicated page for results. 4.Added background music, So actually I used AI to generate the bgm. 5.Made a favicon and added an MIT License.
REBUILT AND MADE THE GAME SCALABLE AND ADDED NEW MORE 2 GAME MODES , So basically each gamemode used to have everything built inside it. So if i ever wanted to add a new game mode, I will have to write the same code again and again, So I put the core parts they all shared into one place, So its easier to add new game modes now. ROOM, AIMING SYSTEM, TIMER, etc are built once and used by all of them, SO this made speeds up adding new game modes. I have added 2 new Modes : 1. TRACKING MODE, 2. PRECISION MODE. I have also changed the UI of The menu a little bit. The ROOM is Rebuilt too because the old one was way too flat looking for my game. Now I have also added Best score feature for each mode, i have used Local storage for storing your best score. Also added an sfx whenever you switch modes in the menu which gives life to the menu selection.
MY 3D AIM TRAINER’S LATERST PROGRESS This time i have added a new gamemode “REACTION MODE”, 1 target spawns with a 1.2 seconds window, faster hits give more points, slower ones give lesser points, and the target respawns somewhere else. I was mainly working on supabase backend to add global leaderboard support. Then I also started working on login webpage and login.js, I also tuned the room lightning a little to give it a better look.
Ships:
I made a 3D web based Aim trainer in html, css, JS and three.js. Few of the most challenging parts were funny, adjusting the texture packs evenly among all the walls, adjusting the lightning to make it look right and The aiming mechanism, I was getting tilting issues in the starting, its fixed now. I am proud of the menu animation and making 2 modes work well. They just need to know how to click and move their mouse! its so simple.
I have made a Web based AIM TRAINER written in html, CSS, JS and THREE.js. IT HAS 4 GAMEMODES FOR NOW: GRIDSHOT, SIXSHOT, PRECISION, AND TRACKING. The most challenging part was every mode has to be written the same code again and again when adding a new gamemode. So I had to move it all into one shared core code, Now adding new modes is easier. I am really proud of developing the shared core code. when I made it, It actually made my work easier. It’s now scalable and i can add add many gamemodes easier than before. Before it i had to write the same code again and again probably 400+ lines now cutdown to less than 100 (tracking.js is an exception) To test my game, A person needs a mouse to aim and shoot....
|
1793062188.007927
|
1793148588.007927
|
|
61382
|
Tectonic by @Thepigcat | Stardance
|
Thepigcat
|
0
|
47.24
|
0
|
[]
|
[{"post_id": 82610, "ts": "202 [{"post_id": 82610, "ts": "2026-10-25T12:43:07Z", "hours": 6.7342, "text": "2D-Game-Engine Declog #7 MULTIPLAYER! Since the last devlog i mainly worked on actually implementing a working multiplayer demo and fixing all the issue i ran into along the way! Entities and their components are being synced, the server is responsible for creating players… However, the server is currently not in control of movement, crate placement and collisions which is why those things can’t be synced at the moment. So that’s probably gonna be the last few things I’m gonna work on before shipping :3"}, {"post_id": 80225, "ts": "2026-10-16T19:49:27Z", "hours": 6.0731, "text": "#2D-Game-Engine Devlog #6 Finishing networking Most of the time on this devlog was spent working on finishing networking. I was mainly fixing the packet system which had some issues due to the way the packet header and packet queue were implemented. But as you can see, now people are able to join the server! Next, I’m gonna finally finish the ui and then work on the main remaining features, mostly relating to assets and textures in particular."}, {"post_id": 79305, "ts": "2026-10-13T13:15:21Z", "hours": 6.3128, "text": "2D-Game-Engine Devlog #5 Cameras 📷 Added the ability to use different cameras for specific render operations. Cameras can be applied and un-applied using regular render commands, making them very usable. Render-Layers ⛰️ Added render layers, so objects get rendered before/behind the player. Still has issues with the x coordinate lol. UI Added some rudimentary ui elements like labels and buttons. The ui is direct mode so its pretty much just drop in lol. I also added nine-slice scaling so ui elements can be scaled nicely. Next, I’m gonna implement collisions and some more ui functionality."}, {"post_id": 78132, "ts": "2026-10-09T17:53:18Z", "hours": 5.1611, "text": "2D-Game-Engine Devlog #4 This is another boring internal devlog without flashy things lol. This time I implemented better file paths as well as data saving/loading . Better Filepaths Added a function to tectonic underlying library to resolve file paths. This should help with providing file paths. Also improved the memory situation for asset manager data. Data Saving and Loading The most exciting part of this devlog is probably the api for loading and saving data that uses a json-like object format. The format supports integers, strings, lists and compound objects (as im writing this im realizing, that i should probably also add support for floats lol). Yea all in all, not that exciting even tho it took a ridiculous amount of time to get everything to work. Next, I’m gonna work on a small ui abstraction and then probably start polishing the engine to build a simple game with it and ship it."}, {"post_id": 75879, "ts": "2026-10-01T13:38:39Z", "hours": 5.3967, "text": "2D-Engine Devlog #3 Toml Resource Files 💾 I spent most of the last 5 hours getting the c toml library i’ve been using to work in my engine. This involved extending the library to support printing toml files, so they can be generated in code ^_^ This is particularly useful for replacing corrupt files and auto-generating files like settings and keybinds… Recursive parsing for nested toml tables 🔁 Since seperating keys in toml with dots means creating a table (this feature is awesome and annoying at the same time 😭 ), i had to find a way to parse nested tables. I did this using recursion and have used it in both the language file loader and the keybinds loader so far! I also had to figure out a way to parse tables that are part of a nested table for some cases. I did that with a check that looks ahead at the next table’s values and ensures that they are also tables. More asset loading 🖼️ Finally got around to implementing more of the Asset Loader . It now supports shaders (which were a bit tricky due to consisting of fragment and vertex shaders). I also added loading for sounds 🎶"}, {"post_id": 74443, "ts": "2026-09-27T11:57:48Z", "hours": 5.3139, "text": "Devlog #2 - Implementing more core systems Finished packet sending and receiving This should hopefully be the last piece of packet infrastructure required for the engine. It was mainly about encoding and decoding the packets properly, managing the sub processes and handling the shared resources. Implemented text rendering Next, I implemented the render command for drawing text to the screen. Like all rendering actions, the text drawing is stored as a command in an array that keeps the order and then applied at the end of the current game loop iteration. It supports custom font sizes and colors, but I still have to add support for custom fonts in the future. Implemented keyboard and mouse input and keymaps After text rendering i added events for keyboard and mouse input. This only handles the keys/mouse buttons being pressed and released. For checking if the key or button is held down, one can simply use a function. On top of that i also added keymaps that allow for easy keybinds with default keys, selecting keys or mouse buttons for an action, reseting and saving to a toml file. Started working on a Language Manager While adding names to the keymap, I realised that a proper engine should also supply a system for easily translating text. So I started adding a very basic translation manager that allows you to set a default locale and then load language files, change the current language… However both the translation manager and the keymap can not be saved to a config/resource file at the moment. That’s why I am probably gonna have to extend the toml library I used in a previous project to support all those things. Alr, see you next time :3"}, {"post_id": 72811, "ts": "2026-09-23T19:36:20Z", "hours": 3.4864, "text": "Devlog #1 - Multithreading shenanigans Reworking the packets Since the initial system for network packets was quite unintuitive and not very portable due to relying heavily on macros, I decided to try and simplify this system. I started by moving packet decoding to the main thread. This means that the packet receiver thread now pushes the raw bytebuf to the packet (data) queue and the main thread decodes then packet right before the user handles it. This way, we can avoid enforcing thread safety for decode context data. Improving thread handling Next up, I rewrote the client thread system to be state-driven, just like the server. That way i can easily handle connecting to a server, disconnecting and stopping the client. Also had to fix a bug where the thread handler wouldn’t pass the engine as an argument to the thread. Next up Tomorrow im gonna implement more of the actual packet encoding/decoding/handling, so i can actually make my example game playable Oh btw, i made this little player dude for my example game lol. I should probably implement input, so that he can move around and isn’t just stuck in one place."}, {"post_id": 72289, "ts": "2026-09-22T16:21:48Z", "hours": 8.7617, "text": "Initial Devlog - Setting up basic infrastructure I started this project off, by writing a lot of the api and basic stuff like a backend system and implementation in raylib along with some basic assets and events. The premise I wanted to create an engine that is extremely simple to use and that allows you to create multiplayer games in a systems language like C without you having to touch stuff like threads and socket libraries. Since its supposed to be a full on game engine, it should also be able to handle things like assets, events and rendering cleanly, out of the box. The networking approach While making the game multiplayer is optional, it is recommended to implement the game with separate client and server processes, to cleanly handle game logic and support future multiplayer. The client and server process use separate engine data but do share a backend (In the future, the backend might be subject to splitting or at least ifdef guarding so you dont have to compile libraries like raylib on the server). The main game logic, depending on your implementation can be shared obviously. Communication between sides happens using packets. When creating a packet one can either automatically serialize the packet struct by describing its layout or provide custom functions for encoding and decoding the data. Implementing the game The actual game logic is mostly up to the user, whether you use an ECS, a more traditional entity approach or something completely different does not matter. To interact between the described processes, the user has to implement handling for packets in their game loop on both the server and the client. Next up Im probably gonna start working on actually being able to start and connect to servers. This will probably also involve major changes to my sockets library. After that I want to focus on more game engine related things like assets and texture tiling, music, sound and a bunch more."}]...
|
Title: Tectonic by @Thepigcat | Stardance
Devlogs Title: Tectonic by @Thepigcat | Stardance
Devlogs:
Initial Devlog - Setting up basic infrastructure I started this project off, by writing a lot of the api and basic stuff like a backend system and implementation in raylib along with some basic assets and events. The premise I wanted to create an engine that is extremely simple to use and that allows you to create multiplayer games in a systems language like C without you having to touch stuff like threads and socket libraries. Since its supposed to be a full on game engine, it should also be able to handle things like assets, events and rendering cleanly, out of the box. The networking approach While making the game multiplayer is optional, it is recommended to implement the game with separate client and server processes, to cleanly handle game logic and support future multiplayer. The client and server process use separate engine data but do share a backend (In the future, the backend might be subject to splitting or at least ifdef guarding so you dont have to compile libraries like raylib on the server). The main game logic, depending on your implementation can be shared obviously. Communication between sides happens using packets. When creating a packet one can either automatically serialize the packet struct by describing its layout or provide custom functions for encoding and decoding the data. Implementing the game The actual game logic is mostly up to the user, whether you use an ECS, a more traditional entity approach or something completely different does not matter. To interact between the described processes, the user has to implement handling for packets in their game loop on both the server and the client. Next up Im probably gonna start working on actually being able to start and connect to servers. This will probably also involve major changes to my sockets library. After that I want to focus on more game engine related things like assets and texture tiling, music, sound and a bunch more.
Devlog #1 - Multithreading shenanigans Reworking the packets Since the initial system for network packets was quite unintuitive and not very portable due to relying heavily on macros, I decided to try and simplify this system. I started by moving packet decoding to the main thread. This means that the packet receiver thread now pushes the raw bytebuf to the packet (data) queue and the main thread decodes then packet right before the user handles it. This way, we can avoid enforcing thread safety for decode context data. Improving thread handling Next up, I rewrote the client thread system to be state-driven, just like the server. That way i can easily handle connecting to a server, disconnecting and stopping the client. Also had to fix a bug where the thread handler wouldn’t pass the engine as an argument to the thread. Next up Tomorrow im gonna implement more of the actual packet encoding/decoding/handling, so i can actually make my example game playable Oh btw, i made this little player dude for my example game lol. I should probably implement input, so that he can move around and isn’t just stuck in one place.
Devlog #2 - Implementing more core systems Finished packet sending and receiving This should hopefully be the last piece of packet infrastructure required for the engine. It was mainly about encoding and decoding the packets properly, managing the sub processes and handling the shared resources. Implemented text rendering Next, I implemented the render command for drawing text to the screen. Like all rendering actions, the text drawing is stored as a command in an array that keeps the order and then applied at the end of the current game loop iteration. It supports custom font sizes and colors, but I still have to add support for custom fonts in the future. Implemented keyboard and mouse input and keymaps After text rendering i added events for keyboard and mouse input. This only handles the keys/mouse buttons being pressed and released. For checking if the key or button is held down, one can simply use a function. On top of that i also added keymaps that allow for easy keybinds with default keys, selecting keys or mouse buttons for an action, reseting and saving to a toml file. Started working on a Language Manager While adding names to the keymap, I realised that a proper engine should also supply a system for easily translating text. So I started adding a very basic translation manager that allows you to set a default locale and then load language files, change the current language… However both the translation manager and the keymap can not be saved to a config/resource file at the moment. That’s why I am probably gonna have to extend the toml library I used in a previous project to support all those things. Alr, see you next time :3
2D-Engine Devlog #3 Toml Resource Files 💾 I spent most of the last 5 hours getting the c toml library i’ve been using to work in my engine. This involved extending the library to support printing toml files, so they can be generated in code ^_^ This is particularly useful for replacing corrupt files and auto-generating files like settings and keybinds… Recursive parsing for nested toml tables 🔁 Since seperating keys in toml with dots means creating a table (this feature is awesome and annoying at the same time 😭 ), i had to find a way to parse nested tables. I did this using recursion and have used it in both the language file loader and the keybinds loader so far! I also had to figure out a way to parse tables that are part of a nested table for some cases. I did that with a check that looks ahead at the next table’s values and ensures that they are also tables. More asset loading 🖼️ Finally got around to implementing more of the Asset Loader . It now supports shaders (which were a bit tricky due to consisting of fragment and vertex shaders). I also added loading for sounds 🎶
2D-Game-Engine Devlog #4 This is another boring internal devlog without flashy things lol. This time I implemented better file paths as well as data saving/loading . Better Filepaths Added a function to tectonic underlying library to resolve file paths. This should help with providing file paths. Also improved the memory situation for asset manager data. Data Saving and Loading The most exciting part of this devlog is probably the api for loading and saving data that uses a json-like object format. The format supports integers, strings, lists and compound objects (as im writing this im realizing, that i should probably also add support for floats lol). Yea all in all, not that exciting even tho it took a ridiculous amount of time to get everything to work. Next, I’m gonna work on a small ui abstraction and then probably start polishing the engine to build a simple game with it and ship it.
2D-Game-Engine Devlog #5 Cameras 📷 Added the ability to use different cameras for specific render operations. Cameras can be applied and un-applied using regular render commands, making them very usable. Render-Layers ⛰️ Added render layers, so objects get rendered before/behind the player. Still has issues with the x coordinate lol. UI Added some rudimentary ui elements like labels and buttons. The ui is direct mode so its pretty much just drop in lol. I also added nine-slice scaling so ui elements can be scaled nicely. Next, I’m gonna implement collisions and some more ui functionality.
#2D-Game-Engine Devlog #6 Finishing networking Most of the time on this devlog was spent working on finishing networking. I was mainly fixing the packet system which had some issues due to the way the packet header and packet queue were implemented. But as you can see, now people are able to join the server! Next, I’m gonna finally finish the ui and then work on the main remaining features, mostly relating to assets and textures in particular.
2D-Game-Engine Declog #7 MULTIPLAYER! Since the last devlog i mainly worked on actually implementing a working multiplayer demo and fixing all the issue i ran into along the way! Entities and their components are being synced, the server is responsible for creating players… However, the server is currently not in control of movement, crate placement and collisions which is why those things can’t be synced at the moment. So that’s probably gonna be the last few things I’m gonna work on before shipping :3...
|
1793040577.988014
|
1793645377.988014
|
|
8398
|
centaur by @chiron_dev8 | Stardance
|
chiron_dev8
|
1
|
17.12
|
28
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T17:05:56Z", "hours": 4.0, "multiplier": 6.73, "payout": 28, "blessing": "neutral", "text": "I have worked on the project for a while before Stardance started. Probably around 95% of my hours are unlogged. I have made a package manager for UNIX based systems (specifically for my custom Linux based operating system, ChironOS). It can install, uninstall and update packages, manage dependencies, sync install files to the latest versions and automatically remove all unused packages. My favourite part of the project was finally seeing all the functions working together. I will still be working on this for a long long time as there is a lot I can improve on. My next goal will be to make package scripts for the whole of Linux From Scratch and Beyond LFS as this will prove the reliability of my package manager. If you want to test this please make sure you are using Linux (It will probably work on BSD but I haven’t tested it. It probably won’t work on mac and it DEFINITELY WILL NOT WORK ON WINDOWS). Make sure to read the wiki for installation and usage instructions. peace", "repo": "https://github.com/Chiron8/centaur", "demo": "https://github.com/Chiron8/centaur/wiki/2.-Install"}]...
|
[{"post_id": 82609, "ts": "202 [{"post_id": 82609, "ts": "2026-10-25T12:29:51Z", "hours": 13.1214, "text": "During the last three months, I significantly improved Centaur’s package-management infrastructure. I streamlined package source handling by adding automatic tarball downloads, extraction, and checksum verification. I also redesigned installation around a bubblewrap sandbox, staging directories, and manifests, which replaces the insecure system() function and makes package installation and remova safer. Alongside these changes, I improved uninstall usability, added x86-64 binaries, maintained the beta release workflow, and shipped versions 1.1.1 through 1.3.1."}, {"post_id": 22953, "ts": "2026-07-05T16:59:24Z", "hours": 3.9061, "text": "Centaur v1.1 Release Notes In this release, I focused on improving the .centaur package format and fixing several usability issues from v1.0. What I changed 1. I redesigned the .centaur syntax into 3 clear sections I changed .centaur files so package data is now split into: [meta] [install] [uninstall] This replaces the old mixed format where metadata, install steps, and uninstall script generation were all blended together. 2. I made metadata explicit and easier to parse In v1.0, package metadata and dependency handling relied on ad-hoc placement (for example, dependency lines and markers like === ADD DEPENDENCIES ABOVE THIS LINE === ). In v1.1, I moved this into a structured metadata block, for example: name = \"writedoc\" version = \"2.3-p1\" dependencies = \"example\" This makes package definitions cleaner and far more consistent. 3. I separated install and uninstall logic I moved installation commands into [install] and uninstall commands into [uninstall] . Previously, uninstall behavior was created indirectly during install by writing uninstall commands into another file. Now I define uninstall behavior directly in the package script itself, which is simpler and easier to maintain. 4. I fixed parser/runtime snags from v1.0 I resolved several pain points in .centaur files, including: line length limit issues newline/formatting sensitivity (such as needing blank lines between commands) general script parsing/execution reliability issues Result With v1.1, I made .centaur scripts more structured, more readable, and more reliable. The new format is easier for me (and others) to write, maintain, and parse going forward."}, {"post_id": 2848, "ts": "2026-06-05T18:08:43Z", "hours": 0.2842, "text": "I’m currently working on improving how I go about parsing package metadata. Previously, package dependencies were declared at the top of the file, however this soon limited adding extra metadata such as “preservation” type which I will implement later. I will now be using [meta] tags with variables inside them to allow for more advanced configuration!"}]...
|
Title: centaur by @chiron_dev8 | Stardance
Devlog Title: centaur by @chiron_dev8 | Stardance
Devlogs:
I’m currently working on improving how I go about parsing package metadata. Previously, package dependencies were declared at the top of the file, however this soon limited adding extra metadata such as “preservation” type which I will implement later. I will now be using [meta] tags with variables inside them to allow for more advanced configuration!
Centaur v1.1 Release Notes In this release, I focused on improving the .centaur package format and fixing several usability issues from v1.0. What I changed 1. I redesigned the .centaur syntax into 3 clear sections I changed .centaur files so package data is now split into: [meta] [install] [uninstall] This replaces the old mixed format where metadata, install steps, and uninstall script generation were all blended together. 2. I made metadata explicit and easier to parse In v1.0, package metadata and dependency handling relied on ad-hoc placement (for example, dependency lines and markers like === ADD DEPENDENCIES ABOVE THIS LINE === ). In v1.1, I moved this into a structured metadata block, for example: name = "writedoc" version = "2.3-p1" dependencies = "example" This makes package definitions cleaner and far more consistent. 3. I separated install and uninstall logic I moved installation commands into [install] and uninstall commands into [uninstall] . Previously, uninstall behavior was created indirectly during install by writing uninstall commands into another file. Now I define uninstall behavior directly in the package script itself, which is simpler and easier to maintain. 4. I fixed parser/runtime snags from v1.0 I resolved several pain points in .centaur files, including: line length limit issues newline/formatting sensitivity (such as needing blank lines between commands) general script parsing/execution reliability issues Result With v1.1, I made .centaur scripts more structured, more readable, and more reliable. The new format is easier for me (and others) to write, maintain, and parse going forward.
During the last three months, I significantly improved Centaur’s package-management infrastructure. I streamlined package source handling by adding automatic tarball downloads, extraction, and checksum verification. I also redesigned installation around a bubblewrap sandbox, staging directories, and manifests, which replaces the insecure system() function and makes package installation and remova safer. Alongside these changes, I improved uninstall usability, added x86-64 binaries, maintained the beta release workflow, and shipped versions 1.1.1 through 1.3.1.
Ships:
I have worked on the project for a while before Stardance started. Probably around 95% of my hours are unlogged. I have made a package manager for UNIX based systems (specifically for my custom Linux based operating system, ChironOS). It can install, uninstall and update packages, manage dependencies, sync install files to the latest versions and automatically remove all unused packages. My favourite part of the project was finally seeing all the functions working together. I will still be working on this for a long long time as there is a lot I can improve on. My next goal will be to make package scripts for the whole of Linux From Scratch and Beyond LFS as this will prove the reliability of my package manager. If you want to test this please make sure you are using Linux (It will probably work on BSD but I haven’t tested it. It probably won’t work on mac and it DEFINITELY WILL NOT WORK ON WINDOWS). Make sure to read the wiki for installation and usage instructions. peace...
|
1793105637.960062
|
1793192037.960062
|
|
57816
|
Into the Woods by @mink | Stardance
|
mink
|
1
|
3.34
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T12:28:00Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A platformer game.", "repo": "https://github.com/one-mink/into_the_woods", "demo": "https://one-mink.itch.io/into-the-woods"}]...
|
[{"post_id": 82607, "ts": "202 [{"post_id": 82607, "ts": "2026-10-25T12:23:09Z", "hours": 0.3397, "text": "i added cpu particles to the mushrooms and the trader"}, {"post_id": 64979, "ts": "2026-09-09T18:58:38Z", "hours": 1.0325, "text": "I added CPU particles to the rocket to make it look more cool. They appear one the rocket has started"}, {"post_id": 63588, "ts": "2026-09-07T14:46:15Z", "hours": 0.5536, "text": "Added smother movement, also put the ui on the Canvas Layer, Reajusted the hitboxes and fixed a bug (Before that the Count of hearts and fuel was saved so after a game over screen they didn’t get reseted."}, {"post_id": 62796, "ts": "2026-09-06T09:53:38Z", "hours": 0.9797, "text": "I added a font to make the game look more nice. Also added labels for the fuel tank, fuel and mushrooms as well as for the hearts. I also changed the ability from pausing a dog with a stick to make it disappear with one."}, {"post_id": 60843, "ts": "2026-09-03T13:55:01Z", "hours": 0.7578, "text": "I continued working on a game I started in Milkyway. I adjusted some of the platforms cause you got stuck in some places. I also added a start and game over screen. Then I also fixed the bug, that prevented the rocket from starting. There was also another bug in the trader(that trades mushrooms into fuel) that i fixed here."}]...
|
Title: Into the Woods by @mink | Stardance
Devlog Title: Into the Woods by @mink | Stardance
Devlogs:
I continued working on a game I started in Milkyway. I adjusted some of the platforms cause you got stuck in some places. I also added a start and game over screen. Then I also fixed the bug, that prevented the rocket from starting. There was also another bug in the trader(that trades mushrooms into fuel) that i fixed here.
I added a font to make the game look more nice. Also added labels for the fuel tank, fuel and mushrooms as well as for the hearts. I also changed the ability from pausing a dog with a stick to make it disappear with one.
Added smother movement, also put the ui on the Canvas Layer, Reajusted the hitboxes and fixed a bug (Before that the Count of hearts and fuel was saved so after a game over screen they didn’t get reseted.
I added CPU particles to the rocket to make it look more cool. They appear one the rocket has started
i added cpu particles to the mushrooms and the trader
Ships:
A platformer game....
|
1793005023.5078979
|
1793091423.5078979
|
|
70128
|
notebed by @ryderklh | Stardance
|
ryderklh
|
0
|
17.42
|
0
|
[]
|
[{"post_id": 82606, "ts": "202 [{"post_id": 82606, "ts": "2026-10-25T12:15:40Z", "hours": 2.1706, "text": "!!! snapshot you can resize it and press the shot btn to screenshot then the img will be put in the place where you take the screenshot"}, {"post_id": 82190, "ts": "2026-10-24T06:59:31Z", "hours": 4.1114, "text": "add dark mode 🌜🌜🌜🌜🌜 fix some problem with html policy also, a lot of initialization was done outside of init(). when i tried to move it inside, the whole thing blew up because other functions were directly accessing those variables i have been trying to fix that"}, {"post_id": 81279, "ts": "2026-10-20T16:16:43Z", "hours": 1.0322, "text": "i fixed the home page it should be able to be used now done [1], [2] roadmap [3] i think i should add some screenshot and introduction"}, {"post_id": 80989, "ts": "2026-10-19T15:06:58Z", "hours": 2.78, "text": "problems keep popping out i used to be using a <a href= \" javascript:(function() { const s=document.createElement('script'); s.src='http://127.0.0.1:5500/script/notepad.js'; document.body.appendChild(s); })(); \" > here </a> i need to change this, because i am going to develope this website into a github page the CSS i add by using appendChild(“”) is ruining the original webpage im gonna solve this by using shadow DOM bad bg and font color under darkmode done [2] roadmap [1], [3] 11 days left"}, {"post_id": 80680, "ts": "2026-10-18T13:58:26Z", "hours": 2.6094, "text": "add delete btn: delete all notes remove drag btn add a title where user can hold to drag add x y width height to local storage put css into the bookmarklet i decided to add more bookmarklets, making this project a collection of bookmarklet roadmap notepad (mostly done) screenshot taker svg sketch …"}, {"post_id": 80418, "ts": "2026-10-17T15:58:53Z", "hours": 4.7164, "text": "this is my first time make a bookmarklet i originally create this for Hacklet, a ysws about bookmarklets, but i prefer a 3d printing credit rather than a domain… what i made a demo website a note container: nav: drag btn opacity btn close btn note box box satisfying scroller bar automatically save to local storage"}]...
|
Title: notebed by @ryderklh | Stardance
Devlogs:
Title: notebed by @ryderklh | Stardance
Devlogs:
this is my first time make a bookmarklet i originally create this for Hacklet, a ysws about bookmarklets, but i prefer a 3d printing credit rather than a domain… what i made a demo website a note container: nav: drag btn opacity btn close btn note box box satisfying scroller bar automatically save to local storage
add delete btn: delete all notes remove drag btn add a title where user can hold to drag add x y width height to local storage put css into the bookmarklet i decided to add more bookmarklets, making this project a collection of bookmarklet roadmap notepad (mostly done) screenshot taker svg sketch …
problems keep popping out i used to be using a <a href= " javascript:(function() { const s=document.createElement('script'); s.src='http://127.0.0.1:5500/script/notepad.js'; document.body.appendChild(s); })(); " > here </a> i need to change this, because i am going to develope this website into a github page the CSS i add by using appendChild(“”) is ruining the original webpage im gonna solve this by using shadow DOM bad bg and font color under darkmode done [2] roadmap [1], [3] 11 days left
i fixed the home page it should be able to be used now done [1], [2] roadmap [3] i think i should add some screenshot and introduction
add dark mode 🌜🌜🌜🌜🌜 fix some problem with html policy also, a lot of initialization was done outside of init(). when i tried to move it inside, the whole thing blew up because other functions were directly accessing those variables i have been trying to fix that
!!! snapshot you can resize it and press the shot btn to screenshot then the img will be put in the place where you take the screenshot...
|
1792958086.432084
|
1793562886.432084
|
|
2851
|
My first slack bot! by @alfie_nicholls | Stardance
|
alfie_nicholls
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-02T15:03:24Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a simple slack bot. it has 4 features so far (looking to add some in the near future). Parts were relatively straight forward using the hack club guide, however other parts were more challenging and really taught me alot about JavaScript and Slack bots. 8^)", "repo": "https://github.com/AlfieNico/First-slack-bot", "demo": "https://app.slack.com/"}]...
|
[{"post_id": 826, "ts": "2026- [{"post_id": 826, "ts": "2026-06-02T14:48:29Z", "hours": 0.2714, "text": "Finished things off and polished it all off (also sorry for putting peter in the slack whoopsie)"}, {"post_id": 799, "ts": "2026-06-02T13:57:48Z", "hours": 0.3419, "text": "I added peteh gruffen"}, {"post_id": 776, "ts": "2026-06-02T13:13:25Z", "hours": 0.3989, "text": "I followed the guide pretty much, more to come soon!"}]...
|
Title: My first slack bot! by @alfie_nicholls | St Title: My first slack bot! by @alfie_nicholls | Stardance
Devlogs:
I followed the guide pretty much, more to come soon!
I added peteh gruffen
Finished things off and polished it all off (also sorry for putting peter in the slack whoopsie)
Ships:
I made a simple slack bot. it has 4 features so far (looking to add some in the near future). Parts were relatively straight forward using the hack club guide, however other parts were more challenging and really taught me alot about JavaScript and Slack bots. 8^)...
|
1793084062.0036426
|
1793170462.0036426
|
|
71302
|
Astravex by @AnnaBritTea | Stardance
|
AnnaBritTea
|
1
|
14.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T11:37:06Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Astravex is an interactive 3D satellite orbit simulator developed in C++17, using SDL3 for rendering and Dear ImGui for its graphical interface.", "repo": "https://github.com/Ana9917/Astravex", "demo": "https://github.com/Ana9917/Astravex/releases/tag/v1.0.0"}]...
|
[{"post_id": 82598, "ts": "202 [{"post_id": 82598, "ts": "2026-10-25T11:34:18Z", "hours": 13.5939, "text": "Trying to package this thing correctly"}]...
|
Title: Astravex by @AnnaBritTea | Stardance
Devlo Title: Astravex by @AnnaBritTea | Stardance
Devlogs:
Trying to package this thing correctly
Ships:
Astravex is an interactive 3D satellite orbit simulator developed in C++17, using SDL3 for rendering and Dear ImGui for its graphical interface....
|
1793015276.9465356
|
1793101676.9465356
|
|
18821
|
Timed. by @Mehmet | Stardance
|
Mehmet
|
2
|
25.0
|
58
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T10:47:13Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Timed, a productivity website that you can use to keep timers and get access to the real-life clock. It has a minimalist and satisfying UI that you can keep running in the background for when you need to complete temporal tasks.", "repo": "https://github.com/SameRainbows/Timed.", "demo": "https://timed-focused.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-19T20:15:13Z", "hours": 12.0, "multiplier": 4.88, "payout": 58, "blessing": "neutral", "text": "It started as a basic Python script and has now evolved into a premium, focused, and hyper-minimalist single-page web app. Check out the live clock (with toggleable milliseconds), stopwatch with laps, and countdown timer complete with customized E-flat Major arpeggio bell chimes synthesized on the fly via Web Audio API. Also cleaned up the Python CLI tool to refresh inline and support hardware chimes.", "repo": "https://github.com/SameRainbows/Timed.", "demo": "https://timed-focused.vercel.app/"}]...
|
[{"post_id": 82594, "ts": "202 [{"post_id": 82594, "ts": "2026-10-25T10:45:34Z", "hours": 3.105, "text": "Did some final cleanups on the code."}, {"post_id": 46875, "ts": "2026-08-14T12:43:15Z", "hours": 9.1136, "text": "Updated README and added a few more features ;)"}, {"post_id": 35438, "ts": "2026-07-26T20:55:53Z", "hours": 0.3211, "text": "Cleaned up the repo a"}, {"post_id": 31438, "ts": "2026-07-19T20:12:02Z", "hours": 6.5822, "text": "Hey everyone, I’m back with a massive update for Timed. ! After focusing on other projects for a bit, I decided to return and give this project the thorough cleanup, visual redesign, and feature set it deserves. It has been transformed from an extremely basic prototype into a premium, focused, and hyper-minimalist time hub. Here is what is new in the latest version:### 1. Aesthetic Clean-up & Hyper-Minimalism- Clean Slate Background : Removed the distracting background gradient glow for a clean, uniform deep slate environment.- Logo Refinement : Removed the bullet dot next to the logo for a cleaner top-left header.- Hidden Footer : Removed the copyright text and footer entirely, leaving zero visual clutter.- Tabular Digit Spacing : Styled the clock displays to use tabular monospaced digits, preventing annoying layout shifting when the seconds change. 2. Live Clock & Mode Segregation- ** Hidden Minute Ring on Clock**: The spinning progress ring is now hidden on the Live Clock mode page (to avoid confusion), but it still displays smoothly in Timer and Stopwatch modes.- Interactive Toggles : Tapping the clock display now toggles millisecond view on/off, and there are custom buttons to swap between 12-hour and 24-hour display modes. 3. All-New Stopwatch Mode- Added a full Stopwatch Mode to the web application, featuring millisecond accuracy, controls to pause and resume, and a scrolling lap recording panel. 4. Upgrade Countdown Timer & Presets- Added preset buttons for quick intervals (5m Break, 15m Break, 25m Pomodoro, 50m Focus).- Added an input picker for custom hours, minutes, and seconds. 5. Synthesized Acoustic Bell Chimes- Got rid of the basic, harsh beep sounds.- Coded a custom Web Audio API synthesizer that dynamically triggers a warm, premium E-flat Major arpeggio chime ( Eb4 -> Bb4 -> D5 -> F5 ) using physical acoustic decay curves when the timer completes. 6. Polished Terminal Application ( timerr.py )- Upgraded the CLI python app to refresh in-place ( \\r ) so it doesn’t flood the console output.- Added input validation to prevent user typos from crashing the script.- Built a terminal-based stopwatch with lap tracking.- Upgraded the CLI buzzer to play a beautiful arpeggiated chime using Windows system hardware chimes.### 7. Deployment & GitHub- Deployed the entire static application to Vercel at a clean production URL: timed-focused.vercel.app - Staged, committed, and pushed the updated codebase to the remote GitHub repository at SameRainbows/Timed ."}, {"post_id": 19120, "ts": "2026-06-30T11:11:05Z", "hours": 0.8578, "text": "Some code cleanup. I got little bit of this time internalizing the logic to build on top once the dust settles. Im working on a few other projects rn so cya when I come back."}, {"post_id": 13046, "ts": "2026-06-21T10:25:51Z", "hours": 2.3322, "text": "I finally turned it into a web app. It’s extremely basic, just a live clock and a timer. I honestly didn’t know any JavaScript, so I had some help on that part from Claude. I looked at my old timer.py code, converted it to HTML, and handled the CSS myself for basic styling. It still doesn’t have a live demo yet, but the latest changes are on GitHub."}, {"post_id": 12468, "ts": "2026-06-20T11:12:33Z", "hours": 1.7311, "text": "Welcome to my second log for Timed. Timed is a hub for all your temporal needs. It has the basic features like a clock and timers, and I intend to add all sorts of different things like moon phases, solar events, and way more. Right now, it is a Python file with an audio file so it can run an alert sound, but I intend to make this a Python Flask web app. In this log, I added the following: The code currently uses four libraries: The existing time module inside of Python The datetime library The playsound library msvcrt We have two functions: Timer function: It takes two parameters: the time length in seconds and the direction the timer is going (up or down). Infinite loop function: It checks if any keys are pressed using the msvcrt library. If so, it breaks out of the loop. If not, it uses the datetime library to get the current time, prints it, waits one second, and prints it again. This entire while loop is inside a try-except block. If a KeyboardInterrupt error is seen, it prints “Clock stopped.” We have a variable set to an input to see if the user is going to use the timer or the live clock. If they choose the timer, we ask them for the direction (up or down) and if they will be using minutes. The following code then calls for those parameters."}, {"post_id": 8936, "ts": "2026-06-14T21:06:07Z", "hours": 0.4431, "text": "Making a tool for ALL your time-related needs."}]...
|
Title: Timed. by @Mehmet | Stardance
Devlogs:
Mak Title: Timed. by @Mehmet | Stardance
Devlogs:
Making a tool for ALL your time-related needs.
Welcome to my second log for Timed. Timed is a hub for all your temporal needs. It has the basic features like a clock and timers, and I intend to add all sorts of different things like moon phases, solar events, and way more. Right now, it is a Python file with an audio file so it can run an alert sound, but I intend to make this a Python Flask web app. In this log, I added the following: The code currently uses four libraries: The existing time module inside of Python The datetime library The playsound library msvcrt We have two functions: Timer function: It takes two parameters: the time length in seconds and the direction the timer is going (up or down). Infinite loop function: It checks if any keys are pressed using the msvcrt library. If so, it breaks out of the loop. If not, it uses the datetime library to get the current time, prints it, waits one second, and prints it again. This entire while loop is inside a try-except block. If a KeyboardInterrupt error is seen, it prints “Clock stopped.” We have a variable set to an input to see if the user is going to use the timer or the live clock. If they choose the timer, we ask them for the direction (up or down) and if they will be using minutes. The following code then calls for those parameters.
I finally turned it into a web app. It’s extremely basic, just a live clock and a timer. I honestly didn’t know any JavaScript, so I had some help on that part from Claude. I looked at my old timer.py code, converted it to HTML, and handled the CSS myself for basic styling. It still doesn’t have a live demo yet, but the latest changes are on GitHub.
Some code cleanup. I got little bit of this time internalizing the logic to build on top once the dust settles. Im working on a few other projects rn so cya when I come back.
Hey everyone, I’m back with a massive update for Timed. ! After focusing on other projects for a bit, I decided to return and give this project the thorough cleanup, visual redesign, and feature set it deserves. It has been transformed from an extremely basic prototype into a premium, focused, and hyper-minimalist time hub. Here is what is new in the latest version:### 1. Aesthetic Clean-up & Hyper-Minimalism- Clean Slate Background : Removed the distracting background gradient glow for a clean, uniform deep slate environment.- Logo Refinement : Removed the bullet dot next to the logo for a cleaner top-left header.- Hidden Footer : Removed the copyright text and footer entirely, leaving zero visual clutter.- Tabular Digit Spacing : Styled the clock displays to use tabular monospaced digits, preventing annoying layout shifting when the seconds change. 2. Live Clock & Mode Segregation- ** Hidden Minute Ring on Clock**: The spinning progress ring is now hidden on the Live Clock mode page (to avoid confusion), but it still displays smoothly in Timer and Stopwatch modes.- Interactive Toggles : Tapping the clock display now toggles millisecond view on/off, and there are custom buttons to swap between 12-hour and 24-hour display modes. 3. All-New Stopwatch Mode- Added a full Stopwatch Mode to the web application, featuring millisecond accuracy, controls to pause and resume, and a scrolling lap recording panel. 4. Upgrade Countdown Timer & Presets- Added preset buttons for quick intervals (5m Break, 15m Break, 25m Pomodoro, 50m Focus).- Added an input picker for custom hours, minutes, and seconds. 5. Synthesized Acoustic Bell Chimes- Got rid of the basic, harsh beep sounds.- Coded a custom Web Audio API synthesizer that dynamically triggers a warm, premium E-flat Major arpeggio chime ( Eb4 -> Bb4 -> D5 -> F5 ) using physical acoustic decay curves when the timer completes. 6. Polished Terminal Application ( timerr.py )- Upgraded the CLI python app to refresh in-place ( \r ) so it doesn’t flood the console output.- Added input validation to prevent user typos from crashing the script.- Built a terminal-based stopwatch with lap tracking.- Upgraded the CLI buzzer to play a beautiful arpeggiated chime using Windows system hardware chimes.### 7. Deployment & GitHub- Deployed the entire static application to Vercel at a clean production URL: timed-focused.vercel.app - Staged, committed, and pushed the updated codebase to the remote GitHub repository at SameRainbows/Timed .
Cleaned up the repo a
Updated README and added a few more features ;)
Did some final cleanups on the code.
Ships:
It started as a basic Python script and has now evolved into a premium, focused, and hyper-minimalist single-page web app. Check out the live clock (with toggleable milliseconds), stopwatch with laps, and countdown timer complete with customized E-flat Major arpeggio bell chimes synthesized on the fly via Web Audio API. Also cleaned up the Python CLI tool to refresh inline and support hardware chimes.
I made Timed, a productivity website that you can use to keep timers and get access to the real-life clock. It has a minimalist and satisfying UI that you can keep running in the background for when you need to complete temporal tasks....
|
1792990446.434928
|
1793076846.434928
|
|
58963
|
MindState by @RudranshShukla | Stardance
|
RudranshShukla
|
1
|
28.25
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-16T04:28:02Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Built MindState, an open platform where young people can share their stories, express themselves, and feel heard. I worked on the UI/UX and development, building features like articles, journaling, mood tracking, community contributions, and more. The biggest challenge was making everything feel simple and welcoming while handling user data carefully, especially since the platform deals with mental health. V1 is now ready, and we’re still fixing bugs and improving things. I’d love for you to explore the platform, test its features, and share any feedback or bugs you find. Still a lot to build, but excited about how far we’ve come!", "repo": "https://github.com/rudranshshuklaofficial/mindstate-public", "demo": "https://mindstate.space"}]...
|
[{"post_id": 82585, "ts": "202 [{"post_id": 82585, "ts": "2026-10-25T09:57:22Z", "hours": 2.2453, "text": "Pushed all the code on github!"}, {"post_id": 79611, "ts": "2026-10-14T18:19:05Z", "hours": 1.5869, "text": "Final bugs solving and UI refining is done! Shipping the project."}, {"post_id": 79483, "ts": "2026-10-14T07:50:31Z", "hours": 3.1431, "text": "Finally finished everything, soon gonna add the github repo and publish the platform without any bugs!"}, {"post_id": 78948, "ts": "2026-10-12T04:55:36Z", "hours": 3.5111, "text": "Made a wholesale amount of changes and fixes in the platform, though I cannot add all in here, I’ll keep y’all updated and will soon drop the github!"}, {"post_id": 78713, "ts": "2026-10-11T11:57:45Z", "hours": 18.2133, "text": "I’ve been working on MindState, a platform I’m helping build to support young people’s mental health and encourage civic engagement. Today I worked on the website, fixed some bugs, improved parts of the design, and set up email verification for user accounts. There’s still a lot to build, but it’s exciting to see everything slowly come together!"}]...
|
Title: MindState by @RudranshShukla | Stardance
D Title: MindState by @RudranshShukla | Stardance
Devlogs:
I’ve been working on MindState, a platform I’m helping build to support young people’s mental health and encourage civic engagement. Today I worked on the website, fixed some bugs, improved parts of the design, and set up email verification for user accounts. There’s still a lot to build, but it’s exciting to see everything slowly come together!
Made a wholesale amount of changes and fixes in the platform, though I cannot add all in here, I’ll keep y’all updated and will soon drop the github!
Finally finished everything, soon gonna add the github repo and publish the platform without any bugs!
Final bugs solving and UI refining is done! Shipping the project.
Pushed all the code on github!
Ships:
Built MindState, an open platform where young people can share their stories, express themselves, and feel heard. I worked on the UI/UX and development, building features like articles, journaling, mood tracking, community contributions, and more. The biggest challenge was making everything feel simple and welcoming while handling user data carefully, especially since the platform deals with mental health. V1 is now ready, and we’re still fixing bugs and improving things. I’d love for you to explore the platform, test its features, and share any feedback or bugs you find. Still a lot to build, but excited about how far we’ve come!...
|
1793051415.533997
|
1793137815.533997
|
|
61642
|
padderwadder by @rantles | Stardance
|
rantles
|
0
|
9.4
|
0
|
[]
|
[{"post_id": 82580, "ts": "202 [{"post_id": 82580, "ts": "2026-10-25T09:27:23Z", "hours": 0.4383, "text": "devlog 7 last minute addition of a rotary encoder, managed to do it fairly quick to my surprise"}, {"post_id": 78071, "ts": "2026-10-09T13:51:50Z", "hours": 1.2825, "text": "devlog 6 aye done with the firmware, originally did KMK but switched to QMK cause i struggled with the tap dance"}, {"post_id": 77008, "ts": "2026-10-05T10:49:49Z", "hours": 0.2725, "text": "devlog 5 just figured out how to add graphics! moved the pcb mesh around a bit because they were clipping through the plate, changed the frame around the oled as well bc i think it looks better"}, {"post_id": 75816, "ts": "2026-10-01T07:24:42Z", "hours": 1.1178, "text": "devlog 4 did some polishing, now on to the firmware!"}, {"post_id": 74845, "ts": "2026-09-28T12:47:47Z", "hours": 1.9817, "text": "devlog 3 decided to add an oled because it looked empty and got it almost attached woohoo not sure if its supposed to be that size though"}, {"post_id": 69614, "ts": "2026-09-17T12:49:53Z", "hours": 1.375, "text": "devlog #2 turns out i needed to modify my plate size, failed miserably for now but theres progress…"}, {"post_id": 67269, "ts": "2026-09-13T10:39:10Z", "hours": 2.9367, "text": "spent way too long on figuring out to make this exact shape but finally i got it after an hour 💀"}]...
|
Title: padderwadder by @rantles | Stardance
Devlo Title: padderwadder by @rantles | Stardance
Devlogs:
spent way too long on figuring out to make this exact shape but finally i got it after an hour 💀
devlog #2 turns out i needed to modify my plate size, failed miserably for now but theres progress…
devlog 3 decided to add an oled because it looked empty and got it almost attached woohoo not sure if its supposed to be that size though
devlog 4 did some polishing, now on to the firmware!
devlog 5 just figured out how to add graphics! moved the pcb mesh around a bit because they were clipping through the plate, changed the frame around the oled as well bc i think it looks better
devlog 6 aye done with the firmware, originally did KMK but switched to QMK cause i struggled with the tap dance
devlog 7 last minute addition of a rotary encoder, managed to do it fairly quick to my surprise...
|
1793040750.59319
|
1793645550.59319
|
|
7091
|
AI Mail Cleaner by @Rihaan_da_goat-0- | Stardance
|
Rihaan_da_goat-0-
|
0
|
7.69
|
0
|
[]
|
[{"post_id": 8258, "ts": "2026 [{"post_id": 8258, "ts": "2026-06-13T18:59:21Z", "hours": 2.4281, "text": "Sigh Update #3 I implemented all of the feature extraction part. The TF-IDF vectorization, the unsupervised kmeans, the labelling the custom folders. The problem is… it’s just not accurate. I’m not very sure what to do. At this point, I have a few options, I guess. Option #1: Hyperparameterize the vectorization. It could possible immensely boost my accuracy. Kmeans is already essentiallly hyperparametrized. But this is REALLY computationally expensive. Option #2: Just make API calls ot GPT or something. Lame. Boring. No. idk what to do."}, {"post_id": 4182, "ts": "2026-06-07T12:24:57Z", "hours": 2.7322, "text": "Update #2 I’m really stupid. I found this library called simplegmail which handles the oauth and the parsing for me, so far a particular message I can just call message.id or message.html to get content. I quit on classifier.ipynb and just started a new one, and I managed to get a dataframe for ALL the mails which is really exciting! next stage: convert the combined text feature into numerical data via tf-idf(Term Frequency-Inverse document Frequency) vectorization. Then, I need to implement unsupervised KNN and have the user label the clusters. image -> short snippet of the dataframe I generated, im so proud ^^"}, {"post_id": 3251, "ts": "2026-06-06T03:03:44Z", "hours": 2.5342, "text": "Update #1 So I got the google Oauth figured out, it was surprisingly easy considering I usually struggle with auth lol. The next thing I need to do is extract features from the user’s mailbox in order to train the model. I thought this would be easy. Key word, thought. The problem is, some mails contain content in HTML, some in plain text, and some are a mix. So each have a different method of parsing. There are 5 main types, which you can see in the notebook in the repo. I’m almost done with the first one(multipart/alternative) though only the plain text has been retrieved, I need to parse the html too. I got a doctor appointment today, and I have other courses to do, so I might not be able to grind. P.S this is a visualization of the all the information the gmail API returns for ONE mail. Please help me."}]...
|
Title: AI Mail Cleaner by @Rihaan_da_goat-0- | Sta Title: AI Mail Cleaner by @Rihaan_da_goat-0- | Stardance
Devlogs:
Update #1 So I got the google Oauth figured out, it was surprisingly easy considering I usually struggle with auth lol. The next thing I need to do is extract features from the user’s mailbox in order to train the model. I thought this would be easy. Key word, thought. The problem is, some mails contain content in HTML, some in plain text, and some are a mix. So each have a different method of parsing. There are 5 main types, which you can see in the notebook in the repo. I’m almost done with the first one(multipart/alternative) though only the plain text has been retrieved, I need to parse the html too. I got a doctor appointment today, and I have other courses to do, so I might not be able to grind. P.S this is a visualization of the all the information the gmail API returns for ONE mail. Please help me.
Update #2 I’m really stupid. I found this library called simplegmail which handles the oauth and the parsing for me, so far a particular message I can just call message.id or message.html to get content. I quit on classifier.ipynb and just started a new one, and I managed to get a dataframe for ALL the mails which is really exciting! next stage: convert the combined text feature into numerical data via tf-idf(Term Frequency-Inverse document Frequency) vectorization. Then, I need to implement unsupervised KNN and have the user label the clusters. image -> short snippet of the dataframe I generated, im so proud ^^
Sigh Update #3 I implemented all of the feature extraction part. The TF-IDF vectorization, the unsupervised kmeans, the labelling the custom folders. The problem is… it’s just not accurate. I’m not very sure what to do. At this point, I have a few options, I guess. Option #1: Hyperparameterize the vectorization. It could possible immensely boost my accuracy. Kmeans is already essentiallly hyperparametrized. But this is REALLY computationally expensive. Option #2: Just make API calls ot GPT or something. Lame. Boring. No. idk what to do....
|
1792511247.5780663
|
1793116047.5780663
|
|
63284
|
WaffleWare2 by @lima6 | Stardance
|
lima6
|
0
|
7.18
|
0
|
[]
|
[{"post_id": 82572, "ts": "202 [{"post_id": 82572, "ts": "2026-10-25T08:54:41Z", "hours": 1.5178, "text": "Minigame 6 Added minigame six, where the player has to quickly click space to fill the bar. If the bar is filled by the end of the timer, the radish is successfully pulled out and they succeed the minigame. The animation was a little tricky - I split the radish and claw into two separate animations."}, {"post_id": 75406, "ts": "2026-09-29T23:48:53Z", "hours": 1.3711, "text": "Mini game 5 Completed mini game 5, which is a timing mini game where the player has to “stop” the pizza slice at the right time"}, {"post_id": 72104, "ts": "2026-09-22T05:30:47Z", "hours": 0.3636, "text": "Bug fixes Fixed the bug where the in-between minigame timer shows a negative number after it times out."}, {"post_id": 71731, "ts": "2026-09-21T12:30:45Z", "hours": 1.445, "text": "New mini game Created a new mini game where the player has to dodge falling obstacles."}, {"post_id": 71660, "ts": "2026-09-21T08:12:25Z", "hours": 2.4853, "text": "Adjusted framework Adjusted the main Global and Timer scripts to better support more mini games."}]...
|
Title: WaffleWare2 by @lima6 | Stardance
Devlogs: Title: WaffleWare2 by @lima6 | Stardance
Devlogs:
Adjusted framework Adjusted the main Global and Timer scripts to better support more mini games.
New mini game Created a new mini game where the player has to dodge falling obstacles.
Bug fixes Fixed the bug where the in-between minigame timer shows a negative number after it times out.
Mini game 5 Completed mini game 5, which is a timing mini game where the player has to “stop” the pizza slice at the right time
Minigame 6 Added minigame six, where the player has to quickly click space to fill the bar. If the bar is filled by the end of the timer, the radish is successfully pulled out and they succeed the minigame. The animation was a little tricky - I split the radish and claw into two separate animations....
|
1793051299.4375453
|
1793656099.4375453
|
|
58198
|
Space Tab by @saatvik_270211 | Stardance
|
saatvik_270211
|
1
|
6.66
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T03:34:40Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "#Space Tab A new space inspired tab #Features Live clock -Google Search : allow you to search anything inside it. -Github and Nasa News -Stardance , GitHub , Google and Youtube icon. -Blurry background Hope you like and enjoy it :D", "repo": "https://github.com/Kingplayer-eng/jjk-evaluator", "demo": "https://kingplayer-eng.github.io/jjk-evaluator/"}]...
|
[{"post_id": 82566, "ts": "202 [{"post_id": 82566, "ts": "2026-10-25T08:12:57Z", "hours": 1.6608, "text": "Added a weather with city name . Changed the background image and fixed some bugs ."}, {"post_id": 81394, "ts": "2026-10-21T03:31:25Z", "hours": 0.7464, "text": "I updated the background and fixed some issues."}, {"post_id": 80349, "ts": "2026-10-17T10:58:58Z", "hours": 1.1706, "text": "Added this in intro but the major problem is it does not work with github it only works with edge . I even tried ai multiple time fixing it but it could be so i added if it doesnt play the main page will open."}, {"post_id": 80139, "ts": "2026-10-16T11:03:06Z", "hours": 0.8494, "text": "Ran into a issue i cant fetch nasa api now . I even tried using new api and in old project still its not working i guess due to recent nasa api changes."}, {"post_id": 79748, "ts": "2026-10-15T08:38:11Z", "hours": 1.7669, "text": "I have added direct link to github , nasa news and google search . Also added live clock . Will be adding nasa api key for background images."}]...
|
Title: Space Tab by @saatvik_270211 | Stardance
D Title: Space Tab by @saatvik_270211 | Stardance
Devlogs:
I have added direct link to github , nasa news and google search . Also added live clock . Will be adding nasa api key for background images.
Ran into a issue i cant fetch nasa api now . I even tried using new api and in old project still its not working i guess due to recent nasa api changes.
Added this in intro but the major problem is it does not work with github it only works with edge . I even tried ai multiple time fixing it but it could be so i added if it doesnt play the main page will open.
I updated the background and fixed some issues.
Added a weather with city name . Changed the background image and fixed some bugs .
Ships:
#Space Tab A new space inspired tab #Features Live clock -Google Search : allow you to search anything inside it. -Github and Nasa News -Stardance , GitHub , Google and Youtube icon. -Blurry background Hope you like and enjoy it :D...
|
1793051330.9511027
|
1793137730.9511027
|
|
70230
|
Collin's OS by @NotTacos | Stardance
|
NotTacos
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T08:12:10Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website os about myself as a student, the challenging part was making windows and styling, I overcame them by trials and errors and learning how I can fix more mistakes in the future. I’m proud of how good this project looks to me as someone who loves messing with operating systems and a beginner to frontend.", "repo": "https://github.com/NotTacos2/websiteos", "demo": "https://nottacos2.github.io/websiteos/"}]...
|
[{"post_id": 82564, "ts": "202 [{"post_id": 82564, "ts": "2026-10-25T08:07:50Z", "hours": 0.3981, "text": "I have added a weather app for my website os, it takes data from openweathermap’s json, then it tells it to the website the data, I also have finished window functionality and tweaked a bit of shut down function. Everything should be good now :)"}, {"post_id": 82554, "ts": "2026-10-25T07:10:03Z", "hours": 0.3436, "text": "I have added a new projects window to my os to showcase my projects. I also added a fail safe if the shutdown doesn’t close the window, a message will pop up"}, {"post_id": 82543, "ts": "2026-10-25T05:37:42Z", "hours": 1.8192, "text": "This is a website os that is about me, basically kinda like a portfolio website. The website also has a menu that you can browse pages with; it works very well. I plan to add more features and changes to the website"}]...
|
Title: Collin's OS by @NotTacos | Stardance
D Title: Collin's OS by @NotTacos | Stardance
Devlogs:
This is a website os that is about me, basically kinda like a portfolio website. The website also has a menu that you can browse pages with; it works very well. I plan to add more features and changes to the website
I have added a new projects window to my os to showcase my projects. I also added a fail safe if the shutdown doesn’t close the window, a message will pop up
I have added a weather app for my website os, it takes data from openweathermap’s json, then it tells it to the website the data, I also have finished window functionality and tweaked a bit of shut down function. Everything should be good now :)
Ships:
I made a website os about myself as a student, the challenging part was making windows and styling, I overcame them by trials and errors and learning how I can fix more mistakes in the future. I’m proud of how good this project looks to me as someone who loves messing with operating systems and a beginner to frontend....
|
1793051466.069986
|
1793137866.069986
|
|
14489
|
PandaOS by @panda | Stardance
|
panda
|
1
|
6.0
|
74
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T21:56:55Z", "hours": 6.0, "multiplier": 12.02, "payout": 74, "blessing": "neutral", "text": "I made my very own webOS from scratch, themed just like my portfolio and nvim config. Check it out !", "repo": "https://github.com/mail2adnanyazik-bit/pandaOS", "demo": "https://panda-os-five.vercel.app/"}]...
|
[{"post_id": 8256, "ts": "2026 [{"post_id": 8256, "ts": "2026-06-13T18:52:29Z", "hours": 0.4458, "text": "Fixed final minor bugs, pushed final version to GitHub, and used Vercel to deploy ! Im pretty much done now, and am pretty proud of the end result - check out the page here : https://panda-84hn8kync-mail2adnanyazik-bits-projects.vercel.app/ I would love to hear some feedback / get some bug reports - feel free to check it out and let me know what you think in the comments !"}, {"post_id": 7585, "ts": "2026-06-12T18:01:28Z", "hours": 0.6078, "text": "Fixed all bugs from last time, did all TODO’s also added polish, animations, etc. fixed some buggy features"}, {"post_id": 7035, "ts": "2026-06-11T19:55:56Z", "hours": 2.4794, "text": "Added content to apps, a spotlight app search, and other polish features such as right clicking desktop, a music player, etc Still TODO : sync the dock volume bar with the settings volume bar and remove vol bar from music app. make the buttons for notes look better - right now they are wierd and grey fix brightness slider - when adjusted it just turns screen and background white make calculator look better Make text in panda profile bigger, and make window in total bigger along with everything inside it add song status bar (how long it has been playing , a loading bar dude, like in spotify) above the play and pause and so buttons delete about from spotlight add more css to all apps"}, {"post_id": 6356, "ts": "2026-06-10T18:10:46Z", "hours": 2.64, "text": "Finished the Homepage and core logic for my WebOS What was done : Added background image Changed font to look a little more terminal-y finished core window dragging logic made a close button for the windows time and date display on bottom right fake (for now) volume slider placeholder “Apps” including projects placeholder, sysmon (fake system stats display), terminal (again placeholder) Core logic for which window is in foreground and which in back (drawing layers) TODO : replace placeholders with actual content (i can copy a bit from my portfolio website :P ) add a favorite music playing app (and subsequently make volume slider actually adjust volume) push to github decide on next features to add"}]...
|
Title: PandaOS by @panda | Stardance
Devlogs:
Fin Title: PandaOS by @panda | Stardance
Devlogs:
Finished the Homepage and core logic for my WebOS What was done : Added background image Changed font to look a little more terminal-y finished core window dragging logic made a close button for the windows time and date display on bottom right fake (for now) volume slider placeholder “Apps” including projects placeholder, sysmon (fake system stats display), terminal (again placeholder) Core logic for which window is in foreground and which in back (drawing layers) TODO : replace placeholders with actual content (i can copy a bit from my portfolio website :P ) add a favorite music playing app (and subsequently make volume slider actually adjust volume) push to github decide on next features to add
Added content to apps, a spotlight app search, and other polish features such as right clicking desktop, a music player, etc Still TODO : sync the dock volume bar with the settings volume bar and remove vol bar from music app. make the buttons for notes look better - right now they are wierd and grey fix brightness slider - when adjusted it just turns screen and background white make calculator look better Make text in panda profile bigger, and make window in total bigger along with everything inside it add song status bar (how long it has been playing , a loading bar dude, like in spotify) above the play and pause and so buttons delete about from spotlight add more css to all apps
Fixed all bugs from last time, did all TODO’s also added polish, animations, etc. fixed some buggy features
Fixed final minor bugs, pushed final version to GitHub, and used Vercel to deploy ! Im pretty much done now, and am pretty proud of the end result - check out the page here : https://panda-84hn8kync-mail2adnanyazik-bits-projects.vercel.app/ I would love to hear some feedback / get some bug reports - feel free to check it out and let me know what you think in the comments !
Ships:
I made my very own webOS from scratch, themed just like my portfolio and nvim config. Check it out !...
|
1792997463.6589756
|
1793083863.6589756
|
|
70535
|
FUGITIVE'S website by @FUGITIVE | Stardance
|
FUGITIVE
|
1
|
2.49
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-20T05:44:40Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "click if you want to see who am i- https://racer-x-blacklist.pages.dev/", "repo": "https://github.com/vidhantkiller15/my-site", "demo": "https://racer-x-blacklist.pages.dev/"}]...
|
[{"post_id": 82558, "ts": "202 [{"post_id": 82558, "ts": "2026-10-25T07:28:39Z", "hours": 0.4925, "text": "hold SHIFT and press X 5 times to see something… https://racer-x-blacklist.pages.dev"}, {"post_id": 81049, "ts": "2026-10-19T17:36:06Z", "hours": 2.2183, "text": "click if you want to see who am i- https://racer-x-blacklist.pages.dev/"}]...
|
Title: FUGITIVE'S website by @FUGITIVE | Stard Title: FUGITIVE'S website by @FUGITIVE | Stardance
Devlogs:
click if you want to see who am i- https://racer-x-blacklist.pages.dev/
hold SHIFT and press X 5 times to see something… https://racer-x-blacklist.pages.dev
Ships:
click if you want to see who am i- https://racer-x-blacklist.pages.dev/...
|
1793040490.4546344
|
1793126890.4546344
|
|
26398
|
200 MPH Drone RTOS by @Guagyyy | Stardance
|
Guagyyy
|
2
|
139.02
|
2267
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-22T00:49:05Z", "hours": 106.0, "multiplier": 19.18, "payout": 2024, "blessing": "neutral", "text": "200 MPH Drone RTOS: How it went Simulation to Silicon! When I published the first major update for this project at the 15-hour mark, I essentially had a proof-of-concept. I had managed to write a custom hybrid cooperative/preemptive scheduler and get an ARM Cortex-M7 (on the STM32f756VGTx) assembly context switcher functioning inside the Renode simulator. Although this looked like a massive leap, the project had barely started. Over 100 hours of development have gone into this project since then. The transition from a simulated kernel to a bare-metal flight controller capable of keeping a 200 MPH drone in the air required stripping the system down to its bare components, rewriting the memory architecture, and debugging some of the most frustrating hardware faults I have ever encountered-especially whenever the project just crashed, leaving me no traces as to what went wrong. Software Limitations The biggest turning point was realizing that software simulation can only take you so far. Renode is an amazing tool, but it hid a massive amount of race conditions and timing flaws that only exposed themselves when I finally flashed the code to physical STM32F756 Nucleo board. Sometimes, the MCU would have to reboot every 2 seconds. I spent dozens of hours tracking down massive architectural bugs. One of the worst was a context-switching fault where floating-point math was corrupting the return address in the CPU registers, causing the processor to execute raw garbage data. To fix this, I had to completely restructure the boot sequence and overhaul the memory management. I moved away from static arrays to a dynamic per-task stack allocation system, and implemented a dual-guard memory system. Arguably, this was the most important change as it allowed me to debug tasks way quicker as I instantly could know when the canary values were corrupted. Overhauling the Data Pipelines In order to avoid the 10ms delay of my original blocking pipline (for data transfer), I entirely rewrote the hardware data pipelines multiple times to use a semi-blocking, circular Direct Memory Access (DMA) architecture. Instead of the processor handling the data transfer, the hardware itself moves the bytes from the sensors directly into memory in the background. The DMA streams now trigger precise interrupts at the halfway and full-transfer points, allowing the RTOS to safely parse incoming radio packets and sensor reads without ever risking data overwrites or blocking the main flight loop. Building a Flight Controller I integrated Betaflight’s Actual Rates algorithm with custom expo curves, ensuring that physical stick inputs map perfectly to target velocities. I built a custom SPI driver to pull 24-bit raw pressure and temperature data from a BMP390 barometer, passing it through hypsometric formulas to calculate altitude. For video and telemetry, I moved away from raw UART strings and implemented native MSP DisplayPort communication (for true digital Walksnail Avatar connection). I also built an interactive USB command-line interface. Instead of having to recompile and re-flash the firmware every time a PID value needs to be adjusted, I can plug into the board, pull up a terminal, and manually tune gains, remap CRSF radio channels, or adjust IMU orientation offsets in real time. Final Version The last few weeks have been about refinement and consistency, removing race conditions and overall polishing the code. Now that the RTOS is fully functional, the only things to add are extra features, like a permanent + more expanded CLI, as well as finishing the external RM and linking the ESC drivers. As these are pretty insignificant, I have linked the source of this shipment to the Github project rather than a specific release so that I can update these during review!", "repo": "https://github.com/Guag914/200-MPH-Drone-RTOS/", "demo": "https://github.com/Guag914/200-MPH-Drone-RTOS#interactive--simulation-demo"}, {"ship_num": 2, "ts": "2026-07-15T04:02:12Z", "hours": 15.0, "multiplier": 16.44, "payout": 243, "blessing": "neutral", "text": "Phase 1 (The Custom RTOS Kernel) I am building a custom FPV drone from scratch with my friend in an attempt to achieve 200 mph . At those speeds, standard super loops are far too slow, as a single microsecond of lag means the drone travels feet before making a PID correction. To solve this, I built a custom, hybrid cooperative/preemptive Real-Time Operating System (RTOS) from scratch for the ARM Cortex-M7 (STM32F7)! What Was Challenging? The absolute hardest part of this phase was writing the low-level assembly context switcher ( PendSV_Handler.S ). Hacking the ARM Cortex-M7 registers to physically hot-swap stack pointers ( PSP ) mid-execution without crashing the CPU or corrupting the program state was a massive headache. I had to ensure that when an asynchronous preemption event fires, the assembly code perfectly preserves the execution registers ( R4-R11 plus the hardware-stacked registers), jumps to the high-priority task, and then seamlessly restores the background task right where it left off. Getting the compiler-enforced task overloading working so the kernel cleanly separates periodic tasks from raw interrupts was another huge hurdle, but it makes the whole codebase infinitely more robust. Want to Test It or Write Your Own Tasks? You don’t need physical hardware to watch this run! I’ve packaged the entire project with a Renode simulation script. You can run the interactive emulator with a single command to see the preemption scheduler hijack our counter task live, or you can jump into the user sandbox file and write your own custom tasks. Check out the GitHub Repository to Run the Demo! The README has a quick 5-minute setup guide to get you compiling and simulating your own code in no time.", "repo": "https://github.com/Guag914/200-MPH-Drone-RTOS/", "demo": "https://github.com/Guag914/200-MPH-Drone-RTOS#interactive--simulation-demo"}]...
|
[{"post_id": 82549, "ts": "202 [{"post_id": 82549, "ts": "2026-10-25T06:23:47Z", "hours": 9.7414, "text": "I spent the past week fixing timing issues on the hardware and getting the simulation environment back into a usable state. Although it isn’t 100% yet, I managed to fix a lot of underlying bugs causing the program to fail on actual hardware. Serial Communication and DMA The biggest issue was that manual USART transfers were completely blocking the system. Printing alone was taking around 95 percent of the total execution time. This was destroying the preempt speed and causing weird timing bugs across the board. I rewrote the USART printing logic to offload everything to a background circular DMA task instead. While I was working on the serial connections, I also fixed the UART mapping bugs and moved all logging over to UART4 so it stops fighting with the GPS module on USART3. I also went through stm32f7xx_it.c and fixed the rest of the extern “C” methods. They were previously commented out, which was silently causing their respective DMA HALs to fail. Moving them to the correct user code sections fixed the issue entirely. Simulation Environment and Tooling On the software side, the simulation startup in the HAL was broken and preventing the virtual boards from properly configuring and running. I fixed the initialization sequence so the simulations actually boot correctly now. To make starting the environment even easier for new users, I updated both the run.sh and run.bat scripts with installers that automatically download Renode. This skips the manual installation step completely and gets the simulation running much faster."}, {"post_id": 78931, "ts": "2026-10-12T02:34:08Z", "hours": 8.2783, "text": "Although I haven’t been able to make much progress on the project due to school over the past weeks I did manage to make some substantial project mostly with the scheduler, allowing for fairly good performance on my STM Nucleo boards, rather than it just crashing instantly. 1. Issues with the Old Design The flight controller’s RTOS scheduler wasn’t working under real hardware timing because global variables like currTaskIndex, topOfStack, and excReturn were being modified from multiple entry points simultaneously. Yield calls, interrupt handlers, and the main task-selection logic were all making independent writes to the same shared task control blocks. Whenever a hardware interrupt fired mid-write, stack pointers and exception return values were saved into the wrong taskControlBlocks slot. This created edge cases where preempted tasks were silently double-queued, state tracking completely desynchronized, and time-critical hardware events were dropped during flight. 2. Centralizing Context Switches in PendSV To eliminate these race conditions, all state-selection decisions were moved out of individual execution contexts and consolidated into decideNextTask(), which now runs exclusively inside the PendSV assembly handler. Functions like yieldCurrentTask(), decideNextInterruptTask(), and decideNextScheduledTask() no longer touch global scheduler state or choose which task runs next; they simply update local status flags like TaskState::BLOCKED or TaskState::READY inside brief __disable_irq() critical sections and trigger PendSV using SCB_ICSR_PENDSVSET_Msk. When PendSV fires, decideNextTask() saves outgoingSP and outgoingExcReturn to the active block, sets RUNNING tasks to READY, and runs a two-pass check over taskControlBlocks[]—evaluating high-priority TaskType::INTERRUPT tasks first, then TaskType::SCHEDULED tasks, and falling back to index 0 for idle. Since PendSV is the only place allowed to modify currTaskIndex, concurrent state corruption is structurally impossible."}, {"post_id": 71997, "ts": "2026-09-21T23:26:43Z", "hours": 7.2761, "text": "For the past couple weeks I have been mostly refining small bugs, which were originally rendering the RTOS usless, as well as refactoring the code for simplicity rather than elegancy. 1. Transition to Actual Hardware Renode is great for simulation, but it ended up hiding a bunch of race conditions in the population methods and the main scheduler that led to no code actually running during the IRQ handler calls. I spent a lot of time securing those resources and finally got the scheduler mostly finished up. Also, I decided to just take out the double preempts entirely since they were adding way too much complexity for absolutely zero speed benefits in practice (plus they were creating detrimental but rare race conditions). 2. Code Refactor To make things run a bit more consistent, I restructured how the control loops operate. I ended up merging the dShotGeneration task with the parent IMU control loop, so now everything from reading the sensors to pushing motor commands happens in one clean sequence (rather than including an unnecessary preempt). I also built out a brand new CRSF control loop to handle all the radio parsing and state machine updates in its own dedicated space (just for consistency). Lastly, while doing a final pass on the code, I realized that in my dShotGeneration helper, I had forgot to scale the values by a factor of 1/2000, as the inputs require the value to be between 0 and 1 (not 0 and 2000). 3. Final DMA Iteration The biggest relief was finally getting rid of the old blocking USART system. I finally transitioned away from manually handling the streaming by polling flags in a loop, which was tying up the processor way more than it should have. Everything has been converted over to a blocking DMA system, so the hardware can just handle all the memory transfers in the background while the CPU focuses on actually keeping the drone in the air. Overall, I think that this will be the final iteration of the RTOS DMA pipeline, as now that it is solid and works with all the edge cases, theres no need to change it. 4. Timeline With almost all the major bugs fixed, I am going to ship the project! While it is not 100% done, it will likely be as close as it will get during the timeframe of the Stardance hackathon, and with it so close, theres no reason not to ship. Anyway, I will keep the source as the main project rather than a release, so if I do end up fixing any major bugs, they will get patched either before or during project review (besides most of these bugs are only detectable on actual hardware). I will most likely finish the RTOS in the next couple weeks (by the end of October), and will finish the drivers for the ESC and RM by latest end of November (for more timing refer to the README). Thanks to everyone who supported me throughout this project (hopefully me and my friend can get this drone flying in another Hack Club Hackathon!)."}, {"post_id": 63202, "ts": "2026-09-06T21:25:57Z", "hours": 9.6606, "text": "1. Scheduler Hardening and Task Discovery Spent part of this session making the RTOS scheduler itself more robust. I added a findTaskByName() function so interrupt-driven task lookups happen dynamically instead of relying on hardcoded task indices, which was a fragile setup just waiting to break the moment task registration order changed. Alongside that, I wrapped every one of those lookups with lambdas that throw a proper warning if a task can’t be found, so a missing task fails loudly instead of silently dereferencing a null pointer somewhere downstream. 2. Blocking vs Non-Blocking Scheduled Tasks After a lot of painful debugging, I traced a string of issues (including interrupt tasks silently failing to fire and scheduled tasks stepping on each other) back to non-blocking statements I’d introduced inside scheduled tasks in the previous devlog. I ended up taking those out and reverting scheduled tasks fully back to blocking, which is genuinely what the scheduled zone was designed for in the first place: tasks that don’t need to run in polynomial time and can safely block without putting the drone at risk of crashing. Once that was sorted, I converted the raw USART byte-pushing into a blocking DMA system instead, so streaming is handled by DMA hardware rather than manually pushed byte-by-byte over USART. 3. Flight Loop Refactor and VTX Communication On the flight logic side, I refactored flightLoop() to use lambdas and a state machine so I would never have to yield in the middle of my tasks (which was used previousely for zeroing motor outputs). I also converted the error handling into a proper state machine, so different types of warnings can be caught and handled distinctly instead of lumping every issue into one path, and turned on full debug printing whenever the system is running. Last but not least, I built out a dedicated injector for respondToVTX so I can properly test and simulate VTX communication going forward. 4. Real Hardware Testing Since, I am almost 100% done with the RTOS I bought two NUCLEO-F756ZG’s which will serve as testing the 100% production code rather than the simulation version. I bought two so that one of the boards will be running the real RTOS code, testing DMA reading from USART, SPI, and emitting real motor signals, while the second will be emulating all of my peripherals. When the boards come, if the code does work, it will also mean that the real PCB’s will also work when my friend finishes with them. 5. Next Steps As of now there are a few issues with the double preempt system (for the interrupt tasks) I designed a while back, so I will need to debug that before they arrive. Right now before the boards arrive, I will be finishing up the RTOS blocking DMA pipelines (stripping out IRQ, removing NVIC etc. for scheduled tasks), and performing a bunch of baseline testing in order to prove that the RTOS is capable of flying an actual drone!"}, {"post_id": 52761, "ts": "2026-08-23T03:11:04Z", "hours": 9.6356, "text": "1. CLI Upgrades and Channel Mapping Over the past 5 days, I knocked out some major quality-of-life upgrades for the flight controller. I added customizable channel mapping for CRSF directly through the CLI. By utilizing a combination of references and pointers, I was able to point a volatile alias to certain channel mappings, allowing for completely customizable CRSF channels. While I was in the CLI logic, I also added the ability to configure custom IMU orientations around the z-axis, making it way easier to mount the board in different directions without having to recompile the firmware. 2. DMA Pipeline Fixes and Baro Optimization A big chunk of this session went into debugging and refactoring the hardware data pipelines. I adjusted the ADC population pipeline in order to fix some stream parsing issues, and gave the barometer a massive overhaul. The baro now uses a non-blocking, non-circular DMA setup that relies on a semi-interrupt-driven task call rather than a continuous loop. This enabled me to yield in the middle of the function, and call back later as soon as DMA is finished transferring. I also fixed a massive bug in the DMA setup: the DMA_SxCR_HTIE and DMA_SxCR_TCIE flags were accidentally enabled for the GPS and OSD ring buffers, which would have crashed the whole RTOS by firing unhandled interrupts, causing default HAL and IRQ handlers to run. 3. Walksnail Two-Way Communication Finally, I built out the respondToVTX task to get the drone properly communicating with the Walksnail VTX. Instead of just blindly sending video data out, this sets up true two-way communication over asynchronous UART. By writing a persistent byte-by-byte state machine, the flight controller can now safely parse incoming requests from the VTX without dropping half-packets, allowing me to send back live stick positions and armed status for the OSD menus. The only thing left to do now is handle persistent CLI storage, the logToBlackBox task, integrating the semi-interrupt pipeline with telemetryTX and the OSD, and a few other system tweaks. After that the RTOS will be 100% ready to fly the actual drone."}, {"post_id": 49360, "ts": "2026-08-18T04:16:35Z", "hours": 4.0211, "text": "Complete RTOS Overhaul, Circular DMA Pipelines, and CPU Abort Fixes This update focuses on fine-tuning the RTOS, organizing the scheduler, and rewriting microcontroller memory handling. Renode’s simulated DMA restrictions make software-only pipeline testing nearly impossible, so I plan to buy a physical dev board and Raspberry Pi to validate on silicon. While the Git diff might not look massive, the architecture has evolved from a blocking system to a true preemptive RTOS with precise polynomial timing. 1. Reworking DMA Flow & Standardizing Ring Buffers Sensor and receiver data pipelines are now driven by circular DMA, enabling non-blocking, high-frequency transfers with response times as fast as 0.3 ms (without printToUSART enabled). Everything now relies on ring buffers. Instead of generating complete packets instantly, mock injectors stream bytes directly into the buffers while updating the simulated NDTR register to mirror hardware behavior. if ( byteIdx >= frameLen ) { byteIdx = 0 ; } crsfRingBuffer [ head ] = frameBuf [ byteIdx ++ ]; head = ( head + 1 ) % CRSF_RING_BUFFER_SIZE ; currentBoardConfig . crsf_dma_stream -> NDTR = CRSF_RING_BUFFER_SIZE - head ; Feeding bytes incrementally moves the write head gradually, ensuring the simulation mimics a physical UART and allowing population functions to safely pull data within interrupt locks. 2. DMA Interrupts for Safe Parsing To prevent data overwrites, DMA streams trigger interrupts at the halfway (HTIE) and full-transfer (TCIE) points to queue tasks. Because registers like LISR are read-only in hardware, I implemented a software mock flag system (mock_LISR) for simulation: extern \"C\" void DMA1_Stream0_IRQHandler ( void ) { #ifdef SIMULATION uint32_t flags = mock_LISR ; mock_LISR = 0 ; #else uint32_t flags = DMA1 -> LISR ; #endif if ( flags & DMA_LISR_HTIF0 ) { DMA1 -> LIFCR = DMA_LIFCR_CHTIF0 ; decideNextInterruptTask ( & taskControlBlocks [ 1 ]); } } Functions safely extract data with interrupts disabled, ensuring the CPU never blocks waiting for peripheral transfers. 3. Assembly Bugs & CPU Aborts Debugging nested hardware interrupts exposed massive faults: The context-switching bug: FPU usage or large stack frames corrupted the return address, causing the CPU to execute BX LR with garbage data. Fixed in PendSV_Handler.S by explicitly storing excReturn inside the TaskControlBlock rather than relying on stacked registers. Second, a 0x00000000 Null Return Crash: Scheduled tasks attempted to return natively, popping 0x00000000 from the zero-initialized Link Register and causing a fetch fault. Every task now runs inside an infinite while(true) loop calling yieldCurrentTask() . 4. Clock PLLs & Hardware Re-routing After configuring the STM32CubeMX PLL for a 25 MHz HSE clock, the MCU runs at its full 216 MHz. I added a standardized initSystemGPIOClocks() function to enable peripheral clocks consistently. I also moved motor 3 from TIM1 to TIM4, synchronizing it with the 216MHz clock and freeing up a TIM1 DMA stream exclusively for the upcoming BlackBox logging. Future Updates With the core RTOS stabilized, development shifts to flight-facing systems: hooking the SPI pipeline to the video overlay for live OSD goggle telemetry, adding permanent flash storage for PID tunes/configs, exposing MCU controls via CLI, supporting programmable transmitter bind buttons, building a desktop GUI, and using the freed TIM1 DMA for BlackBox logging. Below, I have attached a screenshot of every single task working, and outputting values in the simulation, something that wasn’t possible for the interrupt tasks until now."}, {"post_id": 48647, "ts": "2026-08-17T03:57:01Z", "hours": 9.6761, "text": "1. Reworking the DMA Flow for Speed So, a lot has been going on lately, starting with a massive rework of the entire DMA flow. The functions are now entirely populated by circular DMA, which is a huge upgrade for the system’s overall performance. This architectural change allows for completely non-blocking, high-frequency calls, hitting response times as fast as 0.03 milliseconds. It basically means the whole data pipeline is significantly faster, and much more responsive than it was in previous versions. 2. Standardizing Ring Buffers and Mock Injectors To make everything more reliable, the DMA now follows a very specific and predictable pattern for both scheduled and interrupt tasks. Everything relies on ring buffers now, whether they are being injected by actual hardware (or simulated) DMA or by my custom simulation scripts. I also reworked the mock injectors so they no longer just return a pre-formatted packet. Instead, they write directly into the ring buffer, which lets me test the exact same parsing pipeline in software, simulating the hardware flow almost exactly like Renode (if only they would ever fix that USART DMA bug…). 3. Assembly BX LR Bug + STMCubeMX Clock PLL I also finally solved the long term BX LR return bug that I literally spent over 20 hours trying to find. Whenever tasks used the FPU or had slightly larger stacks, the return address in the r0 register would just get completely corrupted by the extra data. I fixed this by storing the return address in a dedicated uint value instead of blindly trusting the registers to hold it. That fix alone allowed me to safely re-add telemetryTX and make a bunch of other function logic much more robust. On top of that, I went into STM32CubeMX and reworked the clock PLL manually (it took over 3 hours to solve by hand). By feeding in a 25 MHz HSE clock, I managed to unlock the MCU’s internal clocks to run at their full 216 MHz.I also took some time to clean up the codebase to improve overall readability and commenting. 4. DMA Interrupts for Safe Parsing Another feature is that DMA now triggers interrupts when the ring buffers hit exactly halfway and when they are fully populated. This gives me the time to parse all the incoming values safely without having the risk about data getting overwritten by the next DMA pass before I am done reading it. I set up the IRQ handlers in the code to call the interrupt methods automatically, which ensures the CPU stays completely unblocked and free to handle other flight control tasks almost all the time (overall decreasing headroom). 5. Current Status: NVIC Bug Sadly, the code is actually not functional right now because the NVIC and IRQ pipeline is malfunctioning and just refusing to call the interrupts for reasons I cannot figure out yet. Because of this, I am holding off on pushing the code until I can track down the bug, give everything a final polish, and run some benchmark testing (since I don’t want to commit broken code). Also, sorry for promising a commit a day or two after my last devlog. I got super busy, especially with vacation, but I will try my best to get this sorted. Depending on how long it takes to figure out this NVIC issue, the next commit might drop anywhere from tomorrow to a few weeks from now."}, {"post_id": 41654, "ts": "2026-08-06T00:44:12Z", "hours": 9.5336, "text": "This week was heavily focused on the fine tuning and organization of the RTOS. I spent numerous hours of research and untangling environment setups. I originally tried to build out a complete framework for the drone code without relying on any simulation code, but Renode’s restrictions, specifically with its ability to perform DMA requests, quickly made it clear that path was impossible. To fix this I’m looking into picking up a dev board and a Raspberry Pi so I can test and debug everything on an actual MCU before finally moving the codebase over to the drone. Even though the git won’t look a whole lot different and not a lot of actual code changed, getting these configs finalized (especially in STM32CubeMX) in was a huge step forward for the project. I expect to commit the next version of the code either today or tomorrow, with improvements specifically in TelemetryTX, BlackBoxLogging, and a few other minor changes!"}, {"post_id": 37983, "ts": "2026-07-31T02:30:16Z", "hours": 8.6756, "text": "Major Architecture Upgrade : OSD, Betaflight Rates & Build System Refactor 1. OSD, DMA + SYS First off on the hardware side, I added native MSP-based OSD support for Walksnail video transmitters, built the SPI barometer driver for altitude tracking, and spun up a low-level health task that constantly monitors MPU registers and stack usage in the background. On top of that, I finally fixed the DMA stream conflicts (mainly in STMCubeMX) between TIM1 DShot motor outputs , ADC1, and SPI peripherals, so everything runs without collisions now. 2. SYS Health + Debugging I also implemented a few other low level tasks, allowing me to monitor system health, based upon ram usage and storage used. This task prints out the amount at which each tasks stack is being used, allowing me to effectively debug whether a task was actually overflowing, vs an unrestricted read/write. Furthermore, the original canary values that I used, were completely replaced as they in fact were causing some of the “stack overflow” bugs (via unrestricted reads/write every 1 ms in SysTick_Handler ). 3. Betaflight Rates + CLI Update For flight feel, I implemented Betaflight’s Actual Rates algorithm with custom expo curves, so stick inputs map to target angular velocities with center-stick precision. I also completely separated serial communications by moving the interactive CLI to USART1 (accessible via nc -C localhost 1234 in terminal) and pushing system logs to USART3. Additionally, I removed the old telemetryTX task because its unauthorized reads/writes were completely breaking the RTOS scheduler, and expanded the CLI with a ton of commands for live sensor readings and more PID tuning. Speaking of which, I am planning to create a persistent file in /bin/ , allowing for rates to be stored between runs, rather than being reset each during runtime, and having to be manually configured through the CLI. 4. Overhauled Building Workflow Finally, I overhauled the whole developer workflow and build automation setup. The build.sh and build.bat scripts now auto-configure custom CMake profiles and generate a full disassembly file in /bin/ after every build for fast low-level debugging, while run.sh and run.bat automatically launch the right terminal windows on launch. 5. Future Additions: I’m planning to build a closed-loop Renode simulation matrix to stream hardware data into every peripheral externally, letting me run 100% real production code during SIL testing! For this, I will utilize the currently blank simulate.py as well as certain commands in simulate.resc to create properly formatted dynamic buffers(which are not directly injected into the code), allowing me to properly test the DMA drivers, and many of the memory management helpers."}, {"post_id": 35605, "ts": "2026-07-27T04:22:30Z", "hours": 9.44, "text": "Over the last few days, I wrapped up two major tasks for the flight controller’s core sensor and telemetry stack: the on-screen display (OSD) renderer and the BMP390 barometer subsystem. The OSD engine is now fully hooked up to the state system, giving real-time visual downlinks for critical metrics like flight battery voltage, active flight modes, and height statistics over UART. To keep the execution completely non-blocking, all frame updates are dispatched asynchronously, preventing rendering delays from hindering the performance of the high-frequency control loops. On the barometer side, I implemented altitude tracking using Bosch’s BMP390 sensor over SPI with non-blocking DMA burst transfers. In the 50Hz task loop, incoming 24-bit raw pressure and temperature bytes are assembled and passed through the hypsometric formula to calculate smooth, relative height above ground level (AGL). Although the barometer task is a bit flawed due to floating point register stack errors with the header and end canary values, they don’t seem to be affecting the system in anyway (nor is any data being corrupted). I will find a way to fix these issues before the next commit, as well as the race condition in the interrupt tasks in the next Github commit. After that, it is just system polish and extensive testing before the RTOS will be complete!"}, {"post_id": 33865, "ts": "2026-07-24T04:03:21Z", "hours": 7.1808, "text": "1. Fixing the Stack Overflows at Boot After an entire 25-hour debugging period across 4 days, the RTOS kernel is finally done (for the scheduled tasks). I tracked down a silent bug where several critical scheduled tasks—like powerManagement , lowLevelFailSafe , and telemetryTX —were crashing the MCU on boot. The issue came down to a boot-time dependency lock: tasks were trying to poll hardware registers (like UART TX flags) and read shared drone state variables before the peripherals or producer tasks had time to initialize on Tick 0. By adding an initial yieldCurrentTask() right at the top of these methods, Task Phase Alignment was officially added. This gives the hardware a full cycle to stabilize, preventing buffer overflows and eliminating the cascading task state corruptions that were locking up the scheduler. 2. Custom Stack Sizing & Real-Time Guard Checks Alongside the scheduler fix, I pushed major upgrades to memory safety and task management. Instead of assigning a static stack array to every task, I transitioned to dynamic per-task stack allocations during initialization ( new (std::nothrow) ). Heavy string-parsing and math tasks get larger stacks, while simple toggle tasks stay lightweight. To catch memory issues before they corrupt the heap, I implemented a custom dual guarding system: 0xDEADBEEF is appended at the bottom of the stack to catch standard stack overflows, while a new 0xBEEFCAFE canary value is written to the very top index ( stackSizeWords ) to instantly flag memory breaches in the SysTick_Handler . Furthermore, I refactored powerManagement to use ADC2 in Circular DMA Mode, writing battery telemetry directly to RAM in the background for zero CPU overhead. 3. Transitioning to Walksnail Avatar HD Looking ahead, my and my friend are officially transitioning our existing analog video setup over to a fully integrated Walksnail Avatar HD digital ecosystem. Rather than keeping my custom telemetry task ( telemetryTX ) with heavy string formatting over raw UART, Walksnail allows me to stream standard MSP (MultiWii Serial Protocol) DisplayPort frames straight to the VTX. The Walksnail system will serve as our primary onboard logging source, giving us full OSD telemetry, high-framerate HD video, and precise blackbox data logging. With the RTOS core now stable and non-blocking, our next focus shifts toward “premium” flight controller features, e.g. including custom RC stick expo curves, an expanded USB CLI, and an integrated simulator interface."}, {"post_id": 32665, "ts": "2026-07-21T23:24:15Z", "hours": 9.0794, "text": "I just finished expanding the RTOS architecture, filling out all of the scheduled background tasks to handle real-time flight telemetry, peripheral hardware, and terminal configuration. On the telemetry side, I built out telemetryTX to package battery, status, and GPS data into standard CRSF frames over UART, alongside an NMEA gpsParser that decodes $GNGGA and $GNRMC sentences for live location fixes. I also made powerManagement into its own standalone task so ADC voltage and current metrics can feed into the failsafe logic and telemetry concurrently. To make bench testing and tuning significantly easier, I added usbCLI over USART1, giving me a full interactive shell to tweak PID gains (Kp, Ki, Kd), dump raw IMU data, and inspect hardware states on the fly without needing to reflash firmware. To keep the physical quad safe and responsive during flight, I added updatePeripherals for LED status patterns and buzzer warnings, along with a dedicated Independent Watchdog (IWDG) task running as a low-priority fail-safe to trigger hardware MCU resets if the scheduler ever freezes. On the project structure side, CMake now routes all output binaries straight into a clean ./bin/ directory so nobody has to compile the source manually just to run the .elf target in Renode. I also introduced a -DENABLE_DEBUG flag, allowing me to cleanly toggle between complete USART log prints across every loop or a blank terminal environment meant purely for the CLI shell. While all the background subsystems and scheduled task priorities are fully mapped out, I’m currently figuring out a few lingering RTOS bugs—specifically around stack allocation, causing stack overflow flags on certain scheduled tasks, along with scheduling starvation where context switching isn’t releasing task blocks properly. Because I want to ensure the scheduler kernel is 100% complete before pushing broken stack frames to the main branch, the GitHub repository will be updated with the complete, bug-fixed code later today. Everything is moving in the right direction, and getting these background tasks finalized brings me one step closer to full flight hardware deployment!"}, {"post_id": 31067, "ts": "2026-07-19T04:58:26Z", "hours": 2.5139, "text": "I’ve spent the last 20 hours of coding basically staring at bare-metal memory allocations and tracking down why the drone’s context switcher was triggering CPU drops under the Renode simulation environment. Moving away from manual Python injection scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify the testing layout, but instead, it exposed structural design flaws in how the scheduler kernel boots up. Running a multi-sample sensorCalibration() routine at cold boot was forcing hidden task yields before the OS kernel was fully mapped out, which was throwing unmapped register address errors and wiping out index-0 entries. To solve this, I decoupled the entire state machine sequence so that hardware allocations, peripheral registers, and core tracking counters now clear before any operational loops drop into the registry. I also added a critical rtosStarted gatekeeper flag to yieldCurrentTask() so calibration math runs cleanly in sequence without triggering early PendSV handler switches. On top of that, the task stack pointers are completely realigned. The assembly context swapper now maps a precise 32-word boundary allocation utilizing 0xFFFFFFFD as a basic exception return code, which completely eliminates the data corruption that was misaligning our Process Stack Pointer. With the fundamental kernel stabilized, I shifted entirely into clean architecture organization. The massive, cluttered code blocks have been split up into independent tracking files (BufferPopulation.cpp, Tasks.cpp, and SimInjector.cpp). High-speed SPI reads for the IMU, UART ring buffers for decoding CRSF radio channel frames, battery ADC sampling, and DShot600 motor output mixers are now fully broken out and functional. There is still a nagging preemption lockout issue inside the simulator where a single interrupt task attempts to starve out the other concurrent loops during a millisecond window, but the baseline operating system is locked in, meaning I can confidently verify the PID flight mixing tables and safety code blocks safely before the code ever touches a physical quadcopter. If you would like to run your own tasks, I also added support in the .bat and .sh files to build code for the simulation (flag=sim), user task code (flag=user), and actual drone upload code (no flags). Example MacOS Commands: ./build.sh sim ./build.sh user ./build.sh This makes it so that I don’t have to constantly modify code to run either the user tasks or simulation code, instead using a flag. Overall, this RTOS is not done yet, however, I plan to add the rest of the scheduled tasks later today, and fixing the sole bug keeping this simulation back! I expect a full ship to be comming out in the next week or so, along with all ESC, RM, and TM code complete!"}, {"post_id": 30963, "ts": "2026-07-18T23:42:07Z", "hours": 9.2461, "text": "I’ve been doing a lot of debugging for the RTOS scheduler inside the simulation environment, and it’s been very difficult for me to identify many bugs in teh core architecture of my tasks. Moving away from Python scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify things, but instead, it exposed some nasty architectural bugs in how tasks and context switching interact. There has also been a massive priority inversion and preemption lockup where the CRSF parsing loop completely starves out the lower-priority threads. Also, running a raw sensor calibration loop at boot was forcing thread switches before the OS kernel was even fully initialized, completely corrupting task indexes, throwing null pointer warnings, and leaving half of my PID calculations at zero. Still working on many fixes, but it has been a lot of work (9 hours), but I hope to get the full RTOS with at least bare minimum flight tasks out by tomorrow! The GitHub repo still won’t be fully up-to-date until these structural bugs are figured out, but I plan to push the corrected scheduler files and mock drivers very soon. The screenshot below shows an image of the CRSF task completely dominating, without any processes interrupting it."}, {"post_id": 30245, "ts": "2026-07-17T17:45:35Z", "hours": 9.5911, "text": "I just wrapped up the core architecture of the drone’s flight controller, including mapping out all 7 interrupt methods into a far more optimized RTOS scheduler. The updated version makes use of a FIFO stack, to keep track of nested interrupts. I also protected the main code from data corruption during pendSV switches by enabling and disabling irq in certain areas of vulnerable code. Other small changes to the assembly to save floating point registers as well as better memory allocation was also done in this update. From high-speed IMU sensor integration and state estimation calculations to CRSF packet decoding and DShot motor generation, the essential tasks are fully written and compiled. I’ve officially shifted gears into the testing phase, working on simulated environments to debug DMA transfers, registers, and the flight state machine’s arming sequences. As of now, I am writing python scripts by hand, in order to inject “dummy” values into the GPIO, SPI, and USART registers in order to populate the buffers, and simulate the calculations. As the code is becoming longer and longer, I will try to refactor a lot of the files into smaller more organized portions, to increase readability (often I have a hard time traversing everything). Note: The current code pushed to GitHub isn’t quite the latest since I’m in the middle of troubleshooting a few simulation-specific register bugs, but I wanted to get this update out to meet the 10-hour devlog requirement on Stardance. Everything is moving in the right direction, and having a virtual environment all working means I can safely verify the PID mixer and safety flags before this code ever touches a physical quad. This officially marks the end of both phases 2 and 3, and now its a matter of finishing extra scheduled telemetry tasks (e.g. OSD and EdgeTX logging), but I estimate that the flight controller portion of the code (around 60% of all logic in the drone) will be done between now and Sunday, July 19th! I will also post a much more in depth devlog about how the methods work, as well as an updated README.md on Github ASAP."}, {"post_id": 28703, "ts": "2026-07-15T03:44:43Z", "hours": 1.4603, "text": "To make my hybrid RTOS accessible and easy to test, I designed a modular sandbox task registry system that isolates the core kernel from custom user code. Developers can write standard non-returning tasks in an isolated file ( User_Tasks/user_tasks.cpp ), while the kernel exposes a registration hook that allocates a dedicated 1024-word stack space. This decoupling means anyone can plug in their own cooperative or preemptive tasks, set execution periods or trigger bounds, and run them instantly on our virtual STM32F7 without risking memory corruption or touching the underlying context-switching assembly. For more information on how to make your own tasks refer to the README.md ."}, {"post_id": 28651, "ts": "2026-07-15T01:05:47Z", "hours": 1.0922, "text": "I just updated a few build files and restructured the project, so code and simulation separation would be better. I also added a few executable files (build.sh, run.bat, and run.sh) to easily compile and run the project."}, {"post_id": 28615, "ts": "2026-07-14T23:38:20Z", "hours": 5.5942, "text": "I finally reached a massive milestone with the kernel architecture and got the scheduler firing exactly how it needs to. Even though I thought the RTOS portion was completely wrapped up a bit ago, now it is officially done. I ended up doing a massive revamp on how scheduled tasks execute, routing them through PendSV so that the background worker states get completely backed up and saved by my assembly code just like the preemptive ones. I also cleaned up the initialization API by throwing in an overloaded function to separate timed loops from raw hardware events (the interrupt tasks). Overall most of the testing logic is now gone, and now the system is being more and more focused on the actual drone tasks. On the hardware side of things, I built out the actual drone tasks and the underlying SPI and UART DMA drivers that populate my local data packets. Even though they are not in use right now as all the tasks (which are not fully completed) require the support of each other for full testing. With the core OS completely checked off, the focus is shifting entirely over to the actual flight control logic. Over the next couple of days, I’m going to wrap up the final flight controller tasks, and get the core stabilization algorithms running. Once the flight controller application layer is fully put together, I’m moving straight onto building out complete simulations for the receiver, transmitter, and finally the ESC modules to get the whole drone network interacting together!"}, {"post_id": 27365, "ts": "2026-07-12T21:17:48Z", "hours": 3.8289, "text": "I finally finished the most difficult part of the project so far and got a hybrid cooperative/preemptive scheduler running from scratch. After a ton of debugging with the assembly memory layout, the core RTOS kernel shell is officially stable, verified inside the Renode simulator, and completely ready to handle flight data. The architecture divides the CPU’s brain into two execution pathways to maximize calculation speeds while keeping latency near zero. Standard background tasks, like handling low-priority peripheral updates, run sequentially inside a cooperative loop based on their relative priority. They execute and then drop out without wasting an overhead time. But for high-priority hardware event such as a critical radio packet arriving over UART or raw sensor data from the IMU, the system completely bypasses the standard queue. It pulls a physical hardware lever (PendSV) that forces an instant stack swap. When an interrupt task fires through PendSV, the CPU pauses the background scheduled loop, and my assembly code packs up the core registers, saves that exact memory address to RAM, and hot-swaps the Process Stack Pointer to launch the interrupt task. Right now, there is just a dummy delay loop inside the interrupt task to visually show the execution break in the console logs. Once it finishes printing, it hits a yield function that throws the assembly switch backward, pops the background registers, and hands control straight back to the flight loop. The repository currenly has a lot of diagnostic test code because I needed to prove the pointer indirection and stack-faking logic worked without blowing up the memory alignment. Now that the plumbing is completely verified, the next step is to strip out the test code and start writing the actual flight infrastructure. I am moving straight into coding the PID control loops, signal mixers, Kalman filters, and live motor generation."}, {"post_id": 26996, "ts": "2026-07-12T03:54:25Z", "hours": 2.8228, "text": "I finally added minimum task scheduling for the RTOS. I had originally designed a simple kernel to create a buffer of scheduled tasks in QEMU, but after learning that the simulation didn’t actually support the specific MCU that my friend and I are using for the real drone, I had to pivot. I switched over to using STM32CubeMX for the actual bare-metal configuration and Renode to handle running the emulation. Right now, the kernel just executes a task based on a basic timing loop and priority, waits for it to completely finish, and then moves on to the next task. To be honest, it isn’t super useful yet because it only covers tasks in what I call the “scheduled zone” of the drone. This includes background stuff like blackbox flight data management, but it leaves out the most critical parts like the PID control loops and streaming real-time UART data from the IMU. Those features need to fire their own asynchronous interrupt signals at the highest possible hardware priority so they can instantly pause the optional background tasks and execute the critical code that actually keeps the drone stable and flying. Next up, I need to write a short piece of assembly to handle saving the current CPU state and registers of whatever task is currently running when an interrupt hits. It shouldn’t be too bad since it will only take about 30 lines of code. I know I haven’t been posting devlogs for the past couple of weeks even though I’ve been grinding on this, but that’s mostly because we spent a ton of time initially planning out the architecture of the drone. We wanted to map out the software boundaries early so my friend and I could go our separate ways working on different systems without having massive merge conflicts later on."}]...
|
Title: 200 MPH Drone RTOS by @Guagyyy | Stardance
Title: 200 MPH Drone RTOS by @Guagyyy | Stardance
Devlogs:
I finally added minimum task scheduling for the RTOS. I had originally designed a simple kernel to create a buffer of scheduled tasks in QEMU, but after learning that the simulation didn’t actually support the specific MCU that my friend and I are using for the real drone, I had to pivot. I switched over to using STM32CubeMX for the actual bare-metal configuration and Renode to handle running the emulation. Right now, the kernel just executes a task based on a basic timing loop and priority, waits for it to completely finish, and then moves on to the next task. To be honest, it isn’t super useful yet because it only covers tasks in what I call the “scheduled zone” of the drone. This includes background stuff like blackbox flight data management, but it leaves out the most critical parts like the PID control loops and streaming real-time UART data from the IMU. Those features need to fire their own asynchronous interrupt signals at the highest possible hardware priority so they can instantly pause the optional background tasks and execute the critical code that actually keeps the drone stable and flying. Next up, I need to write a short piece of assembly to handle saving the current CPU state and registers of whatever task is currently running when an interrupt hits. It shouldn’t be too bad since it will only take about 30 lines of code. I know I haven’t been posting devlogs for the past couple of weeks even though I’ve been grinding on this, but that’s mostly because we spent a ton of time initially planning out the architecture of the drone. We wanted to map out the software boundaries early so my friend and I could go our separate ways working on different systems without having massive merge conflicts later on.
I finally finished the most difficult part of the project so far and got a hybrid cooperative/preemptive scheduler running from scratch. After a ton of debugging with the assembly memory layout, the core RTOS kernel shell is officially stable, verified inside the Renode simulator, and completely ready to handle flight data. The architecture divides the CPU’s brain into two execution pathways to maximize calculation speeds while keeping latency near zero. Standard background tasks, like handling low-priority peripheral updates, run sequentially inside a cooperative loop based on their relative priority. They execute and then drop out without wasting an overhead time. But for high-priority hardware event such as a critical radio packet arriving over UART or raw sensor data from the IMU, the system completely bypasses the standard queue. It pulls a physical hardware lever (PendSV) that forces an instant stack swap. When an interrupt task fires through PendSV, the CPU pauses the background scheduled loop, and my assembly code packs up the core registers, saves that exact memory address to RAM, and hot-swaps the Process Stack Pointer to launch the interrupt task. Right now, there is just a dummy delay loop inside the interrupt task to visually show the execution break in the console logs. Once it finishes printing, it hits a yield function that throws the assembly switch backward, pops the background registers, and hands control straight back to the flight loop. The repository currenly has a lot of diagnostic test code because I needed to prove the pointer indirection and stack-faking logic worked without blowing up the memory alignment. Now that the plumbing is completely verified, the next step is to strip out the test code and start writing the actual flight infrastructure. I am moving straight into coding the PID control loops, signal mixers, Kalman filters, and live motor generation.
I finally reached a massive milestone with the kernel architecture and got the scheduler firing exactly how it needs to. Even though I thought the RTOS portion was completely wrapped up a bit ago, now it is officially done. I ended up doing a massive revamp on how scheduled tasks execute, routing them through PendSV so that the background worker states get completely backed up and saved by my assembly code just like the preemptive ones. I also cleaned up the initialization API by throwing in an overloaded function to separate timed loops from raw hardware events (the interrupt tasks). Overall most of the testing logic is now gone, and now the system is being more and more focused on the actual drone tasks. On the hardware side of things, I built out the actual drone tasks and the underlying SPI and UART DMA drivers that populate my local data packets. Even though they are not in use right now as all the tasks (which are not fully completed) require the support of each other for full testing. With the core OS completely checked off, the focus is shifting entirely over to the actual flight control logic. Over the next couple of days, I’m going to wrap up the final flight controller tasks, and get the core stabilization algorithms running. Once the flight controller application layer is fully put together, I’m moving straight onto building out complete simulations for the receiver, transmitter, and finally the ESC modules to get the whole drone network interacting together!
I just updated a few build files and restructured the project, so code and simulation separation would be better. I also added a few executable files (build.sh, run.bat, and run.sh) to easily compile and run the project.
To make my hybrid RTOS accessible and easy to test, I designed a modular sandbox task registry system that isolates the core kernel from custom user code. Developers can write standard non-returning tasks in an isolated file ( User_Tasks/user_tasks.cpp ), while the kernel exposes a registration hook that allocates a dedicated 1024-word stack space. This decoupling means anyone can plug in their own cooperative or preemptive tasks, set execution periods or trigger bounds, and run them instantly on our virtual STM32F7 without risking memory corruption or touching the underlying context-switching assembly. For more information on how to make your own tasks refer to the README.md .
I just wrapped up the core architecture of the drone’s flight controller, including mapping out all 7 interrupt methods into a far more optimized RTOS scheduler. The updated version makes use of a FIFO stack, to keep track of nested interrupts. I also protected the main code from data corruption during pendSV switches by enabling and disabling irq in certain areas of vulnerable code. Other small changes to the assembly to save floating point registers as well as better memory allocation was also done in this update. From high-speed IMU sensor integration and state estimation calculations to CRSF packet decoding and DShot motor generation, the essential tasks are fully written and compiled. I’ve officially shifted gears into the testing phase, working on simulated environments to debug DMA transfers, registers, and the flight state machine’s arming sequences. As of now, I am writing python scripts by hand, in order to inject “dummy” values into the GPIO, SPI, and USART registers in order to populate the buffers, and simulate the calculations. As the code is becoming longer and longer, I will try to refactor a lot of the files into smaller more organized portions, to increase readability (often I have a hard time traversing everything). Note: The current code pushed to GitHub isn’t quite the latest since I’m in the middle of troubleshooting a few simulation-specific register bugs, but I wanted to get this update out to meet the 10-hour devlog requirement on Stardance. Everything is moving in the right direction, and having a virtual environment all working means I can safely verify the PID mixer and safety flags before this code ever touches a physical quad. This officially marks the end of both phases 2 and 3, and now its a matter of finishing extra scheduled telemetry tasks (e.g. OSD and EdgeTX logging), but I estimate that the flight controller portion of the code (around 60% of all logic in the drone) will be done between now and Sunday, July 19th! I will also post a much more in depth devlog about how the methods work, as well as an updated README.md on Github ASAP.
I’ve been doing a lot of debugging for the RTOS scheduler inside the simulation environment, and it’s been very difficult for me to identify many bugs in teh core architecture of my tasks. Moving away from Python scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify things, but instead, it exposed some nasty architectural bugs in how tasks and context switching interact. There has also been a massive priority inversion and preemption lockup where the CRSF parsing loop completely starves out the lower-priority threads. Also, running a raw sensor calibration loop at boot was forcing thread switches before the OS kernel was even fully initialized, completely corrupting task indexes, throwing null pointer warnings, and leaving half of my PID calculations at zero. Still working on many fixes, but it has been a lot of work (9 hours), but I hope to get the full RTOS with at least bare minimum flight tasks out by tomorrow! The GitHub repo still won’t be fully up-to-date until these structural bugs are figured out, but I plan to push the corrected scheduler files and mock drivers very soon. The screenshot below shows an image of the CRSF task completely dominating, without any processes interrupting it.
I’ve spent the last 20 hours of coding basically staring at bare-metal memory allocations and tracking down why the drone’s context switcher was triggering CPU drops under the Renode simulation environment. Moving away from manual Python injection scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify the testing layout, but instead, it exposed structural design flaws in how the scheduler kernel boots up. Running a multi-sample sensorCalibration() routine at cold boot was forcing hidden task yields before the OS kernel was fully mapped out, which was throwing unmapped register address errors and wiping out index-0 entries. To solve this, I decoupled the entire state machine sequence so that hardware allocations, peripheral registers, and core tracking counters now clear before any operational loops drop into the registry. I also added a critical rtosStarted gatekeeper flag to yieldCurrentTask() so calibration math runs cleanly in sequence without triggering early PendSV handler switches. On top of that, the task stack pointers are completely realigned. The assembly context swapper now maps a precise 32-word boundary allocation utilizing 0xFFFFFFFD as a basic exception return code, which completely eliminates the data corruption that was misaligning our Process Stack Pointer. With the fundamental kernel stabilized, I shifted entirely into clean architecture organization. The massive, cluttered code blocks have been split up into independent tracking files (BufferPopulation.cpp, Tasks.cpp, and SimInjector.cpp). High-speed SPI reads for the IMU, UART ring buffers for decoding CRSF radio channel frames, battery ADC sampling, and DShot600 motor output mixers are now fully broken out and functional. There is still a nagging preemption lockout issue inside the simulator where a single interrupt task attempts to starve out the other concurrent loops during a millisecond window, but the baseline operating system is locked in, meaning I can confidently verify the PID flight mixing tables and safety code blocks safely before the code ever touches a physical quadcopter. If you would like to run your own tasks, I also added support in the .bat and .sh files to build code for the simulation (flag=sim), user task code (flag=user), and actual drone upload code (no flags). Example MacOS Commands: ./build.sh sim ./build.sh user ./build.sh This makes it so that I don’t have to constantly modify code to run either the user tasks or simulation code, instead using a flag. Overall, this RTOS is not done yet, however, I plan to add the rest of the scheduled tasks later today, and fixing the sole bug keeping this simulation back! I expect a full ship to be comming out in the next week or so, along with all ESC, RM, and TM code complete!
I just finished expanding the RTOS architecture, filling out all of the scheduled background tasks to handle real-time flight telemetry, peripheral hardware, and terminal configuration. On the telemetry side, I built out telemetryTX to package battery, status, and GPS data into standard CRSF frames over UART, alongside an NMEA gpsParser that decodes $GNGGA and $GNRMC sentences for live location fixes. I also made powerManagement into its own standalone task so ADC voltage and current metrics can feed into the failsafe logic and telemetry concurrently. To make bench testing and tuning significantly easier, I added usbCLI over USART1, giving me a full interactive shell to tweak PID gains (Kp, Ki, Kd), dump raw IMU data, and inspect hardware states on the fly without needing to reflash firmware. To keep the physical quad safe and responsive during flight, I added updatePeripherals for LED status patterns and buzzer warnings, along with a dedicated Independent Watchdog (IWDG) task running as a low-priority fail-safe to trigger hardware MCU resets if the scheduler ever freezes. On the project structure side, CMake now routes all output binaries straight into a clean ./bin/ directory so nobody has to compile the source manually just to run the .elf target in Renode. I also introduced a -DENABLE_DEBUG flag, allowing me to cleanly toggle between complete USART log prints across every loop or a blank terminal environment meant purely for the CLI shell. While all the background subsystems and scheduled task priorities are fully mapped out, I’m currently figuring out a few lingering RTOS bugs—specifically around stack allocation, causing stack overflow flags on certain scheduled tasks, along with scheduling starvation where context switching isn’t releasing task blocks properly. Because I want to ensure the scheduler kernel is 100% complete before pushing broken stack frames to the main branch, the GitHub repository will be updated with the complete, bug-fixed code later today. Everything is moving in the right direction, and getting these background tasks finalized brings me one step closer to full flight hardware deployment!
1. Fixing the Stack Overflows at Boot After an entire 25-hour debugging period across 4 days, the RTOS kernel is finally done (for the scheduled tasks). I tracked down a silent bug where several critical scheduled tasks—like powerManagement , lowLevelFailSafe , and telemetryTX —were crashing the MCU on boot. The issue came down to a boot-time dependency lock: tasks were trying to poll hardware registers (like UART TX flags) and read shared drone state variables before the peripherals or producer tasks had time to initialize on Tick 0. By adding an initial yieldCurrentTask() right at the top of these methods, Task Phase Alignment was officially added. This gives the hardware a full cycle to stabilize, preventing buffer overflows and eliminating the cascading task state corruptions that were locking up the scheduler. 2. Custom Stack Sizing & Real-Time Guard Checks Alongside the scheduler fix, I pushed major upgrades to memory safety and task management. Instead of assigning a static stack array to every task, I transitioned to dynamic per-task stack allocations during initialization ( new (std::nothrow) ). Heavy string-parsing and math tasks get larger stacks, while simple toggle tasks stay lightweight. To catch memory issues before they corrupt the heap, I implemented a custom dual guarding system: 0xDEADBEEF is appended at the bottom of the stack to catch standard stack overflows, while a new 0xBEEFCAFE canary value is written to the very top index ( stackSizeWords ) to instantly flag memory breaches in the SysTick_Handler . Furthermore, I refactored powerManagement to use ADC2 in Circular DMA Mode, writing battery telemetry directly to RAM in the background for zero CPU overhead. 3. Transitioning to Walksnail Avatar HD Looking ahead, my and my friend are officially transitioning our existing analog video setup over to a fully integrated Walksnail Avatar HD digital ecosystem. Rather than keeping my custom telemetry task ( telemetryTX ) with heavy string formatting over raw UART, Walksnail allows me to stream standard MSP (MultiWii Serial Protocol) DisplayPort frames straight to the VTX. The Walksnail system will serve as our primary onboard logging source, giving us full OSD telemetry, high-framerate HD video, and precise blackbox data logging. With the RTOS core now stable and non-blocking, our next focus shifts toward “premium” flight controller features, e.g. including custom RC stick expo curves, an expanded USB CLI, and an integrated simulator interface.
Over the last few days, I wrapped up two major tasks for the flight controller’s core sensor and telemetry stack: the on-screen display (OSD) renderer and the BMP390 barometer subsystem. The OSD engine is now fully hooked up to the state system, giving real-time visual downlinks for critical metrics like flight battery voltage, active flight modes, and height statistics over UART. To keep the execution completely non-blocking, all frame updates are dispatched asynchronously, preventing rendering delays from hindering the performance of the high-frequency control loops. On the barometer side, I implemented altitude tracking using Bosch’s BMP390 sensor over SPI with non-blocking DMA burst transfers. In the 50Hz task loop, incoming 24-bit raw pressure and temperature bytes are assembled and passed through the hypsometric formula to calculate smooth, relative height above ground level (AGL). Although the barometer task is a bit flawed due to floating point register stack errors with the header and end canary values, they don’t seem to be affecting the system in anyway (nor is any data being corrupted). I will find a way to fix these issues before the next commit, as well as the race condition in the interrupt tasks in the next Github commit. After that, it is just system polish and extensive testing before the RTOS will be complete!
Major Architecture Upgrade : OSD, Betaflight Rates & Build System Refactor 1. OSD, DMA + SYS First off on the hardware side, I added native MSP-based OSD support for Walksnail video transmitters, built the SPI barometer driver for altitude tracking, and spun up a low-level health task that constantly monitors MPU registers and stack usage in the background. On top of that, I finally fixed the DMA stream conflicts (mainly in STMCubeMX) between TIM1 DShot motor outputs , ADC1, and SPI peripherals, so everything runs without collisions now. 2. SYS Health + Debugging I also implemented a few other low level tasks, allowing me to monitor system health, based upon ram usage and storage used. This task prints out the amount at which each tasks stack is being used, allowing me to effectively debug whether a task was actually overflowing, vs an unrestricted read/write. Furthermore, the original canary values that I used, were completely replaced as they in fact were causing some of the “stack overflow” bugs (via unrestricted reads/write every 1 ms in SysTick_Handler ). 3. Betaflight Rates + CLI Update For flight feel, I implemented Betaflight’s Actual Rates algorithm with custom expo curves, so stick inputs map to target angular velocities with center-stick precision. I also completely separated serial communications by moving the interactive CLI to USART1 (accessible via nc -C localhost 1234 in terminal) and pushing system logs to USART3. Additionally, I removed the old telemetryTX task because its unauthorized reads/writes were completely breaking the RTOS scheduler, and expanded the CLI with a ton of commands for live sensor readings and more PID tuning. Speaking of which, I am planning to create a persistent file in /bin/ , allowing for rates to be stored between runs, rather than being reset each during runtime, and having to be manually configured through the CLI. 4. Overhauled Building Workflow Finally, I overhauled the whole developer workflow and build automation setup. The build.sh and build.bat scripts now auto-configure custom CMake profiles and generate a full disassembly file in /bin/ after every build for fast low-level debugging, while run.sh and run.bat automatically launch the right terminal windows on launch. 5. Future Additions: I’m planning to build a closed-loop Renode simulation matrix to stream hardware data into every peripheral externally, letting me run 100% real production code during SIL testing! For this, I will utilize the currently blank simulate.py as well as certain commands in simulate.resc to create properly formatted dynamic buffers(which are not directly injected into the code), allowing me to properly test the DMA drivers, and many of the memory management helpers.
This week was heavily focused on the fine tuning and organization of the RTOS. I spent numerous hours of research and untangling environment setups. I originally tried to build out a complete framework for the drone code without relying on any simulation code, but Renode’s restrictions, specifically with its ability to perform DMA requests, quickly made it clear that path was impossible. To fix this I’m looking into picking up a dev board and a Raspberry Pi so I can test and debug everything on an actual MCU before finally moving the codebase over to the drone. Even though the git won’t look a whole lot different and not a lot of actual code changed, getting these configs finalized (especially in STM32CubeMX) in was a huge step forward for the project. I expect to commit the next version of the code either today or tomorrow, with improvements specifically in TelemetryTX, BlackBoxLogging, and a few other minor changes!
1. Reworking the DMA Flow for Speed So, a lot has been going on lately, starting with a massive rework of the entire DMA flow. The functions are now entirely populated by circular DMA, which is a huge upgrade for the system’s overall performance. This architectural change allows for completely non-blocking, high-frequency calls, hitting response times as fast as 0.03 milliseconds. It basically means the whole data pipeline is significantly faster, and much more responsive than it was in previous versions. 2. Standardizing Ring Buffers and Mock Injectors To make everything more reliable, the DMA now follows a very specific and predictable pattern for both scheduled and interrupt tasks. Everything relies on ring buffers now, whether they are being injected by actual hardware (or simulated) DMA or by my custom simulation scripts. I also reworked the mock injectors so they no longer just return a pre-formatted packet. Instead, they write directly into the ring buffer, which lets me test the exact same parsing pipeline in software, simulating the hardware flow almost exactly like Renode (if only they would ever fix that USART DMA bug…). 3. Assembly BX LR Bug + STMCubeMX Clock PLL I also finally solved the long term BX LR return bug that I literally spent over 20 hours trying to find. Whenever tasks used the FPU or had slightly larger stacks, the return address in the r0 register would just get completely corrupted by the extra data. I fixed this by storing the return address in a dedicated uint value instead of blindly trusting the registers to hold it. That fix alone allowed me to safely re-add telemetryTX and make a bunch of other function logic much more robust. On top of that, I went into STM32CubeMX and reworked the clock PLL manually (it took over 3 hours to solve by hand). By feeding in a 25 MHz HSE clock, I managed to unlock the MCU’s internal clocks to run at their full 216 MHz.I also took some time to clean up the codebase to improve overall readability and commenting. 4. DMA Interrupts for Safe Parsing Another feature is that DMA now triggers interrupts when the ring buffers hit exactly halfway and when they are fully populated. This gives me the time to parse all the incoming values safely without having the risk about data getting overwritten by the next DMA pass before I am done reading it. I set up the IRQ handlers in the code to call the interrupt methods automatically, which ensures the CPU stays completely unblocked and free to handle other flight control tasks almost all the time (overall decreasing headroom). 5. Current Status: NVIC Bug Sadly, the code is actually not functional right now because the NVIC and IRQ pipeline is malfunctioning and just refusing to call the interrupts for reasons I cannot figure out yet. Because of this, I am holding off on pushing the code until I can track down the bug, give everything a final polish, and run some benchmark testing (since I don’t want to commit broken code). Also, sorry for promising a commit a day or two after my last devlog. I got super busy, especially with vacation, but I will try my best to get this sorted. Depending on how long it takes to figure out this NVIC issue, the next commit might drop anywhere from tomorrow to a few weeks from now.
Complete RTOS Overhaul, Circular DMA Pipelines, and CPU Abort Fixes This update focuses on fine-tuning the RTOS, organizing the scheduler, and rewriting microcontroller memory handling. Renode’s simulated DMA restrictions make software-only pipeline testing nearly impossible, so I plan to buy a physical dev board and Raspberry Pi to validate on silicon. While the Git diff might not look massive, the architecture has evolved from a blocking system to a true preemptive RTOS with precise polynomial timing. 1. Reworking DMA Flow & Standardizing Ring Buffers Sensor and receiver data pipelines are now driven by circular DMA, enabling non-blocking, high-frequency transfers with response times as fast as 0.3 ms (without printToUSART enabled). Everything now relies on ring buffers. Instead of generating complete packets instantly, mock injectors stream bytes directly into the buffers while updating the simulated NDTR register to mirror hardware behavior. if ( byteIdx >= frameLen ) { byteIdx = 0 ; } crsfRingBuffer [ head ] = frameBuf [ byteIdx ++ ]; head = ( head + 1 ) % CRSF_RING_BUFFER_SIZE ; currentBoardConfig . crsf_dma_stream -> NDTR = CRSF_RING_BUFFER_SIZE - head ; Feeding bytes incrementally moves the write head gradually, ensuring the simulation mimics a physical UART and allowing population functions to safely pull data within interrupt locks. 2. DMA Interrupts for Safe Parsing To prevent data overwrites, DMA streams trigger interrupts at the halfway (HTIE) and full-transfer (TCIE) points to queue tasks. Because registers like LISR are read-only in hardware, I implemented a software mock flag system (mock_LISR) for simulation: extern "C" void DMA1_Stream0_IRQHandler ( void ) { #ifdef SIMULATION uint32_t flags = mock_LISR ; mock_LISR = 0 ; #else uint32_t flags = DMA1 -> LISR ; #endif if ( flags & DMA_LISR_HTIF0 ) { DMA1 -> LIFCR = DMA_LIFCR_CHTIF0 ; decideNextInterruptTask ( & taskControlBlocks [ 1 ]); } } Functions safely extract data with interrupts disabled, ensuring the CPU never blocks waiting for peripheral transfers. 3. Assembly Bugs & CPU Aborts Debugging nested hardware interrupts exposed massive faults: The context-switching bug: FPU usage or large stack frames corrupted the return address, causing the CPU to execute BX LR with garbage data. Fixed in PendSV_Handler.S by explicitly storing excReturn inside the TaskControlBlock rather than relying on stacked registers. Second, a 0x00000000 Null Return Crash: Scheduled tasks attempted to return natively, popping 0x00000000 from the zero-initialized Link Register and causing a fetch fault. Every task now runs inside an infinite while(true) loop calling yieldCurrentTask() . 4. Clock PLLs & Hardware Re-routing After configuring the STM32CubeMX PLL for a 25 MHz HSE clock, the MCU runs at its full 216 MHz. I added a standardized initSystemGPIOClocks() function to enable peripheral clocks consistently. I also moved motor 3 from TIM1 to TIM4, synchronizing it with the 216MHz clock and freeing up a TIM1 DMA stream exclusively for the upcoming BlackBox logging. Future Updates With the core RTOS stabilized, development shifts to flight-facing systems: hooking the SPI pipeline to the video overlay for live OSD goggle telemetry, adding permanent flash storage for PID tunes/configs, exposing MCU controls via CLI, supporting programmable transmitter bind buttons, building a desktop GUI, and using the freed TIM1 DMA for BlackBox logging. Below, I have attached a screenshot of every single task working, and outputting values in the simulation, something that wasn’t possible for the interrupt tasks until now.
1. CLI Upgrades and Channel Mapping Over the past 5 days, I knocked out some major quality-of-life upgrades for the flight controller. I added customizable channel mapping for CRSF directly through the CLI. By utilizing a combination of references and pointers, I was able to point a volatile alias to certain channel mappings, allowing for completely customizable CRSF channels. While I was in the CLI logic, I also added the ability to configure custom IMU orientations around the z-axis, making it way easier to mount the board in different directions without having to recompile the firmware. 2. DMA Pipeline Fixes and Baro Optimization A big chunk of this session went into debugging and refactoring the hardware data pipelines. I adjusted the ADC population pipeline in order to fix some stream parsing issues, and gave the barometer a massive overhaul. The baro now uses a non-blocking, non-circular DMA setup that relies on a semi-interrupt-driven task call rather than a continuous loop. This enabled me to yield in the middle of the function, and call back later as soon as DMA is finished transferring. I also fixed a massive bug in the DMA setup: the DMA_SxCR_HTIE and DMA_SxCR_TCIE flags were accidentally enabled for the GPS and OSD ring buffers, which would have crashed the whole RTOS by firing unhandled interrupts, causing default HAL and IRQ handlers to run. 3. Walksnail Two-Way Communication Finally, I built out the respondToVTX task to get the drone properly communicating with the Walksnail VTX. Instead of just blindly sending video data out, this sets up true two-way communication over asynchronous UART. By writing a persistent byte-by-byte state machine, the flight controller can now safely parse incoming requests from the VTX without dropping half-packets, allowing me to send back live stick positions and armed status for the OSD menus. The only thing left to do now is handle persistent CLI storage, the logToBlackBox task, integrating the semi-interrupt pipeline with telemetryTX and the OSD, and a few other system tweaks. After that the RTOS will be 100% ready to fly the actual drone.
1. Scheduler Hardening and Task Discovery Spent part of this session making the RTOS scheduler itself more robust. I added a findTaskByName() function so interrupt-driven task lookups happen dynamically instead of relying on hardcoded task indices, which was a fragile setup just waiting to break the moment task registration order changed. Alongside that, I wrapped every one of those lookups with lambdas that throw a proper warning if a task can’t be found, so a missing task fails loudly instead of silently dereferencing a null pointer somewhere downstream. 2. Blocking vs Non-Blocking Scheduled Tasks After a lot of painful debugging, I traced a string of issues (including interrupt tasks silently failing to fire and scheduled tasks stepping on each other) back to non-blocking statements I’d introduced inside scheduled tasks in the previous devlog. I ended up taking those out and reverting scheduled tasks fully back to blocking, which is genuinely what the scheduled zone was designed for in the first place: tasks that don’t need to run in polynomial time and can safely block without putting the drone at risk of crashing. Once that was sorted, I converted the raw USART byte-pushing into a blocking DMA system instead, so streaming is handled by DMA hardware rather than manually pushed byte-by-byte over USART. 3. Flight Loop Refactor and VTX Communication On the flight logic side, I refactored flightLoop() to use lambdas and a state machine so I would never have to yield in the middle of my tasks (which was used previousely for zeroing motor outputs). I also converted the error handling into a proper state machine, so different types of warnings can be caught and handled distinctly instead of lumping every issue into one path, and turned on full debug printing whenever the system is running. Last but not least, I built out a dedicated injector for respondToVTX so I can properly test and simulate VTX communication going forward. 4. Real Hardware Testing Since, I am almost 100% done with the RTOS I bought two NUCLEO-F756ZG’s which will serve as testing the 100% production code rather than the simulation version. I bought two so that one of the boards will be running the real RTOS code, testing DMA reading from USART, SPI, and emitting real motor signals, while the second will be emulating all of my peripherals. When the boards come, if the code does work, it will also mean that the real PCB’s will also work when my friend finishes with them. 5. Next Steps As of now there are a few issues with the double preempt system (for the interrupt tasks) I designed a while back, so I will need to debug that before they arrive. Right now before the boards arrive, I will be finishing up the RTOS blocking DMA pipelines (stripping out IRQ, removing NVIC etc. for scheduled tasks), and performing a bunch of baseline testing in order to prove that the RTOS is capable of flying an actual drone!
For the past couple weeks I have been mostly refining small bugs, which were originally rendering the RTOS usless, as well as refactoring the code for simplicity rather than elegancy. 1. Transition to Actual Hardware Renode is great for simulation, but it ended up hiding a bunch of race conditions in the population methods and the main scheduler that led to no code actually running during the IRQ handler calls. I spent a lot of time securing those resources and finally got the scheduler mostly finished up. Also, I decided to just take out the double preempts entirely since they were adding way too much complexity for absolutely zero speed benefits in practice (plus they were creating detrimental but rare race conditions). 2. Code Refactor To make things run a bit more consistent, I restructured how the control loops operate. I ended up merging the dShotGeneration task with the parent IMU control loop, so now everything from reading the sensors to pushing motor commands happens in one clean sequence (rather than including an unnecessary preempt). I also built out a brand new CRSF control loop to handle all the radio parsing and state machine updates in its own dedicated space (just for consistency). Lastly, while doing a final pass on the code, I realized that in my dShotGeneration helper, I had forgot to scale the values by a factor of 1/2000, as the inputs require the value to be between 0 and 1 (not 0 and 2000). 3. Final DMA Iteration The biggest relief was finally getting rid of the old blocking USART system. I finally transitioned away from manually handling the streaming by polling flags in a loop, which was tying up the processor way more than it should have. Everything has been converted over to a blocking DMA system, so the hardware can just handle all the memory transfers in the background while the CPU focuses on actually keeping the drone in the air. Overall, I think that this will be the final iteration of the RTOS DMA pipeline, as now that it is solid and works with all the edge cases, theres no need to change it. 4. Timeline With almost all the major bugs fixed, I am going to ship the project! While it is not 100% done, it will likely be as close as it will get during the timeframe of the Stardance hackathon, and with it so close, theres no reason not to ship. Anyway, I will keep the source as the main project rather than a release, so if I do end up fixing any major bugs, they will get patched either before or during project review (besides most of these bugs are only detectable on actual hardware). I will most likely finish the RTOS in the next couple weeks (by the end of October), and will finish the drivers for the ESC and RM by latest end of November (for more timing refer to the README). Thanks to everyone who supported me throughout this project (hopefully me and my friend can get this drone flying in another Hack Club Hackathon!).
Although I haven’t been able to make much progress on the project due to school over the past weeks I did manage to make some substantial project mostly with the scheduler, allowing for fairly good performance on my STM Nucleo boards, rather than it just crashing instantly. 1. Issues with the Old Design The flight controller’s RTOS scheduler wasn’t working under real hardware timing because global variables like currTaskIndex, topOfStack, and excReturn were being modified from multiple entry points simultaneously. Yield calls, interrupt handlers, and the main task-selection logic were all making independent writes to the same shared task control blocks. Whenever a hardware interrupt fired mid-write, stack pointers and exception return values were saved into the wrong taskControlBlocks slot. This created edge cases where preempted tasks were silently double-queued, state tracking completely desynchronized, and time-critical hardware events were dropped during flight. 2. Centralizing Context Switches in PendSV To eliminate these race conditions, all state-selection decisions were moved out of individual execution contexts and consolidated into decideNextTask(), which now runs exclusively inside the PendSV assembly handler. Functions like yieldCurrentTask(), decideNextInterruptTask(), and decideNextScheduledTask() no longer touch global scheduler state or choose which task runs next; they simply update local status flags like TaskState::BLOCKED or TaskState::READY inside brief __disable_irq() critical sections and trigger PendSV using SCB_ICSR_PENDSVSET_Msk. When PendSV fires, decideNextTask() saves outgoingSP and outgoingExcReturn to the active block, sets RUNNING tasks to READY, and runs a two-pass check over taskControlBlocks[]—evaluating high-priority TaskType::INTERRUPT tasks first, then TaskType::SCHEDULED tasks, and falling back to index 0 for idle. Since PendSV is the only place allowed to modify currTaskIndex, concurrent state corruption is structurally impossible.
I spent the past week fixing timing issues on the hardware and getting the simulation environment back into a usable state. Although it isn’t 100% yet, I managed to fix a lot of underlying bugs causing the program to fail on actual hardware. Serial Communication and DMA The biggest issue was that manual USART transfers were completely blocking the system. Printing alone was taking around 95 percent of the total execution time. This was destroying the preempt speed and causing weird timing bugs across the board. I rewrote the USART printing logic to offload everything to a background circular DMA task instead. While I was working on the serial connections, I also fixed the UART mapping bugs and moved all logging over to UART4 so it stops fighting with the GPS module on USART3. I also went through stm32f7xx_it.c and fixed the rest of the extern “C” methods. They were previously commented out, which was silently causing their respective DMA HALs to fail. Moving them to the correct user code sections fixed the issue entirely. Simulation Environment and Tooling On the software side, the simulation startup in the HAL was broken and preventing the virtual boards from properly configuring and running. I fixed the initialization sequence so the simulations actually boot correctly now. To make starting the environment even easier for new users, I updated both the run.sh and run.bat scripts with installers that automatically download Renode. This skips the manual installation step completely and gets the simulation running much faster.
Ships:
Phase 1 (The Custom RTOS Kernel) I am building a custom FPV drone from scratch with my friend in an attempt to achieve 200 mph . At those speeds, standard super loops are far too slow, as a single microsecond of lag means the drone travels feet before making a PID correction. To solve this, I built a custom, hybrid cooperative/preemptive Real-Time Operating System (RTOS) from scratch for the ARM Cortex-M7 (STM32F7)! What Was Challenging? The absolute hardest part of this phase was writing the low-level assembly context switcher ( PendSV_Handler.S ). Hacking the ARM Cortex-M7 registers to physically hot-swap stack pointers ( PSP ) mid-execution without crashing the CPU or corrupting the program state was a massive headache. I had to ensure that when an asynchronous preemption event fires, the assembly code perfectly preserves the execution registers ( R4-R11 plus the hardware-stacked registers), jumps to the high-priority task, and then seamlessly restores the background task right where it left off. Getting the compiler-enforced task overloading working so the kernel cleanly separates periodic tasks from raw interrupts was another huge hurdle, but it makes the whole codebase infinitely more robust. Want to Test It or Write Your Own Tasks? You don’t need physical hardware to watch this run! I’ve packaged the entire project with a Renode simulation script. You can run the interactive emulator with a single command to see the preemption scheduler hijack our counter task live, or you can jump into the user sandbox file and write your own custom tasks. Check out the GitHub Repository to Run the Demo! The README has a quick 5-minute setup guide to get you compiling and simulating your own code in no time.
200 MPH Drone RTOS: How it went Simulation to Silicon! When I published the first major update for this project at the 15-hour mark, I essentially had a proof-of-concept. I had managed to write a custom hybrid cooperative/preemptive scheduler and get an ARM Cortex-M7 (on the STM32f756VGTx) assembly context switcher functioning inside the Renode simulator. Although this looked like a massive leap, the project had barely started. Over 100 hours of development have gone into this project since then. The transition from a simulated kernel to a bare-metal flight controller capable of keeping a 200 MPH drone in the air required stripping the system down to its bare components, rewriting the memory architecture, and debugging some of the most frustrating hardware faults I have ever encountered-especially whenever the project just crashed, leaving me no traces as to what went wrong. Software Limitations The biggest turning point was realizing that software simulation can only take you so far. Renode is an amazing tool, but it hid a massive amount of race conditions and timing flaws that only exposed themselves when I finally flashed the code to physical STM32F756 Nucleo board. Sometimes, the MCU would have to reboot every 2 seconds. I spent dozens of hours tracking down massive architectural bugs. One of the worst was a context-switching fault where floating-point math was corrupting the return address in the CPU registers, causing the processor to execute raw garbage data. To fix this, I had to completely restructure the boot sequence and overhaul the memory management. I moved away from static arrays to a dynamic per-task stack allocation system, and implemented a dual-guard memory system. Arguably, this was the most important change as it allowed me to debug tasks way quicker as I instantly could know when the canary values were corrupted. Overhauling the Data Pipelines In order to avoid the 10ms delay of my original blocking pipline (for data transfer), I entirely rewrote the hardware data pipelines multiple times to use a semi-blocking, circular Direct Memory Access (DMA) architecture. Instead of the processor handling the data transfer, the hardware itself moves the bytes from the sensors directly into memory in the background. The DMA streams now trigger precise interrupts at the halfway and full-transfer points, allowing the RTOS to safely parse incoming radio packets and sensor reads without ever risking data overwrites or blocking the main flight loop. Building a Flight Controller I integrated Betaflight’s Actual Rates algorithm with custom expo curves, ensuring that physical stick inputs map perfectly to target velocities. I built a custom SPI driver to pull 24-bit raw pressure and temperature data from a BMP390 barometer, passing it through hypsometric formulas to calculate altitude. For video and telemetry, I moved away from raw UART strings and implemented native MSP DisplayPort communication (for true digital Walksnail Avatar connection). I also built an interactive USB command-line interface. Instead of having to recompile and re-flash the firmware every time a PID value needs to be adjusted, I can plug into the board, pull up a terminal, and manually tune gains, remap CRSF radio channels, or adjust IMU orientation offsets in real time. Final Version The last few weeks have been about refinement and consistency, removing race conditions and overall polishing the code. Now that the RTOS is fully functional, the only things to add are extra features, like a permanent + more expanded CLI, as well as finishing the external RM and linking the ESC drivers. As these are pretty insignificant, I have linked the source of this shipment to the Github project rather than a specific release so that I can update these during review!...
|
1792993800.8647993
|
1793080200.8647993
|
|
70373
|
My Game in Godot.. by @Siyam | Stardance
|
Siyam
|
1
|
4.54
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-19T07:28:39Z", "hours": 0.0, "multiplier": 1.05, "payout": 0, "blessing": "neutral", "text": "Welcome! This is a game, i have made this in godot. This is a ninja game, this ninja has to catch the stars, if you can catch the stars, ninja will win, otherwise he will died. That’s an awesome game, You should play it.", "repo": "https://github.com/Tanzil-Alam/My-Game-In-Godot-Engine", "demo": "https://siyam000111.itch.io/my-ninja-game"}]...
|
[{"post_id": 82548, "ts": "202 [{"post_id": 82548, "ts": "2026-10-25T06:11:42Z", "hours": 0.6169, "text": "Added my 4th game, pushed to github and published in itch.io"}, {"post_id": 82402, "ts": "2026-10-24T18:35:17Z", "hours": 1.9336, "text": "Made my 3rd game working. That’s working well."}, {"post_id": 82312, "ts": "2026-10-24T15:15:20Z", "hours": 0.79, "text": "Added settings, I made the settings button work."}, {"post_id": 82290, "ts": "2026-10-24T14:15:24Z", "hours": 0.4228, "text": "Updated the death and win scene."}, {"post_id": 82268, "ts": "2026-10-24T12:54:36Z", "hours": 0.4228, "text": "Gave some little updates, like increasing size, changing color, etc."}, {"post_id": 81571, "ts": "2026-10-21T18:29:37Z", "hours": 0.3522, "text": "I have added some small updates to the project. I’m not sure why the time wasn’t tracked properly earlier, but I’ve recorded the process this time using time-lapse. I truly hope for your understanding—the core game is fully complete, so there aren’t many remaining features to add. Thank you for your patience, and I apologize for any confusion with the time tracking."}, {"post_id": 80903, "ts": "2026-10-19T06:34:08Z", "hours": 0.2589, "text": "I have made a game in godot according the guide. it looks good, i played it. i have also published it in itch.io. everything is cool."}]...
|
Title: My Game in Godot.. by @Siyam | Stardance
D Title: My Game in Godot.. by @Siyam | Stardance
Devlogs:
I have made a game in godot according the guide. it looks good, i played it. i have also published it in itch.io. everything is cool.
I have added some small updates to the project. I’m not sure why the time wasn’t tracked properly earlier, but I’ve recorded the process this time using time-lapse. I truly hope for your understanding—the core game is fully complete, so there aren’t many remaining features to add. Thank you for your patience, and I apologize for any confusion with the time tracking.
Gave some little updates, like increasing size, changing color, etc.
Updated the death and win scene.
Added settings, I made the settings button work.
Made my 3rd game working. That’s working well.
Added my 4th game, pushed to github and published in itch.io
Ships:
Welcome! This is a game, i have made this in godot. This is a ninja game, this ninja has to catch the stars, if you can catch the stars, ninja will win, otherwise he will died. That’s an awesome game, You should play it....
|
1793008354.6901417
|
1793094754.6901417
|
|
70392
|
Webatron by @Fomdomsom | Stardance
|
Fomdomsom
|
0
|
0.5
|
0
|
[]
|
[{"post_id": 82541, "ts": "202 [{"post_id": 82541, "ts": "2026-10-25T05:32:23Z", "hours": 0.5006, "text": "Starting my webpage, just figuring out the basics"}]...
|
Title: Webatron by @Fomdomsom | Stardance
Devlogs Title: Webatron by @Fomdomsom | Stardance
Devlogs:
Starting my webpage, just figuring out the basics...
|
1793008394.591771
|
1793613194.591771
|
|
17961
|
SpotOn by @nishanth05 | Stardance
|
nishanth05
|
1
|
2.0
|
15
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T19:07:30Z", "hours": 2.0, "multiplier": 7.23, "payout": 15, "blessing": "neutral", "text": "SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. It uses the free music brainz api and trivia api. Originally the project was supposed to use the spotify developer api , it’s been long since i used the api. When i tried to Implement the commands below, i encountered the error of not having a spotify premium account 😭. Finally ended up changing everyting to the music brainz api. Making a slack bot using javascript was definitely an experience, as once i’ve made a slack bot with python. Using the actions to handle the trivia was a headache second to the artist comparing So please sure do check out the /spoton-trivia and /spoton-vs commands. Of course there are other ones, make sure to try them before deciding ✌️", "repo": "https://github.com/Nishanth-S-A/SpotOn", "demo": "https://app.slack.com/client/E09V59WQY1E/C0B8P5DRDB3"}]...
|
[{"post_id": 8254, "ts": "2026 [{"post_id": 8254, "ts": "2026-06-13T18:47:25Z", "hours": 2.0511, "text": "Guess it’s done , SpotOn Project: SpotOn · Stack: Node.js, Slack Bolt, MusicBrainz API, OpenTDB Status: ✅ Working · Commands shipped: 6 What is SpotOn? SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. The goal was simple: a bot you can actually use casually in a team channel without it feeling like a chore. What I Built CommandWhat it does/spoton-trackRandom track pick from the MusicBrainz catalogue/spoton-similar Finds artists sharing genres/tags/spoton-vs vs Head-to-head stat battle/spoton-stats Full artist profile — genres, albums, recordings/spoton-triviaInteractive music trivia with Slack buttons/spoton-bandnameGenerates a random band name + debut album title The Spotify Problem I originally built everything on the Spotify Web API. No user OAuth needed — just client credentials for public catalog data. Seemed perfect. Then the /spoton-track command started throwing 403 Forbidden. The error body said it all: “Active premium subscription required for the owner of the app.” Spotify quietly tightened their API access in late 2024. Even the Search endpoint — purely public catalog data — now requires the app owner to have a Premium account. Every command I’d built against the Search API was dead. Scrapped Spotify entirely. Switched everything to MusicBrainz. Why MusicBrainz Completely free, no API key required Massive open music database Structured data: tags, release groups, recordings, artist relationships The only rule: identify your app in the User-Agent header and stay under ~1 req/sec The tradeoff is no popularity scores or audio previews, but for everything SpotOn actually needs — artist metadata, genres, recordings, album counts — it’s more than enough. Interesting Implementation Notes Similar artists without a “related” endpoint MusicBrainz has no direct “related artists” API. The workaround: fetch the source artist’s top tags, then search for other artists matching those same tags. It’s not perfect, but the results are surprisingly good — searching tag:alternative rock AND tag:indie for Radiohead surfaces exactly the kind of artists you’d expect. Parsing /spoton-vs input Getting two artist names from a single text field is messier than it looks. Users might type: Taylor Swift vs Drake Taylor Swift, Drake oasis blur (no separator at all) The final parsing tries vs split first, then comma, then a midpoint word split as a last resort. Not bulletproof, but handles the common cases. Documenting the preferred format in /spoton-help does the rest. Trivia with interactive buttons The /spoton-trivia command uses Slack’s Block Kit action buttons for the answer choices. Answer state is stored in a Map keyed by userId-channelId, so multiple people can have active questions at once. The map entry is deleted after the user answers, keeping memory clean. One gotcha: the OpenTDB API returns HTML-encoded strings (&, ', etc.) in question and answer text. Had to add a small decode() helper to strip those before sending to Slack, otherwise the blocks render raw HTML entities. MusicBrainz rate limiting MusicBrainz asks for 1 request/second max. Commands like /spoton-stats make 3 sequential API calls (artist detail, albums, recordings). Running them with Promise.all works fine most of the time, but under load it can trigger a 503. The safe pattern is sequential calls with a sleep(300) between each — slower, but reliable. Stack Runtime: Node.js Slack: Slack Bolt with Socket Mode (no public URL needed) Music data: MusicBrainz API (free, no key) Trivia: OpenTDB API (free, no key) HTTP: axios Config: dotenv"}]...
|
Title: SpotOn by @nishanth05 | Stardance
Devlogs: Title: SpotOn by @nishanth05 | Stardance
Devlogs:
Guess it’s done , SpotOn Project: SpotOn · Stack: Node.js, Slack Bolt, MusicBrainz API, OpenTDB Status: ✅ Working · Commands shipped: 6 What is SpotOn? SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. The goal was simple: a bot you can actually use casually in a team channel without it feeling like a chore. What I Built CommandWhat it does/spoton-trackRandom track pick from the MusicBrainz catalogue/spoton-similar Finds artists sharing genres/tags/spoton-vs vs Head-to-head stat battle/spoton-stats Full artist profile — genres, albums, recordings/spoton-triviaInteractive music trivia with Slack buttons/spoton-bandnameGenerates a random band name + debut album title The Spotify Problem I originally built everything on the Spotify Web API. No user OAuth needed — just client credentials for public catalog data. Seemed perfect. Then the /spoton-track command started throwing 403 Forbidden. The error body said it all: “Active premium subscription required for the owner of the app.” Spotify quietly tightened their API access in late 2024. Even the Search endpoint — purely public catalog data — now requires the app owner to have a Premium account. Every command I’d built against the Search API was dead. Scrapped Spotify entirely. Switched everything to MusicBrainz. Why MusicBrainz Completely free, no API key required Massive open music database Structured data: tags, release groups, recordings, artist relationships The only rule: identify your app in the User-Agent header and stay under ~1 req/sec The tradeoff is no popularity scores or audio previews, but for everything SpotOn actually needs — artist metadata, genres, recordings, album counts — it’s more than enough. Interesting Implementation Notes Similar artists without a “related” endpoint MusicBrainz has no direct “related artists” API. The workaround: fetch the source artist’s top tags, then search for other artists matching those same tags. It’s not perfect, but the results are surprisingly good — searching tag:alternative rock AND tag:indie for Radiohead surfaces exactly the kind of artists you’d expect. Parsing /spoton-vs input Getting two artist names from a single text field is messier than it looks. Users might type: Taylor Swift vs Drake Taylor Swift, Drake oasis blur (no separator at all) The final parsing tries vs split first, then comma, then a midpoint word split as a last resort. Not bulletproof, but handles the common cases. Documenting the preferred format in /spoton-help does the rest. Trivia with interactive buttons The /spoton-trivia command uses Slack’s Block Kit action buttons for the answer choices. Answer state is stored in a Map keyed by userId-channelId, so multiple people can have active questions at once. The map entry is deleted after the user answers, keeping memory clean. One gotcha: the OpenTDB API returns HTML-encoded strings (&, ', etc.) in question and answer text. Had to add a small decode() helper to strip those before sending to Slack, otherwise the blocks render raw HTML entities. MusicBrainz rate limiting MusicBrainz asks for 1 request/second max. Commands like /spoton-stats make 3 sequential API calls (artist detail, albums, recordings). Running them with Promise.all works fine most of the time, but under load it can trigger a 503. The safe pattern is sequential calls with a sleep(300) between each — slower, but reliable. Stack Runtime: Node.js Slack: Slack Bolt with Socket Mode (no public URL needed) Music data: MusicBrainz API (free, no key) Trivia: OpenTDB API (free, no key) HTTP: axios Config: dotenv
Ships:
SpotOn is a Slack bot that brings music discovery into your workspace via slash commands. Random track picks, artist comparisons, similar artist recommendations, stats, trivia, and band name generation — all without leaving Slack. It uses the free music brainz api and trivia api. Originally the project was supposed to use the spotify developer api , it’s been long since i used the api. When i tried to Implement the commands below, i encountered the error of not having a spotify premium account 😭. Finally ended up changing everyting to the music brainz api. Making a slack bot using javascript was definitely an experience, as once i’ve made a slack bot with python. Using the actions to handle the trivia was a headache second to the artist comparing So please sure do check out the /spoton-trivia and /spoton-vs commands. Of course there are other ones, make sure to try them before deciding ✌️...
|
1793101771.7724996
|
1793188171.7724996
|
|
63645
|
My awesome macropad! by @rodrif15 | Stardance
|
rodrif15
|
0
|
0.31
|
0
|
[]
|
[{"post_id": 82536, "ts": "202 [{"post_id": 82536, "ts": "2026-10-25T04:53:26Z", "hours": 0.3119, "text": "A 9x9 Macropad in KiCad"}]...
|
Title: My awesome macropad! by @rodrif15 | Stardan Title: My awesome macropad! by @rodrif15 | Stardance
Devlogs:
A 9x9 Macropad in KiCad...
|
1793051732.6599321
|
1793656532.6599321
|
|
70433
|
Root Studio by @slimshadyxroot1 | Stardance
|
slimshadyxroot1
|
1
|
20.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T04:43:00Z", "hours": 20.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a browser based digital audio workstation(daw). you can produce music for free in this web app. it took lot of time to make this this daw is completely made using only html css and javascript.", "repo": "https://github.com/slimshadyxroot1-png/Root-Studio", "demo": "https://slimshadyxroot1-png.github.io/Root-Studio/"}]...
|
[{"post_id": 82530, "ts": "202 [{"post_id": 82530, "ts": "2026-10-25T04:34:40Z", "hours": 1.1367, "text": "Updates: export, sharing and save as Project panel: Save as (keeps saving to the same file), Export WAV, Export MP3, Export stems (zip), Export MIDI, Share Offline rendering of the playlist, with the effects and automation"}, {"post_id": 82320, "ts": "2026-10-24T15:32:02Z", "hours": 1.9664, "text": "Updates: audio tracks: record, load, cut and stretch Audio tracks panel: up to 8 tracks of clips on a timeline Record from the microphone, or load an audio file Move, trim, cut, stretch and delete clips with snap Latency fix for recordings Audio tracks get their own mixer strips, and clips are saved inside the song file"}, {"post_id": 82252, "ts": "2026-10-24T12:06:25Z", "hours": 1.0108, "text": "Updates: unison, fm, wavetable and insert effects Unison voices with spread Pitch envelope for zap and kick style sounds FM, pulse and wavetable oscillators Four more synth presets (Bell, Supersaw, Zap bass, Glass) Insert effect on every mixer strip: chorus, flanger, phaser and sidechain (kick ducking)"}, {"post_id": 82227, "ts": "2026-10-24T10:19:43Z", "hours": 3.1294, "text": "Updates: automation, midi learn and drum samples Automation lane per pattern (steps or smooth) for volume, pan, reverb, delay, master and filter Song automation lane in the playlist MIDI learn: map knobs and faders to any automation target Drum sounds panel: load your own sample into any drum, edit the velocity of every hit Drum kits (Retro, 80s, Acoustic) and euclidean rhythms Six more presets (Rock, Techno, Funk, Trap, Bossa nova, Reggae) store.js: samples are kept in IndexedDB and saved inside the song file"}, {"post_id": 81939, "ts": "2026-10-23T03:50:26Z", "hours": 2.3853, "text": "Updates: piano roll tools, recording and midi keyboard Select tool: move and resize notes, copy, paste, delete Quantize and a snap setting Transpose, fit to scale Chord progressions and arpeggiate Tap tempo and a metronome Rec: write notes into the roll from the keyboard while the song plays MIDI keyboard input with real velocity (midi.js)"}, {"post_id": 81737, "ts": "2026-10-22T09:41:02Z", "hours": 2.0222, "text": "Updates: more tracks, synth panel, velocity and undo Add and delete tonal tracks (up to 8), rename them Synthesizer panel: osc 2, resonant filter with envelope, amp ADSR, LFO Synth presets (Lead, Pad, Bass, Pluck) Note velocity: velocity lane under the roll and a default velocity slider Undo and Redo (buttons, Ctrl+Z, Ctrl+Y), Ctrl+S saves tools.js appears"}, {"post_id": 81155, "ts": "2026-10-20T04:10:45Z", "hours": 1.0444, "text": "Updates: patterns, playlist and time signatures Several patterns per song: New, Clone, Rename, Delete Pattern length of 1, 2 or 4 bars Playlist of 32 bars, click or drag to paint patterns Pattern mode loops one pattern, Song mode plays the playlist Loop range in song mode (click a bar number to set it) Time signatures: 2/4, 3/4, 4/4, 5/4, 6/8, 7/8, 12/8"}, {"post_id": 81145, "ts": "2026-10-20T02:23:41Z", "hours": 4.4225, "text": "Updates: new engine, mixer and master effects The single file is split into modules: state, audio, rack, roll, synth, mixer, arrange, app, ui New audio graph: every sound goes through a strip with volume, pan, reverb send and delay send Mixer panel with faders, level meters, mute and solo Master section: 3 band EQ, reverb with room size, drive, compressor FL Studio style layout, click a panel title to fold it The song is now a proper data model (tracks, patterns, drums). Songs saved by stages 1 to 3 still open"}, {"post_id": 80947, "ts": "2026-10-19T10:33:30Z", "hours": 1.2694, "text": "What is new Swing, master volume and a feedback delay Channel rack with a mute light and volume slider per drum, plus a Lead row Song name, Save (downloads a .json) and Open The song is kept in the browser, so a reload does not lose it Presets list on the left (Four on the floor, Hip hop, Empty)"}, {"post_id": 80912, "ts": "2026-10-19T07:24:01Z", "hours": 0.9942, "text": "piano roll and a simple synth What is new Piano roll with 60 rows (C2 to B6) and a piano key column Click or drag to add and remove notes, note length 1/16 to 1/2 Synth voice with a wave choice (saw, square, triangle, sine) Key and scale selector, notes outside the scale are dimmed Play the synth with the computer keyboard (Z to M), [ and ] change octave Space plays and pauses"}, {"post_id": 80896, "ts": "2026-10-19T06:03:09Z", "hours": 1.0925, "text": "Made drum machine for my browser based digital audio workstation (daw). Whats added: Play and Stop, BPM box Six synthesized drums: kick, snare, hi-hat, open hat, clap, tom 16 step grid, click or drag to paint steps Playhead that follows the sound Click a drum name to hear it"}]...
|
Title: Root Studio by @slimshadyxroot1 | Stardance Title: Root Studio by @slimshadyxroot1 | Stardance
Devlogs:
Made drum machine for my browser based digital audio workstation (daw). Whats added: Play and Stop, BPM box Six synthesized drums: kick, snare, hi-hat, open hat, clap, tom 16 step grid, click or drag to paint steps Playhead that follows the sound Click a drum name to hear it
piano roll and a simple synth What is new Piano roll with 60 rows (C2 to B6) and a piano key column Click or drag to add and remove notes, note length 1/16 to 1/2 Synth voice with a wave choice (saw, square, triangle, sine) Key and scale selector, notes outside the scale are dimmed Play the synth with the computer keyboard (Z to M), [ and ] change octave Space plays and pauses
What is new Swing, master volume and a feedback delay Channel rack with a mute light and volume slider per drum, plus a Lead row Song name, Save (downloads a .json) and Open The song is kept in the browser, so a reload does not lose it Presets list on the left (Four on the floor, Hip hop, Empty)
Updates: new engine, mixer and master effects The single file is split into modules: state, audio, rack, roll, synth, mixer, arrange, app, ui New audio graph: every sound goes through a strip with volume, pan, reverb send and delay send Mixer panel with faders, level meters, mute and solo Master section: 3 band EQ, reverb with room size, drive, compressor FL Studio style layout, click a panel title to fold it The song is now a proper data model (tracks, patterns, drums). Songs saved by stages 1 to 3 still open
Updates: patterns, playlist and time signatures Several patterns per song: New, Clone, Rename, Delete Pattern length of 1, 2 or 4 bars Playlist of 32 bars, click or drag to paint patterns Pattern mode loops one pattern, Song mode plays the playlist Loop range in song mode (click a bar number to set it) Time signatures: 2/4, 3/4, 4/4, 5/4, 6/8, 7/8, 12/8
Updates: more tracks, synth panel, velocity and undo Add and delete tonal tracks (up to 8), rename them Synthesizer panel: osc 2, resonant filter with envelope, amp ADSR, LFO Synth presets (Lead, Pad, Bass, Pluck) Note velocity: velocity lane under the roll and a default velocity slider Undo and Redo (buttons, Ctrl+Z, Ctrl+Y), Ctrl+S saves tools.js appears
Updates: piano roll tools, recording and midi keyboard Select tool: move and resize notes, copy, paste, delete Quantize and a snap setting Transpose, fit to scale Chord progressions and arpeggiate Tap tempo and a metronome Rec: write notes into the roll from the keyboard while the song plays MIDI keyboard input with real velocity (midi.js)
Updates: automation, midi learn and drum samples Automation lane per pattern (steps or smooth) for volume, pan, reverb, delay, master and filter Song automation lane in the playlist MIDI learn: map knobs and faders to any automation target Drum sounds panel: load your own sample into any drum, edit the velocity of every hit Drum kits (Retro, 80s, Acoustic) and euclidean rhythms Six more presets (Rock, Techno, Funk, Trap, Bossa nova, Reggae) store.js: samples are kept in IndexedDB and saved inside the song file
Updates: unison, fm, wavetable and insert effects Unison voices with spread Pitch envelope for zap and kick style sounds FM, pulse and wavetable oscillators Four more synth presets (Bell, Supersaw, Zap bass, Glass) Insert effect on every mixer strip: chorus, flanger, phaser and sidechain (kick ducking)
Updates: audio tracks: record, load, cut and stretch Audio tracks panel: up to 8 tracks of clips on a timeline Record from the microphone, or load an audio file Move, trim, cut, stretch and delete clips with snap Latency fix for recordings Audio tracks get their own mixer strips, and clips are saved inside the song file
Updates: export, sharing and save as Project panel: Save as (keeps saving to the same file), Export WAV, Export MP3, Export stems (zip), Export MIDI, Share Offline rendering of the playlist, with the effects and automation
Ships:
This is a browser based digital audio workstation(daw). you can produce music for free in this web app. it took lot of time to make this this daw is completely made using only html css and javascript....
|
1793008443.0974748
|
1793094843.0974748
|
|
70412
|
Memoria by @stxrchett | Stardance
|
stxrchett
|
0
|
7.69
|
0
|
[]
|
[{"post_id": 82525, "ts": "202 [{"post_id": 82525, "ts": "2026-10-25T03:51:02Z", "hours": 1.6508, "text": "Ability to add cards linked to decks. Show cards in each seperate deck."}, {"post_id": 82500, "ts": "2026-10-25T01:08:07Z", "hours": 0.8633, "text": "Format into two columns, text overflow clipping and ellipsis. CSS styling."}, {"post_id": 82469, "ts": "2026-10-24T22:05:18Z", "hours": 1.2833, "text": "Formatting. Added a delete button. Input box works with enter. Consistent padding. Decks formatted in boxes and wrapped."}, {"post_id": 82146, "ts": "2026-10-24T03:32:46Z", "hours": 3.8928, "text": "First devlog! I am making a flashcard app. Added feature to name and add decks, view deck count, and view deck ID. I was able to connect it to an sqlite database after some struggle. Really cool to see it connected to be able to edit data in the db file and displayed on the screen."}]...
|
Title: Memoria by @stxrchett | Stardance
Devlogs: Title: Memoria by @stxrchett | Stardance
Devlogs:
First devlog! I am making a flashcard app. Added feature to name and add decks, view deck count, and view deck ID. I was able to connect it to an sqlite database after some struggle. Really cool to see it connected to be able to edit data in the db file and displayed on the screen.
Formatting. Added a delete button. Input box works with enter. Consistent padding. Decks formatted in boxes and wrapped.
Format into two columns, text overflow clipping and ellipsis. CSS styling.
Ability to add cards linked to decks. Show cards in each seperate deck....
|
1793008420.8072608
|
1793613220.8072608
|
|
71247
|
vib-bl by @vweb | Stardance
|
vweb
|
0
|
6.51
|
0
|
[]
|
[{"post_id": 82522, "ts": "202 [{"post_id": 82522, "ts": "2026-10-25T03:24:46Z", "hours": 6.5058, "text": "there’s gotta be a cleaner way to make this"}]...
|
Title: vib-bl by @vweb | Stardance
Devlogs:
there Title: vib-bl by @vweb | Stardance
Devlogs:
there’s gotta be a cleaner way to make this...
|
1792900030.1153815
|
1793504830.1153815
|
|
70439
|
Twinx by @twinx | Stardance
|
twinx
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T03:31:36Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Twinx - my personal website with all the works and projects i have made so far , it doesn’t include much projects as i have spend 100+ hours in flow only and nothing did much to others.", "repo": "https://github.com/Twinx015/Twix", "demo": "https://twinx.pages.dev/"}]...
|
[{"post_id": 82520, "ts": "202 [{"post_id": 82520, "ts": "2026-10-25T03:19:28Z", "hours": 0.3033, "text": "Made some more changed in it and now making it ship and will publish it to cloudflare."}, {"post_id": 81170, "ts": "2026-10-20T05:41:04Z", "hours": 2.0764, "text": "#Devlog 1 Made the whole website with components from react bitz and insane animations and also some songs for you :)"}]...
|
Title: Twinx by @twinx | Stardance
Devlogs:
#Devl Title: Twinx by @twinx | Stardance
Devlogs:
#Devlog 1 Made the whole website with components from react bitz and insane animations and also some songs for you :)
Made some more changed in it and now making it ship and will publish it to cloudflare.
Ships:
Twinx - my personal website with all the works and projects i have made so far , it doesn’t include much projects as i have spend 100+ hours in flow only and nothing did much to others....
|
1793008452.1815262
|
1793094852.1815262
|
|
57404
|
Tiger OS by @Rayan123-4 | Stardance
|
Rayan123-4
|
3
|
75.0
|
447
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T03:15:51Z", "hours": 18.0, "multiplier": 18.42, "payout": 332, "blessing": "neutral", "text": "What did I make I made TigerOS, a web based operating system that it completely run on the web. It’s themed around tigers as you can see, and has many interesting features such a as a, weather API, a tiger habitat and population graph, a classic calculator, a tiger earth three.js simulator and many more amazing experiences to explore through. It is made using JavaScript, HTML, and CSS. What was chalenging The most challenging part of making this project for me was the JavaScript. I am quite new to JavaScript and coding things like the earth using three.js was very new to be and it took some time and learning. Also I the styling wasn’t nessisary hard, however I would say that I am not the best at it, so it took also some time to get it too look nice. What am I most proud of I am most proud of making advanced features to my webOS such as a, tiger habitat and population graph and a 3d earth and stars using three.js. I am proud of learning more about JavaScript syntax and how to properly debugg and fix stuff when I have a problem. What should people know about my project It runs completely on the web, so no installing or any local host is needed. Just click on the link either in my project description or in the README.md. I would suggest reading though my README and other devlogs, I know that they are a bit long, so you don’t need to read all of them just skim through and get the jist of what I have done. Thank you for taking the time to read through, It would be really helpful for me if your left good reviews and ratings, that would help me further improve on my coding journey.", "repo": "https://github.com/rayan123-4/My-WebOS-Stardance", "demo": "https://stardancetigeros.site/"}, {"ship_num": 2, "ts": "2026-09-27T23:41:52Z", "hours": 50.0, "multiplier": 2.32, "payout": 115, "blessing": "neutral", "text": "I made TigerOS, a tiger themed WebOS made for the WebOS Stardance mission. I made it using HTML, CSS, and Javascript. It has many features such as, a real time weather app, a working calculator app, a snake game app, a paint canvas app, sounds, special effects, and the list goes on. The most challenging part of making this, was getting everything to work smoothly how I want it with no errors. Probably the hardest thing that I made was the weather API app, since I had never worked with an API before it was very challenging, but I learnt a lot. I am very proud of how it came out, and that all my apps and features work to how I want it. I didn’t think I would make it this far to have so many cool stuff, but I am very happy with my final product. I suggest that anyone wanting to try out my site, they should test out all of the apps and the features. I also encourage you to find the hidden secret feature. However, it should be pretty obvious to find. Test out all of the weather apps, and even try to beat my high score of 25 on the tiger snake game. Please take some time to explore TigerOS and leave a thoughtful review, as any feedback would really help me to improve. Thanks Stardance, for setting up this oportunity for me and everyone else.", "repo": "https://github.com/rayan123-4/My-WebOS-Stardance", "demo": "https://stardancetigeros.site/"}, {"ship_num": 3, "ts": "2026-09-04T21:53:15Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first WebOS. It was very difficult and challenging to make, but the jams guide made it much more easier to get started with and finish. The site currently has 2 apps, but there will be more to come in the future.", "repo": "https://github.com/rayan123-4/My-WebOS-Stardance", "demo": "https://stardancetigeros.site/"}]...
|
[{"post_id": 82515, "ts": "202 [{"post_id": 82515, "ts": "2026-10-25T03:07:17Z", "hours": 0.7139, "text": "Devlog 52: Just tiding up my code with comments and editing the README.md Just tiding up my code, adding comments and making sure it all looks nice for the ship. I have learn a lot from making this project and I am happy with how it turned out. This will be my final devlog, and so please give me good ratings and feedback, so that I can learn and improve."}, {"post_id": 82137, "ts": "2026-10-24T02:07:18Z", "hours": 0.8194, "text": "Devlog 51: Adding stars, realistic tilt, and better quality textures to the 3D earth. I added 2000 stars to the earth window and even made a realistic tilt for the earth, like how it is in real life. I think that the stars made a big impact on the overall feel of the window, and makes it look much better. I also added a 8k quality texture onto the earth model instead of a 2k quality texture, so that the earth would be more clearer to see."}, {"post_id": 81962, "ts": "2026-10-23T06:09:26Z", "hours": 2.1297, "text": "Devlog 50: Adding new 3D Tiger Earth window. I added a new window made with three.js, that is a 3D globe of the world that is, movable, rotatable, and zoom in able. I also added a feature where you can stop the rotation, so that its easier to view (And find the hidden Tiger). First I made the 3D circle and of the globe and then added the texture and animations. What did I learn and what was difficult. This is my first time making a project like a 3D thing, so I was a bit new to this. Now I have learnt much more about how to make 3D projects like this and I hope I can make many more simulation projects like this in the future."}, {"post_id": 81186, "ts": "2026-10-20T07:19:14Z", "hours": 2.155, "text": "Devlog 49: Adding tiger population chart window and UI polishing. I added a new window that shows the tiger population in the countries Russia, Nepal, and India. The data points are the milestones of there tiger conservation across 2010 to 2016 to 2022. The chart is a line graph and the 3 line variables are the countries. The chart looks very good and I am happy with how it turned out. I also polished more of my webOS using nice fonts such as “Fira Sans”, “Bold”, and “Italic”. I styled it and made sure across my webOS there was a orange, black, and white theme, like the tigers colors. What did I learn and what was difficult The most difficult part of it was debugging everything when I found errors. I learnt the functions for making a graph in JavaScript and how to get data and put it into a graph using code, while still making it look nice. This helps me a lot especially for more projects I might do in the future using data and statistics."}, {"post_id": 79494, "ts": "2026-10-14T09:29:47Z", "hours": 1.8556, "text": "Devlog 48: Updating the CSS styling and improving the interface visibility. I edited the CSS stying adding more things such as box-shadow and different color border. I made sure the web os looked good and wasn’t too heavily colored, that might make the text less easy to read. I also fixed the minimize button in the link window since it was off centered, because of the small size of it compared to the normal window sized ones. Difficulty: For me to be honest, this was difficult not because of like syntax and stuff, but because I’m not very good at styling. I tried to like make it pop and look extra good, and I think I have done well."}, {"post_id": 77180, "ts": "2026-10-05T23:23:31Z", "hours": 1.5567, "text": "Devlog 47: Add text on icon hover, that displays window name. I made it so that when you hover over the icons in the icon bar, it will show the name of the window that the icon is connected to. This makes it easier for users to know what icon goes to which window, without guesses based on the icon image. What did I learn and what was difficult. At first I thought that making this would only need a bit of HTML and CSS, and normally it would. However I came upon a problem and CSS wasn’t fixing it, nor was the HTML, so I had to adapt and use Javascript to fix my error. Eventually it worked out in the end, and not much Javascipt was actually needed. This helped me to learn how to fix errors outside of the box, and too try different ways to fix them. This helped me learn more about problem solving and debugging, which will help me in future projects."}, {"post_id": 76578, "ts": "2026-10-04T01:22:56Z", "hours": 0.6781, "text": "Devlog 46: Edited some of the CSS styling on the windows and top bar. I edited the CSS styling on things like the, text, the windows, and the top bar. I used functions such as, text-shadow and box-shadow, to make text and windows stand out and look much nicer. I also edited the border color and size of many things to make them either pop or, look better in between colors. Things like animations scale and filter, also helped make it look much more appealing. What did I learn and how difficult was it I learnt more about CSS styling and how to make project look extra nice. I was playing around with the CSS learning new mechanics and functions, to help make different things and parts of project look more nicer and clean. This was fairly easy and I didn’t have any trouble with doing so."}, {"post_id": 76381, "ts": "2026-10-03T11:06:48Z", "hours": 1.8306, "text": "Devlog 45: Added a lot of in depth comments to my Javascript file. And adding a download button to the paint window. I went through my Javascript code and worked on improving my comments and adding more, where they were needed. I focused on being very descriptive with my comments, explaining what things do and how. I also added some hover animations to the paint board buttons. Download button added I added a download button to my paint window. I made it so when the user clicks the button, the browser download trigger is activated and the image is downloaded. I did this in Javascript using toDataURL(). Diffuculty Making the comments was fairly easy, as I just went to important parts with no comments and added explanations about them. Also the Javascript for the download button wasn’t too hard, and I think I am learning more and more about Javascript, which is helping make it easier and easier."}, {"post_id": 75997, "ts": "2026-10-01T23:50:08Z", "hours": 0.9978, "text": "Devlog 44: Fixed a z-index error, adjusted the colors and styling I found a z-index error in the Javascript file, where the images when opened, wouldn’t go to the highest z-index, so I just added z-index 99 when window open. I also mainly adjusted the colors, experimenting in CSS, to get the best design and the best text to background ratio in CSS. Difficulty Not too bad, because I didn’t have to go through hidden Javascript syntax errors and stuff, so it was mostly stuff I could just look around for a bit until I find the missing parenthesis or something."}, {"post_id": 75845, "ts": "2026-10-01T10:11:49Z", "hours": 0.7925, "text": "Devlog 43: Fix camera animation Fixing the camera animation, making it so the user cannot spam open the window, making the animation run for however many times the user tapped the icon. Difficulty It wasn’t too hard to do, just needed to make some simple if statement to check if the window had been opened. Edited Also adjusted some styling in the map window making the text hover change in css."}, {"post_id": 75429, "ts": "2026-09-30T02:17:24Z", "hours": 0.7275, "text": "Devlog 42: Minimizer button Added a minimizer button to all of the windows. I made it so that when users press the button, the hover filter glow will show on the corrisponding icon, to let users know the window is open. Difficulty This was fairly simple to do, and I just had to make some code for it in the same place near the close button in the Javascript."}, {"post_id": 75148, "ts": "2026-09-29T09:16:19Z", "hours": 1.8561, "text": "Devlog 41: Styling the windows, making it look nice Fixed some of the styling on the windows, specifically on the manual window and the welcome window, since my rating said they looked like a power point. Trying to make my website look much cleaner and have a better design."}, {"post_id": 75046, "ts": "2026-09-29T00:06:01Z", "hours": 1.8983, "text": "Devlog 40: Camera Animation Added Added a camera flash animation when you open the gallery app. It was quiet hard to make flash show after the camera image, but it works well."}, {"post_id": 74671, "ts": "2026-09-27T23:27:05Z", "hours": 0.6822, "text": "Devlog 39: May be Last Devlog This is going to probably be my final devlog until I ship. I have enjoyed making this project and I hope that I can maybe make it better in the future. This video shows all of my windows and stuff."}, {"post_id": 74374, "ts": "2026-09-27T08:22:51Z", "hours": 0.7228, "text": "Devlog 38: Finishing touches Adding finishing touches to my WebOS such as fixing code to work better. Making it so if you tap a window that is behind another window, it gets moved to the front. And some other fixes."}, {"post_id": 74260, "ts": "2026-09-27T02:46:44Z", "hours": 1.2206, "text": "Devlog 37: Icon hover response Finsished making the icons hover display to stay on the icon image, if the corrisponding window is still open. Once the window is closed the style goes back to normal, but still if you hover it will have the style."}, {"post_id": 73487, "ts": "2026-09-25T07:05:36Z", "hours": 0.6139, "text": "Devlog 36: Adding a link window Creating a link window that has multiple links. The window is closable and it uses the same functions as the other windows except that you cannot drag it."}, {"post_id": 73053, "ts": "2026-09-24T08:54:47Z", "hours": 1.0725, "text": "Devlog 35: Fixed many usability errors that I had such as Making boundaries for dragging the window. Making the scroll app bar optimize for different window sizes. Fixing a bug where you can play all roar sounds at once and they overlap. And a few random glitched that I found while trying to fix these."}, {"post_id": 72578, "ts": "2026-09-23T08:39:47Z", "hours": 0.3111, "text": "Devlog 34: Adding information to manual window Just adding some more information to my Manual, for the new things that I have made. This is where users can find information about different features in my website. I wrote it all myself."}, {"post_id": 72139, "ts": "2026-09-22T09:13:19Z", "hours": 1.8511, "text": "Devlog 33: Adding undo button to paint window Added the undo button and made it so that it will undo lines, fill, and clear. This means that if you accidently fill your work or clear it you can press undo and it will bring it back :). Works for multiple times, because it saves it in a array. I am very happy with how it came out, because it was quite challenging to make."}, {"post_id": 72113, "ts": "2026-09-22T06:08:49Z", "hours": 1.085, "text": "Devlog 32: Adding the paint window My Tiger Masterpiece! Finally finished making the paint board window. I also fixed a few bugs that I had with the drag header, and it not working. Im going to add the title to this soon and also I will add an undo button incase you accedently delete your Tiger mona lisa."}, {"post_id": 71686, "ts": "2026-09-21T09:48:24Z", "hours": 2.8558, "text": "Devlog 31: Making the drawing window function Making drawing window. Don’t mind why it looks weird right now, I will fix it later. Also I spent a lot of time trying to fix some hidden error I didn’t know where it was and I was totally confused, so I went back a commit and put my working code back and it fixed. I think I am going to wrap up my project soon, so that I don’t create more project breaking errors."}, {"post_id": 71121, "ts": "2026-09-20T10:10:32Z", "hours": 0.9147, "text": "Devlog 30: Finally made the calculator window Idk how I managed to make it, but maybe the tutorial I was watching before was just not it. However, this one is: ( https://youtu.be/KM8PIiqq97c?si=RgpvGnOKA7ZbfZoQ ). Anyone wanting to make a good calculator, check out that tutorial because he saved me! Thanks KennyYipCoding on youtube. Also surprisingly simple."}, {"post_id": 71089, "ts": "2026-09-20T08:57:41Z", "hours": 4.3286, "text": "Devlog 29: Struggling on the calculator window 4 hours down the drain. I worked for 4 hours trying to get a simple thing like a calculator to work. Some how it kept not working even when I followed a tutorial correctly. I will try again tomorrow maybe with a different tutorial, but honestly idk what happend. Also part of it was me trying to code in python and that turned out a disaster, but then I went to JavaScript and still didn’t work??. I know it might seem weird and also stardance if your reading this you can like delete the 4 hours or whatever from my thing Incase idk if this is fraud or something."}, {"post_id": 70477, "ts": "2026-09-19T08:14:43Z", "hours": 1.3042, "text": "Devlog 28: Added achievement alert Added some nice animations to stuff and added a achievement/alert for the snake game, when you hit a specific score."}, {"post_id": 70364, "ts": "2026-09-19T01:39:36Z", "hours": 2.1081, "text": "Devlog 27: Designing the snake game window Design on the Tiger Snake Game app is finished. I added the instructions in the manual app, but the game is pretty simple to play. I added a skin feature in case the stripes moving are a bit hard on some peoples eyes. I added the high score tracker which saves your high score even if you close the tab. And just fixed the lay out made it look nice."}, {"post_id": 70309, "ts": "2026-09-18T22:15:48Z", "hours": 3.1364, "text": "Devlog 26: Finished adding the tiger snake game Finished making my Tiger snake game. I watched a very good and easy tutorial, link: ( https://youtu.be/Je0B3nHhKmM?si=DQiSr36gDDSM3Psj ) I still need to design it more to make it look more like a real Tiger snake, like the logo if you can see all the way down there. I think also I could make some Instructions and a highscore button, so that will be for next time."}, {"post_id": 69938, "ts": "2026-09-18T03:03:26Z", "hours": 0.63, "text": "Devlog 25: Secret button editing Just added the hover glow to the secret button so you can be more sure your on something special. So far I think my project is close to the end and I just need to do now fixing up to make perfect . And maybe even an extra feature. This is what the front of my page looks like (there more apps and features, the app side bar is scrollable, as you can see from my other devlogs)."}, {"post_id": 69069, "ts": "2026-09-16T10:01:51Z", "hours": 1.5325, "text": "Devlog 24: Added the secret button Finished Adding the Secret feature! I cannot show you yet because it’s secret, but you could try and find it on my site (It’s not that hard its pretty obvious to find the secret). Also I added a ding when you find the secret and as you can see the alert in the image at the bottom, so you will know if you found it."}, {"post_id": 68559, "ts": "2026-09-15T10:07:36Z", "hours": 2.4817, "text": "Devlog 23: Making the weather window look nice Made the weather app have a default weather image now, but when the user inputs city it will change to the correct one. Also as you can see I made the handle a starling, and also in the bottom right corner there is 3 of them. The handle starling is for all of the windows and is how you drag, by holding it. That is for something I am making right now, however I am not finsihed yet. Just trying to make my website look as good as possible right now, while keeping the simple theme. (edit: I actually just realized that this devlog is exactly 1 second longer than the previous one)."}, {"post_id": 67978, "ts": "2026-09-14T09:38:41Z", "hours": 2.4814, "text": "Devlog 22: Designing the manual window, welcome window, and other windows Finished designing the manual app. It looks not too bad. Also I edit the welcome window bit, but I still have some work to do, to make it stand out. This took a while as I was playing around with the CSS also fixing other windows and stuff."}, {"post_id": 67070, "ts": "2026-09-13T03:43:12Z", "hours": 0.9197, "text": "Devlog 21: Adding content to manual window Just added some information into the Manual app. Im not finished yet, I still need to make it look nicer. I will add some images and stuff to it next."}, {"post_id": 66369, "ts": "2026-09-12T05:10:30Z", "hours": 2.5203, "text": "Devlog 20: Added icon side bar, making new window, and fixing roar sound errors Finished making the side bar with the icons. The side bar is scrollable, because I had too many icons and so that keeps them stored there better. I also started making the manual window, but I haven’t added any content yet. I also fixed some errors such as, the roar sound button would keep playing, even when the window was closed, so I thought it might be better if it stopped the sound when the sound window is closed. I also fixed some other errors and stuff, but everything looks good now."}, {"post_id": 65841, "ts": "2026-09-11T07:50:12Z", "hours": 0.9428, "text": "Devlog 19: Real working weather window added Finally finished the weather window. It was very hard to do for me. I’m not done yet I still need to edit it to make the design look more good. The api works, and it runs smoothly. Need to change a few things also like the app icon side bar. Used a bit of AI to learn how to set up the api, since I was using a different one than the tutorial, it was much harder, but still uses same main core code. Overall I am happy with how It turned out. There’s still a lot to improve on, however I learn a lot from this."}, {"post_id": 65744, "ts": "2026-09-11T03:05:00Z", "hours": 0.3494, "text": "Devlog 18: Adding fun fact window app icon Adding fun fact window app icon, and fixing some other stuff finished up the window. This is for the old weather window that I gave up on, that is now gonna be a weather fun fact window. I will still have both windows, its just one will be for a fun fact and one for a working API weather app."}, {"post_id": 65297, "ts": "2026-09-10T10:38:52Z", "hours": 0.8128, "text": "Devlog 17: Trying to make Working Weather window again Trying again to make a real working weather window. Im still gonna keep the other one as like a cool fact, but this one is gonna work. I have found a good tutorial and I am really trying to make this work."}, {"post_id": 65212, "ts": "2026-09-10T05:52:50Z", "hours": 1.5169, "text": "Devlog 16: Scratch the weather API idea Slight change in idea. No more weather api. Its a static window that shows the hottest day in Madhya Pradesh, home to the highest population of tigers in an Indian state. Looks pretty nice though."}, {"post_id": 65078, "ts": "2026-09-09T23:01:26Z", "hours": 1.1167, "text": "Devlog 15: Started trying to make weather window Just started making a new weather window. I’m 15 minutes through the tutorial and now I need to add the api. I have never used an API before so this might be hard."}, {"post_id": 64670, "ts": "2026-09-09T08:08:11Z", "hours": 2.3972, "text": "Devlog 14: Adding comments to js and making new window Finally finished sorting out my code so its easier to move and navigate around, using comments and stuff. I also made this Tiger information window, that shows some interesting information and facts about tigers. The window is scrollable and there is more information below this. Took me a while to do all of this and find information and stuff, but it looks like it turned out not too bad."}, {"post_id": 64472, "ts": "2026-09-08T21:55:55Z", "hours": 0.9753, "text": "Devlog 13: Adding comments to my CSS Just sorting out my CSS so its easier to read. Adding comments and making specific parts for different windows and features so that they are easy to find."}, {"post_id": 64030, "ts": "2026-09-08T04:39:41Z", "hours": 1.3342, "text": "Devlog 12: Added start up animation Made an animation on site startup. The text comes in from the left and then the tiger drops down. It wasn’t too hard, but I did find some struggle. I used Canva to make the design for the banner here and in my README are the credits to all of the photos and resources I have used from other people."}, {"post_id": 63439, "ts": "2026-09-07T09:04:16Z", "hours": 2.1725, "text": "Devlog 11: Added dark/light mode switcher feature Just made a dark/light mode switcher in the settings window. Also if you close the tab it will stay the way you left it (This is the same for the background switcher as well). I also fixed many of the errors that I had, such as it not saving."}, {"post_id": 62754, "ts": "2026-09-06T08:40:59Z", "hours": 0.5739, "text": "Devlog 10: Making an images and audio file, and fixing a few errors Just fixing an few errors and tidying things up. I had a few errors in my code so I just fixed that and then made my images and audio files more neater."}, {"post_id": 62556, "ts": "2026-09-06T00:26:52Z", "hours": 2.5967, "text": "Devlog 9: Added a settings window with a background changer Finally finished the settings window. Its a background changer and it took so long to make and even longer to layout. The background changer works perfectly and looks good in both backgrounds. Was a bit hard though."}, {"post_id": 62022, "ts": "2026-09-05T07:17:22Z", "hours": 1.5619, "text": "Devlog 8: Added a new tiger map window Added Tiger species habitat map. It shows where different Tiger species live and a bit more info. (Image from Wildlife foundation in Thailand (WFFT))."}, {"post_id": 61964, "ts": "2026-09-05T04:49:42Z", "hours": 0.9481, "text": "Devlog 7: Added multiple sound effects Added some different Tiger species sounds to the window, so you can see the slight differences and similarities. First Devlog after first ship."}, {"post_id": 61803, "ts": "2026-09-04T21:49:12Z", "hours": 0.4042, "text": "Devlog 6: Readme added Readme Added now ready to ship (There is more to the Readme than the image shows). The README includes information about my website and how I made it."}, {"post_id": 61420, "ts": "2026-09-04T10:10:11Z", "hours": 1.6531, "text": "Devlog 5: New window added - roar sound effect Added a working Tiger roar sound effect button to a new window. When you press the button is makes a roar sound effect."}, {"post_id": 61318, "ts": "2026-09-04T05:17:55Z", "hours": 2.0894, "text": "Devlog 4: Adding tiger gallery window Added a new photo gallery window to my site. There is also now a close button that closes the window, and I finished the tutorial this is just what I made instead of the tutorials other window, but it uses the same properties."}, {"post_id": 60735, "ts": "2026-09-03T09:19:54Z", "hours": 2.0831, "text": "Devlog 3: Adding drag and open buttons Added the drag buttons to the window, also added the open button as you can see in the top left corner. I made this In JavaScript using event listeners .On part 4 of the guide."}, {"post_id": 60545, "ts": "2026-09-02T23:07:05Z", "hours": 0.3536, "text": "Devlog 2: Adding the working date/time Adding a working date/time at the top right corner. It updates live according to where you live. Still on the tutorial."}, {"post_id": 60127, "ts": "2026-09-02T09:31:06Z", "hours": 0.4903, "text": "Devlog 1: The start of my WebOS Making my first WebOS. Finished part one of the tutorial. here’s what it looks like right now."}]...
|
Title: Tiger OS by @Rayan123-4 | Stardance
Devlog Title: Tiger OS by @Rayan123-4 | Stardance
Devlogs:
Devlog 1: The start of my WebOS Making my first WebOS. Finished part one of the tutorial. here’s what it looks like right now.
Devlog 2: Adding the working date/time Adding a working date/time at the top right corner. It updates live according to where you live. Still on the tutorial.
Devlog 3: Adding drag and open buttons Added the drag buttons to the window, also added the open button as you can see in the top left corner. I made this In JavaScript using event listeners .On part 4 of the guide.
Devlog 4: Adding tiger gallery window Added a new photo gallery window to my site. There is also now a close button that closes the window, and I finished the tutorial this is just what I made instead of the tutorials other window, but it uses the same properties.
Devlog 5: New window added - roar sound effect Added a working Tiger roar sound effect button to a new window. When you press the button is makes a roar sound effect.
Devlog 6: Readme added Readme Added now ready to ship (There is more to the Readme than the image shows). The README includes information about my website and how I made it.
Devlog 7: Added multiple sound effects Added some different Tiger species sounds to the window, so you can see the slight differences and similarities. First Devlog after first ship.
Devlog 8: Added a new tiger map window Added Tiger species habitat map. It shows where different Tiger species live and a bit more info. (Image from Wildlife foundation in Thailand (WFFT)).
Devlog 9: Added a settings window with a background changer Finally finished the settings window. Its a background changer and it took so long to make and even longer to layout. The background changer works perfectly and looks good in both backgrounds. Was a bit hard though.
Devlog 10: Making an images and audio file, and fixing a few errors Just fixing an few errors and tidying things up. I had a few errors in my code so I just fixed that and then made my images and audio files more neater.
Devlog 11: Added dark/light mode switcher feature Just made a dark/light mode switcher in the settings window. Also if you close the tab it will stay the way you left it (This is the same for the background switcher as well). I also fixed many of the errors that I had, such as it not saving.
Devlog 12: Added start up animation Made an animation on site startup. The text comes in from the left and then the tiger drops down. It wasn’t too hard, but I did find some struggle. I used Canva to make the design for the banner here and in my README are the credits to all of the photos and resources I have used from other people.
Devlog 13: Adding comments to my CSS Just sorting out my CSS so its easier to read. Adding comments and making specific parts for different windows and features so that they are easy to find.
Devlog 14: Adding comments to js and making new window Finally finished sorting out my code so its easier to move and navigate around, using comments and stuff. I also made this Tiger information window, that shows some interesting information and facts about tigers. The window is scrollable and there is more information below this. Took me a while to do all of this and find information and stuff, but it looks like it turned out not too bad.
Devlog 15: Started trying to make weather window Just started making a new weather window. I’m 15 minutes through the tutorial and now I need to add the api. I have never used an API before so this might be hard.
Devlog 16: Scratch the weather API idea Slight change in idea. No more weather api. Its a static window that shows the hottest day in Madhya Pradesh, home to the highest population of tigers in an Indian state. Looks pretty nice though.
Devlog 17: Trying to make Working Weather window again Trying again to make a real working weather window. Im still gonna keep the other one as like a cool fact, but this one is gonna work. I have found a good tutorial and I am really trying to make this work.
Devlog 18: Adding fun fact window app icon Adding fun fact window app icon, and fixing some other stuff finished up the window. This is for the old weather window that I gave up on, that is now gonna be a weather fun fact window. I will still have both windows, its just one will be for a fun fact and one for a working API weather app.
Devlog 19: Real working weather window added Finally finished the weather window. It was very hard to do for me. I’m not done yet I still need to edit it to make the design look more good. The api works, and it runs smoothly. Need to change a few things also like the app icon side bar. Used a bit of AI to learn how to set up the api, since I was using a different one than the tutorial, it was much harder, but still uses same main core code. Overall I am happy with how It turned out. There’s still a lot to improve on, however I learn a lot from this.
Devlog 20: Added icon side bar, making new window, and fixing roar sound errors Finished making the side bar with the icons. The side bar is scrollable, because I had too many icons and so that keeps them stored there better. I also started making the manual window, but I haven’t added any content yet. I also fixed some errors such as, the roar sound button would keep playing, even when the window was closed, so I thought it might be better if it stopped the sound when the sound window is closed. I also fixed some other errors and stuff, but everything looks good now.
Devlog 21: Adding content to manual window Just added some information into the Manual app. Im not finished yet, I still need to make it look nicer. I will add some images and stuff to it next.
Devlog 22: Designing the manual window, welcome window, and other windows Finished designing the manual app. It looks not too bad. Also I edit the welcome window bit, but I still have some work to do, to make it stand out. This took a while as I was playing around with the CSS also fixing other windows and stuff.
Devlog 23: Making the weather window look nice Made the weather app have a default weather image now, but when the user inputs city it will change to the correct one. Also as you can see I made the handle a starling, and also in the bottom right corner there is 3 of them. The handle starling is for all of the windows and is how you drag, by holding it. That is for something I am making right now, however I am not finsihed yet. Just trying to make my website look as good as possible right now, while keeping the simple theme. (edit: I actually just realized that this devlog is exactly 1 second longer than the previous one).
Devlog 24: Added the secret button Finished Adding the Secret feature! I cannot show you yet because it’s secret, but you could try and find it on my site (It’s not that hard its pretty obvious to find the secret). Also I added a ding when you find the secret and as you can see the alert in the image at the bottom, so you will know if you found it.
Devlog 25: Secret button editing Just added the hover glow to the secret button so you can be more sure your on something special. So far I think my project is close to the end and I just need to do now fixing up to make perfect . And maybe even an extra feature. This is what the front of my page looks like (there more apps and features, the app side bar is scrollable, as you can see from my other devlogs).
Devlog 26: Finished adding the tiger snake game Finished making my Tiger snake game. I watched a very good and easy tutorial, link: ( https://youtu.be/Je0B3nHhKmM?si=DQiSr36gDDSM3Psj ) I still need to design it more to make it look more like a real Tiger snake, like the logo if you can see all the way down there. I think also I could make some Instructions and a highscore button, so that will be for next time.
Devlog 27: Designing the snake game window Design on the Tiger Snake Game app is finished. I added the instructions in the manual app, but the game is pretty simple to play. I added a skin feature in case the stripes moving are a bit hard on some peoples eyes. I added the high score tracker which saves your high score even if you close the tab. And just fixed the lay out made it look nice.
Devlog 28: Added achievement alert Added some nice animations to stuff and added a achievement/alert for the snake game, when you hit a specific score.
Devlog 29: Struggling on the calculator window 4 hours down the drain. I worked for 4 hours trying to get a simple thing like a calculator to work. Some how it kept not working even when I followed a tutorial correctly. I will try again tomorrow maybe with a different tutorial, but honestly idk what happend. Also part of it was me trying to code in python and that turned out a disaster, but then I went to JavaScript and still didn’t work??. I know it might seem weird and also stardance if your reading this you can like delete the 4 hours or whatever from my thing Incase idk if this is fraud or something.
Devlog 30: Finally made the calculator window Idk how I managed to make it, but maybe the tutorial I was watching before was just not it. However, this one is: ( https://youtu.be/KM8PIiqq97c?si=RgpvGnOKA7ZbfZoQ ). Anyone wanting to make a good calculator, check out that tutorial because he saved me! Thanks KennyYipCoding on youtube. Also surprisingly simple.
Devlog 31: Making the drawing window function Making drawing window. Don’t mind why it looks weird right now, I will fix it later. Also I spent a lot of time trying to fix some hidden error I didn’t know where it was and I was totally confused, so I went back a commit and put my working code back and it fixed. I think I am going to wrap up my project soon, so that I don’t create more project breaking errors.
Devlog 32: Adding the paint window My Tiger Masterpiece! Finally finished making the paint board window. I also fixed a few bugs that I had with the drag header, and it not working. Im going to add the title to this soon and also I will add an undo button incase you accedently delete your Tiger mona lisa.
Devlog 33: Adding undo button to paint window Added the undo button and made it so that it will undo lines, fill, and clear. This means that if you accidently fill your work or clear it you can press undo and it will bring it back :). Works for multiple times, because it saves it in a array. I am very happy with how it came out, because it was quite challenging to make.
Devlog 34: Adding information to manual window Just adding some more information to my Manual, for the new things that I have made. This is where users can find information about different features in my website. I wrote it all myself.
Devlog 35: Fixed many usability errors that I had such as Making boundaries for dragging the window. Making the scroll app bar optimize for different window sizes. Fixing a bug where you can play all roar sounds at once and they overlap. And a few random glitched that I found while trying to fix these.
Devlog 36: Adding a link window Creating a link window that has multiple links. The window is closable and it uses the same functions as the other windows except that you cannot drag it.
Devlog 37: Icon hover response Finsished making the icons hover display to stay on the icon image, if the corrisponding window is still open. Once the window is closed the style goes back to normal, but still if you hover it will have the style.
Devlog 38: Finishing touches Adding finishing touches to my WebOS such as fixing code to work better. Making it so if you tap a window that is behind another window, it gets moved to the front. And some other fixes.
Devlog 39: May be Last Devlog This is going to probably be my final devlog until I ship. I have enjoyed making this project and I hope that I can maybe make it better in the future. This video shows all of my windows and stuff.
Devlog 40: Camera Animation Added Added a camera flash animation when you open the gallery app. It was quiet hard to make flash show after the camera image, but it works well.
Devlog 41: Styling the windows, making it look nice Fixed some of the styling on the windows, specifically on the manual window and the welcome window, since my rating said they looked like a power point. Trying to make my website look much cleaner and have a better design.
Devlog 42: Minimizer button Added a minimizer button to all of the windows. I made it so that when users press the button, the hover filter glow will show on the corrisponding icon, to let users know the window is open. Difficulty This was fairly simple to do, and I just had to make some code for it in the same place near the close button in the Javascript.
Devlog 43: Fix camera animation Fixing the camera animation, making it so the user cannot spam open the window, making the animation run for however many times the user tapped the icon. Difficulty It wasn’t too hard to do, just needed to make some simple if statement to check if the window had been opened. Edited Also adjusted some styling in the map window making the text hover change in css.
Devlog 44: Fixed a z-index error, adjusted the colors and styling I found a z-index error in the Javascript file, where the images when opened, wouldn’t go to the highest z-index, so I just added z-index 99 when window open. I also mainly adjusted the colors, experimenting in CSS, to get the best design and the best text to background ratio in CSS. Difficulty Not too bad, because I didn’t have to go through hidden Javascript syntax errors and stuff, so it was mostly stuff I could just look around for a bit until I find the missing parenthesis or something.
Devlog 45: Added a lot of in depth comments to my Javascript file. And adding a download button to the paint window. I went through my Javascript code and worked on improving my comments and adding more, where they were needed. I focused on being very descriptive with my comments, explaining what things do and how. I also added some hover animations to the paint board buttons. Download button added I added a download button to my paint window. I made it so when the user clicks the button, the browser download trigger is activated and the image is downloaded. I did this in Javascript using toDataURL(). Diffuculty Making the comments was fairly easy, as I just went to important parts with no comments and added explanations about them. Also the Javascript for the download button wasn’t too hard, and I think I am learning more and more about Javascript, which is helping make it easier and easier.
Devlog 46: Edited some of the CSS styling on the windows and top bar. I edited the CSS styling on things like the, text, the windows, and the top bar. I used functions such as, text-shadow and box-shadow, to make text and windows stand out and look much nicer. I also edited the border color and size of many things to make them either pop or, look better in between colors. Things like animations scale and filter, also helped make it look much more appealing. What did I learn and how difficult was it I learnt more about CSS styling and how to make project look extra nice. I was playing around with the CSS learning new mechanics and functions, to help make different things and parts of project look more nicer and clean. This was fairly easy and I didn’t have any trouble with doing so.
Devlog 47: Add text on icon hover, that displays window name. I made it so that when you hover over the icons in the icon bar, it will show the name of the window that the icon is connected to. This makes it easier for users to know what icon goes to which window, without guesses based on the icon image. What did I learn and what was difficult. At first I thought that making this would only need a bit of HTML and CSS, and normally it would. However I came upon a problem and CSS wasn’t fixing it, nor was the HTML, so I had to adapt and use Javascript to fix my error. Eventually it worked out in the end, and not much Javascipt was actually needed. This helped me to learn how to fix errors outside of the box, and too try different ways to fix them. This helped me learn more about problem solving and debugging, which will help me in future projects.
Devlog 48: Updating the CSS styling and improving the interface visibility. I edited the CSS stying adding more things such as box-shadow and different color border. I made sure the web os looked good and wasn’t too heavily colored, that might make the text less easy to read. I also fixed the minimize button in the link window since it was off centered, because of the small size of it compared to the normal window sized ones. Difficulty: For me to be honest, this was difficult not because of like syntax and stuff, but because I’m not very good at styling. I tried to like make it pop and look extra good, and I think I have done well.
Devlog 49: Adding tiger population chart window and UI polishing. I added a new window that shows the tiger population in the countries Russia, Nepal, and India. The data points are the milestones of there tiger conservation across 2010 to 2016 to 2022. The chart is a line graph and the 3 line variables are the countries. The chart looks very good and I am happy with how it turned out. I also polished more of my webOS using nice fonts such as “Fira Sans”, “Bold”, and “Italic”. I styled it and made sure across my webOS there was a orange, black, and white theme, like the tigers colors. What did I learn and what was difficult The most difficult part of it was debugging everything when I found errors. I learnt the functions for making a graph in JavaScript and how to get data and put it into a graph using code, while still making it look nice. This helps me a lot especially for more projects I might do in the future using data and statistics.
Devlog 50: Adding new 3D Tiger Earth window. I added a new window made with three.js, that is a 3D globe of the world that is, movable, rotatable, and zoom in able. I also added a feature where you can stop the rotation, so that its easier to view (And find the hidden Tiger). First I made the 3D circle and of the globe and then added the texture and animations. What did I learn and what was difficult. This is my first time making a project like a 3D thing, so I was a bit new to this. Now I have learnt much more about how to make 3D projects like this and I hope I can make many more simulation projects like this in the future.
Devlog 51: Adding stars, realistic tilt, and better quality textures to the 3D earth. I added 2000 stars to the earth window and even made a realistic tilt for the earth, like how it is in real life. I think that the stars made a big impact on the overall feel of the window, and makes it look much better. I also added a 8k quality texture onto the earth model instead of a 2k quality texture, so that the earth would be more clearer to see.
Devlog 52: Just tiding up my code with comments and editing the README.md Just tiding up my code, adding comments and making sure it all looks nice for the ship. I have learn a lot from making this project and I am happy with how it turned out. This will be my final devlog, and so please give me good ratings and feedback, so that I can learn and improve.
Ships:
I made my first WebOS. It was very difficult and challenging to make, but the jams guide made it much more easier to get started with and finish. The site currently has 2 apps, but there will be more to come in the future.
I made TigerOS, a tiger themed WebOS made for the WebOS Stardance mission. I made it using HTML, CSS, and Javascript. It has many features such as, a real time weather app, a working calculator app, a snake game app, a paint canvas app, sounds, special effects, and the list goes on. The most challenging part of making this, was getting everything to work smoothly how I want it with no errors. Probably the hardest thing that I made was the weather API app, since I had never worked with an API before it was very challenging, but I learnt a lot. I am very proud of how it came out, and that all my apps and features work to how I want it. I didn’t think I would make it this far to have so many cool stuff, but I am very happy with my final product. I suggest that anyone wanting to try out my site, they should test out all of the apps and the features. I also encourage you to find the hidden secret feature. However, it should be pretty obvious to find. Test out all of the weather apps, and even try to beat my high score of 25 on the tiger snake game. Please take some time to explore TigerOS and leave a thoughtful review, as any feedback would really help me to improve. Thanks Stardance, for setting up this oportunity for me and everyone else.
What did I make I made TigerOS, a web based operating system that it completely run on the web. It’s themed around tigers as you can see, and has many interesting features such a as a, weather API, a tiger habitat and population graph, a classic calculator, a tiger earth three.js simulator and many more amazing experiences to explore through. It is made using JavaScript, HTML, and CSS. What was chalenging The most challenging part of making this project for me was the JavaScript. I am quite new to JavaScript and coding things like the earth using three.js was very new to be and it took some time and learning. Also I the styling wasn’t nessisary hard, however I would say that I am not the best at it, so it took also some time to get it too look nice. What am I most proud of I am most proud of making advanced features to my webOS such as a, tiger habitat and population graph and a 3d earth and stars using three.js. I am proud of learning more about JavaScript syntax and how to properly debugg and fix stuff when I have a problem. What should people know about my project It runs completely on the web, so no installing or any local host is needed. Just click on the link either in my project description or in the README.md. I would suggest reading though my README and other devlogs, I know that they are a bit long, so you don’t need to read all of them just skim through and get the jist of what I have done. Thank you for taking the time to read through, It would be really helpful for me if your left good reviews and ratings, that would help me further improve on my coding journey....
|
1793105663.4205477
|
1793192063.4205477
|
|
48643
|
Habit completion predictor by @zico | Stardance
|
zico
|
1
|
45.55
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-16T20:26:42Z", "hours": 40.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I just wrapped up the development of the prediction model although i’m yet to implement an auto retraining of model based on users data because i have little data to actually analyse which model would be the best which still leaves the model at the default one trained with synthetic data. Your data are been kept tho and would be trained on when the feature is active and your logs is up to the min requirement", "repo": "https://github.com/young1dev/habit-coach", "demo": "https://habit-coach-beige.vercel.app"}]...
|
[{"post_id": 82510, "ts": "202 [{"post_id": 82510, "ts": "2026-10-25T02:53:39Z", "hours": 4.1175, "text": "Revamped the UI and restructured the app shell. The UI might not be as good as expected tho. I also edited my READMe to make it more detailed on the actual project position and what works vs what doesn’t work. I also edited the prompt been sent to the AI for the summary of the logged habit"}, {"post_id": 82338, "ts": "2026-10-24T16:29:24Z", "hours": 1.4339, "text": "Sorry i haven’t been actively posting a devlog. I’m currently working on the UI of the project as it got sent back after been reviewed. While testing the application, i found out some core issues like login in taking more time to verify and SQLAlchemy reusing closed database session pool. I’ve debugged and optimize the logging time as best as i can, although the main blocker is my server (Render) which puts the server to sleep after a while and wakes back up when a request is been sent to it which also influences the server response time but not necessarily the main cause as bcrypt password verification also takes more computational resources and database connection. For the 2nd bug fix i made sure that before any query gets through, it runs a pool_pre_ping to verify if it’s still active, else it would replace the stale database connection with a new one"}, {"post_id": 77294, "ts": "2026-10-06T13:50:41Z", "hours": 3.8983, "text": "I just fixed a server failure for the backend due to duplicate db table. It’s up and running to use now. I’ll be improving feature engineering for the underlyin ML Model after i’ve gathered enough real data. Feel free to check out the project and suggest any changes 😊"}, {"post_id": 48504, "ts": "2026-08-16T21:35:26Z", "hours": 36.3628, "text": "Successfully trained the model with an accuracy of 99% (PSS: That’s because i used synthetic dataset and it wasn’t realistic enough). What i’ve done so far: Feature Engineering: Mapped out features that could be useful in predicting an habit completion and filtered out noise features Created a synthetic dataset for the ML training using Logistic Regression and Decision Tree (Both seemed to work well tho). I tested the ML model with the training dataset and did a mini visual evaluation on the model accuracy and features dependency."}]...
|
Title: Habit completion predictor by @zico | Stard Title: Habit completion predictor by @zico | Stardance
Devlogs:
Successfully trained the model with an accuracy of 99% (PSS: That’s because i used synthetic dataset and it wasn’t realistic enough). What i’ve done so far: Feature Engineering: Mapped out features that could be useful in predicting an habit completion and filtered out noise features Created a synthetic dataset for the ML training using Logistic Regression and Decision Tree (Both seemed to work well tho). I tested the ML model with the training dataset and did a mini visual evaluation on the model accuracy and features dependency.
I just fixed a server failure for the backend due to duplicate db table. It’s up and running to use now. I’ll be improving feature engineering for the underlyin ML Model after i’ve gathered enough real data. Feel free to check out the project and suggest any changes 😊
Sorry i haven’t been actively posting a devlog. I’m currently working on the UI of the project as it got sent back after been reviewed. While testing the application, i found out some core issues like login in taking more time to verify and SQLAlchemy reusing closed database session pool. I’ve debugged and optimize the logging time as best as i can, although the main blocker is my server (Render) which puts the server to sleep after a while and wakes back up when a request is been sent to it which also influences the server response time but not necessarily the main cause as bcrypt password verification also takes more computational resources and database connection. For the 2nd bug fix i made sure that before any query gets through, it runs a pool_pre_ping to verify if it’s still active, else it would replace the stale database connection with a new one
Revamped the UI and restructured the app shell. The UI might not be as good as expected tho. I also edited my READMe to make it more detailed on the actual project position and what works vs what doesn’t work. I also edited the prompt been sent to the AI for the summary of the logged habit
Ships:
I just wrapped up the development of the prediction model although i’m yet to implement an auto retraining of model based on users data because i have little data to actually analyse which model would be the best which still leaves the model at the default one trained with synthetic data. Your data are been kept tho and would be trained on when the feature is active and your logs is up to the min requirement...
|
1793008350.3581512
|
1793094750.3581512
|
|
2233
|
R0B0 by @Rocket | Stardance
|
Rocket
|
1
|
4.01
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-10T19:54:50Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an mini Jarvis, is only on vocal command. The hardest thing was making him listen, because pyaudio wasn’t working so I had to replace it. I’m proud of making it open task manager,chrome and youtube.", "repo": "https://github.com/rocket806/R0B0", "demo": "https://github.com/rocket806/R0B0/releases/tag/v1.0.2-demo"}]...
|
[{"post_id": 8251, "ts": "2026 [{"post_id": 8251, "ts": "2026-06-13T18:37:01Z", "hours": 1.0142, "text": "Devlog 3 Hi! My first ship was denied so I’m making a new devlog. What I did today: So I made a new readme for my project(it took a while) and I fixed something. R0B0 was doing the task whitout the wake word,so I finally managed to make it respond only with the wake word. That’s all for today, see you soon,bye!"}, {"post_id": 6413, "ts": "2026-06-10T19:49:17Z", "hours": 0.5822, "text": "Devlog 2 Hi! this is my last devlog on this project and I want to tell you the latest functions that I added. One of them is opening Chrome and vs code that I do it with the library os. And the last function is searching and opening Youtube. This function I do it with de library webbrowser. See you soon! Bye!"}, {"post_id": 6336, "ts": "2026-06-10T17:46:19Z", "hours": 2.4108, "text": "Devlog 1 Hi! My name is Rocket, and I really like Jarvis, so I thought I’d make my own. The idea is simple: create an assistant that is always ready to do simple tasks (like creating a new directory or opening Task Manager) and is also fun (he can tell jokes! :) ). Today, I managed to implement some important functions for R0B0. One of them was making him listen continuously. In the beginning, I had some problems with this feature because it was consuming around 20-30% of my CPU. After some tweaking, I managed to lower it below 10% (it still spikes over 10% sometimes, but only for a very short moment). Another very important feature I added was microphone input. At first, I tried using PyAudio (an older Python library for microphone access), but it didn’t work because I am using a very recent version of Python. I also tried workarounds like pipwin, but that failed too. Ultimately, I used two other libraries sounddevice and scipy and it worked perfectly! That’s all for today! See you soon, bye!"}]...
|
Title: R0B0 by @Rocket | Stardance
Devlogs:
Devlo Title: R0B0 by @Rocket | Stardance
Devlogs:
Devlog 1 Hi! My name is Rocket, and I really like Jarvis, so I thought I’d make my own. The idea is simple: create an assistant that is always ready to do simple tasks (like creating a new directory or opening Task Manager) and is also fun (he can tell jokes! :) ). Today, I managed to implement some important functions for R0B0. One of them was making him listen continuously. In the beginning, I had some problems with this feature because it was consuming around 20-30% of my CPU. After some tweaking, I managed to lower it below 10% (it still spikes over 10% sometimes, but only for a very short moment). Another very important feature I added was microphone input. At first, I tried using PyAudio (an older Python library for microphone access), but it didn’t work because I am using a very recent version of Python. I also tried workarounds like pipwin, but that failed too. Ultimately, I used two other libraries sounddevice and scipy and it worked perfectly! That’s all for today! See you soon, bye!
Devlog 2 Hi! this is my last devlog on this project and I want to tell you the latest functions that I added. One of them is opening Chrome and vs code that I do it with the library os. And the last function is searching and opening Youtube. This function I do it with de library webbrowser. See you soon! Bye!
Devlog 3 Hi! My first ship was denied so I’m making a new devlog. What I did today: So I made a new readme for my project(it took a while) and I fixed something. R0B0 was doing the task whitout the wake word,so I finally managed to make it respond only with the wake word. That’s all for today, see you soon,bye!
Ships:
I made an mini Jarvis, is only on vocal command. The hardest thing was making him listen, because pyaudio wasn’t working so I had to replace it. I’m proud of making it open task manager,chrome and youtube....
|
1792986905.212943
|
1793073305.212943
|
|
70415
|
str by @avanibyn | Stardance
|
avanibyn
|
0
|
1.72
|
0
|
[]
|
[{"post_id": 82508, "ts": "202 [{"post_id": 82508, "ts": "2026-10-25T02:24:18Z", "hours": 1.0125, "text": "I didnt like my script so idecided todelete everything and rewrite it"}, {"post_id": 81385, "ts": "2026-10-21T02:57:30Z", "hours": 0.7092, "text": "im starting the first bits of the script"}]...
|
Title: str by @avanibyn | Stardance
Devlogs:
im s Title: str by @avanibyn | Stardance
Devlogs:
im starting the first bits of the script
I didnt like my script so idecided todelete everything and rewrite it...
|
1793008423.6708856
|
1793613223.6708856
|
|
45845
|
NINJAPAD by @ritvikgrandhi | Stardance
|
ritvikgrandhi
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T02:54:40Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The NinjaPad: The only macropad based on Ninjago. It has 9 keys and a rotary encoder, letting me type numbers and adjust my volume. I wanted to make something inspired by one of my favorite characters, and I’m really happy with how it turned out! This was a fun project to bring to life from an idea, and I’m excited to have it finally shipped. Eventually, I will change the keymap so that it can do some useful things, but as of right now, I’ll keep it this way. For the video on the design process, look at this video: https://www.youtube.com/watch?v=FO7RWctOAWQ (The button has the physical project demo) Huge thanks to Stardance Hack Club for making projects like this possible!", "repo": "https://github.com/ritvikgrandhi-hue/HACKPAD", "demo": ""}]...
|
[{"post_id": 82507, "ts": "202 [{"post_id": 82507, "ts": "2026-10-25T01:58:01Z", "hours": 1.0633, "text": "I Got it to Work! Sorry that I haven’t been keeping tabs on this project for a long time, but I finally fixed the problems! After salvaging the parts from my mistake last time, I prototyped with a breadboard, where I realized that the problem wasn’t with the hardware, but with the software. Turns out I designated the wrong GPIO pins to the components on the PCB. After figuring that out, I soldered everything onto a spare PCB, put it in my 3D printed case, plugged it in, and it now works! The volume control and keys work, although the functions are a bit funky, but sadly, I couldn’t salvage the OLED, and so there is an empty green space in that area. Other than that, it looks amazing!"}, {"post_id": 67794, "ts": "2026-09-14T01:21:48Z", "hours": 1.3933, "text": "MAJOR UPDATE Long Story Short: I messed up some of the components. So I recently got the materials for my hackpad, which was nice, and I immediately got to work on it. The first problem I encountered was my PCB design. I messed up the diode footprint, and ended up with surface-mounted pads for through-hole diodes, which has horrible structural integrity when you solder them together. However, since I can’t afford to get more PCBs, I had to make do with the 5 copies that I had. My first soldering job was fine, I added all of the components, did the diodes last, and ripped out the pads :(. However, I did end up hand-soldering three of them, and so i flashed my software to the RP2040 to see if any of those keys worked. To my disappointment, none of them worked, and I even switched around the orientation of the diodes about 3 times! Then came the worst part: DESOLDERING. I took out the keys fairly easily, but I had to sacrifice one rotary encoder(which was fine because the pack comes with two). Sadly, the two parts I needed most, the OLED and the RP2040, were stuck!! I managed to take both of them out in the end(didn’t record the time) and ended up ripping out pads on the rp2040 and burning up the OLED. Oh yeah, and I also had to demolish the PCB to get them free? For now, I’m getting a new RP2040, but I probably can’t procure another OLED. So once my parts arrive, I’ll have to experiment on a breadboard😭. Look at my mishaps below, and hopefully you’ll see it working soon."}, {"post_id": 59761, "ts": "2026-09-01T18:08:16Z", "hours": 0.3, "text": "CAD EDIT: Created spacers between the body and the pcb within the case"}, {"post_id": 46529, "ts": "2026-08-13T20:24:14Z", "hours": 0.9731, "text": "QMK FIRMWARE: So for today, I finished the CAD Design, including minor fixes. However, the core part that I completed was configuring my macropad to QMK. Also, I finally decided on a name, the NINJAPAD! Anyway, that’s it for now, so stay tuned! Just have to fix my github repo and make production files."}, {"post_id": 46106, "ts": "2026-08-13T02:53:37Z", "hours": 2.2842, "text": "CAD DESIGN: Well, I finally decided on a theme of my hackpad, like I said before, and its Ninjago! It’s been a huge part of my childhood since I was little, so it was the perfect theme for my personal hackpad. The color scheme and easter eggs are largely based on Kai(a character from the show), and incorporated the rest of my pcb around it. The case itself has 2 layers: the bottom one holds the pcb in place, while the top is the cover as seen here. Although, it still isn’t quite finished yet, because I will eventually change the default knob I put. Plus, I accidentally forgot to record some of the time it took, so I’m only logging 2 hours. Anyway, stay tuned!"}, {"post_id": 45491, "ts": "2026-08-12T00:53:15Z", "hours": 2.9786, "text": "TIME FOR THE REAL HACKPAD: Sorry I haven’t posted a devlog in a while, but I have fully completed the default keyboard, and am now working to make this thing my own. Currently, i have finished the schematic and PCB of my design, but it has a generic 3x3 matrix of switches, while having a rotary encoder and OLED display on the side(the ones included in the kit). Although I won’t reveal it yet, because you’ll see it in the design, I have finally thought of a theme for the design and I am very excited to start getting to work on it! Stay tuned for the CAD. EDIT: Forgot to record the time for this, but i rearranged the parts for a little more wiggle room and I also put in mounting holes."}, {"post_id": 44197, "ts": "2026-08-09T20:06:38Z", "hours": 0.5169, "text": "Hey guys, this is my second project/mission, which is my Hackpad. I’m currently following the guide on how to make the default hackpad, and I’ve just finished the Schematics and PCB of it. Stay Tuned!"}]...
|
Title: NINJAPAD by @ritvikgrandhi | Stardance
Dev Title: NINJAPAD by @ritvikgrandhi | Stardance
Devlogs:
Hey guys, this is my second project/mission, which is my Hackpad. I’m currently following the guide on how to make the default hackpad, and I’ve just finished the Schematics and PCB of it. Stay Tuned!
TIME FOR THE REAL HACKPAD: Sorry I haven’t posted a devlog in a while, but I have fully completed the default keyboard, and am now working to make this thing my own. Currently, i have finished the schematic and PCB of my design, but it has a generic 3x3 matrix of switches, while having a rotary encoder and OLED display on the side(the ones included in the kit). Although I won’t reveal it yet, because you’ll see it in the design, I have finally thought of a theme for the design and I am very excited to start getting to work on it! Stay tuned for the CAD. EDIT: Forgot to record the time for this, but i rearranged the parts for a little more wiggle room and I also put in mounting holes.
CAD DESIGN: Well, I finally decided on a theme of my hackpad, like I said before, and its Ninjago! It’s been a huge part of my childhood since I was little, so it was the perfect theme for my personal hackpad. The color scheme and easter eggs are largely based on Kai(a character from the show), and incorporated the rest of my pcb around it. The case itself has 2 layers: the bottom one holds the pcb in place, while the top is the cover as seen here. Although, it still isn’t quite finished yet, because I will eventually change the default knob I put. Plus, I accidentally forgot to record some of the time it took, so I’m only logging 2 hours. Anyway, stay tuned!
QMK FIRMWARE: So for today, I finished the CAD Design, including minor fixes. However, the core part that I completed was configuring my macropad to QMK. Also, I finally decided on a name, the NINJAPAD! Anyway, that’s it for now, so stay tuned! Just have to fix my github repo and make production files.
CAD EDIT: Created spacers between the body and the pcb within the case
MAJOR UPDATE Long Story Short: I messed up some of the components. So I recently got the materials for my hackpad, which was nice, and I immediately got to work on it. The first problem I encountered was my PCB design. I messed up the diode footprint, and ended up with surface-mounted pads for through-hole diodes, which has horrible structural integrity when you solder them together. However, since I can’t afford to get more PCBs, I had to make do with the 5 copies that I had. My first soldering job was fine, I added all of the components, did the diodes last, and ripped out the pads :(. However, I did end up hand-soldering three of them, and so i flashed my software to the RP2040 to see if any of those keys worked. To my disappointment, none of them worked, and I even switched around the orientation of the diodes about 3 times! Then came the worst part: DESOLDERING. I took out the keys fairly easily, but I had to sacrifice one rotary encoder(which was fine because the pack comes with two). Sadly, the two parts I needed most, the OLED and the RP2040, were stuck!! I managed to take both of them out in the end(didn’t record the time) and ended up ripping out pads on the rp2040 and burning up the OLED. Oh yeah, and I also had to demolish the PCB to get them free? For now, I’m getting a new RP2040, but I probably can’t procure another OLED. So once my parts arrive, I’ll have to experiment on a breadboard😭. Look at my mishaps below, and hopefully you’ll see it working soon.
I Got it to Work! Sorry that I haven’t been keeping tabs on this project for a long time, but I finally fixed the problems! After salvaging the parts from my mistake last time, I prototyped with a breadboard, where I realized that the problem wasn’t with the hardware, but with the software. Turns out I designated the wrong GPIO pins to the components on the PCB. After figuring that out, I soldered everything onto a spare PCB, put it in my 3D printed case, plugged it in, and it now works! The volume control and keys work, although the functions are a bit funky, but sadly, I couldn’t salvage the OLED, and so there is an empty green space in that area. Other than that, it looks amazing!
Ships:
The NinjaPad: The only macropad based on Ninjago. It has 9 keys and a rotary encoder, letting me type numbers and adjust my volume. I wanted to make something inspired by one of my favorite characters, and I’m really happy with how it turned out! This was a fun project to bring to life from an idea, and I’m excited to have it finally shipped. Eventually, I will change the keymap so that it can do some useful things, but as of right now, I’ll keep it this way. For the video on the design process, look at this video: https://www.youtube.com/watch?v=FO7RWctOAWQ (The button has the physical project demo) Huge thanks to Stardance Hack Club for making projects like this possible!...
|
1793084048.6235135
|
1793170448.6235135
|
|
14692
|
PastelNet:OS by @nic | Stardance
|
nic
|
2
|
25.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T01:46:38Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PastelNET://OS – A cyberpunk & vaporwave-inspired operating system that runs directly on your browser. Includes 7 applications; including a calculator, gallery, notes, and music player. No need to download any scripts or plugins, as it runs directly on the web, hosted by Github Pages. This is my first attempt at a functional website using JavaScript, designed as a tribute to my love for Cyberpunk Edgerunners. Application List: Welcome Menu: introductory message User Menu: user name input Messages: interactive fake email Music Player: play music Calculator: calculate basic math problems Notes: write notes Gallery: browse through photos Hand-coded using vanilla HTML, CSS, and JS, no frameworks. Built for the Stardance WebOS 2 mission.", "repo": "https://github.com/sodahaunted/pastelnet.os", "demo": "https://sodahaunted.github.io/pastelnet.os/"}, {"ship_num": 2, "ts": "2026-08-11T04:31:25Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A custom OS built with HTML, CSS and JavaScript. Inspired by old vaporwave and cyberpunk styles. Currently features 3 working applications, including a welcome menu, user menu and messages. A beginner web developer’s first attempt at JavaScript presented as a homage to Cyberpunk 2077.", "repo": "https://github.com/sodahaunted/pastelnet.os", "demo": "https://sodahaunted.github.io/pastelnet.os/"}]...
|
[{"post_id": 82503, "ts": "202 [{"post_id": 82503, "ts": "2026-10-25T01:26:02Z", "hours": 2.5319, "text": "pastelnetOS #9 - the completed version After many hours of reformatting code, designing application windows, and crying over CSS, I’ve finally finished PastelNetOS. It’s been a long time in the works, but I’m happy it reached a stage where I feel confident enough to ship it. Final Additions: I finished up the last three applications: the music player, notes, and gallery. I had some issues with the music player and figuring out how to get it functioning properly, but I soon figured it out after digging through a few GitHub repos and Google searches. I originally intended to make a dedicated Spotify-inspired MP3 player, but I ran out of time and just decided to make it as simple and functional as possible. The notes app is also a bit wonky, but what matters is that it works. It’s not completely unusable, but I don’t ever see myself using it in an urgent situation (lol) Challenges: I mentioned it before on a previous devlog, but I was running out of motivation to continue with this project near the end. I realized I didn’t enjoy it as much as I’d hoped, and I found myself working on other projects instead. I think it was mainly my lack of creativity and the repetitiveness of the site, and realizing I didn’t have enough prior coding knowledge to achieve some of the things I wanted to build. School was also a huge factor, as I hadn’t anticipated getting so busy in just a few weeks. I kind of underestimated how much free time I’d have to work on side projects in the first place. In conclusion, I’m glad that my biggest project for Stardance is finally complete, and I can get my certificate for 30 hours of approved work!"}, {"post_id": 80283, "ts": "2026-10-17T03:05:46Z", "hours": 3.3061, "text": "PastelnetOS #8 - calculator app! Additions made my first fully interactive application for PastelOS (with some help from YouTube) learned a bit more about JavaScript Challenges low-key kind of losing my motivation for this project; Stardance is almost over, but I’ve barely made any progress in the past month maybe set a time limit for myself? See how much progress I can make in (x) amount of hours and just finish it before it gets dragged on too long been too focused on making it look ‘polished’ instead of adding new features I feel like my devlogs have been pretty empty compared to some of my other projects, but that’s mainly due to programming feeling really repetitive and me feeling like I’m at the point where minor bugs and issues aren’t noteworthy enough to write down anymore. I see them more like a regular part of programming, and they can be easily fixed in a few minutes"}, {"post_id": 59247, "ts": "2026-08-31T22:41:34Z", "hours": 3.08, "text": "pastelnetOS #7 - nothingburger another long wait . . . Additions: The user menu finally works. I wrote an entire JS script by myself for once and its functional!! the name that you input shows up afterwards when you recieve the welcome message. Challenges: Learning JavaScript is very difficult. I have #code channel on slack and my 1 friend that knows JS on speed dial I tried making a sidebar but it still didnt work I want the sidebar to have the mp3 player, calculator, and notes to make things look clean i might add a terminal but lowk idk how to program that"}, {"post_id": 52692, "ts": "2026-08-22T23:36:38Z", "hours": 2.6781, "text": "pastelOS #6 - refined UI (1.0.6) PastelNetOS patch notes feat new icons (this one has like 0 progress done): Additions: Made some new app icons for the main layout! I didn’t really like the old ones since the font and shape(?) felt a bit out of place, and I want it to look cohesive as possible Also fixed some colouring and styling errors here and there; trying to make it look polished (though there are still only 3 apps) fixed some internal code that messed up the CSS during bug fixing Challenges: This was originally going to be a JavaScript-heavy update with more interactive features, but I still couldn’t figure out any of the code… I think I might need to go back to elementary coding classes because it took me an hour just to change the colour of the window when clicked and I didn’t even like it so I just reverted it back later 💔 I still have to fix the z-index issue and make selected windows a different colour, but JS has genuinely been a pain to learn from scratch so in the span of almost 3 hours i literally only changed the app icons. 😐 at least i got dynamic close buttons now 😭"}, {"post_id": 44991, "ts": "2026-08-11T03:51:25Z", "hours": 2.3292, "text": "pastelOS #5 - 1.0.4 feat email the messages/email app is now functional! if you click the scam link, it sends you to a fake blue screen page. updates: finally fixed topbar font updated README file updates welcome menu text to match better with the OS theme and ui better hover indicator when selecting an app working user menu i can’t believe it took me 12 hours to just make 3 apps 💔💔💔 i need to lock in for webOS 2"}, {"post_id": 39880, "ts": "2026-08-03T04:53:34Z", "hours": 2.0519, "text": "pastelOS #4 - (1.0.3 FIXED DRAG) after many hours and days, i finally fixed it. the windows are draggable. what a journey new features (alpha 1.0.3): text boxes are now transparent, inspired by liquid glass app icons are now presented in a list-type menu, similar to the cyberpunk 2077 menu in-game!! new background (old one was crusty) timer finally works DRAGGING WINDOWS FINALLY WORKS got rid of the goofy ahh ‘currently active’ text on the topbar i dont even know how i got them to work. i made a thousand and one commits on github and somehow the stars aligned and my code is working. haha ha ha ha it took me an embarrassingly long amount of time to fix this but like… as long as it works bro"}, {"post_id": 38483, "ts": "2026-07-31T21:50:04Z", "hours": 3.3581, "text": "pastelOS #3 - i hate github years will be taken off my life for how long it took for me to fix my darn github page. i hate using it. i would’ve stuck to neocities if a git repo wasnt required for stardance projects. anyways, i fixed the random merge issue i had where i accidentally opened too many branches and my dev branch and main branch were out of sync. im just gonna do everything on my main branch now. nuclear level threat incoming. for some reason my github codespace preview is different than what shows up on my site so i gotta fix that. sucks because my window drag script finally works but it doesnt even show up properly 😭 ❓ but for now, im gonna take a break demo link (alpha 1.0.1: https://sodahaunted.github.io/pastelnet.os/ )"}, {"post_id": 37955, "ts": "2026-07-31T00:30:31Z", "hours": 2.1869, "text": "pastelOS #2 still working on the os jam tutorial! got a pretty scuffed layout, the photos are wip for now i’m just playing around with the css to make it look nicer heres the absolute alpha 1.0 version of pastelOS (its ugly ik) finally fixed the javascript file that didn’t let me close the window properly?? it was because my js file loaded faster than my index.html which was a huge problem this is why you code everything in one long index.html instead of breaking it up lmao i want this to still be cyberpunk/vaporwave themed but im figuring out the ui and realizing it might be more advanced than what i know how to make i made some physical sketches to try and find the theme and plan out apps i wanna make a type of fortune teller would be pretty cool based on an rng system, higher number results in a good fortune while low number results in a bad one maybe a scam email app based on those fake messages you get in cyberpunk 2077 (?) i want an mp3 player 100%, idk what songs to put on it tho maybe some 2022 drift phonk for old times sake 😭 😭 😭 TBH i dont even know what i’m going to name this OS yet, pastelnet seems kinda off but CyberOS already exists its been over a week and im still not done this aaaa"}, {"post_id": 27852, "ts": "2026-07-13T19:04:39Z", "hours": 2.6103, "text": "pastelOS #1 playing around with github (first time using it) and css while finishing the jam tutorial its coming along well but hopefully i can fix it so it looks better later"}]...
|
Title: PastelNet:OS by @nic | Stardance
Devlogs:
Title: PastelNet:OS by @nic | Stardance
Devlogs:
pastelOS #1 playing around with github (first time using it) and css while finishing the jam tutorial its coming along well but hopefully i can fix it so it looks better later
pastelOS #2 still working on the os jam tutorial! got a pretty scuffed layout, the photos are wip for now i’m just playing around with the css to make it look nicer heres the absolute alpha 1.0 version of pastelOS (its ugly ik) finally fixed the javascript file that didn’t let me close the window properly?? it was because my js file loaded faster than my index.html which was a huge problem this is why you code everything in one long index.html instead of breaking it up lmao i want this to still be cyberpunk/vaporwave themed but im figuring out the ui and realizing it might be more advanced than what i know how to make i made some physical sketches to try and find the theme and plan out apps i wanna make a type of fortune teller would be pretty cool based on an rng system, higher number results in a good fortune while low number results in a bad one maybe a scam email app based on those fake messages you get in cyberpunk 2077 (?) i want an mp3 player 100%, idk what songs to put on it tho maybe some 2022 drift phonk for old times sake 😭 😭 😭 TBH i dont even know what i’m going to name this OS yet, pastelnet seems kinda off but CyberOS already exists its been over a week and im still not done this aaaa
pastelOS #3 - i hate github years will be taken off my life for how long it took for me to fix my darn github page. i hate using it. i would’ve stuck to neocities if a git repo wasnt required for stardance projects. anyways, i fixed the random merge issue i had where i accidentally opened too many branches and my dev branch and main branch were out of sync. im just gonna do everything on my main branch now. nuclear level threat incoming. for some reason my github codespace preview is different than what shows up on my site so i gotta fix that. sucks because my window drag script finally works but it doesnt even show up properly 😭 ❓ but for now, im gonna take a break demo link (alpha 1.0.1: https://sodahaunted.github.io/pastelnet.os/ )
pastelOS #4 - (1.0.3 FIXED DRAG) after many hours and days, i finally fixed it. the windows are draggable. what a journey new features (alpha 1.0.3): text boxes are now transparent, inspired by liquid glass app icons are now presented in a list-type menu, similar to the cyberpunk 2077 menu in-game!! new background (old one was crusty) timer finally works DRAGGING WINDOWS FINALLY WORKS got rid of the goofy ahh ‘currently active’ text on the topbar i dont even know how i got them to work. i made a thousand and one commits on github and somehow the stars aligned and my code is working. haha ha ha ha it took me an embarrassingly long amount of time to fix this but like… as long as it works bro
pastelOS #5 - 1.0.4 feat email the messages/email app is now functional! if you click the scam link, it sends you to a fake blue screen page. updates: finally fixed topbar font updated README file updates welcome menu text to match better with the OS theme and ui better hover indicator when selecting an app working user menu i can’t believe it took me 12 hours to just make 3 apps 💔💔💔 i need to lock in for webOS 2
pastelOS #6 - refined UI (1.0.6) PastelNetOS patch notes feat new icons (this one has like 0 progress done): Additions: Made some new app icons for the main layout! I didn’t really like the old ones since the font and shape(?) felt a bit out of place, and I want it to look cohesive as possible Also fixed some colouring and styling errors here and there; trying to make it look polished (though there are still only 3 apps) fixed some internal code that messed up the CSS during bug fixing Challenges: This was originally going to be a JavaScript-heavy update with more interactive features, but I still couldn’t figure out any of the code… I think I might need to go back to elementary coding classes because it took me an hour just to change the colour of the window when clicked and I didn’t even like it so I just reverted it back later 💔 I still have to fix the z-index issue and make selected windows a different colour, but JS has genuinely been a pain to learn from scratch so in the span of almost 3 hours i literally only changed the app icons. 😐 at least i got dynamic close buttons now 😭
pastelnetOS #7 - nothingburger another long wait . . . Additions: The user menu finally works. I wrote an entire JS script by myself for once and its functional!! the name that you input shows up afterwards when you recieve the welcome message. Challenges: Learning JavaScript is very difficult. I have #code channel on slack and my 1 friend that knows JS on speed dial I tried making a sidebar but it still didnt work I want the sidebar to have the mp3 player, calculator, and notes to make things look clean i might add a terminal but lowk idk how to program that
PastelnetOS #8 - calculator app! Additions made my first fully interactive application for PastelOS (with some help from YouTube) learned a bit more about JavaScript Challenges low-key kind of losing my motivation for this project; Stardance is almost over, but I’ve barely made any progress in the past month maybe set a time limit for myself? See how much progress I can make in (x) amount of hours and just finish it before it gets dragged on too long been too focused on making it look ‘polished’ instead of adding new features I feel like my devlogs have been pretty empty compared to some of my other projects, but that’s mainly due to programming feeling really repetitive and me feeling like I’m at the point where minor bugs and issues aren’t noteworthy enough to write down anymore. I see them more like a regular part of programming, and they can be easily fixed in a few minutes
pastelnetOS #9 - the completed version After many hours of reformatting code, designing application windows, and crying over CSS, I’ve finally finished PastelNetOS. It’s been a long time in the works, but I’m happy it reached a stage where I feel confident enough to ship it. Final Additions: I finished up the last three applications: the music player, notes, and gallery. I had some issues with the music player and figuring out how to get it functioning properly, but I soon figured it out after digging through a few GitHub repos and Google searches. I originally intended to make a dedicated Spotify-inspired MP3 player, but I ran out of time and just decided to make it as simple and functional as possible. The notes app is also a bit wonky, but what matters is that it works. It’s not completely unusable, but I don’t ever see myself using it in an urgent situation (lol) Challenges: I mentioned it before on a previous devlog, but I was running out of motivation to continue with this project near the end. I realized I didn’t enjoy it as much as I’d hoped, and I found myself working on other projects instead. I think it was mainly my lack of creativity and the repetitiveness of the site, and realizing I didn’t have enough prior coding knowledge to achieve some of the things I wanted to build. School was also a huge factor, as I hadn’t anticipated getting so busy in just a few weeks. I kind of underestimated how much free time I’d have to work on side projects in the first place. In conclusion, I’m glad that my biggest project for Stardance is finally complete, and I can get my certificate for 30 hours of approved work!
Ships:
A custom OS built with HTML, CSS and JavaScript. Inspired by old vaporwave and cyberpunk styles. Currently features 3 working applications, including a welcome menu, user menu and messages. A beginner web developer’s first attempt at JavaScript presented as a homage to Cyberpunk 2077.
PastelNET://OS – A cyberpunk & vaporwave-inspired operating system that runs directly on your browser. Includes 7 applications; including a calculator, gallery, notes, and music player. No need to download any scripts or plugins, as it runs directly on the web, hosted by Github Pages. This is my first attempt at a functional website using JavaScript, designed as a tribute to my love for Cyberpunk Edgerunners. Application List: Welcome Menu: introductory message User Menu: user name input Messages: interactive fake email Music Player: play music Calculator: calculate basic math problems Notes: write notes Gallery: browse through photos Hand-coded using vanilla HTML, CSS, and JS, no frameworks. Built for the Stardance WebOS 2 mission....
|
1792993939.927218
|
1793080339.927218
|
|
64236
|
SpaceML by @ChiChi | Stardance
|
ChiChi
|
0
|
22.61
|
0
|
[]
|
[{"post_id": 82490, "ts": "202 [{"post_id": 82490, "ts": "2026-10-24T23:52:33Z", "hours": 6.6069, "text": "I have been working on more and more drawing just to make sure my website is all smooth and nice, I may or may not have taken all my money and invested in some drawing tablet now I have no money but at least I got a good drawing, in addition to that I also officially added it to the website, this is my first time drawing a pixel art so sorry if it took really long I really tried to perfect it and I hope to make the website fit the stardance theme"}, {"post_id": 81360, "ts": "2026-10-20T23:46:09Z", "hours": 5.855, "text": "I have just officially redid the model with EfficientNetB0 and EfficientNetB2 however those were not enough to make it incredibly accurate prediction of your facial expression, I try to keep the whole model as light weight as I possibly can, however because of it the prediction accuracy cannot get above a 68% for now, I will improve on it in future iteration, especially right now the emotion it can detect best are Happy, Sad, Anger and neutral everything else seems to get overshadowed. I will now be moving on to the more aesthetic part of the website and be implementing things like animated website background and interactive stuff. I have just finished the animated space mouse that took me like an hour to draw and another hour to actually implement the animation inside of javascript"}, {"post_id": 80631, "ts": "2026-10-18T10:51:43Z", "hours": 3.7286, "text": "In this iteration I worked on multiple things, first I finally finished my ML model (sort of) the accuracy is again not very high unfortunately however, what I can really do is bring this further later. For now I have just start integrating the camera where I have the basic web setup of purely headers and like buttons to activate my camera with, I have also added basic face detection from javascript which I just used the library for because I cannot be asked to make another detection software which would a project in of itself, I have also added basic green line for debug to check where your face are because my model need only the precise picture of your face and not just random part of your body, and yes that is my face, please don’t dox me. . Next iteration I will be finishing the main bit for actually outputting the prediction of the model"}, {"post_id": 76417, "ts": "2026-10-03T14:02:46Z", "hours": 3.6219, "text": "In this iteration I have worked on multiple models of the CNN by first just training it with the basic layer with no global average pooling and no augmentation of data to allow me to see which model is the best for this data set, I got a validation accuracy of around 53.13% however its not really good as I really want it to get as high as 65% as according to the thesis paper research done on the FER2013 dataset for facial expression people have reached up to 72% accuracy with a refined and tuned model Afterward I tried out Augmented data without global average pooling which got 55% and improved one which uses everything and got 57% which is fair enough Next step will probably be trying out class weight"}, {"post_id": 72444, "ts": "2026-09-22T23:33:15Z", "hours": 1.1539, "text": "I have now finished writing my CNN and now using my training data that I have finally finish organising to begin to train the network to identify the expression based on the face, I am right now using a very basic linear convolutional neural network to train it based on filters and kernel, right now I have 3 different Conv layers and in total 12 layers including the input layer with over 683000 parameters which is quite nice, this should provide me with enough complexity to actually get this working. Now I will be working towards just feeding my organised FER-2013 training data into the neural network and using keras will hopefully avoid the stupid amount of maths I need to do for like the layers e.g. gradient descent and backpropagation."}, {"post_id": 71973, "ts": "2026-09-21T21:44:11Z", "hours": 1.6433, "text": "In my first like 2 hours of this project I have actually done quite a few things: Imported Tensorflow Downloaded WSL2 for tensorflow gpu acceleration to allow training for the project later on Downloaded and imported all my files for the training data necessary for the image recognition of expression and being able to identify based on the expression which I made into a list Now making the loading of the dataset into the main program and preparing the training data of the Machine learning program by using matplotlib and make it into a set size for the CNN stuff which should hopefully allow better spatial relations between the pixels for this algorithm to work which is pretty cool Anyways enough yap and I am gonna continue"}]...
|
Title: SpaceML by @ChiChi | Stardance
Devlogs:
In Title: SpaceML by @ChiChi | Stardance
Devlogs:
In my first like 2 hours of this project I have actually done quite a few things: Imported Tensorflow Downloaded WSL2 for tensorflow gpu acceleration to allow training for the project later on Downloaded and imported all my files for the training data necessary for the image recognition of expression and being able to identify based on the expression which I made into a list Now making the loading of the dataset into the main program and preparing the training data of the Machine learning program by using matplotlib and make it into a set size for the CNN stuff which should hopefully allow better spatial relations between the pixels for this algorithm to work which is pretty cool Anyways enough yap and I am gonna continue
I have now finished writing my CNN and now using my training data that I have finally finish organising to begin to train the network to identify the expression based on the face, I am right now using a very basic linear convolutional neural network to train it based on filters and kernel, right now I have 3 different Conv layers and in total 12 layers including the input layer with over 683000 parameters which is quite nice, this should provide me with enough complexity to actually get this working. Now I will be working towards just feeding my organised FER-2013 training data into the neural network and using keras will hopefully avoid the stupid amount of maths I need to do for like the layers e.g. gradient descent and backpropagation.
In this iteration I have worked on multiple models of the CNN by first just training it with the basic layer with no global average pooling and no augmentation of data to allow me to see which model is the best for this data set, I got a validation accuracy of around 53.13% however its not really good as I really want it to get as high as 65% as according to the thesis paper research done on the FER2013 dataset for facial expression people have reached up to 72% accuracy with a refined and tuned model Afterward I tried out Augmented data without global average pooling which got 55% and improved one which uses everything and got 57% which is fair enough Next step will probably be trying out class weight
In this iteration I worked on multiple things, first I finally finished my ML model (sort of) the accuracy is again not very high unfortunately however, what I can really do is bring this further later. For now I have just start integrating the camera where I have the basic web setup of purely headers and like buttons to activate my camera with, I have also added basic face detection from javascript which I just used the library for because I cannot be asked to make another detection software which would a project in of itself, I have also added basic green line for debug to check where your face are because my model need only the precise picture of your face and not just random part of your body, and yes that is my face, please don’t dox me. . Next iteration I will be finishing the main bit for actually outputting the prediction of the model
I have just officially redid the model with EfficientNetB0 and EfficientNetB2 however those were not enough to make it incredibly accurate prediction of your facial expression, I try to keep the whole model as light weight as I possibly can, however because of it the prediction accuracy cannot get above a 68% for now, I will improve on it in future iteration, especially right now the emotion it can detect best are Happy, Sad, Anger and neutral everything else seems to get overshadowed. I will now be moving on to the more aesthetic part of the website and be implementing things like animated website background and interactive stuff. I have just finished the animated space mouse that took me like an hour to draw and another hour to actually implement the animation inside of javascript
I have been working on more and more drawing just to make sure my website is all smooth and nice, I may or may not have taken all my money and invested in some drawing tablet now I have no money but at least I got a good drawing, in addition to that I also officially added it to the website, this is my first time drawing a pixel art so sorry if it took really long I really tried to perfect it and I hope to make the website fit the stardance theme...
|
1793058820.4588733
|
1793663620.4588733
|
|
66743
|
Zemal Slack Bot by @Zemal | Stardance
|
Zemal
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T22:57:27Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made ZemalBot, my first Slack bot for Hack Club Stardance! My bot has 6 commands. It can say hello, check if it’s online, show its uptime, give random cat facts and jokes using APIs, and show all the commands in a help menu. Honestly before making this project I didn’t know much about Slack bots, APIs or servers. I followed the Hack Club guide and slowly started learning how everything works. The most challenging part for me was GitHub and hosting. I had two GitHub accounts connected and couldn’t understand why my code was not pushing. I also had to learn how to use SSH, connect to my Nest server and keep my bot running using systemd. The part I’m most proud of is that my bot is now running even when my laptop is closed! I tested all 6 commands and they are working. To try my project, join Hack Club Slack, go to #bot-spam and type /zemalbot-help. You can also try /zemalbot-ping, /zemalbot-hello, /zemalbot-status, /zemalbot-catfact and /zemalbot-joke. I’m really happy because this was my first time building something like this and I learned so many new things!", "repo": "https://github.com/zemaldars01-png/zemal-slack-bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 82479, "ts": "202 [{"post_id": 82479, "ts": "2026-10-24T22:53:05Z", "hours": 0.5781, "text": "finallyyy my first Slack bot is working!! today i improved my bot by adding a 5 second timeout to the catfact and joke APIs, so if they don’t respond the bot won’t keep waiting. i also improved the error messages, fixed some small mistakes in my code and checked everything again. i updated my README too, explaining what my bot does, all 6 commands, how to run it and what i learned while making it. then i pushed everything to GitHub, updated my Nest server and restarted the bot. i tested all 6 commands in Slack and they are all working!! i honestly learned so many things from this project, especially how APIs, GitHub, SSH and hosting work. i am really happy that i finally made my own bot!"}, {"post_id": 82293, "ts": "2026-10-24T14:21:18Z", "hours": 0.4022, "text": "Today I finally deployed ZemalBot to Hack Club Nest! I learned how to connect to a Linux server using SSH, install Node.js and Git, and set up my project on the server. I also learned how to use systemd to keep my bot running in the background. The best part was testing the bot after disconnecting from SSH, and it still replied in Slack! I also fixed the dependency security issues, improved the help menu and uptime display, and pushed my latest changes to GitHub. I’m really happy with how much I’ve learned while building my first Slack bot!"}, {"post_id": 75196, "ts": "2026-09-29T13:36:26Z", "hours": 1.0439, "text": "Worked on ZemalBot today and made a lot of progress. I finished the local setup, added six custom slash commands, and added API-powered cat fact and joke commands using Axios. I tested all of the commands in Slack, including ping, hello, status, help, cat facts, and jokes, and they are working properly now. I also pushed the full project to GitHub and improved the README with setup instructions, command details, API information, and security notes. The main thing left is deploying ZemalBot to Hack Club Nest so it can stay online 24/7 even when my laptop is off. My Nest application is still pending approval, so I’ll finish the hosting part once I get access."}]...
|
Title: Zemal Slack Bot by @Zemal | Stardance
Devl Title: Zemal Slack Bot by @Zemal | Stardance
Devlogs:
Worked on ZemalBot today and made a lot of progress. I finished the local setup, added six custom slash commands, and added API-powered cat fact and joke commands using Axios. I tested all of the commands in Slack, including ping, hello, status, help, cat facts, and jokes, and they are working properly now. I also pushed the full project to GitHub and improved the README with setup instructions, command details, API information, and security notes. The main thing left is deploying ZemalBot to Hack Club Nest so it can stay online 24/7 even when my laptop is off. My Nest application is still pending approval, so I’ll finish the hosting part once I get access.
Today I finally deployed ZemalBot to Hack Club Nest! I learned how to connect to a Linux server using SSH, install Node.js and Git, and set up my project on the server. I also learned how to use systemd to keep my bot running in the background. The best part was testing the bot after disconnecting from SSH, and it still replied in Slack! I also fixed the dependency security issues, improved the help menu and uptime display, and pushed my latest changes to GitHub. I’m really happy with how much I’ve learned while building my first Slack bot!
finallyyy my first Slack bot is working!! today i improved my bot by adding a 5 second timeout to the catfact and joke APIs, so if they don’t respond the bot won’t keep waiting. i also improved the error messages, fixed some small mistakes in my code and checked everything again. i updated my README too, explaining what my bot does, all 6 commands, how to run it and what i learned while making it. then i pushed everything to GitHub, updated my Nest server and restarted the bot. i tested all 6 commands in Slack and they are all working!! i honestly learned so many things from this project, especially how APIs, GitHub, SSH and hosting work. i am really happy that i finally made my own bot!
Ships:
I made ZemalBot, my first Slack bot for Hack Club Stardance! My bot has 6 commands. It can say hello, check if it’s online, show its uptime, give random cat facts and jokes using APIs, and show all the commands in a help menu. Honestly before making this project I didn’t know much about Slack bots, APIs or servers. I followed the Hack Club guide and slowly started learning how everything works. The most challenging part for me was GitHub and hosting. I had two GitHub accounts connected and couldn’t understand why my code was not pushing. I also had to learn how to use SSH, connect to my Nest server and keep my bot running using systemd. The part I’m most proud of is that my bot is now running even when my laptop is closed! I tested all 6 commands and they are working. To try my project, join Hack Club Slack, go to #bot-spam and type /zemalbot-help. You can also try /zemalbot-ping, /zemalbot-hello, /zemalbot-status, /zemalbot-catfact and /zemalbot-joke. I’m really happy because this was my first time building something like this and I learned so many new things!...
|
1793101927.596712
|
1793188327.596712
|
|
36597
|
Perihelion by @superheroyrr | Stardance
|
superheroyrr
|
1
|
81.73
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-16T23:18:16Z", "hours": 76.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did I make? This is a gravity simulator written in C++. Right now, it only simulates the solar system, but I am planning on adding more to it in later ships. For detailed instructions on how to use it, see the README, but as a TLDR: when your mouse disappears, use the WASD , Shift , and Space keys to move around. To show your cursor, press Esc . Click anywhere to hide it again. Click on a planet’s outline to select it. When it’s selected, you can press V to change its velocity, then you can press X , Y , or Z to lock to the axis, and click with your mouse to confirm. You can also edit its properties in a window. To unselect it, press the × button in the top center Challenges I finished IB SL Physics with a level 7 (highest one possible), so I naively thought all the physics calculations would be easy enough that I could solve them completely alone. Tbh, it was at first, with the actual gravity part just being the F = Gmm/r^2 equation over and over again. However, with my other features like the spacetime curvature grid, and especially the “Orbit eachother” button, those features required things from university level physics and were complicated. So for these specific physics features, I ended up defaulting to AI to write them. Additionally, figuring out 3D graphics was a challenge and for this, AI and the internet were very useful in figuring those out. I am also glad I used Raylib to code this, since it makes 3D graphics much easier than it normally is. Roadmap for future ships I will consider adding the following in future ships: Black Holes Make the planets rotate Presets other than the solar system Optimize the gravity simulation, right now it lags at around 40 objects Add a bunch of the planets’ moons Add collision detection, so you can smash an asteroid at a planet and see what happens Simulate atmosphere of a planet? There’s probably a lot more that I could add as well, feel free to suggest some features when you vote for this project!", "repo": "https://github.com/agokule/perihelion", "demo": "https://agokule.github.io/perihelion/"}]...
|
[{"post_id": 82477, "ts": "202 [{"post_id": 82477, "ts": "2026-10-24T22:40:16Z", "hours": 5.7328, "text": "So my first ship got rejected because of 2 reasons: I generated my README with AI, which I didn’t know was not allowed They think I generated over 30% of code with AI I personally don’t think that’s the case, but ig I will have to follow it anyways. So in these 5.75 hours, I rewrote my github readme from scratch by hand. I also rewrote a bunch of my code so that it is by hand as well. ㅤ I’d like to specifically talk about the Spherical struct, since I feel it was most interesting. I previously vibe coded it because the math behind it (3D trigonometry) looked too scary. I tried rewriting it from scratch, and actually turns out it’s not too difficult. So in that case, I’m kind of glad my submission got flagged because now I learned something new! ㅤ While rewriting it, I found some weird choices in sort of architecture which the AI made. So I ended up moving things around to fix it. I also deleted the stupidly long comments that it made, like seriously they’re so long they really make the code worse for the most part. I also fixed two small bugs. So yeah, this will be the last devlog I make for sure."}, {"post_id": 76898, "ts": "2026-10-05T00:04:58Z", "hours": 4.1833, "text": "First ship is incoming very soon! In these 4 hours spread out across a whole month (I was too busy with school), I got it deployed as a website! ㅤ You can try it out at https://agokule.github.io/perihelion/ . I’m too lazy rn to upload a proper video, so if you can’t figure out how to use the app, check out my other devlogs. Lmk what you think about the app in the comments! Would this be good to ship, or are there still some things you are dying to see before that happens? How was it? Not very nice tbh. A part of me regrets choosing Raylib instead of SDL3 for this project, bc in my experience it was super easy to just port over an SDL3 project to a website. ㅤ Here it was not that easy. I ended fully refactoring the main file (like just rearranging things into different functions) just for it to work the way I wanted. ㅤ In particular the way it handles keyboard/mouse inputs on a website is soooo weird!! You have to check for them at a specific point in your code between two certain functions, which is weird!! ㅤ There were also a lot of weird niche bugs that were so annoying to find, and it turns many of them were with the way Raylib deals with the web, and I only found out because Claude ended up closely reading the source code for these fixes! ㅤ These were mostly minor nitpicks which AI helped me solve. Now, that this thing is almost done I am very glad. It’s like a huge weight has been lifted off my shoulders."}, {"post_id": 61580, "ts": "2026-09-04T15:41:00Z", "hours": 2.1069, "text": "What would happen if a second Sun randomly spawned in our solar system? Well clearly chaos according to my simulation. So previously, I made a button that automatically sets a velocity so that one object orbits another object, allowing you to easily make planet-moon systems. ㅤ However, what if you wanted to create gravity systems where objects are similar masses, like binary stars, or something like the Pluto-Charon system where clearly they orbit a point outside of each other? ㅤ This is what I set out to implement in this devlog, other than fixing a bug in the spacetime curvature grid where it would jitter around. ㅤ So I’m gonna be honest here, I did basically get AI to do this part for me, that’s not to say I didn’t try at all because I really did. But it turns out this stuff is way outside of high school physics and goes into orbital mechanics. ㅤ I wrote a simple solution which I thought might work, but it didn’t quite. ㅤ So I tried to watch this video to understand how to do it, but couldn’t understand what kind of vector math he was doing. So I basically gave up and got Claude to do it. ㅤ Looking at Claude’s solution, it seems kind of simple in that it’s not using crazy long equations to do things, but at the same time, I don’t think I would have been able to come up with those on my own, so ig it was a good use of AI to speed things up."}, {"post_id": 59165, "ts": "2026-08-31T19:54:12Z", "hours": 3.4219, "text": "I’m back after 2 weeks!!! First I’ll explain why I took a break and then go over what I did in these 3.5 hours. Why I was gone for 2 weeks Basically, I was previously trying to force out 3.5 hours a day to get the FW13 laptop, along with trying to finish this online course so I can get my driver’s license (spending 2 hours a day on that). On top of that I had tuition classes so I can get ahead for next year’s chemistry and math curriculum (probably ~2 hours a day on that). This makes for 8 hours a day of scheduled work. Oh yeah and I wanted to do all of this while still maintaining my health (like going out for a walk everyday and things). ㅤ Obviously, this is a lot of time to commit, but I went ahead with it, thinking of it as a way for me to learn better time management, so that grade 12 will be easy for me. ㅤ However, it turned out to not go the way I thought it would in my mind. You see, no matter what I tried, I just couldn’t get all three of my priorities met. It’s not like a 9-5 job, where you really just have to stay at the office for that timeframe, but then only like 3-4 hours of that is actual focused work. This plan was demanding a full on 8 hours of high focus everyday, which is probably just not possible, without sacrificing too much in my opinion. ㅤ I also realized this was getting in the way my driver’s license and prepping for grade 12, which were probably more important. ㅤ Don’t get me wrong, Stardance is pretty cool and important, but the other 2 things are more important, I think. ㅤ The breaking point came when I finally did reach two of my priorities for 2 days (Stardance and driver’s course). But, it was a very grueling 2 days, and it wasn’t even including anything from tuition. I quickly realized that this was going need a lot more sacrifices than I bargained for. ㅤ So yeah, I took a break. I finished the online course, now I have to do in-car lessons, but the bottleneck for that is now the driving instructor’s availability, now mine. I also tried catching up to the tuition hw (yeah tbh, that didn’t go too well). And I still didn’t touch any of my projects for a bit after that because I was genuinely burnt out. ㅤ But now I’m back! I’m not fully quitting Stardance at all, but now I will work at a slower pace than before. A pace that feels natural to me, rather than forced. Honestly, it might turn out to be the same amount of time as before, just because a bunch of my time has been freed up by finished that driver’s course. But whatever happens, I will finish all of my projects in a way that isn’t so taxing to me mentally and physically. What I actually did in this devlog So for this devlog, I made it so you can edit the velocity using polar coordinates (basically change it via longitude/latitude), as an alternative to x/y/z. ㅤ I initially tried to do this myself by stitching together some math formulas from Reddit, but it didn’t work because I didn’t understand the physics behind them. ㅤ This stuff goes under a field called spherical trigonometry, which is something they don’t usually teach until university math, so I definitely didn’t learn it in grade 11. ㅤ Eventually I gave up and just used Claude to implement the rougher details. However, I have decided to learn a bit of this stuff myself, since it seems like just high school trig but in 3d. Also, because why not!"}, {"post_id": 48408, "ts": "2026-08-16T18:57:36Z", "hours": 6.3819, "text": "Now you can change the velocity and lock it to a specific axis!! Also I upgraded to C++23 from C++20. ㅤ Yeah that feature was a real nightmare to implement, with loads of bugs. That stupid float vs double thing came back to bite me again!!!! I swear bro these things annoy me a lot. How do I do this? I also initially had like no idea how this feature should be implemented, I was sitting there thinking and trying code out for a long time. I eventually decided to change the way velocities are changed entirely, now instead of just clicking and dragging, you press V on the keyboard and click with the mouse to confirm. ㅤ Even after that I had a dilemma about how exactly this axis locking feature should be implemented. I was initially going to cast a ray from the mouse and figure out where it is closest to the axis, however it turns out that is math that goes outside of high school altogether, so I had to scrap that. ㅤ Then I decided to open up Blender and see how it does it’s axis locking when you drag 3D objects around. From Blender I got inspiration for how it works in my program. ㅤ So now once you are editing the velocity, you can press X , Y , or Z to change the velocity going in those respective axes if you want. I also figured a much simpler way than that first method I thought of because of the testing with Blender. AI disclaimer Obviously there had to be some bugs with my code. After having spent a bunch of time struggling through writing the code only to reach some weird bugs, I gave up and did turn to AI. ㅤ I carefully supervised it while it tried to fix my code (I do NOT believe in vibe-coding) and it was actually able to fix it alright. I made a suggestion to edit the code to be cleaner and it listened. The ultimate plot twist I then asked it to add that sky-blue line thing. Now here’s the ultimate plot twist, so you know that float vs double precision error that keeps coming back to me? Well in every previous devlog where it happened, it was Claude who pointed out the issue. Well guess what? This time it was me who found it! The issue was with that line and how it was drawn on screen. ㅤ So yeah. That took a very long time, but it was worth it."}, {"post_id": 47584, "ts": "2026-08-15T15:47:40Z", "hours": 3.3922, "text": "So now you can add objects and change velocities going up and down in the y-axis using up/down arrow keys!! It also shows the flat grid temporarily for these. ㅤ The only thing is that I will probably change how the velocity y-value thing works, because I don’t like it. It’s ironic because that was the thing that took the most amount of time as well."}, {"post_id": 47084, "ts": "2026-08-14T18:35:57Z", "hours": 2.6942, "text": "Here’s what I’ve done: Made it possible to move the flat grid up and down Implemented custom camera controls so that I can better control the experience. This was very difficult at first… until I realized I could just copy paste the code from the library I’m using and just edit that instead 🤦. With this new camera system, I added a feature where you can hold shift and it will slow down for you. More internal refactoring!!! If you’ve been reading my devlogs, you’ll realize that this is like the 5th time or something that I did internal refactoring. To explain, this is my flagship project, as in I’m trying to reach like ~150 hours on this project so that I can get the Framework 13, so I want to take it slowly, so that I can be sure that I can build the features I want to build in an enjoyable manner. This is why I do these things occasionally."}, {"post_id": 46416, "ts": "2026-08-13T16:39:12Z", "hours": 2.6864, "text": "So I added an easy button to make celestial objects orbit another object. To demonstrate this, I recorded a video of me adding 2 moons to Jupiter! I also added a reverse velocity button which is self-explanatory, I didn’t include it in the video because I forgot. I also made it easier to add objects in a previous devlog, but I forgot to include it there."}, {"post_id": 45809, "ts": "2026-08-12T15:07:04Z", "hours": 3.995, "text": "In these 4 hours, I have made the overall experience of switching between objects better by doing these things: Made the camera turn with constant angular speed. Previously, it would sort turn instantly if it needed to make a 180, and then freeze. The camera position is now smoothed out with an easing function instead of linearly moving it Made the grid in the background not jitter when viewing a single planet Set up debugging to work ㅤ The reason this took this long was because for some reason, I was previously using the frame count and a decimal calculated framerate to time out the animations. ㅤ Obviously, mixing decimal numbers with whole numbers wasn’t going to work well, so I had some really weird bugs that sometimes happened and sometimes didn’t. This was literally the motivation for me to setup the debugger! ㅤ Initially I tried to work with the system as it was, but it became tedious fairly quickly, with a lot of if statements, etc. So, I swapped to just using the system time, and it literally just fixed itself almost instantly! That and the code for it ended up being simpler than before! ㅤ The only thing I don’t really like is the grid, and how it kind of jitters, although that will a future problem to solve."}, {"post_id": 44655, "ts": "2026-08-10T15:53:11Z", "hours": 3.9903, "text": "Here’s what I did yesterday: Added a settings editor Added tooltips everywhere Added an intuitive button to deselect the current object"}, {"post_id": 44048, "ts": "2026-08-09T15:47:51Z", "hours": 8.1869, "text": "You might be thinking: “So there’s 8 hours in this devlog, surely there are some major visual changes, right?” Well unfortunately no. I meant to post a smaller devlog the day before yesterday, but I forgot about it yesterday. Now here I am cleaning up that mess. I basically did just the following 3 things: ㅤ Added Nerd Font icons to the UI. This took waaay too long (like 2 hours) since I was spending so much time figuring out how to scale specifically those icons, and nothing else and when I did figure it out, they were all of a sudden misaligned, towards the top left compared to regular text, so I had to realign them to be proper. After all of that, it seems like I might need to make my own font icons, since Nerd Font is mainly designed to be put in a coding IDE, not a random app like this. There are some space things which I want icons for, but aren’t available in Nerd Fonts. Oh well, that’s a problem for future me. ㅤ Now here’s the real timesink that made this devlog 8 hours: so I went on a long sidequest to basically implement CSS position property in this C++ UI library. This was mainly so that it would be way easier to position new UI elements. The next devlog will most likely be about adding new settings UI. Along with that, I also wrote a bunch of helper functions to make it even easier to write new UI components. So basically, the UI got a full refactor. ㅤ And finally, using that UI refactor from above, I added a playback controller at the bottom and moved the object selector to the top. Yes, it is an embarrassingly small amount of user facing changes coming out of this 8 hour devlog, but at least my UI code is easier to maintain!"}, {"post_id": 42195, "ts": "2026-08-06T20:10:57Z", "hours": 2.0506, "text": "Huzzah! I added a skybox (basically the background image). I will admit that this part was basically AI’d, but it was really hard to do it by myself, since it would have required learning GLSL myself, which I didn’t want to do."}, {"post_id": 41540, "ts": "2026-08-05T20:16:31Z", "hours": 4.0603, "text": "So I decided to spend a lot of time refining the velocity changing with the mouse. Also did a smaller refactor to make the code look cleaner. ㅤ The main issue I had previously was that it was jittery when the object was far from coordinates (0, 0, 0). It turns out it was another stupid float vs double precision problem in C++. Yes, very similar to what I faced earlier in this project. ㅤ I will admit that I did use AI to find these bugs and fix them, but I was supervising it very closely and testing it thoroughly. I am also starting to see the limits of AI. Claude now decided to flag a bug which didn’t exist, and when I asked it to refactor, it made the code look worse ironically. I ended up having to do that part myself. ㅤ However, AI was still more of a help than a hindrance, so I will still use it throughout this project. If you are curious, the git commits have more detail about these and they are here ."}, {"post_id": 40192, "ts": "2026-08-03T16:23:30Z", "hours": 4.4261, "text": "So I made it very easy to change the velocity of objects, you can just drag from the cone anywhere now! ㅤ Surprisingly, the hardest part about this was just getting the arrow to draw and also tuning how big it is so that it looks good, but once it was there, it was actually pretty easy to just hook up a click detection. ㅤ Funnily, this 3D library I’m using (Raylib if you’re curious) doesn’t have a builtin “DrawCone()” function. It turns out that to draw a cone, you are supposed to use the DrawCylinder() function and set one of the radiuses to 0! That was really weird to find out."}, {"post_id": 39627, "ts": "2026-08-02T18:59:38Z", "hours": 1.8067, "text": "HEEELP!!!! I added a panel to edit the properties of objects, so I decided to add a bunch of mass to Mercury for fun, now the Sun is orbiting Mercury! This is so trippy especially how much it warped spacetime."}, {"post_id": 38576, "ts": "2026-08-01T01:50:58Z", "hours": 4.5342, "text": "So I fixed some bugs with the warped spacetime grid, and also added a way to add objects to the scene. I haven’t added collision detection yet, so it kind of looks weird but I’ll do that later. ㅤ The reason this took so long is because adding objects kind required a lot of refactoring. Basically, I had to write code for when my objects get copied around, because adding an element to a list in C++ might mean copying it around. This was difficult because raylib is a bit too high level for how it handles these GPU textures and models. ㅤ Now I will add an edit panel to make the new object changeable."}, {"post_id": 37344, "ts": "2026-07-30T00:14:37Z", "hours": 3.7403, "text": "I have just made the grid in the background warp, representing the curvature of spacetime! ㅤ You will probably notice that the grid is smaller and follows you around if you watch the video. This is because I had to. The grid needs to be about this small, otherwise performance is bad. I could make it bigger by making it more spaced out, only if that’s something people would want though. ㅤ This took waaaaaaay too long since I made a very stupid mistake and C++ decided to harshly punish me for it. Well I did promise not to use AI in the next devlog, but I was dealing with a really weird issue with it for like 1.5 hours and I gave up and asked Claude code about it. So you see that screenshot right (you might need to click the next image button)? That was the solution!!!!! Just add = 0 to that line. ㅤ So basically in C++, if you don’t initialize a variable to a value, as I did there, the value of that variable will then basically be whatever happens to be at that memory address, which will initially be some random number. But as the function runs again and again, it will use that previous value, and later on I was doing y += ... so the y-coordinates of the grid were continuously increasing. ㅤ Visually, it looked like the grid wasn’t being drawn, since the y-value instantly went to a huge number. ㅤ Btw that was the only AI help I got for this part, except for the mathematical formula, which I got from Claude as you can see in the background of the screenshot."}, {"post_id": 36699, "ts": "2026-07-28T22:30:28Z", "hours": 1.6914, "text": "tbh, I haven’t been working on this a lot over the last few days because of other projects, but now I have. ㅤ Here’s what I got done: A major refactor on the codebase which will make it easier to later add a preset selection screen. A better selector for celestial objects at the bottom of the screen. ㅤ I’ll be honest, I did write most of the code for these with AI (yeah bummer ik, but really, who likes refactoring code on their own?). Although, I was closely inspecting everything it wrote. ㅤ Now the next thing I will do is make the grid warp with the gravitational field strength to represent space-time getting bent."}, {"post_id": 34312, "ts": "2026-07-24T22:05:19Z", "hours": 1.655, "text": "For this update, I have done 3 things: Added a small outline circle to distant objects so that they are more visible. made it so you can click inside of these circles or on the planet to zoom into it Added a trail behind each planet."}, {"post_id": 33545, "ts": "2026-07-23T16:10:55Z", "hours": 2.4864, "text": "These past ~2.5 hours have been spent on some quality of life features for the app. Mainly these 3: Made every object 5x bigger than its real life size because it turns out the solar system is such a big place, that you kind of have to. Otherwise everything looks too small. Made it so when you switch between planet it has a quick transition period. Added textures to every planet and the sun. This was actually the hardest part, I had to play around with the settings because it would usually apply the texture sideways, or distort it but I got it working anyways."}, {"post_id": 31887, "ts": "2026-07-20T17:16:08Z", "hours": 3.6044, "text": "So in this devlog I’ve done quite a few things to make the overall experience nicer: ㅤ Added a way to pin one object to the center of the screen. Added the Moon and the rest of the planets in the solar system Switched from using light minutes to light seconds for distance measurements because the light minutes values were WAY too small Another annoying bug I had to fix: So there was this bug where the moon would pretty much always just fly out into the abyss as if there was zero gravity applied to it. It was pretty annoying to find out that it because I was using C++‘s float type instead of double . ㅤ What’s the difference? Well basically float gives about 7 decimal points of precision, while double gives about 15. I initially started with float because it is half the memory size of double and in my experience, float gets the job done like 99% of the time. ㅤ However, it turns out I did need more than 7 decimal points. This is because the gravitational force experienced by the Moon is very small, like around 10^-12 (thats 0.(eleven zeroes…)1). Since float can’t hold that value, it just rounded it to zero, causing the moon to fly out in a straight line forever. I’ll be honest, it wasn’t me who figured that out, it was Gemini who did, but pretty much everything else in this devlog was made by me. ㅤ It’s crazy how such a small difference of like 10^-12 can make on a physics engine like this! I hope I don’t have to then switch to C++‘s long double , which has even more precision, that would be insane if I had to go that extreme. I probably would have had to if I didn’t switch from light minutes to light seconds lol."}, {"post_id": 31203, "ts": "2026-07-19T12:36:42Z", "hours": 3.0122, "text": "I got gravity simulation working! Now the Earth is spinning around the Sun! ㅤ I know you can’t see it in the video I posted, but the Earth is there, it’s just that this simulation is drawn to scale, the Earth would actually barely be visible if you were looking from a spacecraft that far away. ㅤ This took quite a while because of this one really stupid bug: basically I store all the distance values in light minutes rather than kilometers or miles because otherwise those values would be too big. However, the physics equations that I’m using expect the values to be in meters, not light minutes. ㅤ So basically, I forgot to convert from light minutes to meters when calculating the gravity acceleration, so those values were too small to change the velocity of the Earth, causing it to go in a straight line forever. ㅤ But now that that is done, I will start adding the rest of the planets and maybe their moons as well to this simulation, then I can look purely at quality of life improvements to improve the interactivity of it. ㅤ This project is turning out to be easier than I expected! Hopefully another challenge doesn’t pop up…"}, {"post_id": 30702, "ts": "2026-07-18T14:29:09Z", "hours": 0.5217, "text": "So I got this cool C library called adjust.h setup for hot code reloading. This means that I can update the code while it’s running , and the changes show up in real time! I know that I am making this a web app, but because the module doesn’t work on web, I will prototype the app on desktop for now."}, {"post_id": 30452, "ts": "2026-07-18T00:26:26Z", "hours": 1.4753, "text": "So in this devlog, I have set up the project with all of its dependencies, it really can take that long when you’re using C++! Right now I just have a basic testing window, but I will quickly fill it in with a preset of the solar system soon, then I’ll be writing physics code for a while."}]...
|
Title: Perihelion by @superheroyrr | Stardance
De Title: Perihelion by @superheroyrr | Stardance
Devlogs:
So in this devlog, I have set up the project with all of its dependencies, it really can take that long when you’re using C++! Right now I just have a basic testing window, but I will quickly fill it in with a preset of the solar system soon, then I’ll be writing physics code for a while.
So I got this cool C library called adjust.h setup for hot code reloading. This means that I can update the code while it’s running , and the changes show up in real time! I know that I am making this a web app, but because the module doesn’t work on web, I will prototype the app on desktop for now.
I got gravity simulation working! Now the Earth is spinning around the Sun! ㅤ I know you can’t see it in the video I posted, but the Earth is there, it’s just that this simulation is drawn to scale, the Earth would actually barely be visible if you were looking from a spacecraft that far away. ㅤ This took quite a while because of this one really stupid bug: basically I store all the distance values in light minutes rather than kilometers or miles because otherwise those values would be too big. However, the physics equations that I’m using expect the values to be in meters, not light minutes. ㅤ So basically, I forgot to convert from light minutes to meters when calculating the gravity acceleration, so those values were too small to change the velocity of the Earth, causing it to go in a straight line forever. ㅤ But now that that is done, I will start adding the rest of the planets and maybe their moons as well to this simulation, then I can look purely at quality of life improvements to improve the interactivity of it. ㅤ This project is turning out to be easier than I expected! Hopefully another challenge doesn’t pop up…
So in this devlog I’ve done quite a few things to make the overall experience nicer: ㅤ Added a way to pin one object to the center of the screen. Added the Moon and the rest of the planets in the solar system Switched from using light minutes to light seconds for distance measurements because the light minutes values were WAY too small Another annoying bug I had to fix: So there was this bug where the moon would pretty much always just fly out into the abyss as if there was zero gravity applied to it. It was pretty annoying to find out that it because I was using C++‘s float type instead of double . ㅤ What’s the difference? Well basically float gives about 7 decimal points of precision, while double gives about 15. I initially started with float because it is half the memory size of double and in my experience, float gets the job done like 99% of the time. ㅤ However, it turns out I did need more than 7 decimal points. This is because the gravitational force experienced by the Moon is very small, like around 10^-12 (thats 0.(eleven zeroes…)1). Since float can’t hold that value, it just rounded it to zero, causing the moon to fly out in a straight line forever. I’ll be honest, it wasn’t me who figured that out, it was Gemini who did, but pretty much everything else in this devlog was made by me. ㅤ It’s crazy how such a small difference of like 10^-12 can make on a physics engine like this! I hope I don’t have to then switch to C++‘s long double , which has even more precision, that would be insane if I had to go that extreme. I probably would have had to if I didn’t switch from light minutes to light seconds lol.
These past ~2.5 hours have been spent on some quality of life features for the app. Mainly these 3: Made every object 5x bigger than its real life size because it turns out the solar system is such a big place, that you kind of have to. Otherwise everything looks too small. Made it so when you switch between planet it has a quick transition period. Added textures to every planet and the sun. This was actually the hardest part, I had to play around with the settings because it would usually apply the texture sideways, or distort it but I got it working anyways.
For this update, I have done 3 things: Added a small outline circle to distant objects so that they are more visible. made it so you can click inside of these circles or on the planet to zoom into it Added a trail behind each planet.
tbh, I haven’t been working on this a lot over the last few days because of other projects, but now I have. ㅤ Here’s what I got done: A major refactor on the codebase which will make it easier to later add a preset selection screen. A better selector for celestial objects at the bottom of the screen. ㅤ I’ll be honest, I did write most of the code for these with AI (yeah bummer ik, but really, who likes refactoring code on their own?). Although, I was closely inspecting everything it wrote. ㅤ Now the next thing I will do is make the grid warp with the gravitational field strength to represent space-time getting bent.
I have just made the grid in the background warp, representing the curvature of spacetime! ㅤ You will probably notice that the grid is smaller and follows you around if you watch the video. This is because I had to. The grid needs to be about this small, otherwise performance is bad. I could make it bigger by making it more spaced out, only if that’s something people would want though. ㅤ This took waaaaaaay too long since I made a very stupid mistake and C++ decided to harshly punish me for it. Well I did promise not to use AI in the next devlog, but I was dealing with a really weird issue with it for like 1.5 hours and I gave up and asked Claude code about it. So you see that screenshot right (you might need to click the next image button)? That was the solution!!!!! Just add = 0 to that line. ㅤ So basically in C++, if you don’t initialize a variable to a value, as I did there, the value of that variable will then basically be whatever happens to be at that memory address, which will initially be some random number. But as the function runs again and again, it will use that previous value, and later on I was doing y += ... so the y-coordinates of the grid were continuously increasing. ㅤ Visually, it looked like the grid wasn’t being drawn, since the y-value instantly went to a huge number. ㅤ Btw that was the only AI help I got for this part, except for the mathematical formula, which I got from Claude as you can see in the background of the screenshot.
So I fixed some bugs with the warped spacetime grid, and also added a way to add objects to the scene. I haven’t added collision detection yet, so it kind of looks weird but I’ll do that later. ㅤ The reason this took so long is because adding objects kind required a lot of refactoring. Basically, I had to write code for when my objects get copied around, because adding an element to a list in C++ might mean copying it around. This was difficult because raylib is a bit too high level for how it handles these GPU textures and models. ㅤ Now I will add an edit panel to make the new object changeable.
HEEELP!!!! I added a panel to edit the properties of objects, so I decided to add a bunch of mass to Mercury for fun, now the Sun is orbiting Mercury! This is so trippy especially how much it warped spacetime.
So I made it very easy to change the velocity of objects, you can just drag from the cone anywhere now! ㅤ Surprisingly, the hardest part about this was just getting the arrow to draw and also tuning how big it is so that it looks good, but once it was there, it was actually pretty easy to just hook up a click detection. ㅤ Funnily, this 3D library I’m using (Raylib if you’re curious) doesn’t have a builtin “DrawCone()” function. It turns out that to draw a cone, you are supposed to use the DrawCylinder() function and set one of the radiuses to 0! That was really weird to find out.
So I decided to spend a lot of time refining the velocity changing with the mouse. Also did a smaller refactor to make the code look cleaner. ㅤ The main issue I had previously was that it was jittery when the object was far from coordinates (0, 0, 0). It turns out it was another stupid float vs double precision problem in C++. Yes, very similar to what I faced earlier in this project. ㅤ I will admit that I did use AI to find these bugs and fix them, but I was supervising it very closely and testing it thoroughly. I am also starting to see the limits of AI. Claude now decided to flag a bug which didn’t exist, and when I asked it to refactor, it made the code look worse ironically. I ended up having to do that part myself. ㅤ However, AI was still more of a help than a hindrance, so I will still use it throughout this project. If you are curious, the git commits have more detail about these and they are here .
Huzzah! I added a skybox (basically the background image). I will admit that this part was basically AI’d, but it was really hard to do it by myself, since it would have required learning GLSL myself, which I didn’t want to do.
You might be thinking: “So there’s 8 hours in this devlog, surely there are some major visual changes, right?” Well unfortunately no. I meant to post a smaller devlog the day before yesterday, but I forgot about it yesterday. Now here I am cleaning up that mess. I basically did just the following 3 things: ㅤ Added Nerd Font icons to the UI. This took waaay too long (like 2 hours) since I was spending so much time figuring out how to scale specifically those icons, and nothing else and when I did figure it out, they were all of a sudden misaligned, towards the top left compared to regular text, so I had to realign them to be proper. After all of that, it seems like I might need to make my own font icons, since Nerd Font is mainly designed to be put in a coding IDE, not a random app like this. There are some space things which I want icons for, but aren’t available in Nerd Fonts. Oh well, that’s a problem for future me. ㅤ Now here’s the real timesink that made this devlog 8 hours: so I went on a long sidequest to basically implement CSS position property in this C++ UI library. This was mainly so that it would be way easier to position new UI elements. The next devlog will most likely be about adding new settings UI. Along with that, I also wrote a bunch of helper functions to make it even easier to write new UI components. So basically, the UI got a full refactor. ㅤ And finally, using that UI refactor from above, I added a playback controller at the bottom and moved the object selector to the top. Yes, it is an embarrassingly small amount of user facing changes coming out of this 8 hour devlog, but at least my UI code is easier to maintain!
Here’s what I did yesterday: Added a settings editor Added tooltips everywhere Added an intuitive button to deselect the current object
In these 4 hours, I have made the overall experience of switching between objects better by doing these things: Made the camera turn with constant angular speed. Previously, it would sort turn instantly if it needed to make a 180, and then freeze. The camera position is now smoothed out with an easing function instead of linearly moving it Made the grid in the background not jitter when viewing a single planet Set up debugging to work ㅤ The reason this took this long was because for some reason, I was previously using the frame count and a decimal calculated framerate to time out the animations. ㅤ Obviously, mixing decimal numbers with whole numbers wasn’t going to work well, so I had some really weird bugs that sometimes happened and sometimes didn’t. This was literally the motivation for me to setup the debugger! ㅤ Initially I tried to work with the system as it was, but it became tedious fairly quickly, with a lot of if statements, etc. So, I swapped to just using the system time, and it literally just fixed itself almost instantly! That and the code for it ended up being simpler than before! ㅤ The only thing I don’t really like is the grid, and how it kind of jitters, although that will a future problem to solve.
So I added an easy button to make celestial objects orbit another object. To demonstrate this, I recorded a video of me adding 2 moons to Jupiter! I also added a reverse velocity button which is self-explanatory, I didn’t include it in the video because I forgot. I also made it easier to add objects in a previous devlog, but I forgot to include it there.
Here’s what I’ve done: Made it possible to move the flat grid up and down Implemented custom camera controls so that I can better control the experience. This was very difficult at first… until I realized I could just copy paste the code from the library I’m using and just edit that instead 🤦. With this new camera system, I added a feature where you can hold shift and it will slow down for you. More internal refactoring!!! If you’ve been reading my devlogs, you’ll realize that this is like the 5th time or something that I did internal refactoring. To explain, this is my flagship project, as in I’m trying to reach like ~150 hours on this project so that I can get the Framework 13, so I want to take it slowly, so that I can be sure that I can build the features I want to build in an enjoyable manner. This is why I do these things occasionally.
So now you can add objects and change velocities going up and down in the y-axis using up/down arrow keys!! It also shows the flat grid temporarily for these. ㅤ The only thing is that I will probably change how the velocity y-value thing works, because I don’t like it. It’s ironic because that was the thing that took the most amount of time as well.
Now you can change the velocity and lock it to a specific axis!! Also I upgraded to C++23 from C++20. ㅤ Yeah that feature was a real nightmare to implement, with loads of bugs. That stupid float vs double thing came back to bite me again!!!! I swear bro these things annoy me a lot. How do I do this? I also initially had like no idea how this feature should be implemented, I was sitting there thinking and trying code out for a long time. I eventually decided to change the way velocities are changed entirely, now instead of just clicking and dragging, you press V on the keyboard and click with the mouse to confirm. ㅤ Even after that I had a dilemma about how exactly this axis locking feature should be implemented. I was initially going to cast a ray from the mouse and figure out where it is closest to the axis, however it turns out that is math that goes outside of high school altogether, so I had to scrap that. ㅤ Then I decided to open up Blender and see how it does it’s axis locking when you drag 3D objects around. From Blender I got inspiration for how it works in my program. ㅤ So now once you are editing the velocity, you can press X , Y , or Z to change the velocity going in those respective axes if you want. I also figured a much simpler way than that first method I thought of because of the testing with Blender. AI disclaimer Obviously there had to be some bugs with my code. After having spent a bunch of time struggling through writing the code only to reach some weird bugs, I gave up and did turn to AI. ㅤ I carefully supervised it while it tried to fix my code (I do NOT believe in vibe-coding) and it was actually able to fix it alright. I made a suggestion to edit the code to be cleaner and it listened. The ultimate plot twist I then asked it to add that sky-blue line thing. Now here’s the ultimate plot twist, so you know that float vs double precision error that keeps coming back to me? Well in every previous devlog where it happened, it was Claude who pointed out the issue. Well guess what? This time it was me who found it! The issue was with that line and how it was drawn on screen. ㅤ So yeah. That took a very long time, but it was worth it.
I’m back after 2 weeks!!! First I’ll explain why I took a break and then go over what I did in these 3.5 hours. Why I was gone for 2 weeks Basically, I was previously trying to force out 3.5 hours a day to get the FW13 laptop, along with trying to finish this online course so I can get my driver’s license (spending 2 hours a day on that). On top of that I had tuition classes so I can get ahead for next year’s chemistry and math curriculum (probably ~2 hours a day on that). This makes for 8 hours a day of scheduled work. Oh yeah and I wanted to do all of this while still maintaining my health (like going out for a walk everyday and things). ㅤ Obviously, this is a lot of time to commit, but I went ahead with it, thinking of it as a way for me to learn better time management, so that grade 12 will be easy for me. ㅤ However, it turned out to not go the way I thought it would in my mind. You see, no matter what I tried, I just couldn’t get all three of my priorities met. It’s not like a 9-5 job, where you really just have to stay at the office for that timeframe, but then only like 3-4 hours of that is actual focused work. This plan was demanding a full on 8 hours of high focus everyday, which is probably just not possible, without sacrificing too much in my opinion. ㅤ I also realized this was getting in the way my driver’s license and prepping for grade 12, which were probably more important. ㅤ Don’t get me wrong, Stardance is pretty cool and important, but the other 2 things are more important, I think. ㅤ The breaking point came when I finally did reach two of my priorities for 2 days (Stardance and driver’s course). But, it was a very grueling 2 days, and it wasn’t even including anything from tuition. I quickly realized that this was going need a lot more sacrifices than I bargained for. ㅤ So yeah, I took a break. I finished the online course, now I have to do in-car lessons, but the bottleneck for that is now the driving instructor’s availability, now mine. I also tried catching up to the tuition hw (yeah tbh, that didn’t go too well). And I still didn’t touch any of my projects for a bit after that because I was genuinely burnt out. ㅤ But now I’m back! I’m not fully quitting Stardance at all, but now I will work at a slower pace than before. A pace that feels natural to me, rather than forced. Honestly, it might turn out to be the same amount of time as before, just because a bunch of my time has been freed up by finished that driver’s course. But whatever happens, I will finish all of my projects in a way that isn’t so taxing to me mentally and physically. What I actually did in this devlog So for this devlog, I made it so you can edit the velocity using polar coordinates (basically change it via longitude/latitude), as an alternative to x/y/z. ㅤ I initially tried to do this myself by stitching together some math formulas from Reddit, but it didn’t work because I didn’t understand the physics behind them. ㅤ This stuff goes under a field called spherical trigonometry, which is something they don’t usually teach until university math, so I definitely didn’t learn it in grade 11. ㅤ Eventually I gave up and just used Claude to implement the rougher details. However, I have decided to learn a bit of this stuff myself, since it seems like just high school trig but in 3d. Also, because why not!
What would happen if a second Sun randomly spawned in our solar system? Well clearly chaos according to my simulation. So previously, I made a button that automatically sets a velocity so that one object orbits another object, allowing you to easily make planet-moon systems. ㅤ However, what if you wanted to create gravity systems where objects are similar masses, like binary stars, or something like the Pluto-Charon system where clearly they orbit a point outside of each other? ㅤ This is what I set out to implement in this devlog, other than fixing a bug in the spacetime curvature grid where it would jitter around. ㅤ So I’m gonna be honest here, I did basically get AI to do this part for me, that’s not to say I didn’t try at all because I really did. But it turns out this stuff is way outside of high school physics and goes into orbital mechanics. ㅤ I wrote a simple solution which I thought might work, but it didn’t quite. ㅤ So I tried to watch this video to understand how to do it, but couldn’t understand what kind of vector math he was doing. So I basically gave up and got Claude to do it. ㅤ Looking at Claude’s solution, it seems kind of simple in that it’s not using crazy long equations to do things, but at the same time, I don’t think I would have been able to come up with those on my own, so ig it was a good use of AI to speed things up.
First ship is incoming very soon! In these 4 hours spread out across a whole month (I was too busy with school), I got it deployed as a website! ㅤ You can try it out at https://agokule.github.io/perihelion/ . I’m too lazy rn to upload a proper video, so if you can’t figure out how to use the app, check out my other devlogs. Lmk what you think about the app in the comments! Would this be good to ship, or are there still some things you are dying to see before that happens? How was it? Not very nice tbh. A part of me regrets choosing Raylib instead of SDL3 for this project, bc in my experience it was super easy to just port over an SDL3 project to a website. ㅤ Here it was not that easy. I ended fully refactoring the main file (like just rearranging things into different functions) just for it to work the way I wanted. ㅤ In particular the way it handles keyboard/mouse inputs on a website is soooo weird!! You have to check for them at a specific point in your code between two certain functions, which is weird!! ㅤ There were also a lot of weird niche bugs that were so annoying to find, and it turns many of them were with the way Raylib deals with the web, and I only found out because Claude ended up closely reading the source code for these fixes! ㅤ These were mostly minor nitpicks which AI helped me solve. Now, that this thing is almost done I am very glad. It’s like a huge weight has been lifted off my shoulders.
So my first ship got rejected because of 2 reasons: I generated my README with AI, which I didn’t know was not allowed They think I generated over 30% of code with AI I personally don’t think that’s the case, but ig I will have to follow it anyways. So in these 5.75 hours, I rewrote my github readme from scratch by hand. I also rewrote a bunch of my code so that it is by hand as well. ㅤ I’d like to specifically talk about the Spherical struct, since I feel it was most interesting. I previously vibe coded it because the math behind it (3D trigonometry) looked too scary. I tried rewriting it from scratch, and actually turns out it’s not too difficult. So in that case, I’m kind of glad my submission got flagged because now I learned something new! ㅤ While rewriting it, I found some weird choices in sort of architecture which the AI made. So I ended up moving things around to fix it. I also deleted the stupidly long comments that it made, like seriously they’re so long they really make the code worse for the most part. I also fixed two small bugs. So yeah, this will be the last devlog I make for sure.
Ships:
What did I make? This is a gravity simulator written in C++. Right now, it only simulates the solar system, but I am planning on adding more to it in later ships. For detailed instructions on how to use it, see the README, but as a TLDR: when your mouse disappears, use the WASD , Shift , and Space keys to move around. To show your cursor, press Esc . Click anywhere to hide it again. Click on a planet’s outline to select it. When it’s selected, you can press V to change its velocity, then you can press X , Y , or Z to lock to the axis, and click with your mouse to confirm. You can also edit its properties in a window. To unselect it, press the × button in the top center Challenges I finished IB SL Physics with a level 7 (highest one possible), so I naively thought all the physics calculations would be easy enough that I could solve them completely alone. Tbh, it was at first, with the actual gravity part just being the F = Gmm/r^2 equation over and over again. However, with my other features like the spacetime curvature grid, and especially the “Orbit eachother” button, those features required things from university level physics and were complicated. So for these specific physics features, I ended up defaulting to AI to write them. Additionally, figuring out 3D graphics was a challenge and for this, AI and the internet were very useful in figuring those out. I am also glad I used Raylib to code this, since it makes 3D graphics much easier than it normally is. Roadmap for future ships I will consider adding the following in future ships: Black Holes Make the planets rotate Presets other than the solar system Optimize the gravity simulation, right now it lags at around 40 objects Add a bunch of the planets’ moons Add collision detection, so you can smash an asteroid at a planet and see what happens Simulate atmosphere of a planet? There’s probably a lot more that I could add as well, feel free to suggest some features when you vote for this project!...
|
1793008343.8728714
|
1793094743.8728714
|