|
66510
|
digital clock by @KICKS | Stardance
|
KICKS
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: digital clock by @KICKS | Stardance
|
1793717793.1849678
|
1794322593.1849678
|
|
30210
|
My website 2.0 by @Hamuz | Stardance
|
Hamuz
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T09:17:52Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I redesigned my website because I wanted to complete the mission, which I had forgotten to attach to my previous project. That is why I updated the redesign to complite the mission.", "repo": "https://github.com/Hamuz09/My-website-2.0", "demo": "https://hamuz09.github.io/My-website-2.0/"}]...
|
[{"post_id": 22040, "ts": "202 [{"post_id": 22040, "ts": "2026-07-04T09:14:01Z", "hours": 1.2811, "text": "I redesigned my website because I wanted to complete the mission, which I had forgot to attach to my previous project. That is why I updated the design to complite the mission."}]...
|
Title: My website 2.0 by @Hamuz | Stardance
Devlo Title: My website 2.0 by @Hamuz | Stardance
Devlogs:
I redesigned my website because I wanted to complete the mission, which I had forgot to attach to my previous project. That is why I updated the design to complite the mission.
Ships:
I redesigned my website because I wanted to complete the mission, which I had forgotten to attach to my previous project. That is why I updated the redesign to complite the mission....
|
1793717792.0072997
|
1793804192.0072997
|
|
66509
|
My awesome macropad! by @Kriziv | Stardance
|
Kriziv
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Kriziv | Stardance
|
1793717791.0935442
|
1794322591.0935442
|
|
2873
|
project timeline creator by @az01pak | Stardance
|
az01pak
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-06T19:25:57Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a project timeline creator that helps people manage their events with a team or by themselves. The hardest part was picking a set of matching colors", "repo": "https://github.com/az01pak/projectimelinecreator", "demo": "https://projectimeline.w3spaces.com/"}]...
|
[{"post_id": 553, "ts": "2026- [{"post_id": 553, "ts": "2026-06-02T01:31:37Z", "hours": 1.0086, "text": "Basically i have made the barebones of this project i am going to continue working on editing the colors etc. Making the work flow better soon after the next devlog"}]...
|
Title: project timeline creator by @az01pak | Star Title: project timeline creator by @az01pak | Stardance
Devlogs:
Basically i have made the barebones of this project i am going to continue working on editing the colors etc. Making the work flow better soon after the next devlog
Ships:
I made a project timeline creator that helps people manage their events with a team or by themselves. The hardest part was picking a set of matching colors...
|
1793717789.9289103
|
1793804189.9289103
|
|
66508
|
My very own WebOS by @sam_byatt | Stardance
|
sam_byatt
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @sam_byatt | Stardance
|
1793717789.0081995
|
1794322589.0081995
|
|
1874
|
Capybara Game by @itsleonwang1 | Stardance
|
itsleonwang1
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-07T10:30:01Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a capybara roguelike action game in Godot!", "repo": "https://github.com/leonwangg1/capybara-evolved", "demo": "https://capybara-evolved.vercel.app/"}]...
|
[{"post_id": 3605, "ts": "2026 [{"post_id": 3605, "ts": "2026-06-06T16:37:46Z", "hours": 1.5247, "text": "Developing a capybara roguelike survivor-like game in Godot. Player character and basic hud done."}]...
|
Title: Capybara Game by @itsleonwang1 | Stardance
Title: Capybara Game by @itsleonwang1 | Stardance
Devlogs:
Developing a capybara roguelike survivor-like game in Godot. Player character and basic hud done.
Ships:
I made a capybara roguelike action game in Godot!...
|
1793717788.0560822
|
1793804188.0560822
|
|
67595
|
WebBrowser by @BlueScreen | Stardance
|
BlueScreen
|
1
|
26.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T16:57:46Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Gluon Browser is now fully available with the release of version 1.1.0! It is a command line browser which can read websites and search the web through DuckDuckGo. It has many features, such as tabs, saving pages, and downloading files!", "repo": "https://github.com/Clippy-CLI/CMD-Browser", "demo": "https://github.com/Clippy-CLI/Gluon-Browser/releases/tag/Release_v1.1.1"}]...
|
[{"post_id": 82335, "ts": "202 [{"post_id": 82335, "ts": "2026-10-24T16:24:57Z", "hours": 0.3422, "text": "Nothing much, just some small formatting and the browser demo at https://codehs.com/sandbox/yellowotter2314/browser/run has been updated. Thinking I may ship my project"}, {"post_id": 82283, "ts": "2026-10-24T13:38:17Z", "hours": 0.2911, "text": "Small change but bot traffic was fixed, full search results work now"}, {"post_id": 82139, "ts": "2026-10-24T02:34:45Z", "hours": 2.8392, "text": "Search engine now exists and works! It uses duckduckgo in order to search the web and provide links to whatever you may need! It does often cut off or stop working though due to being detected as bot traffic so I need to fix that."}, {"post_id": 81887, "ts": "2026-10-22T21:05:25Z", "hours": 0.535, "text": "Small feature, the browser can now download files! This includes images, text, installers, or whatever!"}, {"post_id": 81681, "ts": "2026-10-22T01:19:04Z", "hours": 0.9733, "text": "New release version 1.0.1 with bug fixes and small improvements"}, {"post_id": 81346, "ts": "2026-10-20T22:05:52Z", "hours": 3.0056, "text": "Working web demo now available, press run and wait for it to load: https://codehs.com/sandbox/yellowotter2314/browser/run"}, {"post_id": 80479, "ts": "2026-10-17T19:58:37Z", "hours": 7.3764, "text": "Every good browser needs a game, so I added a simple game in based off of one of my first ever coding projects! Control * with arrow keys to avoid !"}, {"post_id": 78425, "ts": "2026-10-10T19:29:58Z", "hours": 5.2208, "text": "Image/Images commands are actually working now! (Image more than images) example below with Hackclub logo:"}, {"post_id": 77428, "ts": "2026-10-06T23:03:08Z", "hours": 1.2331, "text": "Images command is added so now images from a site can be viewed! It prints them in text characters, example below of Linux penguin."}, {"post_id": 76907, "ts": "2026-10-05T01:12:06Z", "hours": 1.9431, "text": "So that I at least have something to add, I worked (I think mostly on, I can’t remember what I had by my last devlog) on bug fixes and formatting. New features should be up next"}, {"post_id": 76759, "ts": "2026-10-04T14:44:54Z", "hours": 1.1803, "text": "Finished linkscan command, which displays a list of all links at a chosen URL, this also lays some groundwork for adding images later as images are stored at source urls"}, {"post_id": 76530, "ts": "2026-10-03T20:54:16Z", "hours": 0.6633, "text": "Added more commands and planned out a way to show images, but still in the terminal!"}, {"post_id": 76463, "ts": "2026-10-03T16:33:19Z", "hours": 0.3031, "text": "Imported the project, improved the readme, and added a new command"}]...
|
Title: WebBrowser by @BlueScreen | Stardance
Devl Title: WebBrowser by @BlueScreen | Stardance
Devlogs:
Imported the project, improved the readme, and added a new command
Added more commands and planned out a way to show images, but still in the terminal!
Finished linkscan command, which displays a list of all links at a chosen URL, this also lays some groundwork for adding images later as images are stored at source urls
So that I at least have something to add, I worked (I think mostly on, I can’t remember what I had by my last devlog) on bug fixes and formatting. New features should be up next
Images command is added so now images from a site can be viewed! It prints them in text characters, example below of Linux penguin.
Image/Images commands are actually working now! (Image more than images) example below with Hackclub logo:
Every good browser needs a game, so I added a simple game in based off of one of my first ever coding projects! Control * with arrow keys to avoid !
Working web demo now available, press run and wait for it to load: https://codehs.com/sandbox/yellowotter2314/browser/run
New release version 1.0.1 with bug fixes and small improvements
Small feature, the browser can now download files! This includes images, text, installers, or whatever!
Search engine now exists and works! It uses duckduckgo in order to search the web and provide links to whatever you may need! It does often cut off or stop working though due to being detected as bot traffic so I need to fix that.
Small change but bot traffic was fixed, full search results work now
Nothing much, just some small formatting and the browser demo at https://codehs.com/sandbox/yellowotter2314/browser/run has been updated. Thinking I may ship my project
Ships:
Gluon Browser is now fully available with the release of version 1.1.0! It is a command line browser which can read websites and search the web through DuckDuckGo. It has many features, such as tabs, saving pages, and downloading files!...
|
1793717786.7757215
|
1793804186.7757215
|
|
20769
|
Openclip by @Aionix | Stardance
|
Aionix
|
1
|
28.01
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T18:54:23Z", "hours": 25.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created and open-sourced “OpenClip” - a complete local-first AI video clipping engine that runs entirely on your machine. No subscriptions. No watermarks. No cloud uploads. Just paste a YouTube URL and get AI-generated short clips ready for TikTok, Reels, and Shorts. It automatically turns long YouTube videos into ready-to-post short clips using AI (Whisper for transcription, MediaPipe for face tracking, LLMs for captioning). Tech: Next.js + FastAPI + yt-dlp + FFmpeg Fully open-source under MIT license with detailed README, setup scripts and active development. GitHub: https://github.com/aionixOS/OpenclipV-", "repo": "https://github.com/aionixOS/OpenclipV-", "demo": "https://openclip-v.vercel.app/"}]...
|
[{"post_id": 14235, "ts": "202 [{"post_id": 14235, "ts": "2026-06-23T07:49:35Z", "hours": 3.0119, "text": "Recent Updates Browser-Side API Keys: Your LLM API keys are now stored securely in your browser’s localStorage. They never touch the backend database, making this safe to host publicly. YouTube Bot Bypass: Added pytubefix as an automated fallback to bypass YouTube’s aggressive “Sign in to prove you’re not a bot” datacenter blocks (PO Token support enabled). Vercel Compatibility: The real-time progress tracker now seamlessly falls back to fast HTTP Polling if Vercel’s Edge network blocks the WebSocket connection."}, {"post_id": 13204, "ts": "2026-06-21T17:02:22Z", "hours": 24.7883, "text": "I created and open-sourced “OpenClip” - a complete local-first AI video clipping engine. It automatically turns long YouTube videos into ready-to-post short clips using AI (Whisper for transcription, MediaPipe for face tracking, LLMs for captioning). Tech: Next.js + FastAPI + yt-dlp + FFmpeg Fully open-source under MIT license with detailed README, setup scripts and active development. GitHub: https://github.com/aionixOS/OpenclipV-"}]...
|
Title: Openclip by @Aionix | Stardance
Devlogs:
I Title: Openclip by @Aionix | Stardance
Devlogs:
I created and open-sourced “OpenClip” - a complete local-first AI video clipping engine. It automatically turns long YouTube videos into ready-to-post short clips using AI (Whisper for transcription, MediaPipe for face tracking, LLMs for captioning). Tech: Next.js + FastAPI + yt-dlp + FFmpeg Fully open-source under MIT license with detailed README, setup scripts and active development. GitHub: https://github.com/aionixOS/OpenclipV-
Recent Updates Browser-Side API Keys: Your LLM API keys are now stored securely in your browser’s localStorage. They never touch the backend database, making this safe to host publicly. YouTube Bot Bypass: Added pytubefix as an automated fallback to bypass YouTube’s aggressive “Sign in to prove you’re not a bot” datacenter blocks (PO Token support enabled). Vercel Compatibility: The real-time progress tracker now seamlessly falls back to fast HTTP Polling if Vercel’s Edge network blocks the WebSocket connection.
Ships:
I created and open-sourced “OpenClip” - a complete local-first AI video clipping engine that runs entirely on your machine. No subscriptions. No watermarks. No cloud uploads. Just paste a YouTube URL and get AI-generated short clips ready for TikTok, Reels, and Shorts. It automatically turns long YouTube videos into ready-to-post short clips using AI (Whisper for transcription, MediaPipe for face tracking, LLMs for captioning). Tech: Next.js + FastAPI + yt-dlp + FFmpeg Fully open-source under MIT license with detailed README, setup scripts and active development. GitHub: https://github.com/aionixOS/OpenclipV-...
|
1793717785.561915
|
1793804185.561915
|
|
13360
|
Xinyu Lyu Website by @xinyulyu | Stardance
|
xinyulyu
|
1
|
1.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T19:07:45Z", "hours": 1.0, "multiplier": 2.57, "payout": 3, "blessing": "neutral", "text": "I created my own website where people can learn more about me and the projects I am working on. I even bought a custom domain for it. The website took around 23 hours to build with the help of GitHub Copilot, and I spent a lot of time designing, coding, and improving it. I am most proud that I was able to turn my idea into a real website that is online and accessible to everyone. I hope people enjoy exploring it and learning about my projects. I spent around 23 hours building this project, so I would really appreciate any kind feedback or suggestions. Thank you for checking it out!", "repo": "https://github.com/xinyulyuonline/xinyulyu_webseite", "demo": "https://xinyulyu.de/"}]...
|
[{"post_id": 10140, "ts": "202 [{"post_id": 10140, "ts": "2026-06-16T19:00:45Z", "hours": 0.4206, "text": "The website is finished. I might add more services later."}, {"post_id": 6231, "ts": "2026-06-10T14:05:30Z", "hours": 0.8461, "text": "Improving the website and expanding various services, such as the Xinyu Convert service for file conversion."}]...
|
Title: Xinyu Lyu Website by @xinyulyu | Stardance
Title: Xinyu Lyu Website by @xinyulyu | Stardance
Devlogs:
Improving the website and expanding various services, such as the Xinyu Convert service for file conversion.
The website is finished. I might add more services later.
Ships:
I created my own website where people can learn more about me and the projects I am working on. I even bought a custom domain for it. The website took around 23 hours to build with the help of GitHub Copilot, and I spent a lot of time designing, coding, and improving it. I am most proud that I was able to turn my idea into a real website that is online and accessible to everyone. I hope people enjoy exploring it and learning about my projects. I spent around 23 hours building this project, so I would really appreciate any kind feedback or suggestions. Thank you for checking it out!...
|
1793717784.4054334
|
1793804184.4054334
|
|
19342
|
Pulse VR by @rylvion | Stardance
|
rylvion
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-15T21:46:08Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i created a web app for Unit 15: Website Development as part of my coursework, hosted on GitHub Pages, with multiple pages and a 4-step booking flow. a major challenge was working under time constraints while fixing bugs, improving the website, documenting, writing up the report and way way more than i expected. I am most proud of the booking system, advanced GitHub Actions, and achieving 90+ on PageSpeed Insights. To test the project, users should explore different pages and try the full booking flow (bookings tab) on both mobile and desktop. also there is 1 devlog and im shipping it rn to gather end user feedback for the next stage of u15 (review + refinement + documenting + bug fixing + more )", "repo": "https://github.com/rylvion/pulse-vr/", "demo": "https://rylvion.github.io/pulse-vr/"}]...
|
[{"post_id": 9467, "ts": "2026 [{"post_id": 9467, "ts": "2026-06-15T20:29:21Z", "hours": 30.7233, "text": "booking flow (4 steps process) home/pricing/loads of other pages rlly advanced github actions more stuff that i cant remember wireframes: https://app.moqups.com/7pztHxaFX9Yz5oI0v58osy9wUSSnmtnt/view/page/aaef4bdbf"}]...
|
Title: Pulse VR by @rylvion | Stardance
Devlogs:
Title: Pulse VR by @rylvion | Stardance
Devlogs:
booking flow (4 steps process) home/pricing/loads of other pages rlly advanced github actions more stuff that i cant remember wireframes: https://app.moqups.com/7pztHxaFX9Yz5oI0v58osy9wUSSnmtnt/view/page/aaef4bdbf
Ships:
i created a web app for Unit 15: Website Development as part of my coursework, hosted on GitHub Pages, with multiple pages and a 4-step booking flow. a major challenge was working under time constraints while fixing bugs, improving the website, documenting, writing up the report and way way more than i expected. I am most proud of the booking system, advanced GitHub Actions, and achieving 90+ on PageSpeed Insights. To test the project, users should explore different pages and try the full booking flow (bookings tab) on both mobile and desktop. also there is 1 devlog and im shipping it rn to gather end user feedback for the next stage of u15 (review + refinement + documenting + bug fixing + more )...
|
1793717783.1968598
|
1793804183.1968598
|
|
66507
|
Drones by @waajidz12 | Stardance
|
waajidz12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Drones by @waajidz12 | Stardance
|
1793717782.3100786
|
1794322582.3100786
|
|
16968
|
My very own WebOS by @Sair | Stardance
|
Sair
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T11:30:11Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own WebOS named SairOS. Functions that were for WebOS 1 mission: Live clock Notes app Calculator My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Functions for the WebOS 2 mission: Settings(where you can change the wallpaper) Calculator Boot animation with sound effect I recommend pressing ctrl+shift+R in github page if something does not work. Also the green button is both maximise and minimise buttons.", "repo": "https://github.com/Sairsides/SairOS", "demo": "https://sairsides.github.io/SairOS/"}, {"ship_num": 2, "ts": "2026-06-15T18:02:30Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own WebOS named SairOS. Functions: Live clock Notes app Calculator Settings(where you can change the wallpaper) My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Most challenging part was making my first own Welcome window, after I finished it and understood how everything works, I did not have problem making more windows. I really had fun making a this protect!", "repo": "https://github.com/Sairsides/SairOS", "demo": "https://sairsides.github.io/SairOS/"}]...
|
[{"post_id": 15602, "ts": "202 [{"post_id": 15602, "ts": "2026-06-25T11:22:34Z", "hours": 0.7783, "text": "Added boot animation with sound. Fixed maximise and minimise bug with window(btw green button is both maximise and minimise button)"}, {"post_id": 9376, "ts": "2026-06-15T18:29:55Z", "hours": 0.2731, "text": "Fixed buttons, now there are 2 working buttons, close and maximize buttons"}, {"post_id": 9338, "ts": "2026-06-15T17:46:47Z", "hours": 1.3722, "text": "Added calculator, Settings, and connection to https://sairsides.github.io/"}, {"post_id": 9188, "ts": "2026-06-15T12:49:35Z", "hours": 1.0311, "text": "Made hover animation. An app(note app). To open it you need to double click like in a real OS. Added also little details like, that the window and go under or over the top bar. If for example the Welcome Window is blocking the Notes app, just click the Notes app to bring it back to the front. Did not make the other buttons work yet."}, {"post_id": 8717, "ts": "2026-06-14T14:12:33Z", "hours": 1.2919, "text": "Fixed a bug with the background. Welcome window is now draggable, closable and openable. You can open the Welcome Window by pressing the SairOS on the top bar. Next I suppose I will make the other buttons work also."}, {"post_id": 8406, "ts": "2026-06-13T23:38:10Z", "hours": 1.97, "text": "Today I added a window, wallpaper, top bar with an OS name and a live ticking clock with JS. Next time I will make windows closable, openable and draggable."}, {"post_id": 7498, "ts": "2026-06-12T14:38:08Z", "hours": 1.1861, "text": "Progress so far, added SairOS logo and basic Welcome Screen. Next i will add Wallpaper, Window, Top bar, Tracking time with JS. You can also check out the the OS here: https://sairsides.github.io/SairOS/"}]...
|
Title: My very own WebOS by @Sair | Stardance
Dev Title: My very own WebOS by @Sair | Stardance
Devlogs:
Progress so far, added SairOS logo and basic Welcome Screen. Next i will add Wallpaper, Window, Top bar, Tracking time with JS. You can also check out the the OS here: https://sairsides.github.io/SairOS/
Today I added a window, wallpaper, top bar with an OS name and a live ticking clock with JS. Next time I will make windows closable, openable and draggable.
Fixed a bug with the background. Welcome window is now draggable, closable and openable. You can open the Welcome Window by pressing the SairOS on the top bar. Next I suppose I will make the other buttons work also.
Made hover animation. An app(note app). To open it you need to double click like in a real OS. Added also little details like, that the window and go under or over the top bar. If for example the Welcome Window is blocking the Notes app, just click the Notes app to bring it back to the front. Did not make the other buttons work yet.
Added calculator, Settings, and connection to https://sairsides.github.io/
Fixed buttons, now there are 2 working buttons, close and maximize buttons
Added boot animation with sound. Fixed maximise and minimise bug with window(btw green button is both maximise and minimise button)
Ships:
I made my own WebOS named SairOS. Functions: Live clock Notes app Calculator Settings(where you can change the wallpaper) My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Most challenging part was making my first own Welcome window, after I finished it and understood how everything works, I did not have problem making more windows. I really had fun making a this protect!
I made my own WebOS named SairOS. Functions that were for WebOS 1 mission: Live clock Notes app Calculator My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Functions for the WebOS 2 mission: Settings(where you can change the wallpaper) Calculator Boot animation with sound effect I recommend pressing ctrl+shift+R in github page if something does not work. Also the green button is both maximise and minimise buttons....
|
1793717781.1061304
|
1793804181.1061304
|
|
19993
|
DOSEFIELD by @Zhanik | Stardance
|
Zhanik
|
1
|
18.36
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-20T06:48:20Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Today was all about making the site tell the truth about itself instead of just describing itself. I added a Methods and Limitations page that pulls directly from METHODS.md and the README instead of being rewritten into friendly marketing copy. If the documentation and the code ever disagree, the documentation loses immediately because they are now the exact same file. Every page also got an automated footer showing the commit hash, the test count, and the exact verification date. It would have taken five minutes to hardcode a string like “111 tests passing” and move on. Instead, the build script runs the actual test suite first, and if anything fails, the entire build stops cold. This ensures the footer can never claim a passing state that is not true at that exact moment. Wiring a build to gate on its own test results took most of the afternoon because it required thinking through what happens during a failure, not just when everything goes smoothly, but the absolute transparency is worth it. What I like most is that the limitations table on the public site is word-for-word what is in the repository. There is no filtered summary for visitors. The 0.67x gap between my modeled absorbed dose and NASA’s measured RAD numbers reads just as blunt on the public page as it does in the source code. Transparency matters more than hype. Additionally, charts now export at 3200px, and the configuration that produced them gets baked directly into the image itself, meaning a PNG cannot wander off from the settings that generated it. If you want to test it yourself, you can check the live app at DOSEFIELD. Look at the footer for a real commit hash and test count, open the Methods and Limitations page to count the 12 rows in the limitations table, or export a chart to verify the resolution against what is rendered on your screen. The complete source code is also available on GitHub.", "repo": "https://github.com/izbanovj3-prog/DOSEFIELD", "demo": "https://izbanovj3-prog.github.io/DOSEFIELD/"}]...
|
[{"post_id": 81574, "ts": "202 [{"post_id": 81574, "ts": "2026-10-21T18:39:31Z", "hours": 6.3597, "text": "Hey Stardance crew! Three months since my last devlog, so grab a snack and let me catch you up. DOSEFIELD estimates how much radiation an astronaut gets behind shielding on a trip to Mars, then checks itself against real data from NASA’s Curiosity cruise (MSL/RAD). The big news: I found a mistake in my own results. In my first public version, the solar modulation value (W = 30) could not be reproduced from the derivation I had written down. So I went back to the Oulu neutron-monitor data, matched the exact time window RAD used, skipped the solar-storm days, and got W = 47.50. The new numbers look worse, and I kept them: absorbed dose: 0.264 vs 0.458 mGy/day measured (0.58x) dose equivalent: 1.318 vs 1.75 mSv/day (0.75x) mean quality factor: 4.995 vs 3.82 (1.31x) My model skips secondary particles and neutrons, so it under-predicts the dose. I report the gap and leave it alone. Also shipped: a check against the full NIST PSTAR table (max deviation 1.55% from 10 to 1000 MeV), 190 passing tests, a code archive on Zenodo (DOI 10.5281/zenodo.23433384), a revised paper on SSRN, and a website that links to all of it."}, {"post_id": 30550, "ts": "2026-07-18T06:51:49Z", "hours": 2.6992, "text": "DEVLOG #6 Hey everyone!This is probably the last devlog for DOSEFIELD, at least for a while. It’s been an incredible journey—from the first rough prototype to something I’m genuinely proud to share. Thank you to everyone who followed along, tested the project, gave feedback, or simply read these updates. It really meant a lot.v2.3 is the “show your work” release. Nothing changed in the physics—and that’s exactly the point.The biggest addition is a new Methods page that renders the repository’s own METHODS.md and limitations table directly. That means anyone reading the website sees the exact same equations, assumptions, and all 12 limitations that exist in the source code. If the website and the repository ever disagree, the repository is the source of truth.Every page now also includes a provenance footer that’s generated automatically during the build. Instead of typing in a version number by hand, the site runs git rev-parse and the full test suite, then stamps something like:commit e22ef18 · 111/111 tests · verified 2026-07-18The build will actually fail if the tests don’t pass, so it’s impossible to accidentally display a “green” verification badge on a broken build.I also improved chart exports. Figures now render at 3200 px, and each exported chart includes its full configuration in the caption. That makes it much easier to trace a plot back to the exact settings that produced it, whether it’s used in a poster, report, or presentation.One thing I want to be completely clear about: this verification is about the software, not the physics. Passing 111 tests means the implementation behaves as expected according to those tests—it doesn’t prove the scientific model is perfect. The current validation remains the same: about 2× agreement with MSL/RAD, and the 0.67× absorbed-dose gap is still there, clearly documented.That’s exactly what this release is about: transparency over hype, reproducibility over screenshots, and being honest about what the model can—and can’t—do.Thanks for following this project. ❤️"}, {"post_id": 24869, "ts": "2026-07-08T18:38:22Z", "hours": 2.4278, "text": "DEVLOG #5 (might be the last devlog) Hey! It’s been 11 days since the last devlog. DOSEFIELD wasn’t abandoned—I was just busy building instead of writing.This update was really about two things: making the code cleaner and making the site feel like it belongs in a space mission.The first issue was hidden in the background. The NASA validation numbers on the website were calculated separately from the ones used in my research. The math was identical, but it existed in multiple places. That meant one future change could easily make the numbers disagree.So I refactored everything to use a single source of truth. Now every result comes from the same function, making the site much easier to maintain and much harder to break.Then I focused on the design. The old version worked, but it didn’t feel like DOSEFIELD. I redesigned the interface with a mission-control style, added a cleaner layout, and simplified the visuals. I also removed a lot of unnecessary effects—less glow, fewer gradients, and a more purposeful look.After all those changes, I reran every test. All 107 tests still pass, and the stopping-power calculations remain within 1.55% of NIST reference data, exactly as before.There’s still one limitation: my model predicts about 67% of the radiation dose measured by NASA during the trip to Mars. That’s because it doesn’t yet simulate secondary particle production inside spacecraft shielding. It’s an important limitation, and it’s clearly explained on the website rather than hidden.The biggest lesson from this update wasn’t about physics—it was about revisiting old work. Good code doesn’t duplicate logic, and good design doesn’t rely on effects to look impressive. Sometimes the best improvement is simply cleaning up what you already built."}, {"post_id": 16881, "ts": "2026-06-27T12:17:57Z", "hours": 1.2136, "text": "Devlog #4 — Heavy Elements Cut, Liquid Hydrogen Locked In Lead and titanium were off by 50%. I didn’t hide it. My model tracks how particles slow down inside matter. For heavy elements like lead and titanium, you need a correction for the atom’s electron shells — skip it, and your numbers drift by half the actual value. I haven’t built that correction yet. Faking the results to look clean would gut the whole point of the model. So heavy elements are out for now. Liquid hydrogen sits at the opposite extreme. One electron, no shell complexity — the model handles it without shortcuts. I checked against NIST’s official proton data: 0.14% deviation across the full energy range. In physics terms, that’s a bullseye. Five Materials, One Hierarchy I ran five materials together — liquid hydrogen, methane, polyethylene, water, and aluminum — and tested them as a chain. Two things had to hold: thicker shielding means lower dose, and going from hydrogen to aluminum, dose has to climb, because light elements stop protons better. Both held, with no exceptions. Polyethylene and water differ by just 3% in electrons per gram — the model caught even that gap correctly. The sharpest result: at 40 g/cm², liquid hydrogen cuts dose by 44% compared to aluminum. That’s why some spacecraft designs wrap the crew compartment in hydrogen tanks — fuel and radiation shield in one. All five materials are now locked into regression tests. Total: 103 green tests in CI. One Function, One Truth The dashboard and the generated reports used to calculate their numbers separately. Two parallel code paths mean two places for drift to appear. Now both pull from a single shared function. The number on screen and the number in the report are physically incapable of disagreeing."}, {"post_id": 14174, "ts": "2026-06-23T05:11:04Z", "hours": 2.5839, "text": "Devlog #3 — DOSEFIELD Is Live 🚀Hi! Long time no see.DOSEFIELD is now live: https://izbanovj3-prog.github.io/DOSEFIELD/ The entire dosimeter now runs directly in your browser — no installation required. That includes the controls, dose-vs-thickness chart, particle fragmentation toggle, and validation panel.Under the hood, the project is built with Vite and automatically deployed to GitHub Pages through a GitHub Actions workflow. Every push to the main branch triggers a fresh build and deployment. The setup is intentionally simple: deployment uses GitHub’s built-in Actions token, with no external services and no additional secrets.The only challenge in this release wasn’t physics — it was infrastructure. The first deployment failed because GitHub Actions cannot automatically enable GitHub Pages for a repository. The workflow reached that permission boundary and stopped. After enabling Pages in the repository settings and rerunning the workflow, everything deployed successfully.Once the site was live, I verified that all critical assets were being served correctly. The page, stylesheets, and, most importantly, the Web Worker bundle all return HTTP 200 responses with the correct content types.That Web Worker is particularly important because it handles the species-by-species dose integration calculations off the main UI thread. In practice, this means the interface remains responsive while the physics calculations run in the background.No physics models changed in this release, and the known limitations remain the same. This phase was focused entirely on one goal: shipping a fully accessible browser version of DOSEFIELD.The live demo link is now featured at the top of the README."}, {"post_id": 11802, "ts": "2026-06-19T06:41:00Z", "hours": 1.3047, "text": "DOSEFIELD DAY #2:Fragmentation is now in the live app. Until today the web dosimeter only ran the primary-only transport — the most interesting result, that breaking up heavy ions is why hydrogen-rich shielding wins, was buried in a console script. Now there’s a “Primaries only ⇄ + Fragmentation” toggle, and flipping it visibly bends the curves: polyethylene pulls away from aluminium and the mean quality factor drops. Concretely, at solar minimum behind 20 g/cm², polyethylene’s edge over aluminium jumps from 12% to 34% the moment fragmentation turns on — the same figure the validation script prints, read from the same function, not hardcoded. Mean ⟨Q⟩ behind 16 g/cm² of aluminium falls 4.47 → 4.14. Nothing was tuned; the toggle just calls the existing Bradt–Peters model. And the honest ceiling stays put: still no secondary neutrons, so the absorbed-dose gap vs the real MSL/RAD measurement (~0.31 vs 0.46 mGy/day) remains — and the UI footnote says so out loud. 76/76 tests green, build clean. Next: surface the NIST + RAD validation inside the app itself."}, {"post_id": 10579, "ts": "2026-06-17T11:53:38Z", "hours": 1.5142, "text": "Day #1: the hard part is in, now I find out if it’s right I’m building DOSEFIELD, a 1D model that estimates how much radiation an astronaut absorbs on a deep-space mission — and how much shielding actually helps. Cosmic rays in, dose-equivalent out. What’s already solid: the stopping-power core matches NIST PSTAR reference data to within 1.6%, and behind 10 g/cm² of aluminium at solar minimum the model gives 1.96 mSv/day — about 0.70 Sv over a 360-day Mars cruise. That’s 17% past NASA’s 600 mSv career limit. A round trip to Mars quietly blows through the radiation an astronaut is allowed for their entire career. That’s the reason this project exists. But the first version only tracked primary particles, and it showed: my aluminium, polyethylene and water curves were sitting almost on top of each other. That’s physically wrong — polyethylene should shield noticeably better, because hydrogen is good at breaking up heavy ions. The missing piece is nuclear fragmentation. So this week I implemented it — real fragmentation cross sections (Bradt–Peters), not a fudge factor tuned to match NASA’s measured value. The material difference has to come out of the physics: hydrogen has the shortest nuclear interaction length per g/cm², so it should win on its own. No parameter is fit to the answer. Now I’m validating it, and I’m writing the test down BEFORE the result so I can’t quietly move the goalposts. If the physics is right, I should see four things: the curves separate (polyethylene below aluminium), aluminium flatten out at depth, the mean quality factor drop from 4.82 toward ~3.5–4, and the dose move closer to the real MSL/RAD cruise measurement. If they don’t, the model is wrong and I’ll say so. Numbers in the next entry. Either it works or it doesn’t — that’s the whole point of logging the test first. What it still isn’t: 1D, simplified fragmentation, not a replacement for NASA’s HZETRN. Every value traces to a cited source, and the validation suite re-runs on every change."}]...
|
Title: DOSEFIELD by @Zhanik | Stardance
Devlogs:
Title: DOSEFIELD by @Zhanik | Stardance
Devlogs:
Day #1: the hard part is in, now I find out if it’s right I’m building DOSEFIELD, a 1D model that estimates how much radiation an astronaut absorbs on a deep-space mission — and how much shielding actually helps. Cosmic rays in, dose-equivalent out. What’s already solid: the stopping-power core matches NIST PSTAR reference data to within 1.6%, and behind 10 g/cm² of aluminium at solar minimum the model gives 1.96 mSv/day — about 0.70 Sv over a 360-day Mars cruise. That’s 17% past NASA’s 600 mSv career limit. A round trip to Mars quietly blows through the radiation an astronaut is allowed for their entire career. That’s the reason this project exists. But the first version only tracked primary particles, and it showed: my aluminium, polyethylene and water curves were sitting almost on top of each other. That’s physically wrong — polyethylene should shield noticeably better, because hydrogen is good at breaking up heavy ions. The missing piece is nuclear fragmentation. So this week I implemented it — real fragmentation cross sections (Bradt–Peters), not a fudge factor tuned to match NASA’s measured value. The material difference has to come out of the physics: hydrogen has the shortest nuclear interaction length per g/cm², so it should win on its own. No parameter is fit to the answer. Now I’m validating it, and I’m writing the test down BEFORE the result so I can’t quietly move the goalposts. If the physics is right, I should see four things: the curves separate (polyethylene below aluminium), aluminium flatten out at depth, the mean quality factor drop from 4.82 toward ~3.5–4, and the dose move closer to the real MSL/RAD cruise measurement. If they don’t, the model is wrong and I’ll say so. Numbers in the next entry. Either it works or it doesn’t — that’s the whole point of logging the test first. What it still isn’t: 1D, simplified fragmentation, not a replacement for NASA’s HZETRN. Every value traces to a cited source, and the validation suite re-runs on every change.
DOSEFIELD DAY #2:Fragmentation is now in the live app. Until today the web dosimeter only ran the primary-only transport — the most interesting result, that breaking up heavy ions is why hydrogen-rich shielding wins, was buried in a console script. Now there’s a “Primaries only ⇄ + Fragmentation” toggle, and flipping it visibly bends the curves: polyethylene pulls away from aluminium and the mean quality factor drops. Concretely, at solar minimum behind 20 g/cm², polyethylene’s edge over aluminium jumps from 12% to 34% the moment fragmentation turns on — the same figure the validation script prints, read from the same function, not hardcoded. Mean ⟨Q⟩ behind 16 g/cm² of aluminium falls 4.47 → 4.14. Nothing was tuned; the toggle just calls the existing Bradt–Peters model. And the honest ceiling stays put: still no secondary neutrons, so the absorbed-dose gap vs the real MSL/RAD measurement (~0.31 vs 0.46 mGy/day) remains — and the UI footnote says so out loud. 76/76 tests green, build clean. Next: surface the NIST + RAD validation inside the app itself.
Devlog #3 — DOSEFIELD Is Live 🚀Hi! Long time no see.DOSEFIELD is now live: https://izbanovj3-prog.github.io/DOSEFIELD/ The entire dosimeter now runs directly in your browser — no installation required. That includes the controls, dose-vs-thickness chart, particle fragmentation toggle, and validation panel.Under the hood, the project is built with Vite and automatically deployed to GitHub Pages through a GitHub Actions workflow. Every push to the main branch triggers a fresh build and deployment. The setup is intentionally simple: deployment uses GitHub’s built-in Actions token, with no external services and no additional secrets.The only challenge in this release wasn’t physics — it was infrastructure. The first deployment failed because GitHub Actions cannot automatically enable GitHub Pages for a repository. The workflow reached that permission boundary and stopped. After enabling Pages in the repository settings and rerunning the workflow, everything deployed successfully.Once the site was live, I verified that all critical assets were being served correctly. The page, stylesheets, and, most importantly, the Web Worker bundle all return HTTP 200 responses with the correct content types.That Web Worker is particularly important because it handles the species-by-species dose integration calculations off the main UI thread. In practice, this means the interface remains responsive while the physics calculations run in the background.No physics models changed in this release, and the known limitations remain the same. This phase was focused entirely on one goal: shipping a fully accessible browser version of DOSEFIELD.The live demo link is now featured at the top of the README.
Devlog #4 — Heavy Elements Cut, Liquid Hydrogen Locked In Lead and titanium were off by 50%. I didn’t hide it. My model tracks how particles slow down inside matter. For heavy elements like lead and titanium, you need a correction for the atom’s electron shells — skip it, and your numbers drift by half the actual value. I haven’t built that correction yet. Faking the results to look clean would gut the whole point of the model. So heavy elements are out for now. Liquid hydrogen sits at the opposite extreme. One electron, no shell complexity — the model handles it without shortcuts. I checked against NIST’s official proton data: 0.14% deviation across the full energy range. In physics terms, that’s a bullseye. Five Materials, One Hierarchy I ran five materials together — liquid hydrogen, methane, polyethylene, water, and aluminum — and tested them as a chain. Two things had to hold: thicker shielding means lower dose, and going from hydrogen to aluminum, dose has to climb, because light elements stop protons better. Both held, with no exceptions. Polyethylene and water differ by just 3% in electrons per gram — the model caught even that gap correctly. The sharpest result: at 40 g/cm², liquid hydrogen cuts dose by 44% compared to aluminum. That’s why some spacecraft designs wrap the crew compartment in hydrogen tanks — fuel and radiation shield in one. All five materials are now locked into regression tests. Total: 103 green tests in CI. One Function, One Truth The dashboard and the generated reports used to calculate their numbers separately. Two parallel code paths mean two places for drift to appear. Now both pull from a single shared function. The number on screen and the number in the report are physically incapable of disagreeing.
DEVLOG #5 (might be the last devlog) Hey! It’s been 11 days since the last devlog. DOSEFIELD wasn’t abandoned—I was just busy building instead of writing.This update was really about two things: making the code cleaner and making the site feel like it belongs in a space mission.The first issue was hidden in the background. The NASA validation numbers on the website were calculated separately from the ones used in my research. The math was identical, but it existed in multiple places. That meant one future change could easily make the numbers disagree.So I refactored everything to use a single source of truth. Now every result comes from the same function, making the site much easier to maintain and much harder to break.Then I focused on the design. The old version worked, but it didn’t feel like DOSEFIELD. I redesigned the interface with a mission-control style, added a cleaner layout, and simplified the visuals. I also removed a lot of unnecessary effects—less glow, fewer gradients, and a more purposeful look.After all those changes, I reran every test. All 107 tests still pass, and the stopping-power calculations remain within 1.55% of NIST reference data, exactly as before.There’s still one limitation: my model predicts about 67% of the radiation dose measured by NASA during the trip to Mars. That’s because it doesn’t yet simulate secondary particle production inside spacecraft shielding. It’s an important limitation, and it’s clearly explained on the website rather than hidden.The biggest lesson from this update wasn’t about physics—it was about revisiting old work. Good code doesn’t duplicate logic, and good design doesn’t rely on effects to look impressive. Sometimes the best improvement is simply cleaning up what you already built.
DEVLOG #6 Hey everyone!This is probably the last devlog for DOSEFIELD, at least for a while. It’s been an incredible journey—from the first rough prototype to something I’m genuinely proud to share. Thank you to everyone who followed along, tested the project, gave feedback, or simply read these updates. It really meant a lot.v2.3 is the “show your work” release. Nothing changed in the physics—and that’s exactly the point.The biggest addition is a new Methods page that renders the repository’s own METHODS.md and limitations table directly. That means anyone reading the website sees the exact same equations, assumptions, and all 12 limitations that exist in the source code. If the website and the repository ever disagree, the repository is the source of truth.Every page now also includes a provenance footer that’s generated automatically during the build. Instead of typing in a version number by hand, the site runs git rev-parse and the full test suite, then stamps something like:commit e22ef18 · 111/111 tests · verified 2026-07-18The build will actually fail if the tests don’t pass, so it’s impossible to accidentally display a “green” verification badge on a broken build.I also improved chart exports. Figures now render at 3200 px, and each exported chart includes its full configuration in the caption. That makes it much easier to trace a plot back to the exact settings that produced it, whether it’s used in a poster, report, or presentation.One thing I want to be completely clear about: this verification is about the software, not the physics. Passing 111 tests means the implementation behaves as expected according to those tests—it doesn’t prove the scientific model is perfect. The current validation remains the same: about 2× agreement with MSL/RAD, and the 0.67× absorbed-dose gap is still there, clearly documented.That’s exactly what this release is about: transparency over hype, reproducibility over screenshots, and being honest about what the model can—and can’t—do.Thanks for following this project. ❤️
Hey Stardance crew! Three months since my last devlog, so grab a snack and let me catch you up. DOSEFIELD estimates how much radiation an astronaut gets behind shielding on a trip to Mars, then checks itself against real data from NASA’s Curiosity cruise (MSL/RAD). The big news: I found a mistake in my own results. In my first public version, the solar modulation value (W = 30) could not be reproduced from the derivation I had written down. So I went back to the Oulu neutron-monitor data, matched the exact time window RAD used, skipped the solar-storm days, and got W = 47.50. The new numbers look worse, and I kept them: absorbed dose: 0.264 vs 0.458 mGy/day measured (0.58x) dose equivalent: 1.318 vs 1.75 mSv/day (0.75x) mean quality factor: 4.995 vs 3.82 (1.31x) My model skips secondary particles and neutrons, so it under-predicts the dose. I report the gap and leave it alone. Also shipped: a check against the full NIST PSTAR table (max deviation 1.55% from 10 to 1000 MeV), 190 passing tests, a code archive on Zenodo (DOI 10.5281/zenodo.23433384), a revised paper on SSRN, and a website that links to all of it.
Ships:
Today was all about making the site tell the truth about itself instead of just describing itself. I added a Methods and Limitations page that pulls directly from METHODS.md and the README instead of being rewritten into friendly marketing copy. If the documentation and the code ever disagree, the documentation loses immediately because they are now the exact same file. Every page also got an automated footer showing the commit hash, the test count, and the exact verification date. It would have taken five minutes to hardcode a string like “111 tests passing” and move on. Instead, the build script runs the actual test suite first, and if anything fails, the entire build stops cold. This ensures the footer can never claim a passing state that is not true at that exact moment. Wiring a build to gate on its own test results took most of the afternoon because it required thinking through what happens during a failure, not just when everything goes smoothly, but the absolute transparency is worth it. What I like most is that the limitations table on the public site is word-for-word what is in the repository. There is no filtered summary for visitors. The 0.67x gap between my modeled absorbed dose and NASA’s measured RAD numbers reads just as blunt on the public page as it does in the source code. Transparency matters more than hype. Additionally, charts now export at 3200px, and the configuration that produced them gets baked directly into the image itself, meaning a PNG cannot wander off from the settings that generated it. If you want to test it yourself, you can check the live app at DOSEFIELD. Look at the footer for a real commit hash and test count, open the Methods and Limitations page to count the 12 rows in the limitations table, or export a chart to verify the resolution against what is rendered on your screen. The complete source code is also available on GitHub....
|
1793717779.8404903
|
1793804179.8404903
|
|
66505
|
Procz Portfolio by @Procz | Stardance
|
Procz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Procz Portfolio by @Procz | Stardance
|
1793717778.93051
|
1794322578.93051
|
|
37242
|
OlympiaCode by @Uxyamo | Stardance
|
Uxyamo
|
1
|
10.0
|
29
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T18:32:18Z", "hours": 10.0, "multiplier": 2.82, "payout": 29, "blessing": "neutral", "text": "I MADE AN APP THAT HELPS STUDENTS TO IMPROVE THEY’RE MATHS SKILLS. THEY WILL CAN TRAIN FOR OLYMPIADS AND KNAGOROU CONTEST FOR FREE WITH AI GENERATED PROBLEMS", "repo": "https://github.com/mbbs-iam/AIMRoyale", "demo": "https://aimroyale-production.up.railway.app/"}]...
|
[{"post_id": 32483, "ts": "202 [{"post_id": 32483, "ts": "2026-07-21T18:12:45Z", "hours": 0.4, "text": "The app is 💯 correct. I improve some things, and now, we can generate math olympiads problems. That’s nice 🔥🔥"}, {"post_id": 32356, "ts": "2026-07-21T14:02:55Z", "hours": 0.3694, "text": "I implemented an AI that’s free to generate good problems of maths, that let us do maths faster, using Ai for increment productivity and for free"}, {"post_id": 31730, "ts": "2026-07-20T11:23:15Z", "hours": 9.4406, "text": "I am working at a project to help students that love learning maths, while doing funny exercices. I have been improving my project, and now I think that I will add more features"}]...
|
Title: OlympiaCode by @Uxyamo | Stardance
Devlogs Title: OlympiaCode by @Uxyamo | Stardance
Devlogs:
I am working at a project to help students that love learning maths, while doing funny exercices. I have been improving my project, and now I think that I will add more features
I implemented an AI that’s free to generate good problems of maths, that let us do maths faster, using Ai for increment productivity and for free
The app is 💯 correct. I improve some things, and now, we can generate math olympiads problems. That’s nice 🔥🔥
Ships:
I MADE AN APP THAT HELPS STUDENTS TO IMPROVE THEY’RE MATHS SKILLS. THEY WILL CAN TRAIN FOR OLYMPIADS AND KNAGOROU CONTEST FOR FREE WITH AI GENERATED PROBLEMS...
|
1793717777.7754352
|
1793804177.7754352
|
|
66502
|
Lunar-Web-OS by @DEEPML18 | Stardance
|
DEEPML18
|
0
|
0.48
|
0
|
[]
|
[{"post_id": 75832, "ts": "202 [{"post_id": 75832, "ts": "2026-10-01T09:00:47Z", "hours": 0.4836, "text": "the First version of Lunar Web OS , Its running pure html 💪💪"}]...
|
Title: Lunar-Web-OS by @DEEPML18 | Stardance
Devl Title: Lunar-Web-OS by @DEEPML18 | Stardance
Devlogs:
the First version of Lunar Web OS , Its running pure html 💪💪...
|
1793717776.8343997
|
1794322576.8343997
|
|
28814
|
My own site! by @Arsen | Stardance
|
Arsen
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T18:21:04Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I made a personal portfolio website using HTML and CSS to show my projects, skills, and contact information. What was challenging? The CSS was hard. At first I thought it would be easy, but while making the design and styling everything, I realized it was much harder than I expected. What are you proud of? I am proud that I built the whole website myself and made it match the design idea I had in mind. What should people know so they can test your project? The website is fully deployed online. You can open different pages, check my projects, and use the links to test demos and GitHub repositories.", "repo": "https://github.com/Arsen-Gevorgyan/Personal-Web-Site", "demo": "https://arsen-gevorgyan.github.io/Personal-Web-Site/"}]...
|
[{"post_id": 20153, "ts": "202 [{"post_id": 20153, "ts": "2026-07-01T18:13:22Z", "hours": 1.8733, "text": "Made solid progress on the website Added a navigation bar for easier movement across the site Created multiple pages including Home (Index), Contact, and Projects Worked on the overall styling/design to improve the UI Added CSS animations to make interactions and page transitions feel smoother and more dynamic"}, {"post_id": 19236, "ts": "2026-06-30T14:31:52Z", "hours": 0.8144, "text": "Today I worked on building the structure of my website using HTML. I created the basic layout of the page, added sections, a footer, links, and images, while learning how different HTML elements are used to organize and design a webpage."}]...
|
Title: My own site! by @Arsen | Stardance
Devlogs Title: My own site! by @Arsen | Stardance
Devlogs:
Today I worked on building the structure of my website using HTML. I created the basic layout of the page, added sections, a footer, links, and images, while learning how different HTML elements are used to organize and design a webpage.
Made solid progress on the website Added a navigation bar for easier movement across the site Created multiple pages including Home (Index), Contact, and Projects Worked on the overall styling/design to improve the UI Added CSS animations to make interactions and page transitions feel smoother and more dynamic
Ships:
What did you make? I made a personal portfolio website using HTML and CSS to show my projects, skills, and contact information. What was challenging? The CSS was hard. At first I thought it would be easy, but while making the design and styling everything, I realized it was much harder than I expected. What are you proud of? I am proud that I built the whole website myself and made it match the design idea I had in mind. What should people know so they can test your project? The website is fully deployed online. You can open different pages, check my projects, and use the links to test demos and GitHub repositories....
|
1793717775.6102417
|
1793804175.6102417
|
|
14232
|
FennecOS by @kingsuper195 | Stardance
|
kingsuper195
|
1
|
4.1
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T11:55:41Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "FennecOS webEdition is a mock-up gui version of the true FennecOS that is yet to be created.", "repo": "https://github.com/kingsuper195/fennecOSweb", "demo": "https://kingsuper195.github.io/fennecOSweb"}]...
|
[{"post_id": 7330, "ts": "2026 [{"post_id": 7330, "ts": "2026-06-12T07:02:48Z", "hours": 1.0992, "text": "Added notes app with localStorage"}, {"post_id": 6787, "ts": "2026-06-11T11:30:43Z", "hours": 1.8639, "text": "Jam number 4, my custom app was a pocketwatch"}, {"post_id": 6094, "ts": "2026-06-10T07:41:41Z", "hours": 0.6475, "text": "Completed “jam” number 3, and added a header bar to the window."}, {"post_id": 6080, "ts": "2026-06-10T06:57:52Z", "hours": 0.5878, "text": "First two “jams” completed. A welcome window and top bar are complete."}]...
|
Title: FennecOS by @kingsuper195 | Stardance
Devl Title: FennecOS by @kingsuper195 | Stardance
Devlogs:
First two “jams” completed. A welcome window and top bar are complete.
Completed “jam” number 3, and added a header bar to the window.
Jam number 4, my custom app was a pocketwatch
Added notes app with localStorage
Ships:
FennecOS webEdition is a mock-up gui version of the true FennecOS that is yet to be created....
|
1793717774.403483
|
1793804174.403483
|
|
66501
|
Motionless by @KashikaSonone | Stardance
|
KashikaSonone
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Motionless by @KashikaSonone | Stardance
|
1793717773.508096
|
1794322573.508096
|
|
44163
|
Basic Linux Command Guide by @valtdaizora | Starda Basic Linux Command Guide by @valtdaizora | Stardance...
|
valtdaizora
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-17T21:25:43Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a basic Linux command guide made for beginners or people who want to try Linux but don’t know where to start on the Terminal. I had some issues. so I asked AI for help like to make the slideshow and others. To learn these commands, You need to have something to test it on, like installed Linux, Live Boot, Virtual Machine or WSL (Windows Subsystem for Linux). You don’t need to know any previous commands to learn these cause they are beginner friendly.", "repo": "https://github.com/Valt-Daizora/linuxtips", "demo": "https://valt-daizora.github.io/linuxtips"}]...
|
[{"post_id": 49204, "ts": "202 [{"post_id": 49204, "ts": "2026-08-17T21:14:01Z", "hours": 0.3333, "text": "Devlog #2 To make it simple, I added a search bar and a copy-paste button."}, {"post_id": 41938, "ts": "2026-08-06T13:52:44Z", "hours": 0.2667, "text": "Devlog #1 This simple website is made for Linux beginners and Users who don’t know how to use the terminal. The website contains the basic Linux commands and Terminal shortcut that help you use Linux easier. Not that fancy but I believe it’s useful for a full beginner :)"}]...
|
Title: Basic Linux Command Guide by @valtdaizora | Title: Basic Linux Command Guide by @valtdaizora | Stardance
Devlogs:
Devlog #1 This simple website is made for Linux beginners and Users who don’t know how to use the terminal. The website contains the basic Linux commands and Terminal shortcut that help you use Linux easier. Not that fancy but I believe it’s useful for a full beginner :)
Devlog #2 To make it simple, I added a search bar and a copy-paste button.
Ships:
I made a basic Linux command guide made for beginners or people who want to try Linux but don’t know where to start on the Terminal. I had some issues. so I asked AI for help like to make the slideshow and others. To learn these commands, You need to have something to test it on, like installed Linux, Live Boot, Virtual Machine or WSL (Windows Subsystem for Linux). You don’t need to know any previous commands to learn these cause they are beginner friendly....
|
1793717772.2713947
|
1793804172.2713947
|
|
12041
|
Puzzle Tab by @Zee | Stardance
|
Zee
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T23:23:00Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a new tab page, so far, it has html, css, and js, it’s in a public repo, deployed on github pages, and uses duckduckgo api to fetch search results using a cloudflare worker. This is just my starting point for this project as I want to go on and add many more features", "repo": "https://github.com/abcde456/Puzzle-Tab", "demo": "https://abcde456.github.io/Puzzle-Tab/"}]...
|
[{"post_id": 30948, "ts": "202 [{"post_id": 30948, "ts": "2026-07-18T23:17:23Z", "hours": 0.5581, "text": "Devlog 3 Now I have fully finished the UI for search suggestions, and also added arrow key usage to go up and down suggestions"}, {"post_id": 30926, "ts": "2026-07-18T22:27:56Z", "hours": 0.6003, "text": "Devlog 2 I have added a cool patterned background, and also a logo for this tab. I have also now added the raw search suggestions using duckduckgo api, and a cloudflare worker to get around CORS issue export default { async fetch ( request ) { const url = new URL ( request . url ); const query = url . searchParams . get ( \" q \" ); const response = await fetch ( `https://duckduckgo.com/ac/?q= ${ encodeURIComponent ( query || \"\" )} ` , ); return new Response ( await response . text (), { headers : { \" Content-Type \" : \" application/json \" , \" Access-Control-Allow-Origin \" : \" * \" , }, }); }, }; I need to actually build the UI for it now"}, {"post_id": 30904, "ts": "2026-07-18T21:39:40Z", "hours": 0.4011, "text": "Devlog 1 So far I have managed to put together a basic search bar and have the structure for some quicklinks at the bottom"}]...
|
Title: Puzzle Tab by @Zee | Stardance
Devlogs:
De Title: Puzzle Tab by @Zee | Stardance
Devlogs:
Devlog 1 So far I have managed to put together a basic search bar and have the structure for some quicklinks at the bottom
Devlog 2 I have added a cool patterned background, and also a logo for this tab. I have also now added the raw search suggestions using duckduckgo api, and a cloudflare worker to get around CORS issue export default { async fetch ( request ) { const url = new URL ( request . url ); const query = url . searchParams . get ( " q " ); const response = await fetch ( `https://duckduckgo.com/ac/?q= ${ encodeURIComponent ( query || "" )} ` , ); return new Response ( await response . text (), { headers : { " Content-Type " : " application/json " , " Access-Control-Allow-Origin " : " * " , }, }); }, }; I need to actually build the UI for it now
Devlog 3 Now I have fully finished the UI for search suggestions, and also added arrow key usage to go up and down suggestions
Ships:
I made a new tab page, so far, it has html, css, and js, it’s in a public repo, deployed on github pages, and uses duckduckgo api to fetch search results using a cloudflare worker. This is just my starting point for this project as I want to go on and add many more features...
|
1793717769.729067
|
1793804169.729067
|
|
66500
|
My awesome macropad! by @IamOndra | Stardance
|
IamOndra
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @IamOndra | Stardan Title: My awesome macropad! by @IamOndra | Stardance...
|
1793717767.2518587
|
1794322567.2518587
|
|
34038
|
journeys by @folsense | Stardance
|
folsense
|
1
|
29.26
|
339
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-26T15:06:42Z", "hours": 29.0, "multiplier": 11.58, "payout": 339, "blessing": "neutral", "text": "I made a focus timer app that gives you the vibe of being on a train! Each session is a journey (hence the name) and you can create a streak and accrue miles over time. Each subject / area of focus is a RailPass, and you can level up each one individually. The app also supports live activities, so you can leave it to run in the background and just check up on it from the lock screen. I made this for myself to help me with the coming exam season, but hopefully i can get the app store grant to help other people who might need a good free focus timer app :)", "repo": "https://github.com/ssamx3/journeys", "demo": "https://testflight.apple.com/join/NtQ6RRwq"}]...
|
[{"post_id": 37670, "ts": "202 [{"post_id": 37670, "ts": "2026-07-30T15:51:16Z", "hours": 0.2589, "text": "a few more bug fixes that have evaded me for too long have finally been quashed…. and old functions were deleted and the code cleaned up!"}, {"post_id": 35132, "ts": "2026-07-26T11:37:58Z", "hours": 0.8169, "text": "bug FIXING"}, {"post_id": 34066, "ts": "2026-07-24T15:01:48Z", "hours": 0.7428, "text": "debugging and stuffs"}, {"post_id": 33712, "ts": "2026-07-23T20:51:31Z", "hours": 7.0553, "text": "big ui and features update! finished ticket flow, finished focus timer view, finished live activity, finished the home screen nearly, just adding polish and fixing bugs now"}, {"post_id": 32480, "ts": "2026-07-21T18:06:07Z", "hours": 4.9042, "text": "finished some more ui… you can now look at your passes and create new ones and customise them yay! also now works on macos"}, {"post_id": 31490, "ts": "2026-07-19T22:08:43Z", "hours": 7.45, "text": "home screen done (i think) woah this took so long! you can now customise your passes to make cool designs too :)"}, {"post_id": 30349, "ts": "2026-07-17T20:27:29Z", "hours": 1.9003, "text": "Pretty much finished implementing the map view but i kinda hate it and am contemplating going a different direction…. lemme know what yall think"}, {"post_id": 29791, "ts": "2026-07-16T22:07:15Z", "hours": 1.3611, "text": "began implementing the train map view! still some bugs to iron out but its getting better :)"}, {"post_id": 29104, "ts": "2026-07-15T19:20:04Z", "hours": 2.5858, "text": "backend DONE (for now..)! time to move on to the front end! yay :D"}, {"post_id": 27282, "ts": "2026-07-12T18:39:53Z", "hours": 2.4108, "text": "began working on the backend for the app … tedious"}]...
|
Title: journeys by @folsense | Stardance
Devlogs: Title: journeys by @folsense | Stardance
Devlogs:
began working on the backend for the app … tedious
backend DONE (for now..)! time to move on to the front end! yay :D
began implementing the train map view! still some bugs to iron out but its getting better :)
Pretty much finished implementing the map view but i kinda hate it and am contemplating going a different direction…. lemme know what yall think
home screen done (i think) woah this took so long! you can now customise your passes to make cool designs too :)
finished some more ui… you can now look at your passes and create new ones and customise them yay! also now works on macos
big ui and features update! finished ticket flow, finished focus timer view, finished live activity, finished the home screen nearly, just adding polish and fixing bugs now
debugging and stuffs
bug FIXING
a few more bug fixes that have evaded me for too long have finally been quashed…. and old functions were deleted and the code cleaned up!
Ships:
I made a focus timer app that gives you the vibe of being on a train! Each session is a journey (hence the name) and you can create a streak and accrue miles over time. Each subject / area of focus is a RailPass, and you can level up each one individually. The app also supports live activities, so you can leave it to run in the background and just check up on it from the lock screen. I made this for myself to help me with the coming exam season, but hopefully i can get the app store grant to help other people who might need a good free focus timer app :)...
|
1793717763.432827
|
1793804163.432827
|
|
54128
|
slack off by @Aayand | Stardance
|
Aayand
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T15:03:42Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "simple bot with simple commands, because why not, test it in the hack club slack using /bing-bong-bot-here!", "repo": "https://github.com/victorguy123/slack-bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0B96454ZHR"}]...
|
[{"post_id": 54982, "ts": "202 [{"post_id": 54982, "ts": "2026-08-26T12:36:51Z", "hours": 0.3086, "text": "Added 2 commands, -world and -im-a-bot-too"}]...
|
Title: slack off by @Aayand | Stardance
Devlogs:
Title: slack off by @Aayand | Stardance
Devlogs:
Added 2 commands, -world and -im-a-bot-too
Ships:
simple bot with simple commands, because why not, test it in the hack club slack using /bing-bong-bot-here!...
|
1793717762.304477
|
1793804162.304477
|
|
66499
|
Personal Portfolio by @monke_boi28 | Stardance
|
monke_boi28
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Personal Portfolio by @monke_boi28 | Starda Title: Personal Portfolio by @monke_boi28 | Stardance...
|
1793717761.440437
|
1794322561.440437
|
|
16467
|
Brainf*ck IDE by @MarioS271 | Stardance
|
MarioS271
|
1
|
30.0
|
539
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-19T10:01:36Z", "hours": 30.0, "multiplier": 18.23, "payout": 539, "blessing": "neutral", "text": "Brainf * ck IDE Hello and welcome to my project: an IDE for the brainf * ck programming language! What is it Brainf * ck IDE is a text editor, interpreter and debugger for brainf * ck. It is a powerful tool for developing brain * ck applications (if you wanna do that for some reason) How to use it The editor has two modes, Normal and Debug . Normally, youre in normal mode, but you can switch between normal and debug by using the DEBUG button. The editor is divided into three panels and a menubar. The three panels are: Editor Panel (Top Left) Output Panel (Top Right) Tape Panel (Bottom) Known Issues Maximizing the window and resizing it larger than a specific size causes the contents to dissapear, to reverse just make the window smaller again Resizing the window smaller than the size of a popup causes a heap corruption I would recommend avoiding resizing the window unless absolutely necessary 😅 If you’re interested in the details, feel free to read the rest on the GitHub Repo . :)", "repo": "https://github.com/MarioS271/brainfuck_ide", "demo": "https://github.com/MarioS271/brainfuck_ide/releases/tag/v1.2.1"}]...
|
[{"post_id": 11570, "ts": "202 [{"post_id": 11570, "ts": "2026-06-18T21:09:08Z", "hours": 0.4989, "text": "Whoops Had a small bug in the left arrow key in normal editing mode and popups weren’t resizing and re-positioning correctly, fixed all that :) FINAL RELEASE BABYYYY (hopefully)"}, {"post_id": 11526, "ts": "2026-06-18T20:29:28Z", "hours": 5.8544, "text": "Finally, the debugger is working properly . If you’ve tried a beta version, especially v1.1.0, you might have noticed the debugger being broken and kinda weird. I noticed that too, so I decided to rewrite it! (technically, I rewrote it twice but oh well) Why it needed a rewrite Before, the debugger worked by executing the next step in-place and jumping in loops by moving the cursor to the matching bracket. The problem was: to jump backwards when looping, you had to keep a history which could pretty quickly get filled if you were debugging enough and overall the system was too overengineered for what it was supposed to do. The new architecture The new debugger does almost the same that the live tape preview already does. The live tape preview has one caveat that doesn’t allow it to be directly used for the debugger though: we cannot track loop iterations on the cursor position alone, as we always just compute until the cursor. If we’re before a loop’s end, we’re only computing the first iteration. If we move past the loop, the whole loop gets computed in one move.Instead of the cursor pos, the debugger uses an instruction counter. It basically counts how many brainf * ck instructions it should run, which solves all problems here. Why this works Take this program: ++++++++ [ > ++++ [ > ++ > +++ > +++ > + <<<< - ] > + > + > - >> + [ < ] < - ] >> . > ---.+++++++..+++. >> . < -. < .+++.------.--------. >> +. > ++. Say we wanna run 40 instructions. We first step over the initial ++++++++[>++++[>++>+++>+++>+<<<<- (33 instructions), and then we get to the first ] . When we do, the current cell is non-zero, meaning we jump back to the instruction after the highlighted bracket ( ++++++++[>++++ [ >++>+++>+++>+<<<<- ). The jump is one instruction. Then we run >++>++ and reach 40. Notice how we’re in the second iteration when it ends. If we now move the cursor forward by one, we tell the tape generator “execute 41 instructions”. The same as before happens now (execute first bit, jump back, continue executing - but one instruction more than before this time) but we land in the second iteration again."}, {"post_id": 10201, "ts": "2026-06-16T20:23:44Z", "hours": 4.6389, "text": "Popups are finished! (almost) After a little bit of work, a popup system (which I gotta say is written kinda well compared to all the other code) is in place! Currently, there are: Exit Confirmation Popup Save File Dialog Load File Dialog One last thing is still missing though: The please press a button popup for inputs ( , ). Technical Details The popup system works by using a sub-struct inside of the global state struct ( state.popup ). It contains data such as whether a popup is active, if it accepts text input and handlers for drawing and the confirm button. There’s a base func ( create_popup_base() ) that draws a new basic outline for the popup. After that, only the contents of the popup get refreshed via the custom handler set via setting a function pointer ( state.popup.refresh_handler ). The popup also “captures” input. There’s a seperate if for state.popup.active before the main input validation which processes inputs and then skips the normal input processing."}, {"post_id": 9244, "ts": "2026-06-15T15:03:22Z", "hours": 3.7889, "text": "The debugger works!! After hours of work (mainly debugging and patching up code), it finally works! :DD The power of the debugger You can use the debugger to step forward and backward in your brainf * ck program. While stepping, a live program counter display (labelled “PC”) shows the current program counter index, while the tape in the bottom panel shows the current state of each cell, which cell is currently selected by the data pointer and what the cell contains, in both decimal and ASCII format. The following is just for if you’re interested in the technical details ;) Why I wanted to wipe my drive several times while making this (Problem 1) The first main problem in writing the debugger was stepping backward. You’d think its just “do the instruction in reverse, like when you back-step a - , just do a + instead” but the problem arises when, for example, you read in something using , and the info got overwritten. How do you reverse to something that got destroyed? Well, you don’t. The Solution to the Back-Stepping problem I implemented backward stepping by just recomputing the entire tape from scratch on every backstep. Yes, it’s probably not the best way, but it works. Problem 2 Loops. Once. Again. The jumping around of loops in brainf * ck is not the simplest thing to correctly compute, especially when only partially executing a program. When you land on a [ or a ] , you also need to account for nested loops. You can probably imagine that that can definitely cause some headaches."}, {"post_id": 8947, "ts": "2026-06-14T21:29:52Z", "hours": 3.0733, "text": "Live tape preview is done! While writing or editing code or by literally just moving your cursor, you now get a live preview of the programs “tape” (basically it’s entire data it works with). There is one big problem with the current system however. If you’re interested, feel free to read the following. The big Issue Loops. You see, in brainf * ck, loops work by using [ to jump to the matching ] if the current cell is zero and by using ] to jump to the matching [ if the cell is non-zero. This behaviour is actually not that pleasant to simulate when you’re only executing to a specific point in the program, because the “simulator” (the thing that interprets the bit of brainf * ck code up until your cursor and then generates a tape from that) can’t see the matching closing ] as it comes after the cursor. This means the loop will never really execute. But, when you navigate past the entire loop block, the cells jump to a completely different state (as seen in the video at around 0:08 ). How am I going to solve it then? I’ve decided that I dont want to “solve” it by somehow making loops work in live preview. I’ve decided live preview should only be relatively basic. For serious loop-involved debugging, I wanna introduce a special “Debug Mode”. In this mode, you’ll be able to step through your code, have chars printed into the output panel live AND also have the cursor/program pointer correctly jump around."}, {"post_id": 8714, "ts": "2026-06-14T14:06:09Z", "hours": 0.9819, "text": "Menubar Navigation, Code Running and Output Display works!! 🎉 :) Today, the IDE ran its first program! (and yes, of course, it was a hello world program) What changed? As already mentioned in the last post, I’ve rewritten part of the menubar rendering and also implemented output field rendering. Also, I’ve refactored the run_brainfuck function to be compatible with the UI. Changes in the run_brainfuck(...) function Before, it just stubbornly printed to stdout and read from stdin which of course kinda conflicts with the UI. To solve this, I made it write into an output buffer and accept a function pointer for a function that needs to return an int of which char was read in. The actual reading in will be handled by the pointed to function, which will probably be a “Please press a button” popup. What’s next Looking forward to getting the tape reel and then popups (including file saving/loading, exit confirm and please press a button) to work!"}, {"post_id": 7738, "ts": "2026-06-12T22:24:42Z", "hours": 1.9525, "text": "Great News! The editor is now fully working! I’ve managed to implement everything from syntax highlighting to special keys such as delete, home and end. Nice! What now? I’m also working on getting the menubar to work, which’ll require rewriting a little part of the menubar rendering, as currently, the text entries get printed in one go with the spaces. If I somehow wanna highlight the text only, I gotta draw it all seperately."}, {"post_id": 7365, "ts": "2026-06-12T08:38:10Z", "hours": 1.3817, "text": "Typing works!! not Another Memory Violation :) Gonna debug that one too i guess On the flip side, I got syntax highlighting working!"}, {"post_id": 7314, "ts": "2026-06-12T05:59:01Z", "hours": 0.4856, "text": "This was literally me after opening my code today On a side note: I’ve cleaned up the codebase a little and split stuff into separate files for readability, like moving the editor draw function along with all its helpers into a separate file. I’m about to start working on finishing the editor panel now. :)"}, {"post_id": 7038, "ts": "2026-06-11T19:57:39Z", "hours": 1.5256, "text": "holy productivity spike I got the editor fully working!!! :) After wanting to throw my computer from a comically large height (multiple times), it finally runs: proper arrow-key navigation, a fully working cursor, soft wraps, line numbers, and so on. Vertical scrolling is now fully functional aswell. Even some comfort features like using the Home and End keys work! Fun stuff I found out in the process In the process of getting this to work I also discovered things like the fact that the pdcurses getch() macro implicitly refreshes the stdscr and then… doesnt… flush it 😐 Anything still borked? Some things also still don’t work fully, which kinda bothers me. The main example of this is navigating the cursor vertically into soft-wrapped lines; because of how I wrote the row up/down logic - which is to check in the editor buffer where the next or previous line feed is and then navigate based on that - I can’t just say “oh theres a soft line wrap lets just detect that instead of a \\n ” because the rendering (which does the soft line wrapping) and the I/O loop don’t communicate with each other Sure, I could fix it by adding a shared data structure which contains all line wrappings, but for now, I just wanna get the more important stuff running. Any plans now? Anyways, I’m planning to finish the editor fully by adding writing text (wild concept, i know!) and syntax highlighting next. Stay tuned to find out how much I continue to suffer! :’)"}, {"post_id": 6959, "ts": "2026-06-11T17:48:58Z", "hours": 0.7281, "text": "No more Access Violation! Also, I managed to get the editor drawing going! :) The interesting thing about the access violation fix is: I have no clue what caused it - it just kinda went away?? But oh well, the error is not happening anymore :D Whats working now? I so far mainly implemented colored line numbers and soft wrapping. The implementation for vertical scrolling however isn’t written yet, that’s the plan next. Also, I’ll probably implement cursor navigation with that in one go. I also made some small optimizations to the main loop plus a few fixes and adjustments here and there."}, {"post_id": 6930, "ts": "2026-06-11T16:40:49Z", "hours": 2.2344, "text": "I managed to prove why C is the most memory safe language that exists!! This gets triggered by literally just resizing the window and I have zero idea why :’) On a side note though, I’ve been working on the editor panel a little and it’s slowly coming together. Anyways, looking forward to debugging hell for that one overflow or nullpointer (or whatever the hell this is)!"}, {"post_id": 6777, "ts": "2026-06-11T10:56:05Z", "hours": 1.02, "text": "Panel borders are done and working! :D How annonying was it? The tricky part was getting the layout constants to line up correctly (it gets pretty annoying if you’re trying to find where you accidentally forgot to add one to a value) Got there in the end though. Anything else? Also cleaned up the repo. I also added a git submodule so that PDCurses actually gets cloned too if you pass the --recurse-submodules when cloning. Now the foundation is solid and I can actually start on the editor itself next session. :) I also included a lil preview of how it looks rn :)"}, {"post_id": 6754, "ts": "2026-06-11T09:43:15Z", "hours": 1.4886, "text": "Introducing: Brainf * ck IDE - a TUI-based IDE for writing and running brainf * ck, built in C using PDCurses. The IDE has a panelized layout: code editor on the left, output on the right, and a live tape viewer along the bottom so you can actually watch memory change in real time while writing code! The screenshot is mocked up manually for now, the code for drawing doesn’t exist yet 😅 Whats already started So far I’ve got the interpreter written and a few basic rendering steps working, including the top menubar. How it works The brainf * ck interpreter is actually really simple: you need a loop to iterate through a program buffer, then check for any “special” chars like < , + , … and then just increment/decrement values or do some simple logic depending on which char it is. Next, I’ll try to do the panel borders and some panel setup. Looking forward to how much stuff will break! :)"}]...
|
Title: Brainf*ck IDE by @MarioS271 | Stardance
De Title: Brainf*ck IDE by @MarioS271 | Stardance
Devlogs:
Introducing: Brainf * ck IDE - a TUI-based IDE for writing and running brainf * ck, built in C using PDCurses. The IDE has a panelized layout: code editor on the left, output on the right, and a live tape viewer along the bottom so you can actually watch memory change in real time while writing code! The screenshot is mocked up manually for now, the code for drawing doesn’t exist yet 😅 Whats already started So far I’ve got the interpreter written and a few basic rendering steps working, including the top menubar. How it works The brainf * ck interpreter is actually really simple: you need a loop to iterate through a program buffer, then check for any “special” chars like < , + , … and then just increment/decrement values or do some simple logic depending on which char it is. Next, I’ll try to do the panel borders and some panel setup. Looking forward to how much stuff will break! :)
Panel borders are done and working! :D How annonying was it? The tricky part was getting the layout constants to line up correctly (it gets pretty annoying if you’re trying to find where you accidentally forgot to add one to a value) Got there in the end though. Anything else? Also cleaned up the repo. I also added a git submodule so that PDCurses actually gets cloned too if you pass the --recurse-submodules when cloning. Now the foundation is solid and I can actually start on the editor itself next session. :) I also included a lil preview of how it looks rn :)
I managed to prove why C is the most memory safe language that exists!! This gets triggered by literally just resizing the window and I have zero idea why :’) On a side note though, I’ve been working on the editor panel a little and it’s slowly coming together. Anyways, looking forward to debugging hell for that one overflow or nullpointer (or whatever the hell this is)!
No more Access Violation! Also, I managed to get the editor drawing going! :) The interesting thing about the access violation fix is: I have no clue what caused it - it just kinda went away?? But oh well, the error is not happening anymore :D Whats working now? I so far mainly implemented colored line numbers and soft wrapping. The implementation for vertical scrolling however isn’t written yet, that’s the plan next. Also, I’ll probably implement cursor navigation with that in one go. I also made some small optimizations to the main loop plus a few fixes and adjustments here and there.
holy productivity spike I got the editor fully working!!! :) After wanting to throw my computer from a comically large height (multiple times), it finally runs: proper arrow-key navigation, a fully working cursor, soft wraps, line numbers, and so on. Vertical scrolling is now fully functional aswell. Even some comfort features like using the Home and End keys work! Fun stuff I found out in the process In the process of getting this to work I also discovered things like the fact that the pdcurses getch() macro implicitly refreshes the stdscr and then… doesnt… flush it 😐 Anything still borked? Some things also still don’t work fully, which kinda bothers me. The main example of this is navigating the cursor vertically into soft-wrapped lines; because of how I wrote the row up/down logic - which is to check in the editor buffer where the next or previous line feed is and then navigate based on that - I can’t just say “oh theres a soft line wrap lets just detect that instead of a \n ” because the rendering (which does the soft line wrapping) and the I/O loop don’t communicate with each other Sure, I could fix it by adding a shared data structure which contains all line wrappings, but for now, I just wanna get the more important stuff running. Any plans now? Anyways, I’m planning to finish the editor fully by adding writing text (wild concept, i know!) and syntax highlighting next. Stay tuned to find out how much I continue to suffer! :’)
This was literally me after opening my code today On a side note: I’ve cleaned up the codebase a little and split stuff into separate files for readability, like moving the editor draw function along with all its helpers into a separate file. I’m about to start working on finishing the editor panel now. :)
Typing works!! not Another Memory Violation :) Gonna debug that one too i guess On the flip side, I got syntax highlighting working!
Great News! The editor is now fully working! I’ve managed to implement everything from syntax highlighting to special keys such as delete, home and end. Nice! What now? I’m also working on getting the menubar to work, which’ll require rewriting a little part of the menubar rendering, as currently, the text entries get printed in one go with the spaces. If I somehow wanna highlight the text only, I gotta draw it all seperately.
Menubar Navigation, Code Running and Output Display works!! 🎉 :) Today, the IDE ran its first program! (and yes, of course, it was a hello world program) What changed? As already mentioned in the last post, I’ve rewritten part of the menubar rendering and also implemented output field rendering. Also, I’ve refactored the run_brainfuck function to be compatible with the UI. Changes in the run_brainfuck(...) function Before, it just stubbornly printed to stdout and read from stdin which of course kinda conflicts with the UI. To solve this, I made it write into an output buffer and accept a function pointer for a function that needs to return an int of which char was read in. The actual reading in will be handled by the pointed to function, which will probably be a “Please press a button” popup. What’s next Looking forward to getting the tape reel and then popups (including file saving/loading, exit confirm and please press a button) to work!
Live tape preview is done! While writing or editing code or by literally just moving your cursor, you now get a live preview of the programs “tape” (basically it’s entire data it works with). There is one big problem with the current system however. If you’re interested, feel free to read the following. The big Issue Loops. You see, in brainf * ck, loops work by using [ to jump to the matching ] if the current cell is zero and by using ] to jump to the matching [ if the cell is non-zero. This behaviour is actually not that pleasant to simulate when you’re only executing to a specific point in the program, because the “simulator” (the thing that interprets the bit of brainf * ck code up until your cursor and then generates a tape from that) can’t see the matching closing ] as it comes after the cursor. This means the loop will never really execute. But, when you navigate past the entire loop block, the cells jump to a completely different state (as seen in the video at around 0:08 ). How am I going to solve it then? I’ve decided that I dont want to “solve” it by somehow making loops work in live preview. I’ve decided live preview should only be relatively basic. For serious loop-involved debugging, I wanna introduce a special “Debug Mode”. In this mode, you’ll be able to step through your code, have chars printed into the output panel live AND also have the cursor/program pointer correctly jump around.
The debugger works!! After hours of work (mainly debugging and patching up code), it finally works! :DD The power of the debugger You can use the debugger to step forward and backward in your brainf * ck program. While stepping, a live program counter display (labelled “PC”) shows the current program counter index, while the tape in the bottom panel shows the current state of each cell, which cell is currently selected by the data pointer and what the cell contains, in both decimal and ASCII format. The following is just for if you’re interested in the technical details ;) Why I wanted to wipe my drive several times while making this (Problem 1) The first main problem in writing the debugger was stepping backward. You’d think its just “do the instruction in reverse, like when you back-step a - , just do a + instead” but the problem arises when, for example, you read in something using , and the info got overwritten. How do you reverse to something that got destroyed? Well, you don’t. The Solution to the Back-Stepping problem I implemented backward stepping by just recomputing the entire tape from scratch on every backstep. Yes, it’s probably not the best way, but it works. Problem 2 Loops. Once. Again. The jumping around of loops in brainf * ck is not the simplest thing to correctly compute, especially when only partially executing a program. When you land on a [ or a ] , you also need to account for nested loops. You can probably imagine that that can definitely cause some headaches.
Popups are finished! (almost) After a little bit of work, a popup system (which I gotta say is written kinda well compared to all the other code) is in place! Currently, there are: Exit Confirmation Popup Save File Dialog Load File Dialog One last thing is still missing though: The please press a button popup for inputs ( , ). Technical Details The popup system works by using a sub-struct inside of the global state struct ( state.popup ). It contains data such as whether a popup is active, if it accepts text input and handlers for drawing and the confirm button. There’s a base func ( create_popup_base() ) that draws a new basic outline for the popup. After that, only the contents of the popup get refreshed via the custom handler set via setting a function pointer ( state.popup.refresh_handler ). The popup also “captures” input. There’s a seperate if for state.popup.active before the main input validation which processes inputs and then skips the normal input processing.
Finally, the debugger is working properly . If you’ve tried a beta version, especially v1.1.0, you might have noticed the debugger being broken and kinda weird. I noticed that too, so I decided to rewrite it! (technically, I rewrote it twice but oh well) Why it needed a rewrite Before, the debugger worked by executing the next step in-place and jumping in loops by moving the cursor to the matching bracket. The problem was: to jump backwards when looping, you had to keep a history which could pretty quickly get filled if you were debugging enough and overall the system was too overengineered for what it was supposed to do. The new architecture The new debugger does almost the same that the live tape preview already does. The live tape preview has one caveat that doesn’t allow it to be directly used for the debugger though: we cannot track loop iterations on the cursor position alone, as we always just compute until the cursor. If we’re before a loop’s end, we’re only computing the first iteration. If we move past the loop, the whole loop gets computed in one move.Instead of the cursor pos, the debugger uses an instruction counter. It basically counts how many brainf * ck instructions it should run, which solves all problems here. Why this works Take this program: ++++++++ [ > ++++ [ > ++ > +++ > +++ > + <<<< - ] > + > + > - >> + [ < ] < - ] >> . > ---.+++++++..+++. >> . < -. < .+++.------.--------. >> +. > ++. Say we wanna run 40 instructions. We first step over the initial ++++++++[>++++[>++>+++>+++>+<<<<- (33 instructions), and then we get to the first ] . When we do, the current cell is non-zero, meaning we jump back to the instruction after the highlighted bracket ( ++++++++[>++++ [ >++>+++>+++>+<<<<- ). The jump is one instruction. Then we run >++>++ and reach 40. Notice how we’re in the second iteration when it ends. If we now move the cursor forward by one, we tell the tape generator “execute 41 instructions”. The same as before happens now (execute first bit, jump back, continue executing - but one instruction more than before this time) but we land in the second iteration again.
Whoops Had a small bug in the left arrow key in normal editing mode and popups weren’t resizing and re-positioning correctly, fixed all that :) FINAL RELEASE BABYYYY (hopefully)
Ships:
Brainf * ck IDE Hello and welcome to my project: an IDE for the brainf * ck programming language! What is it Brainf * ck IDE is a text editor, interpreter and debugger for brainf * ck. It is a powerful tool for developing brain * ck applications (if you wanna do that for some reason) How to use it The editor has two modes, Normal and Debug . Normally, youre in normal mode, but you can switch between normal and debug by using the DEBUG button. The editor is divided into three panels and a menubar. The three panels are: Editor Panel (Top Left) Output Panel (Top Right) Tape Panel (Bottom) Known Issues Maximizing the window and resizing it larger than a specific size causes the contents to dissapear, to reverse just make the window smaller again Resizing the window smaller than the size of a popup causes a heap corruption I would recommend avoiding resizing the window unless absolutely necessary 😅 If you’re interested in the details, feel free to read the rest on the GitHub Repo . :)...
|
1793717760.1497085
|
1793804160.1497085
|
|
66498
|
Dexter by @jerinnelson4u | Stardance
|
jerinnelson4u
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Dexter by @jerinnelson4u | Stardance
|
1793717759.2574754
|
1794322559.2574754
|
|
66497
|
my APOD site by @Vas_bous | Stardance
|
Vas_bous
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my APOD site by @Vas_bous | Stardance
|
1793717758.3927555
|
1794322558.3927555
|
|
66496
|
Untitled project by @Procz | Stardance
|
Procz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Procz | Stardance
|
1793717757.5023267
|
1794322557.5023267
|
|
19621
|
Helixxed by @kaplin86 | Stardance
|
kaplin86
|
1
|
11.0
|
140
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T20:41:50Z", "hours": 11.0, "multiplier": 13.07, "payout": 140, "blessing": "neutral", "text": "Helixxed is a brickbreaker where you mutate your ball with genes. Every round, the bricks you face become stronger, requiring more strategy and genes to make it through the round before you run out of shots! Theres some basic genes, like homing, but also some stranger ones like floaty, which causes the ball to move down slower, or misstep, which causes it to go in a random direction every bounce! I had a lot of fun making the modular system behind the genes themselves, and I tried to make it very easy to add new ones in the future!", "repo": "https://github.com/Kaplin86/helixxed", "demo": "https://kaplin86.itch.io/helixxed"}]...
|
[{"post_id": 20166, "ts": "202 [{"post_id": 20166, "ts": "2026-07-01T18:25:45Z", "hours": 0.8456, "text": "I forgot to devlog all the tracked time when I tracked it weeks ago, oops! Im coming back around to finally finish off the project after getting sidetracked :) Anyways, I did some bug fixes (like finding a new shader when the old one broke on web), alongside reworking how the paddle interacts with the ball. Lastly, I finished my readme so I can ship fully!"}, {"post_id": 11787, "ts": "2026-06-19T05:45:49Z", "hours": 1.7617, "text": "I redesigned a lot of the stuff and i made a death screen."}, {"post_id": 11739, "ts": "2026-06-19T03:35:37Z", "hours": 3.3833, "text": "I made the main mechanic of my game: Genes! Using genes you can alter how the ball behaves. So far there are 9, 3 of which can only be obtained from the shop’s charity feature! Im speedrunning development because I am going out of town soon, and will miss the deadline for godot wild jam if i dont submit soon!"}, {"post_id": 10423, "ts": "2026-06-17T04:09:01Z", "hours": 2.6414, "text": "I got a simple (un-cool-ified) game loop working!! I also did some slight improvements on my upscaler thingamajiggy. wanted to clarify its not really for ACTUAL upscaling, but more of a stylistic application of more pixels to create smooth triangles that were previously not in said image."}, {"post_id": 9719, "ts": "2026-06-16T04:22:00Z", "hours": 2.0625, "text": "First devlog!! I probably should have done this after 15 minutes like intended, but I suppose my old shiba devlog habits never left me! So far, ive done some work getting ball and paddle movement. At the start the ball is “mounted”, so it sticks to the paddle and can be aimed, and then click to launch. Simple stuff. Most of my time was actually spent trying to do a specific visual effect. I want to try and make this game using pixel art, but a type of pixel art where each pixel has smooth triangle shapes between ’em. I dont know what exactly thats called, but I decided to try that. The idea came from a little game called “mindustry” where i thought they had a shader that does what i described. I dont actually know if they do. I dont actually know if they do anything special, they just keep image sizes good. you cant see any pixel edges unless you zoom in a external program. To replicate the effect i want, im making it so in runtime it generates a new, larger texture with a X size increase. Then, with the new size, it will create triangles to smooth out pixels. Its going decently. Theres some weird bug with my calculations though where its acting like some pixels are something else in the original image than what they actually are. Oh well. I will probably make a fix tommorow :) Same with the fact that it isnt transparent. I wonder if i should try making it a shader again (i gave up on the shader at first since it wasnt working at all)"}]...
|
Title: Helixxed by @kaplin86 | Stardance
Devlogs: Title: Helixxed by @kaplin86 | Stardance
Devlogs:
First devlog!! I probably should have done this after 15 minutes like intended, but I suppose my old shiba devlog habits never left me! So far, ive done some work getting ball and paddle movement. At the start the ball is “mounted”, so it sticks to the paddle and can be aimed, and then click to launch. Simple stuff. Most of my time was actually spent trying to do a specific visual effect. I want to try and make this game using pixel art, but a type of pixel art where each pixel has smooth triangle shapes between ’em. I dont know what exactly thats called, but I decided to try that. The idea came from a little game called “mindustry” where i thought they had a shader that does what i described. I dont actually know if they do. I dont actually know if they do anything special, they just keep image sizes good. you cant see any pixel edges unless you zoom in a external program. To replicate the effect i want, im making it so in runtime it generates a new, larger texture with a X size increase. Then, with the new size, it will create triangles to smooth out pixels. Its going decently. Theres some weird bug with my calculations though where its acting like some pixels are something else in the original image than what they actually are. Oh well. I will probably make a fix tommorow :) Same with the fact that it isnt transparent. I wonder if i should try making it a shader again (i gave up on the shader at first since it wasnt working at all)
I got a simple (un-cool-ified) game loop working!! I also did some slight improvements on my upscaler thingamajiggy. wanted to clarify its not really for ACTUAL upscaling, but more of a stylistic application of more pixels to create smooth triangles that were previously not in said image.
I made the main mechanic of my game: Genes! Using genes you can alter how the ball behaves. So far there are 9, 3 of which can only be obtained from the shop’s charity feature! Im speedrunning development because I am going out of town soon, and will miss the deadline for godot wild jam if i dont submit soon!
I redesigned a lot of the stuff and i made a death screen.
I forgot to devlog all the tracked time when I tracked it weeks ago, oops! Im coming back around to finally finish off the project after getting sidetracked :) Anyways, I did some bug fixes (like finding a new shader when the old one broke on web), alongside reworking how the paddle interacts with the ball. Lastly, I finished my readme so I can ship fully!
Ships:
Helixxed is a brickbreaker where you mutate your ball with genes. Every round, the bricks you face become stronger, requiring more strategy and genes to make it through the round before you run out of shots! Theres some basic genes, like homing, but also some stranger ones like floaty, which causes the ball to move down slower, or misstep, which causes it to go in a random direction every bounce! I had a lot of fun making the modular system behind the genes themselves, and I tried to make it very easy to add new ones in the future!...
|
1793717756.290261
|
1793804156.290261
|
|
8802
|
LoPose Cell Mapping by @yep | Stardance
|
yep
|
1
|
40.72
|
588
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T17:15:42Z", "hours": 37.0, "multiplier": 15.78, "payout": 588, "blessing": "neutral", "text": "Project Overview LoPose Tower Mapping is a project focused on mapping cellular tower data collected from phones to real-world tower locations. The goal is to collect cellular observations from Android devices, upload them to a database, and process those observations to estimate and match real tower positions. The project is currently experimental and mainly intended for private use. Project Structure The project is split into two main parts: Android app Go triangulation and tower-fitting tools Android App The Android app is the core data collector. It runs on a phone and gathers data about the currently connected cellular tower. This data is uploaded to a Supabase database and stored as observations. The app records data such as: connected cell ID network / area information GPS location GPS accuracy altitude vertical accuracy timing advance EARFCN PCI recorder time Currently, it collects and uploads data approximately every 5 seconds. Because of this, it can consume a significant amount of battery due to frequent GPS usage, cellular observation checks, background processing, and network uploads. APK Status The APK is not published. This is because the project is mainly for private use, and publishing it could introduce privacy risks due to the sensitive location and cellular data involved. For now, both the app and the database must be built and configured from the source code. Go Processing Tools The second part of the project is written in Go. These tools process the observations collected by the Android app and attempt to estimate real tower locations. The main approach uses 2D trilateration to approximate tower positions based on collected observations. There is also experimental 3D plane-intersection code for detecting towers in 3D space. However, it is not part of the main workflow because it generally performs worse than the 2D approach. Tower Matching After estimating tower locations, the Go tools attempt to match the calculated positions against a known tower-location database. This step connects collected observation data to real-world tower locations and computes more complete tower data, including estimated altitude, which is stored in a separate database. Current Limitations The project is still experimental and has several limitations: the APK is not publicly distributed the app can consume a high amount of battery the database must be configured manually tower matching is not always accurate the 3D approach exists but is not used in the main workflow the project handles sensitive location and cellular data altitude estimation is not always reliable and can sometimes be significantly inaccurate Things that were hard Things that I had hard were first setting up all the database exporting and transferring data, thinking and making all the ideas for how to use the 2D trilateration and 3D plane collision in the Go code. Adding the foreground service process in the Android app and making sure the TA updates on read also took some time, as well as creating the HTML converter for the point map in Go and all the steps to set up for the shipping of the project that require a very strict level of security and can leak personal data if I’m not careful in every move. Current Goal The current goal of LoPose mapping is to create a working private pipeline: phone observations → Supabase database → tower estimation → tower matching → complete tower location data The project is not intended to be a polished production application yet. It is an experimental system for tower mapping and location processing. This is also the first step in a two-part project aimed at developing location-finding methods for Android that do not rely on GPS, which is planned for future development.", "repo": "https://gitlab.com/yakla/LoPose", "demo": "https://yakla.gitlab.io/LoPose/"}]...
|
[{"post_id": 20251, "ts": "202 [{"post_id": 20251, "ts": "2026-07-01T19:55:07Z", "hours": 3.7203, "text": "Update on current status. firstly the project now will start slowly shifting to the second part of the location finding based on the towers found. this will be found in a different project in the name of lopose location estimation secondly updated the readme and some of my older devlogs for better looks and for improving in writing things in the readme format. i’m not very good at it so i hope to improve by doing it and make it looks better. lastly cleaned some of the code and improved other parts for shipment."}, {"post_id": 19111, "ts": "2026-06-30T10:57:34Z", "hours": 3.6836, "text": "Devlog — Preparing Stardance for Shipping Before shipping Stardance firstly I spent some time cleaning up the project and making it easier to understand . it include a readme and a git repo. before publishing this i needed to check nothing private is commited. with that i also added a README to the project so it will be easier how to set up things yourself. all and all i’m pretty proud of what i made. still i do have planes for more which i didn’t had time for. New features adding the 3d estimations in the future. currently most of them are wrong but some times they can actually work better then 2d. i did see in my debugger around 10 or more of the 146 which actually worked better then the 2d once and could be logged in the final estimation. for better scalability i want to add observation auto removal if around 7 observation of the same cell can’t find a real tower. this will just mean that if few observations were off you can try again until all of them will fit one."}, {"post_id": 18290, "ts": "2026-06-29T12:03:21Z", "hours": 4.4636, "text": "Demo website its not done but here i got a demo website to watch all the observations until now and the estimation. do note some of them are wrong because of the challenging conditions so i will use a verification method later for the perfect real tower location and data. https://yakla.gitlab.io/LoPose/"}, {"post_id": 16530, "ts": "2026-06-26T21:51:52Z", "hours": 1.9075, "text": "Solution was found!!! its a good day today . aperently ta can also be 150m sometimes :) it work the detection works almost perfectly in 2d. yay ! i found out there was a bug in android that i thought have been fixed but aperently not. so now it works wonderfly. well we got it : if you ask its around 30m from the target. and this is while tracking in a moving car. also sometime the 3d estimation works better but thats in rare cases. most of the time its not the most accurate."}, {"post_id": 15837, "ts": "2026-06-25T19:08:05Z", "hours": 6.6844, "text": "update on current Go code tower estimation been a while and a lot got done got some news good news and bad news the good news is that i finished with the 3d caculation and improve observation accaurcy. the bad news is that there is still something lacking making the location positioning almost the same and still not giving the right. at least not based on my knowlage but its has gotten better in some siturations. i still have hard time figuring things out but combining the 2d and 3d based on the terain does give a pretty good estimated location. i realy like the 3d aproach i went with. suprisingly its easier to understand how its works then the 2d one and didn’t add much compute (at least not if there are to much points found from plain colition which grows expenetialy seriously some got in the order of bilions. realy creazy stuff) anyway from now on ill try focusing more on the position estimation rather then the tower estimation, this will be more interesting for me after all the work on one thing and use some of the knowledge i got from estimating the towers. anyway having hard time finding a good picture for the progress so random go 3d positioning code down below :"}, {"post_id": 12733, "ts": "2026-06-20T20:22:39Z", "hours": 3.3836, "text": "Small update add height to observaions. well been a while since the last devlog. i needed a lot of thinking and planning for the 3d estimations so took me long enough. still didn’t get all the answers but i do got some updates. first i got few ideas i want to share. for the height there are few approaches but what i want to use will be based on my already existing 2d system. secondly i might try to find the height approximations of the tower based on flat 2d location estimation and using a location to height api and distance height correction its possible to find it with high accuracy using gradient descent . and thirdly i dont have any pictures to share so ill put a picture of a dog 🐶"}, {"post_id": 6316, "ts": "2026-06-10T17:06:08Z", "hours": 1.2122, "text": "Suspected issues after lots of observations got to 3 different issues with the current system first i need to account for ta deadzone which is surprisingly one of the most uncommon things which are near me. i need to account for the third dimension in the calculation i need to check for faulty observations of ta jumps it will take work but its feasible. looks like i have a very bumpy road ahead wish me luck😵💫. took me too much time to figure the first one out"}, {"post_id": 5770, "ts": "2026-06-09T17:53:40Z", "hours": 7.1014, "text": "improved database sync code and changed ui"}, {"post_id": 4781, "ts": "2026-06-08T08:33:54Z", "hours": 5.2897, "text": "organize app code and improved architecture"}, {"post_id": 3754, "ts": "2026-06-06T20:05:04Z", "hours": 3.0111, "text": "started using observations for the caculation. seems real world had more error then expected so change observation code to recored more and reduce the distance between each one"}, {"post_id": 2949, "ts": "2026-06-05T21:08:06Z", "hours": 0.6258, "text": "improving cell tower location finding algorithm"}]...
|
Title: LoPose Cell Mapping by @yep | Stardance
De Title: LoPose Cell Mapping by @yep | Stardance
Devlogs:
improving cell tower location finding algorithm
started using observations for the caculation. seems real world had more error then expected so change observation code to recored more and reduce the distance between each one
organize app code and improved architecture
improved database sync code and changed ui
Suspected issues after lots of observations got to 3 different issues with the current system first i need to account for ta deadzone which is surprisingly one of the most uncommon things which are near me. i need to account for the third dimension in the calculation i need to check for faulty observations of ta jumps it will take work but its feasible. looks like i have a very bumpy road ahead wish me luck😵💫. took me too much time to figure the first one out
Small update add height to observaions. well been a while since the last devlog. i needed a lot of thinking and planning for the 3d estimations so took me long enough. still didn’t get all the answers but i do got some updates. first i got few ideas i want to share. for the height there are few approaches but what i want to use will be based on my already existing 2d system. secondly i might try to find the height approximations of the tower based on flat 2d location estimation and using a location to height api and distance height correction its possible to find it with high accuracy using gradient descent . and thirdly i dont have any pictures to share so ill put a picture of a dog 🐶
update on current Go code tower estimation been a while and a lot got done got some news good news and bad news the good news is that i finished with the 3d caculation and improve observation accaurcy. the bad news is that there is still something lacking making the location positioning almost the same and still not giving the right. at least not based on my knowlage but its has gotten better in some siturations. i still have hard time figuring things out but combining the 2d and 3d based on the terain does give a pretty good estimated location. i realy like the 3d aproach i went with. suprisingly its easier to understand how its works then the 2d one and didn’t add much compute (at least not if there are to much points found from plain colition which grows expenetialy seriously some got in the order of bilions. realy creazy stuff) anyway from now on ill try focusing more on the position estimation rather then the tower estimation, this will be more interesting for me after all the work on one thing and use some of the knowledge i got from estimating the towers. anyway having hard time finding a good picture for the progress so random go 3d positioning code down below :
Solution was found!!! its a good day today . aperently ta can also be 150m sometimes :) it work the detection works almost perfectly in 2d. yay ! i found out there was a bug in android that i thought have been fixed but aperently not. so now it works wonderfly. well we got it : if you ask its around 30m from the target. and this is while tracking in a moving car. also sometime the 3d estimation works better but thats in rare cases. most of the time its not the most accurate.
Demo website its not done but here i got a demo website to watch all the observations until now and the estimation. do note some of them are wrong because of the challenging conditions so i will use a verification method later for the perfect real tower location and data. https://yakla.gitlab.io/LoPose/
Devlog — Preparing Stardance for Shipping Before shipping Stardance firstly I spent some time cleaning up the project and making it easier to understand . it include a readme and a git repo. before publishing this i needed to check nothing private is commited. with that i also added a README to the project so it will be easier how to set up things yourself. all and all i’m pretty proud of what i made. still i do have planes for more which i didn’t had time for. New features adding the 3d estimations in the future. currently most of them are wrong but some times they can actually work better then 2d. i did see in my debugger around 10 or more of the 146 which actually worked better then the 2d once and could be logged in the final estimation. for better scalability i want to add observation auto removal if around 7 observation of the same cell can’t find a real tower. this will just mean that if few observations were off you can try again until all of them will fit one.
Update on current status. firstly the project now will start slowly shifting to the second part of the location finding based on the towers found. this will be found in a different project in the name of lopose location estimation secondly updated the readme and some of my older devlogs for better looks and for improving in writing things in the readme format. i’m not very good at it so i hope to improve by doing it and make it looks better. lastly cleaned some of the code and improved other parts for shipment.
Ships:
Project Overview LoPose Tower Mapping is a project focused on mapping cellular tower data collected from phones to real-world tower locations. The goal is to collect cellular observations from Android devices, upload them to a database, and process those observations to estimate and match real tower positions. The project is currently experimental and mainly intended for private use. Project Structure The project is split into two main parts: Android app Go triangulation and tower-fitting tools Android App The Android app is the core data collector. It runs on a phone and gathers data about the currently connected cellular tower. This data is uploaded to a Supabase database and stored as observations. The app records data such as: connected cell ID network / area information GPS location GPS accuracy altitude vertical accuracy timing advance EARFCN PCI recorder time Currently, it collects and uploads data approximately every 5 seconds. Because of this, it can consume a significant amount of battery due to frequent GPS usage, cellular observation checks, background processing, and network uploads. APK Status The APK is not published. This is because the project is mainly for private use, and publishing it could introduce privacy risks due to the sensitive location and cellular data involved. For now, both the app and the database must be built and configured from the source code. Go Processing Tools The second part of the project is written in Go. These tools process the observations collected by the Android app and attempt to estimate real tower locations. The main approach uses 2D trilateration to approximate tower positions based on collected observations. There is also experimental 3D plane-intersection code for detecting towers in 3D space. However, it is not part of the main workflow because it generally performs worse than the 2D approach. Tower Matching After estimating tower locations, the Go tools attempt to match the calculated positions against a known tower-location database. This step connects collected observation data to real-world tower locations and computes more complete tower data, including estimated altitude, which is stored in a separate database. Current Limitations The project is still experimental and has several limitations: the APK is not publicly distributed the app can consume a high amount of battery the database must be configured manually tower matching is not always accurate the 3D approach exists but is not used in the main workflow the project handles sensitive location and cellular data altitude estimation is not always reliable and can sometimes be significantly inaccurate Things that were hard Things that I had hard were first setting up all the database exporting and transferring data, thinking and making all the ideas for how to use the 2D trilateration and 3D plane collision in the Go code. Adding the foreground service process in the Android app and making sure the TA updates on read also took some time, as well as creating the HTML converter for the point map in Go and all the steps to set up for the shipping of the project that require a very strict level of security and can leak personal data if I’m not careful in every move. Current Goal The current goal of LoPose mapping is to create a working private pipeline: phone observations → Supabase database → tower estimation → tower matching → complete tower location data The project is not intended to be a polished production application yet. It is an experimental system for tower mapping and location processing. This is also the first step in a two-part project aimed at developing location-finding methods for Android that do not rely on GPS, which is planned for future development....
|
1793717755.0767388
|
1793804155.0767388
|
|
66495
|
STM32F407 Dev Kit by @Vibhor | Stardance
|
Vibhor
|
0
|
29.29
|
0
|
[]
|
[{"post_id": 86288, "ts": "202 [{"post_id": 86288, "ts": "2026-11-01T06:41:01Z", "hours": 2.4717, "text": "Add prices to BOM While going through the requirements before submitting, I got to know that I must include prices and the total cost in the BOM too. So, my BOM already had the exact quantity required for a single PCB. But as almost all parts were SMD, and some were even QFNs or smaller, I needed some spares. Because I don’t really have a good history with QFNs and extremely tiny packages. So, I made another column for Quantity including spares. I added 1-4 spares for 0805 LEDs, resistors, inductors and capacitors based on how many were used. For example, I was using 39 100nf caps, so I added 4 spares to get 43 while only 1 2nf cap was being used so it had 1 spare only. I had the headers with me, so I set their quantity to 0. I did the same for the CS43L22. The two crystals are a bit harder and they had 2 spares each. I listed 6 spares for the QFN as somehow, QFNs just get blown away, or burnt out or misaligned most of the time. I could of course use assembly from the Fab house, but that would end up being more expensive and I don’t gain any soldering skills. Then for the two STM32s, I only had 1 spare each as LQFP packages are much better than QFNs. The ETHERNET connector didn’t need spares at all. It is such a big package, that too through hole, so, that’s quite easy. I was also about to keep no spare for the B2B-XH-A(LF)(SN), but I remembered how easily it’s plastic melts if it accidentally gets touched by a soldering iron. Accidents happen! The TBC was supposed to receive the power, and it is also relatively easy to solder. But as it is such a critical part, and the whole board relies on it, I added a spare for it too. The ESD diodes just needed 2 spares only. They are neither too small, or too large. Then while writing this out, I suddenly remembered that I also had to include a power supply. I had already decided on the LRS-100-12. But Digikey didn’t have it, and I was using Digikey to source all parts, so I had to look for a replacement. I could go with the RS-100-12, which is the older generation of the LRS-100-12, but it is less efficient and bulkier. So, I used Digikey’s part browsing tools, and decided to use the PMT-12V100W2BA which seems like a drop-in replacement for the LRS-100-12, looking at it’s specs. Anyways, after that, my BOM was finally done! Now the requirements also says that I must also have firmware in the project, but as this was meant to be a generic dev board that can be used for anything, I didn’t think it was right for this to have one. For some components, digikey had quantity discounts, and buying at that quantity was cheaper than the quantity I needed, so I added in the cart that way, so the overall price is reduced. Also, as the total amount now exceeds ₹7000 (around $73.75), shipping is free! The BOM now says $220.81. I went to the JLCPCB to get a quote, and noticed that on the JLCONE desktop app, it’s cost around $2 less. Respecting the Code of Conduct, I downloaded JLCONE. Then I checked out the cost by a reputed Indian manufacturer, Lion Circuits, and the price was $29.01. JLCPCB is known to be one of the cheapest manufacturers, but with shipping and other hidden cost, it was turning out to be slightly more expensive. Shipping was free. So, the total cost now, is $249.82."}, {"post_id": 85601, "ts": "2026-10-31T15:09:20Z", "hours": 26.8169, "text": "Completed Project! This project was quite more complex than all my previous ones, and it turned out to be even more complex than I expected. So, I decided to firstly make a block diagram for the whole project. Alright, the STM32F407 was at the center. Then the F103 was supposed to program the F407. It further had a USB port (for the F407) and a JTAG header (for flashing the debugging firmware onto it). Then the F407 was also connected to a USB port, utilizing it’s USB-OTG powers. Alright next, I have two DRV8701E motor drivers. I couldn’t use the widely available, cheap L293D motor driver as it was too underpowered. Later, though I decided to keep only one motor, to reduce complexity. I didn’t remove it from the block diagram or power budget, so that I could upgrade whenever I wanted to. The motor driver needed 4MOSFETs each, and then it was connected to a plug to be connected to motors. I also needed a ADC. For that, I decided to go with the ADS112C04PW/PWR. They are drop in replacements with near-identical specs. For Ethernet, I chose the DP83826 and the MII interface as I didn’t require much high speeds. It is connected to a RJ45 connector with in-build magnetics. Then comes the audio section. I firstly have a DAC that can connect to both Stereo speakers and a headphone jack. Then, I have a MIC for voice input. Alright, so with so many components, I can’t use just any power supply due to the high current. So along with the block diagram, I decided to make a power budget too. I firstly started with a +12V I/P connector. Then, I added the two motors that draw 3A each. After that came my +3V3 buck converter. To the buck converter, I connected the F407, F103, CH340C, DP83826, ADS122, DAC and Mic. I referred to each of their datasheets to get the peak current they can draw. The peak current is the maximum current a chip can safely draw while the average current is the current it draws under normal use. The peak current usually happens during power on and when it is activating a new peripheral. So when calculating power, the peak current is always used. I then added all the peak currents to get roughly 475mA. To calculate the input current, we need to first calculate the output power. Output power = Vout * Iout = 3.3 * 0.475 = 1.5675W Input Power = Vin * Iin = 12 * Iin Efficiency = 90% =0.9 Output power = Input Power * Efficiency 1.5675 = 12 * 0.9 * Iin Iin = 1.5677/10.08 = 0.1555A = 155.5mA Now, the total IP current is (2 * 3) + 0.1555 = 6.2A. For this, I’ll take a margin of 25%, so (6.2 * 0.25) + 6.2 = 8A. The closest standard power supply current is 10A, so I finally came at +12V/10A for my I/P connector. Now, I also designed the schematic page for each of the listed part, and also made a PCB, but even though I want to, I can’t devlog it here as I’m reaching the max characters limit here. Though I can say that the datasheets were my best friends throughout this project, especially the pin description, typical application diagrams, and the recommended layout sections. I don’t know why I can’t like refer to links and then journal my work, like I can in Lapse. But I later realised that devlogs had to be written as soon as I synced Lapse with Hackatime, which I will keep in mind from next time. By the way, thinking of Lapse, to journal my work properly for this project, I’ll use Forge. This project was originally meant for Forge, to be honest, but when I got to know about the 30 hour certificate, I created a Stardace project too."}]...
|
Title: STM32F407 Dev Kit by @Vibhor | Stardance
D Title: STM32F407 Dev Kit by @Vibhor | Stardance
Devlogs:
Completed Project! This project was quite more complex than all my previous ones, and it turned out to be even more complex than I expected. So, I decided to firstly make a block diagram for the whole project. Alright, the STM32F407 was at the center. Then the F103 was supposed to program the F407. It further had a USB port (for the F407) and a JTAG header (for flashing the debugging firmware onto it). Then the F407 was also connected to a USB port, utilizing it’s USB-OTG powers. Alright next, I have two DRV8701E motor drivers. I couldn’t use the widely available, cheap L293D motor driver as it was too underpowered. Later, though I decided to keep only one motor, to reduce complexity. I didn’t remove it from the block diagram or power budget, so that I could upgrade whenever I wanted to. The motor driver needed 4MOSFETs each, and then it was connected to a plug to be connected to motors. I also needed a ADC. For that, I decided to go with the ADS112C04PW/PWR. They are drop in replacements with near-identical specs. For Ethernet, I chose the DP83826 and the MII interface as I didn’t require much high speeds. It is connected to a RJ45 connector with in-build magnetics. Then comes the audio section. I firstly have a DAC that can connect to both Stereo speakers and a headphone jack. Then, I have a MIC for voice input. Alright, so with so many components, I can’t use just any power supply due to the high current. So along with the block diagram, I decided to make a power budget too. I firstly started with a +12V I/P connector. Then, I added the two motors that draw 3A each. After that came my +3V3 buck converter. To the buck converter, I connected the F407, F103, CH340C, DP83826, ADS122, DAC and Mic. I referred to each of their datasheets to get the peak current they can draw. The peak current is the maximum current a chip can safely draw while the average current is the current it draws under normal use. The peak current usually happens during power on and when it is activating a new peripheral. So when calculating power, the peak current is always used. I then added all the peak currents to get roughly 475mA. To calculate the input current, we need to first calculate the output power. Output power = Vout * Iout = 3.3 * 0.475 = 1.5675W Input Power = Vin * Iin = 12 * Iin Efficiency = 90% =0.9 Output power = Input Power * Efficiency 1.5675 = 12 * 0.9 * Iin Iin = 1.5677/10.08 = 0.1555A = 155.5mA Now, the total IP current is (2 * 3) + 0.1555 = 6.2A. For this, I’ll take a margin of 25%, so (6.2 * 0.25) + 6.2 = 8A. The closest standard power supply current is 10A, so I finally came at +12V/10A for my I/P connector. Now, I also designed the schematic page for each of the listed part, and also made a PCB, but even though I want to, I can’t devlog it here as I’m reaching the max characters limit here. Though I can say that the datasheets were my best friends throughout this project, especially the pin description, typical application diagrams, and the recommended layout sections. I don’t know why I can’t like refer to links and then journal my work, like I can in Lapse. But I later realised that devlogs had to be written as soon as I synced Lapse with Hackatime, which I will keep in mind from next time. By the way, thinking of Lapse, to journal my work properly for this project, I’ll use Forge. This project was originally meant for Forge, to be honest, but when I got to know about the 30 hour certificate, I created a Stardace project too.
Add prices to BOM While going through the requirements before submitting, I got to know that I must include prices and the total cost in the BOM too. So, my BOM already had the exact quantity required for a single PCB. But as almost all parts were SMD, and some were even QFNs or smaller, I needed some spares. Because I don’t really have a good history with QFNs and extremely tiny packages. So, I made another column for Quantity including spares. I added 1-4 spares for 0805 LEDs, resistors, inductors and capacitors based on how many were used. For example, I was using 39 100nf caps, so I added 4 spares to get 43 while only 1 2nf cap was being used so it had 1 spare only. I had the headers with me, so I set their quantity to 0. I did the same for the CS43L22. The two crystals are a bit harder and they had 2 spares each. I listed 6 spares for the QFN as somehow, QFNs just get blown away, or burnt out or misaligned most of the time. I could of course use assembly from the Fab house, but that would end up being more expensive and I don’t gain any soldering skills. Then for the two STM32s, I only had 1 spare each as LQFP packages are much better than QFNs. The ETHERNET connector didn’t need spares at all. It is such a big package, that too through hole, so, that’s quite easy. I was also about to keep no spare for the B2B-XH-A(LF)(SN), but I remembered how easily it’s plastic melts if it accidentally gets touched by a soldering iron. Accidents happen! The TBC was supposed to receive the power, and it is also relatively easy to solder. But as it is such a critical part, and the whole board relies on it, I added a spare for it too. The ESD diodes just needed 2 spares only. They are neither too small, or too large. Then while writing this out, I suddenly remembered that I also had to include a power supply. I had already decided on the LRS-100-12. But Digikey didn’t have it, and I was using Digikey to source all parts, so I had to look for a replacement. I could go with the RS-100-12, which is the older generation of the LRS-100-12, but it is less efficient and bulkier. So, I used Digikey’s part browsing tools, and decided to use the PMT-12V100W2BA which seems like a drop-in replacement for the LRS-100-12, looking at it’s specs. Anyways, after that, my BOM was finally done! Now the requirements also says that I must also have firmware in the project, but as this was meant to be a generic dev board that can be used for anything, I didn’t think it was right for this to have one. For some components, digikey had quantity discounts, and buying at that quantity was cheaper than the quantity I needed, so I added in the cart that way, so the overall price is reduced. Also, as the total amount now exceeds ₹7000 (around $73.75), shipping is free! The BOM now says $220.81. I went to the JLCPCB to get a quote, and noticed that on the JLCONE desktop app, it’s cost around $2 less. Respecting the Code of Conduct, I downloaded JLCONE. Then I checked out the cost by a reputed Indian manufacturer, Lion Circuits, and the price was $29.01. JLCPCB is known to be one of the cheapest manufacturers, but with shipping and other hidden cost, it was turning out to be slightly more expensive. Shipping was free. So, the total cost now, is $249.82....
|
1793717753.900723
|
1794322553.900723
|
|
52880
|
My own site! by @azhan_builds | Stardance
|
azhan_builds
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T16:28:45Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "There we go! I just finished my first personal site. Although it is very basic, it is something I built myself and I am proud of. This was not much of a challenge, but the road up ahead is not straight and I must be prepared for it. Anyways, that is all for now.", "repo": "https://github.com/azhan-builds/My-site", "demo": "https://azhan-builds.github.io/My-site/"}]...
|
[{"post_id": 53084, "ts": "202 [{"post_id": 53084, "ts": "2026-08-23T14:39:55Z", "hours": 1.0856, "text": "I just joined Hack Club and the Stardust program. I completed the first project that is my own personal site. This is just a start and I do agree that it is too basic, but I have a long way ahead and I believe I will get much better ahead."}]...
|
Title: My own site! by @azhan_builds | Stardance
Title: My own site! by @azhan_builds | Stardance
Devlogs:
I just joined Hack Club and the Stardust program. I completed the first project that is my own personal site. This is just a start and I do agree that it is too basic, but I have a long way ahead and I believe I will get much better ahead.
Ships:
There we go! I just finished my first personal site. Although it is very basic, it is something I built myself and I am proud of. This was not much of a challenge, but the road up ahead is not straight and I must be prepared for it. Anyways, that is all for now....
|
1793717752.6890576
|
1793804152.6890576
|
|
66493
|
Evolution Edge by @SaratChandraNallabati | Stardan Evolution Edge by @SaratChandraNallabati | Stardance...
|
SaratChandraNallabati
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Evolution Edge by @SaratChandraNallabati | Title: Evolution Edge by @SaratChandraNallabati | Stardance...
|
1793717751.8251853
|
1794322551.8251853
|
|
52869
|
Sebby's Custom New Tab Page by @SebbyMortimer Sebby's Custom New Tab Page by @SebbyMortimer | Stardance...
|
SebbyMortimer
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T20:48:46Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a custom new tab page that is ocean/iceberg themed that features Piplup and Charles. If you click on Charles you get some really nice music, it’s one of the ones that I like to listen to to relax. However the main thing is the search area in the middle that lets you search google, you can also change which language to search in and whether to hide the AI overview. The other “real” feature that I have is a word of the day API taken from wordnik that updates daily. The website also features multiple animations, including piplup swimming across the screen, waves bobbing up and down, ripples when you click, and the icebergs float too. Honestly nothing was too challenging in this project, so I think the most challenging for me was just trying to change the design of the form elements that let you search - I always have left them as their default designs in my computing classes but because I wanted to use them in a finished, polished product this time I had to try and design them and change them from their default styles which was a bit more difficult than I imagined. I’m super proud of being able to recreate the idea I had in my head on an actual website. I love how it’s turned out and it’s usually pretty difficult for me to get exactly what I’m thinking of made into an actual finished project. There’s not much you need to know when testing my project, I kind of already talked at the start that if you click on Charles you can listen to music, and also if you just click around the water you will create ripples. Besides that you can just use it like a normal new tab page to start your searches. Thank you for reading this and trying out my project. :)", "repo": "https://github.com/SebbyMortimer/custom-new-tab", "demo": "https://sebbymortimer.co.uk/custom-new-tab/"}]...
|
[{"post_id": 54046, "ts": "202 [{"post_id": 54046, "ts": "2026-08-24T20:08:05Z", "hours": 1.7608, "text": "Devlog #2 The word of the day API has been fully implemented and I put it on its own floating iceberg which makes it look so much better than when it was just hovering next to Charles. I also added the attributions required by wordnik to link to the word on their website and use their media logo. I also re-added the “splash” YouTube video that I originally had but made it take up less space and real estate on the screen and I added a nice little image underneath showing that it’s a recommendation of mine to watch. I also slightly tweaked positioning of the main search area and word of the day text as well as the position of the holes in the iceberg to make the entire thing more cohesive and to get that finishing polish done."}, {"post_id": 53708, "ts": "2026-08-24T11:46:42Z", "hours": 0.4467, "text": "Yeah so I didn’t realise I needed to link Hackatime. As the title says, I didn’t realise I had to link hackatime for my project hence why I’ve only logged about half an hour. However I can describe the things I’ve worked on this project up until this point. Devlog I decided not to follow the guide after looking through it as the images that nasa gives really did not match the sort of website I wanted to make so instead I took to making my own new tab page. It’s themed around an iceberg floating in the middle of the water with little wave effects and ripples when you click on the water. I also love penguins (and Piplup) so you might spot a little piplup swimming across the screen some times. You can also just chill and listen to music by clicking on Charles in the bottom right to play and pause the song. And for the main part of this project, in the centre on the iceberg is a search bar along with two options, one for changing the language and one for hiding the ai overview in your search. I’m currently implementing a word of the day from an api (my “real” feature) and to help stop people stealing it I’ve hidden the api key behind a cloudflare worker and also made use of caching so it will be very difficult to run out of requests but also caching makes it super fast like holy. Next I want to work on refining the design of the search area in the middle as I only just started changing it from the default bland grey look. Sorry for such a long devlog, I didn’t realise I was going to have to link hackatime and create some devlogs because for some reason I never looked at my project page until yesterday."}]...
|
Title: Sebby's Custom New Tab Page by @SebbyMo Title: Sebby's Custom New Tab Page by @SebbyMortimer | Stardance
Devlogs:
Yeah so I didn’t realise I needed to link Hackatime. As the title says, I didn’t realise I had to link hackatime for my project hence why I’ve only logged about half an hour. However I can describe the things I’ve worked on this project up until this point. Devlog I decided not to follow the guide after looking through it as the images that nasa gives really did not match the sort of website I wanted to make so instead I took to making my own new tab page. It’s themed around an iceberg floating in the middle of the water with little wave effects and ripples when you click on the water. I also love penguins (and Piplup) so you might spot a little piplup swimming across the screen some times. You can also just chill and listen to music by clicking on Charles in the bottom right to play and pause the song. And for the main part of this project, in the centre on the iceberg is a search bar along with two options, one for changing the language and one for hiding the ai overview in your search. I’m currently implementing a word of the day from an api (my “real” feature) and to help stop people stealing it I’ve hidden the api key behind a cloudflare worker and also made use of caching so it will be very difficult to run out of requests but also caching makes it super fast like holy. Next I want to work on refining the design of the search area in the middle as I only just started changing it from the default bland grey look. Sorry for such a long devlog, I didn’t realise I was going to have to link hackatime and create some devlogs because for some reason I never looked at my project page until yesterday.
Devlog #2 The word of the day API has been fully implemented and I put it on its own floating iceberg which makes it look so much better than when it was just hovering next to Charles. I also added the attributions required by wordnik to link to the word on their website and use their media logo. I also re-added the “splash” YouTube video that I originally had but made it take up less space and real estate on the screen and I added a nice little image underneath showing that it’s a recommendation of mine to watch. I also slightly tweaked positioning of the main search area and word of the day text as well as the position of the holes in the iceberg to make the entire thing more cohesive and to get that finishing polish done.
Ships:
I made a custom new tab page that is ocean/iceberg themed that features Piplup and Charles. If you click on Charles you get some really nice music, it’s one of the ones that I like to listen to to relax. However the main thing is the search area in the middle that lets you search google, you can also change which language to search in and whether to hide the AI overview. The other “real” feature that I have is a word of the day API taken from wordnik that updates daily. The website also features multiple animations, including piplup swimming across the screen, waves bobbing up and down, ripples when you click, and the icebergs float too. Honestly nothing was too challenging in this project, so I think the most challenging for me was just trying to change the design of the form elements that let you search - I always have left them as their default designs in my computing classes but because I wanted to use them in a finished, polished product this time I had to try and design them and change them from their default styles which was a bit more difficult than I imagined. I’m super proud of being able to recreate the idea I had in my head on an actual website. I love how it’s turned out and it’s usually pretty difficult for me to get exactly what I’m thinking of made into an actual finished project. There’s not much you need to know when testing my project, I kind of already talked at the start that if you click on Charles you can listen to music, and also if you just click around the water you will create ripples. Besides that you can just use it like a normal new tab page to start your searches. Thank you for reading this and trying out my project. :)...
|
1793717750.620018
|
1793804150.620018
|
|
66492
|
My awesome macropad! by @dhruvam | Stardance
|
dhruvam
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @dhruvam | Stardanc Title: My awesome macropad! by @dhruvam | Stardance...
|
1793717749.7179143
|
1794322549.7179143
|
|
12498
|
Ferrite by @MarioS271 | Stardance
|
MarioS271
|
1
|
129.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-28T15:21:25Z", "hours": 129.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Ferrite An OS kernel, build from the ground up to be modern, clean, optimized and do it right. Written in Rust. Ferrite aims to be a modern and optimized kernel as well as provide some advanced capabilities such as intent-aware scheduling, real-time scheduling/scheduling hints (“don’t preempt me for this long”), a namespaced VFS and more. Furthermore, Ferrite aims towards a clean design, fixing a lot of design mistakes in other kernels. How to try it out FerriteOS is a UEFI x86_64 kernel. The easiest way to try it is in QEMU. Linux Download ferrite_os-debug.iso (or ferrite_os-release.iso , but I recommend the debug one as it gives way more output) and ferrite_os-scripts.zip from the assets in the github release. Unzip the scripts and go to the Linux folder: unzip ferrite_os-scripts.zip -d ferrite_os-scripts cd ferrite_os-scripts/linux Install the dependencies. This installs QEMU system-wide (needs sudo) and downloads OVMF next to the script: ./install-deps.sh Start the ISO: ./run.sh Put the ISO next to run.sh . It picks up ferrite_os-release.iso first, then any other ferrite_os-*.iso . To choose one explicitly, pass the path, for example ./run.sh ferrite_os-debug.iso . Kernel output is printed to the terminal via the serial port. Windows Download ferrite_os-debug.iso (or ferrite_os-release.iso , but I recommend the debug one as it gives way more output) and ferrite_os-scripts.zip from the assets in the github release. Unzip the scripts and open the windows folder. Double-click install-deps.cmd . This installs QEMU via winget (needs admin approval) and downloads OVMF next to the script. Put the ISO next to run.cmd and double-click run.cmd . It picks up ferrite_os-release.iso first, then any other ferrite_os-*.iso . To choose one explicitly, run run.cmd ferrite_os-debug.iso from a terminal. Other platforms Scripts for other platforms are not available yet. You can run the ISO manually with qemu-system-x86_64 , -cdrom ferrite_os-release.iso , -m 4G and the OVMF code.fd and vars.fd files from ovmf-prebuilt attached as pflash drives. Thanks for trying out my project and have fun! :)", "repo": "https://github.com/MarioS271/ferrite_os", "demo": "https://github.com/MarioS271/ferrite_os/releases/latest"}]...
|
[{"post_id": 83748, "ts": "202 [{"post_id": 83748, "ts": "2026-10-28T14:52:36Z", "hours": 0.5033, "text": "Github Actions and try-it-out scripts I’m now finished preparing for shipping the kernel on stardance! :) Github Actions I’ve added a workflow which runs on tagged pushes in the v* format (anything starting with v ), so that a tag like v0.0.1 is recognized as release version 0.0.1. The workflow builds a debug and release ISO, and also ships scripts to easily try the kernel out. (and yes, the workflow and scripts were written with claude code, i really don’t wanna spend hours on that kinda stuff)"}, {"post_id": 83711, "ts": "2026-10-28T13:09:32Z", "hours": 1.4428, "text": "Exception Table done! Finally, bad userspace pointers don’t bring down the kernel anymore. What the Exception Table does Only a few instructions in a few places in kernel code can actually produce a pagefault which is the user’s fault, not the kernel’s. If we handle those normally, we’d panic. The exception table however gets built at compile time and contains every place in the kernel that could produce userspace-caused page faults. We simply check if the page fault happened at one of these instructions, and if it did, skip the instruction and return a BadAddress error instead."}, {"post_id": 83421, "ts": "2026-10-27T22:53:10Z", "hours": 2.5444, "text": "Memory Mapping and Paging Stuff With the stack no longer exploding, I finally got to refactoring the page fault handler. Before, it operated based on whether the fault happened in ring 3 or ring 0, when it should actually mainly distinguish between kernel and user addresses. Why distinguish between addresses instead of rings? Imagine this: we’re handling a syscall, attempting to read userspace-provided memory, and we page fault. The fault happens in ring 0 but we’re actually working with userspace memory. Now, if we handle it like a kernel page fault, where our mindset is “Either there’s a valid VMA and we can map this or there’s a kernel bug so we panic”, a malicious userspace process could just provide a wrong address and panic the whole system. Even worse: a valid pointer also brings down the system if it points into lazily allocated memory. Now, the page fault handler looks at the address (and for user address page faults also at the current ring) and decides based on that what to do. As proof that this works, the user binary now uses the stack for printing a text smiley, which works, even with the userspace stack now being lazily allocated. What’s still left to do Currently, bad user programs can still bring down the system because the page fault handler is among others still missing the so called “Exception Table” but more on that next devlog."}, {"post_id": 81884, "ts": "2026-10-22T20:46:35Z", "hours": 2.2778, "text": "whoops Turns out, when testing the new debug write syscall, it was slightly broken when passing wrong params, specifially when passing an unmapped or invalid address as a pointer to the string to write. Because of that, a page fault was triggered in the syscall, which blew up the stack, which was for some reason already filled more than halfway (around 9 KiB)?!? Side note: in a syscall handler, there are only 16 KiB of stack memory available, and therefore 9 KiB before any error handling is already kind of a lot (normally it should be less than half in this application) What was actually wrong Turns out, the error was the freaking kprint stuff. Yes, the funny kdebug!() and knotice!() logging macros.. The main issue is that they’re macros, which expand in place. Why that’s a problem In Syscall::dispatch , there’s two kdebug!() calls. That blows the method’s needed stack to almost 5 KiB for a simple dispatcher function with 10 lines, which is unacceptable. The problem is that the stack memory for all the kdebug!() writes gets reserved as soon as the method is called, and each kprint macro call has a 2 KiB buffer and more behind it that it needs. The Solution To fix this, I replaced the internal __kprint macro with a function. This means that now the needed stack for the logging action is only reserved during the logging, not during the whole parent function. By doing this, I managed to cut the debug write system call’s memory footprint from around 8 KiB to just 1.5 KiB, which is a huge improvement."}, {"post_id": 72380, "ts": "2026-09-22T19:58:13Z", "hours": 3.6453, "text": "DebugWrite syscall! The userspace process is now able to ask the kernel to write log messages! This means that finally, you can actually properly do something from the userspace program. Next, I’ll be implementing userspace page fault handling"}, {"post_id": 71895, "ts": "2026-09-21T18:32:02Z", "hours": 4.145, "text": "Syscall Dispatching, Syscall returning and Exit Syscall Finally, after all this time: User programs can now interact with the kernel!! :) Changelog Added Syscall enum which represents all possible syscalls and their respective IDs Added SyscallArgs whichs contains syscall number and args in an architecture-independent format Added SyscallResult and SyscallError Added syscall dispatching logic Fixed kernel data leaking into userspace via initial_userspace_jump by clearing CPU registers before the jump the end of stardance is approaching… i wish all of you a lot of fun for the last 9 days."}, {"post_id": 71226, "ts": "2026-09-20T14:09:53Z", "hours": 7.2311, "text": "Syscalls! Changes so far: Added gs_info struct, which saves the user stack and holds a pointer to the kernel stack Added syscall::init which enables the syscall / sysret instructions and sets up the STAR , LSTAR and SFMASK registers Added syscall_entry which builds a UserFrame (a snapshot of the CPU registers on syscall entry) and calls syscall_dispatch Added syscall_dispatch , which currently logs the received syscall number and halts (the system call return path is not implemented YET) Added UserFrame which holds a CPU register snapshot which gets taken upon entering the kernel"}, {"post_id": 68847, "ts": "2026-09-15T21:08:45Z", "hours": 7.6578, "text": "ELF Loading Refactor and improved build system After a week of basically no progress, I’ve finally finished moving the ELF init sequence from main.rs into the proper methods under the sched subsystem. I’ve also simplified and improved the build system ( build.py / docs.py ). They now use a shared lib.py to avoid code duplication. Also, build.py got a few changes: Removed build cache (cargo already does it) Swapped console restore for proper serial control char output filtering Bug Fixes The docker permissions have been fixed, as under Linux, root would own parts of the build files which is of course annoying as you can’t easily interact with those files then. The github-hosted rustdoc was failing to build as it could not find USER-BINARY , so I just faked user-binary via touch user-binary . time to go to bed yippeeeee :D"}, {"post_id": 63879, "ts": "2026-09-07T21:37:33Z", "hours": 6.1186, "text": "Finally… after all that work, we’re back!! After almost 30 hours of work over the last week, I’ve finally finished the big refactor . Changelog of the refactor Rewritten kprint backend Restructured KSTATE Hit my head on the wall A LOT Added a few new datatypes and macros Optimizations all over the place Added quite a few TODOs (more work 🥲) Restructured the source tree Changed the entrypoint (kernel now starts in an arch-specific kernel_entry , which builds a BootInfo and hands to kernel_main ) Moved the userspace/ELF stuff from main.rs into the sched subsystem Rewrote the UART driver … and so much more. and of course i organized it all into one slightly large 144 file commit :)"}, {"post_id": 62991, "ts": "2026-09-06T15:43:08Z", "hours": 9.2244, "text": "Big changes are still happening oh boy this is taking way too long Rewritten kprint kprint , the kernel print macro has been fully rewritten. The public macros have not changed, but internally, the macros now: Construct a kernel writer Call core::fmt::write on the kernel writer The kernel writer collects the text of all calls made to it using core::fmt::write in an internal buffer, and on drop, it pushes a new entry into the kernel log ringbuffer in a format that is (currently only partially) syslog-compatible. Then, the kernel writer dispatches a log header and the full log text to all active log recievers (like UART or the basic framebuffer). New Types PackedU8 : A type which wraps all the bitwise logic for packing multiple pieces of data which are less than one byte into a byte UncheckedCell : A datatype with interior mutability, which can be uninitialized via MaybeUninit . When the cargo feature debug-checks is enabled, this type also checks for double initialization and uninitialized access NicheCell : A datatype with interior mutability, which can be uninitialized via Option . This datatype is designed to be used with values that can take advantage of niche optimization (where the datatype T has a value which is guaranteed to be invalid, like a NonZeroU64 being zero) and oh boy, the big refactor: redid kernel source tree, ... commit is gonna be one hell of a mess…"}, {"post_id": 61699, "ts": "2026-09-04T18:57:23Z", "hours": 7.995, "text": "Big changes upcoming… I’ve decided to change what the kernel aims to be and how it will work. I’ve dropped full linux drop-in compatibility in favour of creating a clean, modern and optimized kernel which tries to fix design mistakes other kernels have already made. New Design The kernel will be POSIX-compatible, feature a namespaced VFS to seperate virtual files or devices like /dev/sda , /sys/class/hwmon , /proc/self/ and more from actual files. It will have namespaces like fs:/ for the actual file system, dev:/ for device files (like dev:/sda ), vdev:/ for virtual devices (like vdev:/urandom ) and more, including hw:/ for a modern hardware info interface, log:/ for a standardized logging interface and reg:/ for a global registry-like configuration system. Internally, the kernel will also feature KSTATE , a central static struct for storing everything the kernel uses. Also, ther kernel will move from strictly limine to a dynamic bootloader format, where each architecture has its own kernel_entry , which prepares the CPU and kernel into a common state (long mode, paging, …) and builds a standardized BootInfo struct, which then gets handed to kernel_main when it is called. New Source Tree I’m also currently working on massively reorganizing and cleaning up the kernel source, by for example standardizing where arch-specific code lands, categorizing and organizing the code better and more. Also, the kernel print system ( kprint ) is currently being rewritten to improve performance and integrate it into KSTATE ."}, {"post_id": 60495, "ts": "2026-09-02T21:21:59Z", "hours": 5.7089, "text": "Refactoring hell is here again! Before I start on syscalls for the userspace binary, I’ve decided to first get most TODOs done, like updating the safety comments and rustdoc, refactoring the ELF loading stuff to properly utilize KSTATE::procs , proper error delegation and more. I’ve finally finished refactoring the TSS, GDT and IDT properly by removing the struct wrapper for GDT and IDT, getting rid of all the Once s and more. Additionally, I refactored KSTATE::cpu to be an arch-independent container of arch-specific structs. holy crap ive got so much left to refactor… and the new bodycam update just came out i wanna play but am stuck doing kernel stuff and some other stuff :’)"}, {"post_id": 59290, "ts": "2026-09-01T00:14:55Z", "hours": 6.2725, "text": "@everyone … WE HAVE USERSPACE!!! 🎉 :D This is something I’ve been waiting for sooo long… a binary is actually executing in USERSPACE now (ring 3 and stuff)!!! How it works Currently, the code is extremely hacked together, or “gepfuscht” as we like to call it in Austria ;). Basically, what should be cleanly integrated with KSTATE::procs , should use a proper userspace and kernel stack and so on, doesn’t. All of this of course won’t stay like that, but it currently is like that to just get something in userspace running. The one thing that is actually done cleanly is the ELF validation and definitions, which live under src/elf . There is a struct representing the ELF header, an ELF PHDR and also an enum for ELF validation errors. All other logic was just thrown into main for now, like creating the processes address space, mapping its memory, copying the binary into the mapped memor, setting up its stack and actually jumping to it. The current testing binary Written in good old assembly of course, the test binary currently has the job to cause some sort of CPU exception, as syscalls or any other way to interact with the kernel or output something doesn’t even exist yet. The current program manages that via just running the hlt instruction, which, when run from userspace (Ring 3) causes a general protection fault ( #GP ). This is because a userspace program shouldn’t just be able to halt the CPU or disable interrupts (via the cli instruction). That would defeat the whole purpose of rings and kernel/userspace. The userspace binary currently lies under src/user-binary.asm , next to src/kernel/ . It is build via running docker exec ferrite_os /ferrite_os/build-user-binary.sh . NASM was also added to the Dockerfile to make building the assembly file possible."}, {"post_id": 58145, "ts": "2026-08-30T14:31:31Z", "hours": 4.1728, "text": "Virtual Memory Management is complete! (for now) I’ve added methods for mapping pages and VMA together. I’ve also improved the kernel VMA granularity and added a kernel paging remap step to mm_init() which applies the kernel VMA permissions to the kernel pages. This is only intermediate until I switch to the linux boot protocol. Next up, I’ll be adding a (very basic) ELF loader!"}, {"post_id": 57670, "ts": "2026-08-29T21:52:52Z", "hours": 7.9519, "text": "Lots of stuff Changelog for the last two days Fixed the clean option in build.py Add kernel VMA setup method Update rustdoc in several places Add panic types to kernel_panic output Move SIMPLE_STATE out of main Improve per-arch code layout … and an INSANE amount of optimizations, including: Marking certain code paths as cold (which signals the compiler to expect that the code path is unlikely to occur and optimize accordingly) Remove a lot of overhead introduced by Once and similar by swapping them for UnsafeCell<MaybeUninit<T>> and others and taking advantage of things like niche optimization Using bit-packing instead of seperate booleans for state tracking Next up, I’ll be doing some more work on the VMM and finally add the full mapping methods, which map pages and VMAs together."}, {"post_id": 55494, "ts": "2026-08-27T11:46:16Z", "hours": 4.5481, "text": "AddressSpace and VMA data structs done! I’ve introduced a struct called AddressSpace which contains the virtual address of the root page table (the PML4 on x86_64) and a BTreeSet of VMAs (virtual memory areas). A BTreeSet is basically a type of set which organizes data in a tree-like structure (in a B-Tree structure to be exact) with a time complexity of O(log n) for inserting, removing and searching for elements. A VMA (virtual memory area) is an area in memory with specific flags, such as READ , WRITE , EXEC or USER . One of their main uses is determining what to do on a #PF (page fault): should we allocate a page here (lazy-mapping)? Or was this truly a faulty operation like trying to execute READ -only memory? Also, I briefly attempted to switch over to the linux boot protocol, but I decided to do that sometime later, because it is slightly complicated and definitely did not break everything ;)"}, {"post_id": 54689, "ts": "2026-08-25T19:03:42Z", "hours": 1.0014, "text": "Finally finished fixing the PMM free method! After needing to quickly relearn the logic of the free method because I somehow forgot it, it finally works again! Additionally, I’ve added a little safeguard to the bootloader memory reclamation. Next, I’ll be continuing on the VMM and refactoring it to support userland page tables too. Also, I’ve added a few core::fmt traits to PhysAddr and VirtAddr and also added a constructor which creates a new address type ( PhysAddr or VirtAddr ) with an address of zero. In addition, PhysAddr got a few new getters like as_ptr or as_mut_ptr ."}, {"post_id": 54565, "ts": "2026-08-25T16:11:33Z", "hours": 8.2356, "text": "Memory Stuff and General Fixes Currently working on the PMM and VMM a little more, also cleaned up the main for better readability. I also moved the PMM and VMM into the mm subsystem of the KState struct. Additionally, I switched from rust 2021 to rust 2024, which also needed a little fixing to get working again. Why? Well to use let chains in if statements of course cause its like a little bit nicer to write! :) Also, I partially upgraded scripts/x86_64/build.py to log to a log file and restore your terminal config on termination. Currently working on getting a bug in the PMM fixed, getting bootloader memory reclaim to work and then I’ll do the VMM’s VMAs."}, {"post_id": 45979, "ts": "2026-08-12T20:18:08Z", "hours": 2.7475, "text": "VMM: Major Refactor aswell as Huge Pages! I’ve refactored the VMM, aswell as added support for huge pages (2 MiB & 1 GiB) to it. Also, I’ve added vmm-debug-logging . Also, I’ve updated the README to reflect the most up-to-date information and to look nicer."}, {"post_id": 44829, "ts": "2026-08-10T21:04:45Z", "hours": 2.47, "text": "Memory Management Updates! (oh and a logo too) VMM Changes I’ve added remap_page aswell as translate to the VMM (virtual memory manager). Also, I’ve added alignment-checking to ensure the VMM doesn’t corrupt memory when an incorrect virt/phys address is given to one of it’s methods. Additionally, I’ve cleaned up the code a little bit by making things like the raw pointer stuff more readable. LOGO!!! :) I’ve painstakingly (hope i spelled it right) put together a handmade logo for the kernel. It’s pretty simple but I still think it looks pretty nice."}, {"post_id": 42930, "ts": "2026-08-07T22:15:35Z", "hours": 3.6658, "text": "PMM Buddy Allocator done! The PMM now uses a buddy allocator which gives us many advantages, including: Tracking overhead doesn’t grow with RAM size Faster (bitmap is always O(n), buddy allocator is O(1) most times, worst case O(log n)) Order-based allocation (group a lot of free space together into one 4 MiB region for order 10 or 16 KiB for order 2 for example) Next is adding a few methods to the VMM, and then I’ll work on the heap allocator to finally be able to work on the kstate struct :)"}, {"post_id": 42031, "ts": "2026-08-06T16:07:23Z", "hours": 1.3044, "text": "funny stuff I’ve added a marker byte to the ring buffer that makes it possible to later properly parse log levels from the buffer. Also, I’ve finally figured out how buddy allocators work meaning I can start work on redoing the PMM :)"}, {"post_id": 36746, "ts": "2026-07-29T00:21:27Z", "hours": 5.9975, "text": "The refactoring hell continues… I’ve refactored PMM and VMM into SIMPLE_STATE , updated the build and docs scripts, enhanced kernel logging via log levels and more, added and fleshed out a Claude Code Skill for writing rustdoc and let Claude re-do a lot of the rust doc to reduce the over-documentation that was done by none other than… Claude. also look at this fancy new fb logging :D"}, {"post_id": 36151, "ts": "2026-07-28T01:41:46Z", "hours": 6.1836, "text": "Refactoring into oblivion! Currently working on improving the kernel a lot to make it robuster for its later stages. What was so far improved Tooling Replace loose markdown docs with proper GitHub Pages hosted rustdoc Add docs.py , refactor build.py to work on linux too Kernel Serial Logging abstracted into trait + per-arch impls Improve panic handlers to give more info and dynamically use what is avail for outputting info (basic fb, serial) Refactor basic framebuffer and PSF2 font into cleaner struct+impl approach Remove text.rs and move its logic into kprint (which has also been refactored to be concurrency-safe) Other Stuff I also tested the kernel on real hardware !! To my suprise, grabbing the ISO from the build folder, flashing it onto a USB drive and plugging it into a laptop just… WORKED?!? well i guess my kernel is real hardware certified now :) I attached a video of the kernel booting on real hardware and IRQ0 (the BIOS-configured 18.2 Hz hardware timer) printing “a” repeatedly. :)"}, {"post_id": 34885, "ts": "2026-07-25T23:28:26Z", "hours": 7.9892, "text": "Big Update :) (sorry for not doing much the past weeks had to get 4th place at the botball competition real quick) Changelog Implemented heap allocator (partially and broken) Implement PIC (Programmable Interrupt Controller) Init + get basic IRQ stuff working Fix GDT (was missing a few entries) Fix TSS (IST1-4 interrupt stacks were missing) Implement interrupts for vectors #0 through #31 Update Panic for most interrupts to give way more details (example: pagefault in attached image) Replace Mutex with IrqMutex for text writing and holding CHAINED_PICS Current State I’ve noticed that my so far work has been kinda sloppy, so I’m currently working on improving everything (as u can see on the changelist above ive already started). I’m doing this because when I started with IRQs, stuff started breaking a lot. My goal is to get everything thread-safe and ready in a way that it’ll work in later stages of the kernel too. Next up? Next, I’ll be working on fixing logging (add a ringbuffer to prevent interrupts creating half-printed or partially drawn logs)"}, {"post_id": 6510, "ts": "2026-06-10T22:49:31Z", "hours": 6.0211, "text": "Had a little fight with github actions and qemu wasm stuff. Tried to implement a live web demo using a wasm implementation of qemu with UEFI and more, but couldnt get it to run. Also, I heavily improved documentation and finished up the virtual memory manager (for now…). Plans? Next, the heap allocator is coming then I’ll finally be able to use dynamic types! was worth it i guess (it was not i gotta get up in 5h 🥲)"}, {"post_id": 5062, "ts": "2026-06-08T18:47:11Z", "hours": 1.5903, "text": "Hi! This is my “main” project, ✨FerriteOS✨! (Well, idk if you can call it a whole OS if im only planning to do a kernel, but anyways) Ferrite is a Linux-ABI compatible kernel, written entirely in Rust, from scratch. My goal My end goal is for it to be able to run systemd, GNOME and more. But thats a very, VERY distant goal. For now, im focusing on getting a statically linked C binary running in userspace. Current State I’ve already managed to get some basic logging via serial and a basic framebuffer going, aswell as x86_64 GDT, IDT, TSS and a physical aswell as a very slim virtual memory manager. Whats next? Next, I’ll be “finishing” up the VMM a little to be able to start work on the heap allocator, which will enable use of datatypes like Vec, Box and more. nerd section For anyone interested in the more technical stuff: The build toolchain works through python scripts, which use docker to build and then QEMU to run the kernel. I’m mainly targeting x86_64, but aarch64 support is also my plan (but I’ll be focusing on x86_64 during this challenge)."}]...
|
Title: Ferrite by @MarioS271 | Stardance
Devlogs: Title: Ferrite by @MarioS271 | Stardance
Devlogs:
Hi! This is my “main” project, ✨FerriteOS✨! (Well, idk if you can call it a whole OS if im only planning to do a kernel, but anyways) Ferrite is a Linux-ABI compatible kernel, written entirely in Rust, from scratch. My goal My end goal is for it to be able to run systemd, GNOME and more. But thats a very, VERY distant goal. For now, im focusing on getting a statically linked C binary running in userspace. Current State I’ve already managed to get some basic logging via serial and a basic framebuffer going, aswell as x86_64 GDT, IDT, TSS and a physical aswell as a very slim virtual memory manager. Whats next? Next, I’ll be “finishing” up the VMM a little to be able to start work on the heap allocator, which will enable use of datatypes like Vec, Box and more. nerd section For anyone interested in the more technical stuff: The build toolchain works through python scripts, which use docker to build and then QEMU to run the kernel. I’m mainly targeting x86_64, but aarch64 support is also my plan (but I’ll be focusing on x86_64 during this challenge).
Had a little fight with github actions and qemu wasm stuff. Tried to implement a live web demo using a wasm implementation of qemu with UEFI and more, but couldnt get it to run. Also, I heavily improved documentation and finished up the virtual memory manager (for now…). Plans? Next, the heap allocator is coming then I’ll finally be able to use dynamic types! was worth it i guess (it was not i gotta get up in 5h 🥲)
Big Update :) (sorry for not doing much the past weeks had to get 4th place at the botball competition real quick) Changelog Implemented heap allocator (partially and broken) Implement PIC (Programmable Interrupt Controller) Init + get basic IRQ stuff working Fix GDT (was missing a few entries) Fix TSS (IST1-4 interrupt stacks were missing) Implement interrupts for vectors #0 through #31 Update Panic for most interrupts to give way more details (example: pagefault in attached image) Replace Mutex with IrqMutex for text writing and holding CHAINED_PICS Current State I’ve noticed that my so far work has been kinda sloppy, so I’m currently working on improving everything (as u can see on the changelist above ive already started). I’m doing this because when I started with IRQs, stuff started breaking a lot. My goal is to get everything thread-safe and ready in a way that it’ll work in later stages of the kernel too. Next up? Next, I’ll be working on fixing logging (add a ringbuffer to prevent interrupts creating half-printed or partially drawn logs)
Refactoring into oblivion! Currently working on improving the kernel a lot to make it robuster for its later stages. What was so far improved Tooling Replace loose markdown docs with proper GitHub Pages hosted rustdoc Add docs.py , refactor build.py to work on linux too Kernel Serial Logging abstracted into trait + per-arch impls Improve panic handlers to give more info and dynamically use what is avail for outputting info (basic fb, serial) Refactor basic framebuffer and PSF2 font into cleaner struct+impl approach Remove text.rs and move its logic into kprint (which has also been refactored to be concurrency-safe) Other Stuff I also tested the kernel on real hardware !! To my suprise, grabbing the ISO from the build folder, flashing it onto a USB drive and plugging it into a laptop just… WORKED?!? well i guess my kernel is real hardware certified now :) I attached a video of the kernel booting on real hardware and IRQ0 (the BIOS-configured 18.2 Hz hardware timer) printing “a” repeatedly. :)
The refactoring hell continues… I’ve refactored PMM and VMM into SIMPLE_STATE , updated the build and docs scripts, enhanced kernel logging via log levels and more, added and fleshed out a Claude Code Skill for writing rustdoc and let Claude re-do a lot of the rust doc to reduce the over-documentation that was done by none other than… Claude. also look at this fancy new fb logging :D
funny stuff I’ve added a marker byte to the ring buffer that makes it possible to later properly parse log levels from the buffer. Also, I’ve finally figured out how buddy allocators work meaning I can start work on redoing the PMM :)
PMM Buddy Allocator done! The PMM now uses a buddy allocator which gives us many advantages, including: Tracking overhead doesn’t grow with RAM size Faster (bitmap is always O(n), buddy allocator is O(1) most times, worst case O(log n)) Order-based allocation (group a lot of free space together into one 4 MiB region for order 10 or 16 KiB for order 2 for example) Next is adding a few methods to the VMM, and then I’ll work on the heap allocator to finally be able to work on the kstate struct :)
Memory Management Updates! (oh and a logo too) VMM Changes I’ve added remap_page aswell as translate to the VMM (virtual memory manager). Also, I’ve added alignment-checking to ensure the VMM doesn’t corrupt memory when an incorrect virt/phys address is given to one of it’s methods. Additionally, I’ve cleaned up the code a little bit by making things like the raw pointer stuff more readable. LOGO!!! :) I’ve painstakingly (hope i spelled it right) put together a handmade logo for the kernel. It’s pretty simple but I still think it looks pretty nice.
VMM: Major Refactor aswell as Huge Pages! I’ve refactored the VMM, aswell as added support for huge pages (2 MiB & 1 GiB) to it. Also, I’ve added vmm-debug-logging . Also, I’ve updated the README to reflect the most up-to-date information and to look nicer.
Memory Stuff and General Fixes Currently working on the PMM and VMM a little more, also cleaned up the main for better readability. I also moved the PMM and VMM into the mm subsystem of the KState struct. Additionally, I switched from rust 2021 to rust 2024, which also needed a little fixing to get working again. Why? Well to use let chains in if statements of course cause its like a little bit nicer to write! :) Also, I partially upgraded scripts/x86_64/build.py to log to a log file and restore your terminal config on termination. Currently working on getting a bug in the PMM fixed, getting bootloader memory reclaim to work and then I’ll do the VMM’s VMAs.
Finally finished fixing the PMM free method! After needing to quickly relearn the logic of the free method because I somehow forgot it, it finally works again! Additionally, I’ve added a little safeguard to the bootloader memory reclamation. Next, I’ll be continuing on the VMM and refactoring it to support userland page tables too. Also, I’ve added a few core::fmt traits to PhysAddr and VirtAddr and also added a constructor which creates a new address type ( PhysAddr or VirtAddr ) with an address of zero. In addition, PhysAddr got a few new getters like as_ptr or as_mut_ptr .
AddressSpace and VMA data structs done! I’ve introduced a struct called AddressSpace which contains the virtual address of the root page table (the PML4 on x86_64) and a BTreeSet of VMAs (virtual memory areas). A BTreeSet is basically a type of set which organizes data in a tree-like structure (in a B-Tree structure to be exact) with a time complexity of O(log n) for inserting, removing and searching for elements. A VMA (virtual memory area) is an area in memory with specific flags, such as READ , WRITE , EXEC or USER . One of their main uses is determining what to do on a #PF (page fault): should we allocate a page here (lazy-mapping)? Or was this truly a faulty operation like trying to execute READ -only memory? Also, I briefly attempted to switch over to the linux boot protocol, but I decided to do that sometime later, because it is slightly complicated and definitely did not break everything ;)
Lots of stuff Changelog for the last two days Fixed the clean option in build.py Add kernel VMA setup method Update rustdoc in several places Add panic types to kernel_panic output Move SIMPLE_STATE out of main Improve per-arch code layout … and an INSANE amount of optimizations, including: Marking certain code paths as cold (which signals the compiler to expect that the code path is unlikely to occur and optimize accordingly) Remove a lot of overhead introduced by Once and similar by swapping them for UnsafeCell<MaybeUninit<T>> and others and taking advantage of things like niche optimization Using bit-packing instead of seperate booleans for state tracking Next up, I’ll be doing some more work on the VMM and finally add the full mapping methods, which map pages and VMAs together.
Virtual Memory Management is complete! (for now) I’ve added methods for mapping pages and VMA together. I’ve also improved the kernel VMA granularity and added a kernel paging remap step to mm_init() which applies the kernel VMA permissions to the kernel pages. This is only intermediate until I switch to the linux boot protocol. Next up, I’ll be adding a (very basic) ELF loader!
@everyone … WE HAVE USERSPACE!!! 🎉 :D This is something I’ve been waiting for sooo long… a binary is actually executing in USERSPACE now (ring 3 and stuff)!!! How it works Currently, the code is extremely hacked together, or “gepfuscht” as we like to call it in Austria ;). Basically, what should be cleanly integrated with KSTATE::procs , should use a proper userspace and kernel stack and so on, doesn’t. All of this of course won’t stay like that, but it currently is like that to just get something in userspace running. The one thing that is actually done cleanly is the ELF validation and definitions, which live under src/elf . There is a struct representing the ELF header, an ELF PHDR and also an enum for ELF validation errors. All other logic was just thrown into main for now, like creating the processes address space, mapping its memory, copying the binary into the mapped memor, setting up its stack and actually jumping to it. The current testing binary Written in good old assembly of course, the test binary currently has the job to cause some sort of CPU exception, as syscalls or any other way to interact with the kernel or output something doesn’t even exist yet. The current program manages that via just running the hlt instruction, which, when run from userspace (Ring 3) causes a general protection fault ( #GP ). This is because a userspace program shouldn’t just be able to halt the CPU or disable interrupts (via the cli instruction). That would defeat the whole purpose of rings and kernel/userspace. The userspace binary currently lies under src/user-binary.asm , next to src/kernel/ . It is build via running docker exec ferrite_os /ferrite_os/build-user-binary.sh . NASM was also added to the Dockerfile to make building the assembly file possible.
Refactoring hell is here again! Before I start on syscalls for the userspace binary, I’ve decided to first get most TODOs done, like updating the safety comments and rustdoc, refactoring the ELF loading stuff to properly utilize KSTATE::procs , proper error delegation and more. I’ve finally finished refactoring the TSS, GDT and IDT properly by removing the struct wrapper for GDT and IDT, getting rid of all the Once s and more. Additionally, I refactored KSTATE::cpu to be an arch-independent container of arch-specific structs. holy crap ive got so much left to refactor… and the new bodycam update just came out i wanna play but am stuck doing kernel stuff and some other stuff :’)
Big changes upcoming… I’ve decided to change what the kernel aims to be and how it will work. I’ve dropped full linux drop-in compatibility in favour of creating a clean, modern and optimized kernel which tries to fix design mistakes other kernels have already made. New Design The kernel will be POSIX-compatible, feature a namespaced VFS to seperate virtual files or devices like /dev/sda , /sys/class/hwmon , /proc/self/ and more from actual files. It will have namespaces like fs:/ for the actual file system, dev:/ for device files (like dev:/sda ), vdev:/ for virtual devices (like vdev:/urandom ) and more, including hw:/ for a modern hardware info interface, log:/ for a standardized logging interface and reg:/ for a global registry-like configuration system. Internally, the kernel will also feature KSTATE , a central static struct for storing everything the kernel uses. Also, ther kernel will move from strictly limine to a dynamic bootloader format, where each architecture has its own kernel_entry , which prepares the CPU and kernel into a common state (long mode, paging, …) and builds a standardized BootInfo struct, which then gets handed to kernel_main when it is called. New Source Tree I’m also currently working on massively reorganizing and cleaning up the kernel source, by for example standardizing where arch-specific code lands, categorizing and organizing the code better and more. Also, the kernel print system ( kprint ) is currently being rewritten to improve performance and integrate it into KSTATE .
Big changes are still happening oh boy this is taking way too long Rewritten kprint kprint , the kernel print macro has been fully rewritten. The public macros have not changed, but internally, the macros now: Construct a kernel writer Call core::fmt::write on the kernel writer The kernel writer collects the text of all calls made to it using core::fmt::write in an internal buffer, and on drop, it pushes a new entry into the kernel log ringbuffer in a format that is (currently only partially) syslog-compatible. Then, the kernel writer dispatches a log header and the full log text to all active log recievers (like UART or the basic framebuffer). New Types PackedU8 : A type which wraps all the bitwise logic for packing multiple pieces of data which are less than one byte into a byte UncheckedCell : A datatype with interior mutability, which can be uninitialized via MaybeUninit . When the cargo feature debug-checks is enabled, this type also checks for double initialization and uninitialized access NicheCell : A datatype with interior mutability, which can be uninitialized via Option . This datatype is designed to be used with values that can take advantage of niche optimization (where the datatype T has a value which is guaranteed to be invalid, like a NonZeroU64 being zero) and oh boy, the big refactor: redid kernel source tree, ... commit is gonna be one hell of a mess…
Finally… after all that work, we’re back!! After almost 30 hours of work over the last week, I’ve finally finished the big refactor . Changelog of the refactor Rewritten kprint backend Restructured KSTATE Hit my head on the wall A LOT Added a few new datatypes and macros Optimizations all over the place Added quite a few TODOs (more work 🥲) Restructured the source tree Changed the entrypoint (kernel now starts in an arch-specific kernel_entry , which builds a BootInfo and hands to kernel_main ) Moved the userspace/ELF stuff from main.rs into the sched subsystem Rewrote the UART driver … and so much more. and of course i organized it all into one slightly large 144 file commit :)
ELF Loading Refactor and improved build system After a week of basically no progress, I’ve finally finished moving the ELF init sequence from main.rs into the proper methods under the sched subsystem. I’ve also simplified and improved the build system ( build.py / docs.py ). They now use a shared lib.py to avoid code duplication. Also, build.py got a few changes: Removed build cache (cargo already does it) Swapped console restore for proper serial control char output filtering Bug Fixes The docker permissions have been fixed, as under Linux, root would own parts of the build files which is of course annoying as you can’t easily interact with those files then. The github-hosted rustdoc was failing to build as it could not find USER-BINARY , so I just faked user-binary via touch user-binary . time to go to bed yippeeeee :D
Syscalls! Changes so far: Added gs_info struct, which saves the user stack and holds a pointer to the kernel stack Added syscall::init which enables the syscall / sysret instructions and sets up the STAR , LSTAR and SFMASK registers Added syscall_entry which builds a UserFrame (a snapshot of the CPU registers on syscall entry) and calls syscall_dispatch Added syscall_dispatch , which currently logs the received syscall number and halts (the system call return path is not implemented YET) Added UserFrame which holds a CPU register snapshot which gets taken upon entering the kernel
Syscall Dispatching, Syscall returning and Exit Syscall Finally, after all this time: User programs can now interact with the kernel!! :) Changelog Added Syscall enum which represents all possible syscalls and their respective IDs Added SyscallArgs whichs contains syscall number and args in an architecture-independent format Added SyscallResult and SyscallError Added syscall dispatching logic Fixed kernel data leaking into userspace via initial_userspace_jump by clearing CPU registers before the jump the end of stardance is approaching… i wish all of you a lot of fun for the last 9 days.
DebugWrite syscall! The userspace process is now able to ask the kernel to write log messages! This means that finally, you can actually properly do something from the userspace program. Next, I’ll be implementing userspace page fault handling
whoops Turns out, when testing the new debug write syscall, it was slightly broken when passing wrong params, specifially when passing an unmapped or invalid address as a pointer to the string to write. Because of that, a page fault was triggered in the syscall, which blew up the stack, which was for some reason already filled more than halfway (around 9 KiB)?!? Side note: in a syscall handler, there are only 16 KiB of stack memory available, and therefore 9 KiB before any error handling is already kind of a lot (normally it should be less than half in this application) What was actually wrong Turns out, the error was the freaking kprint stuff. Yes, the funny kdebug!() and knotice!() logging macros.. The main issue is that they’re macros, which expand in place. Why that’s a problem In Syscall::dispatch , there’s two kdebug!() calls. That blows the method’s needed stack to almost 5 KiB for a simple dispatcher function with 10 lines, which is unacceptable. The problem is that the stack memory for all the kdebug!() writes gets reserved as soon as the method is called, and each kprint macro call has a 2 KiB buffer and more behind it that it needs. The Solution To fix this, I replaced the internal __kprint macro with a function. This means that now the needed stack for the logging action is only reserved during the logging, not during the whole parent function. By doing this, I managed to cut the debug write system call’s memory footprint from around 8 KiB to just 1.5 KiB, which is a huge improvement.
Memory Mapping and Paging Stuff With the stack no longer exploding, I finally got to refactoring the page fault handler. Before, it operated based on whether the fault happened in ring 3 or ring 0, when it should actually mainly distinguish between kernel and user addresses. Why distinguish between addresses instead of rings? Imagine this: we’re handling a syscall, attempting to read userspace-provided memory, and we page fault. The fault happens in ring 0 but we’re actually working with userspace memory. Now, if we handle it like a kernel page fault, where our mindset is “Either there’s a valid VMA and we can map this or there’s a kernel bug so we panic”, a malicious userspace process could just provide a wrong address and panic the whole system. Even worse: a valid pointer also brings down the system if it points into lazily allocated memory. Now, the page fault handler looks at the address (and for user address page faults also at the current ring) and decides based on that what to do. As proof that this works, the user binary now uses the stack for printing a text smiley, which works, even with the userspace stack now being lazily allocated. What’s still left to do Currently, bad user programs can still bring down the system because the page fault handler is among others still missing the so called “Exception Table” but more on that next devlog.
Exception Table done! Finally, bad userspace pointers don’t bring down the kernel anymore. What the Exception Table does Only a few instructions in a few places in kernel code can actually produce a pagefault which is the user’s fault, not the kernel’s. If we handle those normally, we’d panic. The exception table however gets built at compile time and contains every place in the kernel that could produce userspace-caused page faults. We simply check if the page fault happened at one of these instructions, and if it did, skip the instruction and return a BadAddress error instead.
Github Actions and try-it-out scripts I’m now finished preparing for shipping the kernel on stardance! :) Github Actions I’ve added a workflow which runs on tagged pushes in the v* format (anything starting with v ), so that a tag like v0.0.1 is recognized as release version 0.0.1. The workflow builds a debug and release ISO, and also ships scripts to easily try the kernel out. (and yes, the workflow and scripts were written with claude code, i really don’t wanna spend hours on that kinda stuff)
Ships:
Ferrite An OS kernel, build from the ground up to be modern, clean, optimized and do it right. Written in Rust. Ferrite aims to be a modern and optimized kernel as well as provide some advanced capabilities such as intent-aware scheduling, real-time scheduling/scheduling hints (“don’t preempt me for this long”), a namespaced VFS and more. Furthermore, Ferrite aims towards a clean design, fixing a lot of design mistakes in other kernels. How to try it out FerriteOS is a UEFI x86_64 kernel. The easiest way to try it is in QEMU. Linux Download ferrite_os-debug.iso (or ferrite_os-release.iso , but I recommend the debug one as it gives way more output) and ferrite_os-scripts.zip from the assets in the github release. Unzip the scripts and go to the Linux folder: unzip ferrite_os-scripts.zip -d ferrite_os-scripts cd ferrite_os-scripts/linux Install the dependencies. This installs QEMU system-wide (needs sudo) and downloads OVMF next to the script: ./install-deps.sh Start the ISO: ./run.sh Put the ISO next to run.sh . It picks up ferrite_os-release.iso first, then any other ferrite_os-*.iso . To choose one explicitly, pass the path, for example ./run.sh ferrite_os-debug.iso . Kernel output is printed to the terminal via the serial port. Windows Download ferrite_os-debug.iso (or ferrite_os-release.iso , but I recommend the debug one as it gives way more output) and ferrite_os-scripts.zip from the assets in the github release. Unzip the scripts and open the windows folder. Double-click install-deps.cmd . This installs QEMU via winget (needs admin approval) and downloads OVMF next to the script. Put the ISO next to run.cmd and double-click run.cmd . It picks up ferrite_os-release.iso first, then any other ferrite_os-*.iso . To choose one explicitly, run run.cmd ferrite_os-debug.iso from a terminal. Other platforms Scripts for other platforms are not available yet. You can run the ISO manually with qemu-system-x86_64 , -cdrom ferrite_os-release.iso , -m 4G and the OVMF code.fd and vars.fd files from ovmf-prebuilt attached as pflash drives. Thanks for trying out my project and have fun! :)...
|
1793717748.365989
|
1793804148.365989
|
|
52864
|
rocky by @rocky59487 | Stardance
|
rocky59487
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T14:36:13Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made this project to finish the mission,create my profile, and test my new web skills.Because of this,some design might look a bit strange. It also link to my other main projecct!", "repo": "https://github.com/rocky59487/me", "demo": "https://rocky59487.github.io/me/"}]...
|
[{"post_id": 52353, "ts": "202 [{"post_id": 52353, "ts": "2026-08-22T13:48:47Z", "hours": 0.4803, "text": "finish the site! linked with my other project"}]...
|
Title: rocky by @rocky59487 | Stardance
Devlogs:
Title: rocky by @rocky59487 | Stardance
Devlogs:
finish the site! linked with my other project
Ships:
I made this project to finish the mission,create my profile, and test my new web skills.Because of this,some design might look a bit strange. It also link to my other main projecct!...
|
1793717747.2038877
|
1793804147.2038877
|
|
66491
|
My own site! by @sanskarpathak828 | Stardance
|
sanskarpathak828
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @sanskarpathak828 | Stardan Title: My own site! by @sanskarpathak828 | Stardance...
|
1793717746.2783902
|
1794322546.2783902
|
|
52861
|
Smile Bot v1 by @PrakstheBruce | Stardance
|
PrakstheBruce
|
1
|
2.37
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T16:24:03Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built Smile Bot, a Slack bot that provides quick, friendly interactions through Slack commands. It is deployed 24/7 on Hack Club Nest using Node.js and systemd! 😄The mooost challenging part was deploying the bot to Nest and configuring systemd to keep it running 24/7. I also had to troubleshoot environment variables, dependencies, and deployment configuration multiple times!! I’m proud that I took Smile Bot from an idea to a fully working, publicly documented, 24/7 deployed project. “I especially enjoyed learning how to run and maintain a real server-side application.” HEre are the Stuff that people know so they can use my project…. Smile Bot is designed to run inside Slack. Users need to install/configure the Slack app and provide the required bot and app tokens through environment variables. The GitHub README contains the setup instructions and available commands.", "repo": "https://github.com/praksthebruce/Smile-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BS923UMSA?skip_today=1"}]...
|
[{"post_id": 54439, "ts": "202 [{"post_id": 54439, "ts": "2026-08-25T13:35:45Z", "hours": 0.3694, "text": "🛠️ Smile Bot — Fixing the Broken Compliment Feature Heyyyy! After shipping Smile Bot I noticed something embarrassing. 😂 The /smile-bot-compliment command wasn’t actually working….. Instead of returning a compliment, it kept responding: “Couldn’t find a compliment right now.” Soo.. What was happening? The command depended on an external API: The API was throwing an error, which meant my bot’s fallback response was triggered every time. The fix: I realized I didn’t need an external API for something as simple as generating compliments. Therefore, I replaced the API call with a local collection of compliments and randomly select one whenever the command is used: This means the feature no longer depends on a third-party API being online. 🚀 Deploying the fix The interesting part was that the bot worked locally, but Slack was still showing the old error. Turns out my Nest server was still running the previous version of index.js. I pushed the fix to GitHub, pulled the latest commit onto Nest, restarted the systemd service, and tested it again in Slack. And finally: It worked!!!!!!!!!!!!! 🎉🍀🍀 📚 What I learned This was a small bug, but it taught me an important lesson: “A working local version doesn’t mean your deployed version has the same code.” Debugging isn’t always about finding a complicated programming error it’s also about tracing the entire path: 🗿 Code → Git → Server → Process → User Smile Bot is now a little more reliable than it was when I shipped it. ✨ Another bug squashed and Another lesson learned!!"}, {"post_id": 53878, "ts": "2026-08-24T16:09:45Z", "hours": 0.5106, "text": "The BIIGESST and smallest mistake that I did 🫢🫢😭😭…. Guys, I Finally was Hyped Up that I completed my Slack Bot- Smile-Bot!!! BUT While trying to ship it, The Ship It Button was Greyed Out! I did not know what to do, when two of my bros @mr_kn5196 ❤️❤️ and @fsh 🍀🍀 Helped me out!! I was not a really big bug! I JUST PUT A “.git” EXTENSION IN MY GIT HUB URL!! THAT CAUSED THE ERROR! Hope you guys have a Great week ahead! And I WILL SOON POST UPDATES ON MY NEW “frictionless” project––“CodeAtlas!!”. Peace!!"}, {"post_id": 52834, "ts": "2026-08-23T06:00:05Z", "hours": 0.6078, "text": "Devlog #2 — Another Interesting Problem- After getting the basic Slack commands working, I started preparing the project for deployment. That introduced a completely different side of development that I hadn’t really dealt with before: Git, GitHub, SSH, environment variables, and servers. One of the first things I learned was why .env files shouldn’t be pushed to GitHub. My Slack tokens are required for the bot to work, but they’re also credentials that shouldn’t be sitting inside a public repository. I added .env to .gitignore and learned that deploying an application means recreating those environment variables securely on the server. Git also gave me a few headaches. My local repository and GitHub repository weren’t completely in sync, so my first push was rejected. Instead of forcing the push, I had to understand what Git was actually telling me and pull the remote changes before pushing again. Now I’m moving on to Hack Club Nest. The goal is to get SmileBot running on a real server instead of depending on my laptop and terminal being open. The interesting part of this project so far is that the Slack commands themselves weren’t the hardest part. Getting the entire development workflow around them working has taught me just as much. Next step: SSH into Nest, deploy SmileBot, and get it running 24/7.(P.S I just applied, waiting for approval!!)"}, {"post_id": 52800, "ts": "2026-08-23T04:28:36Z", "hours": 0.4411, "text": "My First and Useful Devlog(It would be helpful for ppl staring out.) Devlog #1 — Setting Up My SlackbotProject: I started setting up my development environment for the Stardance Slackbot challenge.I already had VS Code and Node.js installed, so I expected the setup to be pretty straightforward. I ran: “npm -v” but PowerShell returned an error saying that scripts were disabled on the system. Initially, I thought there was something wrong with my Node.js or npm installation. After looking into it, I realized that npm itself was installed correctly. The issue was that PowerShell’s execution policy was preventing the “npm” PowerShell script from running. Instead of changing a bunch of system settings, I switched the VS Code terminal from PowerShell to Command Prompt and tested it again: “node -v” & “npm -v” Both commands worked!!! I was then able to continue with the project setup: “npm init -y” “npm install @slack /bolt dotenv” What I learned-This was a small issue, but it was a useful reminder that debugging isn’t always about the code itself. Sometimes the problem is with the environment you’re running the code in. The important part was figuring out what was actually failing instead of immediately reinstalling Node.js or changing random settings. Now the development environment is ready, and I can move on to building the actual Slackbot. Next: Create the basic Slackbot and get it responding to messages."}]...
|
Title: Smile Bot v1 by @PrakstheBruce | Stardance
Title: Smile Bot v1 by @PrakstheBruce | Stardance
Devlogs:
My First and Useful Devlog(It would be helpful for ppl staring out.) Devlog #1 — Setting Up My SlackbotProject: I started setting up my development environment for the Stardance Slackbot challenge.I already had VS Code and Node.js installed, so I expected the setup to be pretty straightforward. I ran: “npm -v” but PowerShell returned an error saying that scripts were disabled on the system. Initially, I thought there was something wrong with my Node.js or npm installation. After looking into it, I realized that npm itself was installed correctly. The issue was that PowerShell’s execution policy was preventing the “npm” PowerShell script from running. Instead of changing a bunch of system settings, I switched the VS Code terminal from PowerShell to Command Prompt and tested it again: “node -v” & “npm -v” Both commands worked!!! I was then able to continue with the project setup: “npm init -y” “npm install @slack /bolt dotenv” What I learned-This was a small issue, but it was a useful reminder that debugging isn’t always about the code itself. Sometimes the problem is with the environment you’re running the code in. The important part was figuring out what was actually failing instead of immediately reinstalling Node.js or changing random settings. Now the development environment is ready, and I can move on to building the actual Slackbot. Next: Create the basic Slackbot and get it responding to messages.
Devlog #2 — Another Interesting Problem- After getting the basic Slack commands working, I started preparing the project for deployment. That introduced a completely different side of development that I hadn’t really dealt with before: Git, GitHub, SSH, environment variables, and servers. One of the first things I learned was why .env files shouldn’t be pushed to GitHub. My Slack tokens are required for the bot to work, but they’re also credentials that shouldn’t be sitting inside a public repository. I added .env to .gitignore and learned that deploying an application means recreating those environment variables securely on the server. Git also gave me a few headaches. My local repository and GitHub repository weren’t completely in sync, so my first push was rejected. Instead of forcing the push, I had to understand what Git was actually telling me and pull the remote changes before pushing again. Now I’m moving on to Hack Club Nest. The goal is to get SmileBot running on a real server instead of depending on my laptop and terminal being open. The interesting part of this project so far is that the Slack commands themselves weren’t the hardest part. Getting the entire development workflow around them working has taught me just as much. Next step: SSH into Nest, deploy SmileBot, and get it running 24/7.(P.S I just applied, waiting for approval!!)
The BIIGESST and smallest mistake that I did 🫢🫢😭😭…. Guys, I Finally was Hyped Up that I completed my Slack Bot- Smile-Bot!!! BUT While trying to ship it, The Ship It Button was Greyed Out! I did not know what to do, when two of my bros @mr_kn5196 ❤️❤️ and @fsh 🍀🍀 Helped me out!! I was not a really big bug! I JUST PUT A “.git” EXTENSION IN MY GIT HUB URL!! THAT CAUSED THE ERROR! Hope you guys have a Great week ahead! And I WILL SOON POST UPDATES ON MY NEW “frictionless” project––“CodeAtlas!!”. Peace!!
🛠️ Smile Bot — Fixing the Broken Compliment Feature Heyyyy! After shipping Smile Bot I noticed something embarrassing. 😂 The /smile-bot-compliment command wasn’t actually working….. Instead of returning a compliment, it kept responding: “Couldn’t find a compliment right now.” Soo.. What was happening? The command depended on an external API: The API was throwing an error, which meant my bot’s fallback response was triggered every time. The fix: I realized I didn’t need an external API for something as simple as generating compliments. Therefore, I replaced the API call with a local collection of compliments and randomly select one whenever the command is used: This means the feature no longer depends on a third-party API being online. 🚀 Deploying the fix The interesting part was that the bot worked locally, but Slack was still showing the old error. Turns out my Nest server was still running the previous version of index.js. I pushed the fix to GitHub, pulled the latest commit onto Nest, restarted the systemd service, and tested it again in Slack. And finally: It worked!!!!!!!!!!!!! 🎉🍀🍀 📚 What I learned This was a small bug, but it taught me an important lesson: “A working local version doesn’t mean your deployed version has the same code.” Debugging isn’t always about finding a complicated programming error it’s also about tracing the entire path: 🗿 Code → Git → Server → Process → User Smile Bot is now a little more reliable than it was when I shipped it. ✨ Another bug squashed and Another lesson learned!!
Ships:
I built Smile Bot, a Slack bot that provides quick, friendly interactions through Slack commands. It is deployed 24/7 on Hack Club Nest using Node.js and systemd! 😄The mooost challenging part was deploying the bot to Nest and configuring systemd to keep it running 24/7. I also had to troubleshoot environment variables, dependencies, and deployment configuration multiple times!! I’m proud that I took Smile Bot from an idea to a fully working, publicly documented, 24/7 deployed project. “I especially enjoyed learning how to run and maintain a real server-side application.” HEre are the Stuff that people know so they can use my project…. Smile Bot is designed to run inside Slack. Users need to install/configure the Slack app and provide the required bot and app tokens through environment variables. The GitHub README contains the setup instructions and available commands....
|
1793717745.0522988
|
1793804145.0522988
|
|
54117
|
Orbital Command by @Vihaan15 | Stardance
|
Vihaan15
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-25T09:31:21Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Orbital Command is a space dashboard built on NASA’s open APIs. It shows today’s astronomy picture, the asteroids passing near Earth today, and a random photo from the NASA archives. I also added my own features: a weight-on-other-planets calculator, random space facts, a personal observation log saved in the browser, and an animated solar system where the planets pause when you hover them.", "repo": "", "demo": ""}]...
|
[{"post_id": 55508, "ts": "202 [{"post_id": 55508, "ts": "2026-08-27T12:16:43Z", "hours": 0.0, "text": "fixed and rewritten the css code"}, {"post_id": 54342, "ts": "2026-08-25T09:26:14Z", "hours": 0.0, "text": "Finished my project"}]...
|
Title: Orbital Command by @Vihaan15 | Stardance
D Title: Orbital Command by @Vihaan15 | Stardance
Devlogs:
Finished my project
fixed and rewritten the css code
Ships:
Orbital Command is a space dashboard built on NASA’s open APIs. It shows today’s astronomy picture, the asteroids passing near Earth today, and a random photo from the NASA archives. I also added my own features: a weight-on-other-planets calculator, random space facts, a personal observation log saved in the browser, and an animated solar system where the planets pause when you hover them....
|
1793717744.082838
|
1793804144.082838
|
|
66490
|
TVC-mount by @karel | Stardance
|
karel
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: TVC-mount by @karel | Stardance
|
1793717743.1924026
|
1794322543.1924026
|
|
54111
|
Caffeine Crisis by @stutu_batu | Stardance
|
stutu_batu
|
3
|
17.33
|
126
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T09:05:35Z", "hours": 2.0, "multiplier": 8.84, "payout": 9, "blessing": "neutral", "text": "Hello I am shipping again, I just bug fix and added a real tutorial for you, If you have any ideas or notice anything wrong, please write in the feedback section.", "repo": "https://github.com/stutu-batu/Caffeine-Crisis", "demo": "https://stutu-batu.itch.io/caffeine-crisis"}, {"ship_num": 2, "ts": "2026-09-07T15:18:53Z", "hours": 9.0, "multiplier": 12.78, "payout": 114, "blessing": "neutral", "text": "I made a barista sim. You can make drinks and serve. And with the money you earned you can buy new stations or upgrade them. You can play it, game saves your progression. If you have any ideas or notice anything wrong, please write in the feedback section.", "repo": "https://github.com/stutu-batu/Caffeine-Crisis", "demo": "https://stutu-batu.itch.io/caffeine-crisis"}, {"ship_num": 3, "ts": "2026-08-26T12:01:40Z", "hours": 1.0, "multiplier": 2.96, "payout": 3, "blessing": "neutral", "text": "YOU CAN PLAY THE DEMO OF CAFFEİNE CRİSSİS", "repo": "https://github.com/stutu-batu/Caffeine-Crisis", "demo": "https://stutu-batu.itch.io/caffeine-crisis"}]...
|
[{"post_id": 69697, "ts": "202 [{"post_id": 69697, "ts": "2026-09-17T16:28:30Z", "hours": 1.1003, "text": "I tried some thing but It didnt work sory"}, {"post_id": 69183, "ts": "2026-09-16T15:25:38Z", "hours": 0.4503, "text": "I just polished the game and some balancing with bug fix"}, {"post_id": 68689, "ts": "2026-09-15T15:26:25Z", "hours": 0.3728, "text": "I added 5 more customer,"}, {"post_id": 68094, "ts": "2026-09-14T14:34:42Z", "hours": 0.4786, "text": "I just cant find customer image. Can you make a recommendation? Just leave the link to the photo."}, {"post_id": 67208, "ts": "2026-09-13T08:14:51Z", "hours": 0.6497, "text": "I made 2 things First I can add multiple customers Image. Second I made customers Personalitys. Customers have 5 different mods: -Impatient -Generous -Sleepy -Gourmet -Friendly I have a lot of different text."}, {"post_id": 65865, "ts": "2026-09-11T09:26:24Z", "hours": 1.25, "text": "I added all sound fx and that photo You can play it Now https://stutu-batu.itch.io/caffeine-crisis"}, {"post_id": 65277, "ts": "2026-09-10T08:55:32Z", "hours": 1.0328, "text": "Just bug fix and pollsh"}, {"post_id": 64683, "ts": "2026-09-09T08:47:23Z", "hours": 0.5328, "text": "If you want to know, play my game. (Just some bug fix). btw should I redesign my customer like this frog man ??? pls write your opinion"}, {"post_id": 64076, "ts": "2026-09-08T07:14:03Z", "hours": 1.4336, "text": "I made a tutorial for youuu You can play it now https://stutu-batu.itch.io/caffeine-crisis"}, {"post_id": 63447, "ts": "2026-09-07T09:28:20Z", "hours": 0.5, "text": "Improving Shop UI and price balancing"}, {"post_id": 62793, "ts": "2026-09-06T09:45:55Z", "hours": 0.5475, "text": "Yoo whats up I just test my game and do some bug fix"}, {"post_id": 62196, "ts": "2026-09-05T13:45:34Z", "hours": 1.2158, "text": "I added the SHOP system !!!! It took an hour but it was worth it :D I am gone add more UI but not right now. I’m bored of drawing."}, {"post_id": 61391, "ts": "2026-09-04T08:47:11Z", "hours": 1.0494, "text": "I added day ending screen dynamic price bug fix & UI reset button for test I will add more thing and fix the customer"}, {"post_id": 60750, "ts": "2026-09-03T10:05:16Z", "hours": 0.7497, "text": "I FINISH THE BACKGROUND (finaly)"}, {"post_id": 60152, "ts": "2026-09-02T10:41:02Z", "hours": 0.4669, "text": "I drew colored more"}, {"post_id": 59557, "ts": "2026-09-01T13:22:51Z", "hours": 0.3667, "text": "I colored the background"}, {"post_id": 58955, "ts": "2026-08-31T14:54:44Z", "hours": 0.6983, "text": "I drew back ground more🥱"}, {"post_id": 58261, "ts": "2026-08-30T17:05:33Z", "hours": 1.3975, "text": "Have a great day I added new recipes, new stations, and recipe book panel, I am gone draw a book panel (right now its just brown panel). I will add more things later, I am gone fix the customer"}, {"post_id": 57270, "ts": "2026-08-29T11:39:35Z", "hours": 0.6492, "text": "Wuhuu how you doing I added a MainMenu and day system (also clock) , a day ending screen, I will add more recipes and makes the UI better . later I add sound effect"}, {"post_id": 56577, "ts": "2026-08-28T12:00:55Z", "hours": 0.7161, "text": "Yooo whats up Today I add costumers body and coin model, new serve mod and delay to stations . (My friend created the character.)"}, {"post_id": 55638, "ts": "2026-08-27T16:27:11Z", "hours": 0.5664, "text": "how are you doing friends Adding customer mechanic, I will add visual customers wait for now"}, {"post_id": 54948, "ts": "2026-08-26T11:26:53Z", "hours": 0.3669, "text": "Hey everyone! Here is everything added to the project today: -Custom Hand-Drawn 2D UI and background Next Step Add more Recipe Add Costumers Add Ice and water type"}, {"post_id": 54329, "ts": "2026-08-25T09:02:58Z", "hours": 0.7164, "text": "–Devlog 1: Caffeine Crisis– Building the Core Gameplay Mechanics Today I started my new project : Caffeine Crisis. A barista sim. My goal for today was to build the core loop from scratch and make sure all liquid and order logic works seamlessly. Layered Liquid Stacking: Designed a vertical layout system so liquids (coffee, milk, water) stack from the bottom up as ingredients are added. Liquid Mixing Logic: Implemented a mixing routine that blends individual stacked layers into a single blended coffee color upon serving. (Improving it until it gets better.) Random order and recipe Next Step I’ll be focusing on adding visual assets, sound effects, a polished UI. It looks terrible right now, but I’ll make improvements another time and add more recipes. Have a nice day, have a working projects"}]...
|
Title: Caffeine Crisis by @stutu_batu | Stardance
Title: Caffeine Crisis by @stutu_batu | Stardance
Devlogs:
–Devlog 1: Caffeine Crisis– Building the Core Gameplay Mechanics Today I started my new project : Caffeine Crisis. A barista sim. My goal for today was to build the core loop from scratch and make sure all liquid and order logic works seamlessly. Layered Liquid Stacking: Designed a vertical layout system so liquids (coffee, milk, water) stack from the bottom up as ingredients are added. Liquid Mixing Logic: Implemented a mixing routine that blends individual stacked layers into a single blended coffee color upon serving. (Improving it until it gets better.) Random order and recipe Next Step I’ll be focusing on adding visual assets, sound effects, a polished UI. It looks terrible right now, but I’ll make improvements another time and add more recipes. Have a nice day, have a working projects
Hey everyone! Here is everything added to the project today: -Custom Hand-Drawn 2D UI and background Next Step Add more Recipe Add Costumers Add Ice and water type
how are you doing friends Adding customer mechanic, I will add visual customers wait for now
Yooo whats up Today I add costumers body and coin model, new serve mod and delay to stations . (My friend created the character.)
Wuhuu how you doing I added a MainMenu and day system (also clock) , a day ending screen, I will add more recipes and makes the UI better . later I add sound effect
Have a great day I added new recipes, new stations, and recipe book panel, I am gone draw a book panel (right now its just brown panel). I will add more things later, I am gone fix the customer
I drew back ground more🥱
I colored the background
I drew colored more
I FINISH THE BACKGROUND (finaly)
I added day ending screen dynamic price bug fix & UI reset button for test I will add more thing and fix the customer
I added the SHOP system !!!! It took an hour but it was worth it :D I am gone add more UI but not right now. I’m bored of drawing.
Yoo whats up I just test my game and do some bug fix
Improving Shop UI and price balancing
I made a tutorial for youuu You can play it now https://stutu-batu.itch.io/caffeine-crisis
If you want to know, play my game. (Just some bug fix). btw should I redesign my customer like this frog man ??? pls write your opinion
Just bug fix and pollsh
I added all sound fx and that photo You can play it Now https://stutu-batu.itch.io/caffeine-crisis
I made 2 things First I can add multiple customers Image. Second I made customers Personalitys. Customers have 5 different mods: -Impatient -Generous -Sleepy -Gourmet -Friendly I have a lot of different text.
I just cant find customer image. Can you make a recommendation? Just leave the link to the photo.
I added 5 more customer,
I just polished the game and some balancing with bug fix
I tried some thing but It didnt work sory
Ships:
YOU CAN PLAY THE DEMO OF CAFFEİNE CRİSSİS
I made a barista sim. You can make drinks and serve. And with the money you earned you can buy new stations or upgrade them. You can play it, game saves your progression. If you have any ideas or notice anything wrong, please write in the feedback section.
Hello I am shipping again, I just bug fix and added a real tutorial for you, If you have any ideas or notice anything wrong, please write in the feedback section....
|
1793717741.8535123
|
1793804141.8535123
|
|
66489
|
Weather buddy by @Blobbin | Stardance
|
Blobbin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Weather buddy by @Blobbin | Stardance
|
1793717740.9424458
|
1794322540.9424458
|
|
54106
|
thread-keeper by @kevin_fredric | Stardance
|
kevin_fredric
|
2
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T02:02:01Z", "hours": 0.0, "multiplier": 3.61, "payout": 1, "blessing": "neutral", "text": "threadkeeper ship #2 a slack bot that makes sure that EVERYONE’s threads have been answered even if its an old thread. Updated Threadkeeper with three new commands: /tk-next, /tk-unanswered, and /tk-search. /tk-next finds the highest-priority unresolved thread based on age and human replies. /tk-unanswered shows unresolved threads with no human replies while ignoring bot responses like Heidi. /tk-search lets users search unresolved threads by keyword.", "repo": "https://github.com/kevinsstinc/Thread-Keeper", "demo": "https://app.slack.com/client/E09V59WQY1E/C0AP0NMSP3P?skip_today=1"}, {"ship_num": 2, "ts": "2026-08-26T00:39:33Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "threadkeeper a slack bot that makes sure that EVERYONE’s threads have been answered even if its an old thread. this makes sure that no person is left unsure for days threadkeeper uses Heidi The Astronaut’s emoji answering system to understand what threads haven’t been answered maybe this could be used by the admins of stardance?!", "repo": "https://github.com/kevinsstinc/Thread-Keeper", "demo": "https://app.slack.com/client/E09V59WQY1E/C0AP0NMSP3P?skip_today=1"}]...
|
[{"post_id": 55317, "ts": "202 [{"post_id": 55317, "ts": "2026-08-27T02:00:28Z", "hours": 0.2864, "text": "Added a bunch of new commands /tk-next : which allows you to check the next thread which requires the most priority /tk-unanswered : which shows the threads with NO human replies /tk-search [keyword] : allows you to search through keywords in threads"}, {"post_id": 54464, "ts": "2026-08-25T14:08:18Z", "hours": 0.7511, "text": "threadkeeper so for all the people who’s threads have been buried due to the super high influx of people asking questions this gives awareness to those threads that still need tending to. so everyone’s threads gets a chance to be seen!"}]...
|
Title: thread-keeper by @kevin_fredric | Stardance Title: thread-keeper by @kevin_fredric | Stardance
Devlogs:
threadkeeper so for all the people who’s threads have been buried due to the super high influx of people asking questions this gives awareness to those threads that still need tending to. so everyone’s threads gets a chance to be seen!
Added a bunch of new commands /tk-next : which allows you to check the next thread which requires the most priority /tk-unanswered : which shows the threads with NO human replies /tk-search [keyword] : allows you to search through keywords in threads
Ships:
threadkeeper a slack bot that makes sure that EVERYONE’s threads have been answered even if its an old thread. this makes sure that no person is left unsure for days threadkeeper uses Heidi The Astronaut’s emoji answering system to understand what threads haven’t been answered maybe this could be used by the admins of stardance?!
threadkeeper ship #2 a slack bot that makes sure that EVERYONE’s threads have been answered even if its an old thread. Updated Threadkeeper with three new commands: /tk-next, /tk-unanswered, and /tk-search. /tk-next finds the highest-priority unresolved thread based on age and human replies. /tk-unanswered shows unresolved threads with no human replies while ignoring bot responses like Heidi. /tk-search lets users search unresolved threads by keyword....
|
1793717739.7840328
|
1793804139.7840328
|
|
49024
|
My own site! by @mr_kn5196 | Stardance
|
mr_kn5196
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-17T17:06:45Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a simple static website about me , it took me a while since its my first time doin it here and i wanted to be more creative but yea the current webpage is good too imo", "repo": "https://github.com/Nitish5196/Portfolio", "demo": "https://nitish5196.github.io/Portfolio/"}]...
|
[{"post_id": 49038, "ts": "202 [{"post_id": 49038, "ts": "2026-08-17T17:01:33Z", "hours": 1.4947, "text": "finally finished building my first webpage , hope the next one will be much better than this"}, {"post_id": 47963, "ts": "2026-08-16T07:33:27Z", "hours": 0.7414, "text": "i jst started workin on my first web page im super excited abt it!!!"}]...
|
Title: My own site! by @mr_kn5196 | Stardance
Dev Title: My own site! by @mr_kn5196 | Stardance
Devlogs:
i jst started workin on my first web page im super excited abt it!!!
finally finished building my first webpage , hope the next one will be much better than this
Ships:
i made a simple static website about me , it took me a while since its my first time doin it here and i wanted to be more creative but yea the current webpage is good too imo...
|
1793717738.5673187
|
1793804138.5673187
|
|
66487
|
HEMATINA - AI Based Anemia Detector by @KICKS | St HEMATINA - AI Based Anemia Detector by @KICKS | Stardance...
|
KICKS
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: HEMATINA - AI Based Anemia Detector by @KIC Title: HEMATINA - AI Based Anemia Detector by @KICKS | Stardance...
|
1793717737.658994
|
1794322537.658994
|
|
28823
|
MaidenReady by @joedesmos | Stardance
|
joedesmos
|
1
|
9.0
|
43
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T20:20:17Z", "hours": 9.0, "multiplier": 4.69, "payout": 43, "blessing": "neutral", "text": "MaidenReady is a FPV Drone builder website where you pick out each part individually that you want and then it will give you a cost and an estimate of how fast it will go, the weight, etc. Website: MaidenReady.com", "repo": "https://github.com/joedesmos-co/maidenready", "demo": "https://maidenready.com"}]...
|
[{"post_id": 20244, "ts": "202 [{"post_id": 20244, "ts": "2026-07-01T19:50:48Z", "hours": 9.1636, "text": "A fun FPV drone website I made. You pick out the parts you want and it calculates stats for it and gives it a rating. You can also compare drones, share your builds, and learn about parts."}]...
|
Title: MaidenReady by @joedesmos | Stardance
Devl Title: MaidenReady by @joedesmos | Stardance
Devlogs:
A fun FPV drone website I made. You pick out the parts you want and it calculates stats for it and gives it a rating. You can also compare drones, share your builds, and learn about parts.
Ships:
MaidenReady is a FPV Drone builder website where you pick out each part individually that you want and then it will give you a cost and an estimate of how fast it will go, the weight, etc. Website: MaidenReady.com...
|
1793717736.4874783
|
1793804136.4874783
|
|
66486
|
Nullscape OS by @Dotty | Stardance
|
Dotty
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-11-01T05:00:47Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a web-based operating system themed around the game nullscape, it has 2 apps, the welcome page and the notes app, the welcome page tell you breifly what this is about, and the notes app can store text, you can also create and delete saves in the notes app though the count broke I think. the hardest part about this project wasn’t the coding part like I had expected before I started, personally it was trying to manage time and trying to overcome laziness, I think stardance had really made me able to focus more on things, I truly tried with the time given to me or well, the time I gave myself, I joined somewhere on the end of september stumbling upon stardance through a devlog on youtube. I learnt alot of html, javascript, and css from stardance, thank you.", "repo": "https://github.com/DotNDit/NullscapeOS", "demo": "https://dotndit.github.io/NullscapeOS/"}]...
|
[{"post_id": 86246, "ts": "202 [{"post_id": 86246, "ts": "2026-11-01T04:00:26Z", "hours": 7.3303, "text": "last upd"}, {"post_id": 84913, "ts": "2026-10-30T15:22:44Z", "hours": 11.3958, "text": "Devlog 4, Notes app"}, {"post_id": 82001, "ts": "2026-10-23T12:06:37Z", "hours": 9.3458, "text": "Devlog 3, The welcome window can now be dragged, opened, and closed"}, {"post_id": 75275, "ts": "2026-09-29T16:52:00Z", "hours": 1.9242, "text": "Added background and some description today"}, {"post_id": 74930, "ts": "2026-09-28T16:46:56Z", "hours": 0.7756, "text": "I didn’t get much done today but it was pretty fun, I will be definitely back again tommorrow it’s almost midnight now"}]...
|
Title: Nullscape OS by @Dotty | Stardance
Devlogs Title: Nullscape OS by @Dotty | Stardance
Devlogs:
I didn’t get much done today but it was pretty fun, I will be definitely back again tommorrow it’s almost midnight now
Added background and some description today
Devlog 3, The welcome window can now be dragged, opened, and closed
Devlog 4, Notes app
last upd
Ships:
I made a web-based operating system themed around the game nullscape, it has 2 apps, the welcome page and the notes app, the welcome page tell you breifly what this is about, and the notes app can store text, you can also create and delete saves in the notes app though the count broke I think. the hardest part about this project wasn’t the coding part like I had expected before I started, personally it was trying to manage time and trying to overcome laziness, I think stardance had really made me able to focus more on things, I truly tried with the time given to me or well, the time I gave myself, I joined somewhere on the end of september stumbling upon stardance through a devlog on youtube. I learnt alot of html, javascript, and css from stardance, thank you....
|
1793717735.2303271
|
1793804135.2303271
|
|
28627
|
Huawei Band HBR OBS Overlay by @tobycm | Stardance
|
tobycm
|
1
|
2.0
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T04:57:27Z", "hours": 2.0, "multiplier": 2.43, "payout": 6, "blessing": "neutral", "text": "A overlay for displaying heart rate from Huawei Band 8, 9, 10 watches on OBS Spent a night coding this, then used it right away in my streams. Works great btw sub to https://www.youtube.com/@toby_cm :3", "repo": "https://github.com/tobycm/huawei-hbr-obs-overlay", "demo": "https://youtu.be/472RqcKRkFA"}]...
|
[{"post_id": 18986, "ts": "202 [{"post_id": 18986, "ts": "2026-06-30T04:52:14Z", "hours": 2.3697, "text": "Working PoC!!!"}]...
|
Title: Huawei Band HBR OBS Overlay by @tobycm | St Title: Huawei Band HBR OBS Overlay by @tobycm | Stardance
Devlogs:
Working PoC!!!
Ships:
A overlay for displaying heart rate from Huawei Band 8, 9, 10 watches on OBS Spent a night coding this, then used it right away in my streams. Works great btw sub to https://www.youtube.com/@toby_cm :3...
|
1793717734.0699973
|
1793804134.0699973
|