|
54771
|
my portfolio by @yugo | Stardance
|
yugo
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T22:38:46Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "hello my people, i made a portfolio about myself and i wanted to make it like a terminal theme. the reason why i have a flower in ascii is because i kinda use it as my logo on my business card and wanted to transfer it here. the most challenging part was getting the base structure and fixing js code when needed. i apologise for not making any devlogs, im not used to it :(", "repo": "https://github.com/YugoBond/portfolio", "demo": "https://yugobond.github.io/portfolio/"}]...
|
[{"post_id": 63230, "ts": "202 [{"post_id": 63230, "ts": "2026-09-06T22:29:35Z", "hours": 3.7858, "text": "hashing function in the portfolio, it turned out really cool and really good :D"}]...
|
Title: my portfolio by @yugo | Stardance
Devlogs: Title: my portfolio by @yugo | Stardance
Devlogs:
hashing function in the portfolio, it turned out really cool and really good :D
Ships:
hello my people, i made a portfolio about myself and i wanted to make it like a terminal theme. the reason why i have a flower in ascii is because i kinda use it as my logo on my business card and wanted to transfer it here. the most challenging part was getting the base structure and fixing js code when needed. i apologise for not making any devlogs, im not used to it :(...
|
1793137913.0923848
|
1793224313.0923848
|
|
58735
|
Kernel Kiosk by @hackyc | Stardance
|
hackyc
|
1
|
12.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T22:29:58Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I made Kernel Kiosk, a terminal-themed Godot platformer where players judge Linux commands while navigating platform levels. What was challenging? Making Godot web exports work reliably through a Raspberry Pi, Cloudflare Tunnel, WebAssembly, and a lightweight Go server. What are you proud of? I am proud of the polished hacker-terminal visual style, original platform gameplay, random questions, and working public leaderboard. What should people know so they can test your project? Open the hosted website in a modern browser, use WASD or arrows to move, jump, and touch bubbles.", "repo": "https://github.com/HanYC666/kernel-kiosk", "demo": "https://kernel-kiosk.20091105.xyz"}]...
|
[{"post_id": 63132, "ts": "202 [{"post_id": 63132, "ts": "2026-09-06T19:21:25Z", "hours": 10.5025, "text": "main game done Added the Godot main scene and set up the project to run properly. Made a Makefile for running, testing, exporting the web version, and building binaries. Added cross-platform builds, including ARMv6 for Raspberry Pi Zero hardware. Built the JSON leaderboard system with sorting, score limits, and safer file saving. added a store test Added a test to make sure the leaderboard only keeps the top 50 scores. Checked that old extra scores are removed from the saved JSON file. linux/unix setup one liner!!! Made setup.sh to install missing Go, Godot, and Make dependencies. Added support for common Linux package managers and Homebrew. The script installs Godot web export templates, exports the game, runs tests, and builds the server. What Was the Hardest Part in Dev? The hardest part was getting the Godot web export to work reliably through the Pi and Cloudflare Tunnel. Debugging the blank canvas was confusing because the browser fallback text was not the actual error. The large WebAssembly game file was being cut off by the server timeout, so I increased the transfer time for slower Raspberry Pi hardware."}, {"post_id": 62668, "ts": "2026-09-06T04:39:24Z", "hours": 0.3911, "text": "I got the rankings page!!!"}, {"post_id": 62643, "ts": "2026-09-06T03:26:45Z", "hours": 0.6417, "text": "Got the basic canvas working, no movement yet."}, {"post_id": 62503, "ts": "2026-09-05T22:02:27Z", "hours": 0.8286, "text": "Basic GODOT setup done Trying to download the 1.2GB godot through a 10Mb downlink internet…"}]...
|
Title: Kernel Kiosk by @hackyc | Stardance
Devlog Title: Kernel Kiosk by @hackyc | Stardance
Devlogs:
Basic GODOT setup done Trying to download the 1.2GB godot through a 10Mb downlink internet…
Got the basic canvas working, no movement yet.
I got the rankings page!!!
main game done Added the Godot main scene and set up the project to run properly. Made a Makefile for running, testing, exporting the web version, and building binaries. Added cross-platform builds, including ARMv6 for Raspberry Pi Zero hardware. Built the JSON leaderboard system with sorting, score limits, and safer file saving. added a store test Added a test to make sure the leaderboard only keeps the top 50 scores. Checked that old extra scores are removed from the saved JSON file. linux/unix setup one liner!!! Made setup.sh to install missing Go, Godot, and Make dependencies. Added support for common Linux package managers and Homebrew. The script installs Godot web export templates, exports the game, runs tests, and builds the server. What Was the Hardest Part in Dev? The hardest part was getting the Godot web export to work reliably through the Pi and Cloudflare Tunnel. Debugging the blank canvas was confusing because the browser fallback text was not the actual error. The large WebAssembly game file was being cut off by the server timeout, so I increased the transfer time for slower Raspberry Pi hardware.
Ships:
What did you make? I made Kernel Kiosk, a terminal-themed Godot platformer where players judge Linux commands while navigating platform levels. What was challenging? Making Godot web exports work reliably through a Raspberry Pi, Cloudflare Tunnel, WebAssembly, and a lightweight Go server. What are you proud of? I am proud of the polished hacker-terminal visual style, original platform gameplay, random questions, and working public leaderboard. What should people know so they can test your project? Open the hosted website in a modern browser, use WASD or arrows to move, jump, and touch bubbles....
|
1792878463.5936258
|
1793742463.5936258
|
|
57978
|
Slop Bot :) by @neetyan | Stardance
|
neetyan
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T22:18:15Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "You are on the final step! You can copy and paste this response directly into the text box: I built Slop Bot :), a 24/7 Slack bot running on a Linux VPS using Node.js, @slack /bolt, and Socket Mode. It serves brainrot jokes, facts, latency metrics, and help commands. The most challenging part was fixing syntax errors from code formatting, setting up systemd to keep the process running continuously in the background, and making sure the commands had unique names so they didn’t collide with anyone else’s. I’m really proud of getting it hosted on Nest so it stays online even when my laptop is completely turned off! To test it, run any of these commands in Slack: /slop-bot-ping - Check latency /slop-bot-help - View all commands /slop-joke - Get a random joke /slop-fact - Get a brainrot origin fact", "repo": "https://github.com/neetyan56-gif/Slop-Bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BV2S2DLR5"}]...
|
[{"post_id": 62634, "ts": "202 [{"post_id": 62634, "ts": "2026-09-06T03:06:03Z", "hours": 0.29, "text": "I just hate how i have been working at 11pm trying to not get my streak killed and this thing never updates"}, {"post_id": 62596, "ts": "2026-09-06T02:06:55Z", "hours": 0.2839, "text": "Add new command called slop-facts which gives a random fact from these 10."}, {"post_id": 61835, "ts": "2026-09-04T23:03:47Z", "hours": 0.5203, "text": "Working on Slop Bot this is a bot that will reply to you but with slop For example : you -/slop-bot-hello , slop bot - Yo twin, what’s the up. (This is probably not how most people reply put most of this is just perspective wise. So far I just got everything set up so i am planning to add a lot more commands"}]...
|
Title: Slop Bot :) by @neetyan | Stardance
Devlog Title: Slop Bot :) by @neetyan | Stardance
Devlogs:
Working on Slop Bot this is a bot that will reply to you but with slop For example : you -/slop-bot-hello , slop bot - Yo twin, what’s the up. (This is probably not how most people reply put most of this is just perspective wise. So far I just got everything set up so i am planning to add a lot more commands
Add new command called slop-facts which gives a random fact from these 10.
I just hate how i have been working at 11pm trying to not get my streak killed and this thing never updates
Ships:
You are on the final step! You can copy and paste this response directly into the text box: I built Slop Bot :), a 24/7 Slack bot running on a Linux VPS using Node.js, @slack /bolt, and Socket Mode. It serves brainrot jokes, facts, latency metrics, and help commands. The most challenging part was fixing syntax errors from code formatting, setting up systemd to keep the process running continuously in the background, and making sure the commands had unique names so they didn’t collide with anyone else’s. I’m really proud of getting it hosted on Nest so it stays online even when my laptop is completely turned off! To test it, run any of these commands in Slack: /slop-bot-ping - Check latency /slop-bot-help - View all commands /slop-joke - Get a random joke /slop-fact - Get a brainrot origin fact...
|
1793130781.2070239
|
1793217181.2070239
|
|
58630
|
Moodify by @saidcim | Stardance
|
saidcim
|
1
|
14.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T22:04:23Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Moodify is a Spotify bot that rebuilds one playlist for me every two days based on what I actually listened to. It runs entirely on GitHub Actions, so there is no server and it costs nothing. The hard part was not picking songs, it was getting honest feedback: if you ask a model to rate its own playlist it gives itself an 8 out of 10 forever, so instead the bot counts real plays and tunes itself from that. That got complicated fast. Spotify only hands you your last 50 plays, which badly undercounts over a two day cycle, so a second workflow runs every hour just to keep a counter. And my first tuning rule could only ever lower the number of familiar tracks it kept, which sent it into a spiral where the playlist became all strangers and I stopped listening to it. Fixing that, by comparing the carried over tracks against the fresh ones in the same playlist instead of looking at the overall average, is the part I am most proud of. There is a live demo you can try, and the README walks through pointing it at your own Spotify account.", "repo": "https://github.com/saidcim/Moodify", "demo": "https://saidcim.github.io/Moodify/demo/"}]...
|
[{"post_id": 63214, "ts": "202 [{"post_id": 63214, "ts": "2026-09-06T21:55:41Z", "hours": 1.7572, "text": "The complete dashboard: a request box that sends free text to the curator, a GitHub token flow that triggers the workflow directly from the panel, and live run tracking."}, {"post_id": 63088, "ts": "2026-09-06T17:59:12Z", "hours": 3.0531, "text": "I added two new panels—Mood History and Bot Learnings (showing extracted listener patterns and confidence levels)—along with a Score Trend chart comparing AI self-assessed scores to real engagement scores from play counts."}, {"post_id": 62952, "ts": "2026-09-06T14:43:47Z", "hours": 1.0811, "text": "I Added the Playlist History panel, where each cycle is listed with the AI’s self-assessed score as a bar and its written analysis."}, {"post_id": 62914, "ts": "2026-09-06T13:30:39Z", "hours": 3.0647, "text": "Added a Manual Update section and Open Playlist link to trigger cycles on demand, alongside a Bot Strategy panel that displays the discovery quota, cumulative play counts from the hourly poll job, carry-over limit, and the bot’s rationale for its last adjustment."}, {"post_id": 62799, "ts": "2026-09-06T10:06:58Z", "hours": 1.0233, "text": "Expanded the stats grid to six cards: current mood, AI score, real score and discovery count are now read from the same state file."}, {"post_id": 62764, "ts": "2026-09-06T08:55:53Z", "hours": 2.1703, "text": "The panel now pulls the bot state from a secret Gist and renders it. The status badge turns green and the cycle counter shows real data for the first time. I also Added the Playlist Archive table, which lists every past cycle with its track count and average plays, plus a link to the Excel history in the repo."}, {"post_id": 62393, "ts": "2026-09-05T18:45:06Z", "hours": 1.0931, "text": "Added the stats grid with the first two cards, Total Cycles and Last Update. They still show placeholders because the panel cannot read state yet."}, {"post_id": 62329, "ts": "2026-09-05T17:10:26Z", "hours": 0.8364, "text": "The dashboard shell: header, logo and a connection status badge. Nothing is wired up yet, so the status stays on “Connecting…”."}]...
|
Title: Moodify by @saidcim | Stardance
Devlogs:
T Title: Moodify by @saidcim | Stardance
Devlogs:
The dashboard shell: header, logo and a connection status badge. Nothing is wired up yet, so the status stays on “Connecting…”.
Added the stats grid with the first two cards, Total Cycles and Last Update. They still show placeholders because the panel cannot read state yet.
The panel now pulls the bot state from a secret Gist and renders it. The status badge turns green and the cycle counter shows real data for the first time. I also Added the Playlist Archive table, which lists every past cycle with its track count and average plays, plus a link to the Excel history in the repo.
Expanded the stats grid to six cards: current mood, AI score, real score and discovery count are now read from the same state file.
Added a Manual Update section and Open Playlist link to trigger cycles on demand, alongside a Bot Strategy panel that displays the discovery quota, cumulative play counts from the hourly poll job, carry-over limit, and the bot’s rationale for its last adjustment.
I Added the Playlist History panel, where each cycle is listed with the AI’s self-assessed score as a bar and its written analysis.
I added two new panels—Mood History and Bot Learnings (showing extracted listener patterns and confidence levels)—along with a Score Trend chart comparing AI self-assessed scores to real engagement scores from play counts.
The complete dashboard: a request box that sends free text to the curator, a GitHub token flow that triggers the workflow directly from the panel, and live run tracking.
Ships:
Moodify is a Spotify bot that rebuilds one playlist for me every two days based on what I actually listened to. It runs entirely on GitHub Actions, so there is no server and it costs nothing. The hard part was not picking songs, it was getting honest feedback: if you ask a model to rate its own playlist it gives itself an 8 out of 10 forever, so instead the bot counts real plays and tunes itself from that. That got complicated fast. Spotify only hands you your last 50 plays, which badly undercounts over a two day cycle, so a second workflow runs every hour just to keep a counter. And my first tuning rule could only ever lower the number of familiar tracks it kept, which sent it into a spiral where the playlist became all strangers and I stopped listening to it. Fixing that, by comparing the carried over tracks against the fresh ones in the same playlist instead of looking at the overall average, is the part I am most proud of. There is a live demo you can try, and the README walks through pointing it at your own Spotify account....
|
1792875278.5881872
|
1793739278.5881872
|
|
406
|
MemeBoard by @tonymac129 | Stardance
|
tonymac129
|
1
|
55.0
|
994
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T22:02:36Z", "hours": 55.0, "multiplier": 18.15, "payout": 994, "blessing": "neutral", "text": "I finally finished making MemeBoard after periodically working on it over the past 3 months! MemeBoard is an accessible and easy to use fullstack online social platform for posting, sharing, and exploring all kinds of memes. There are many different post interaction features such as voting, commenting, saving, reacting, and sharing, it’s essentially a simple Reddit clone that’s exclusively for memes. You can browse, filter, and search through memes easily by choosing different sorting options and exploring the different tags and collections. It also has social features like following users and customizing your profile, as well as a full-featured realtime chat (mini Discord clone) where you can send content and chat with your friends or interact with MemeBot (which is not an LLM, it’s just a random thing I thought was fun to implement)! The entire website is also fully responsive and functional on all screen sizes with smooth loading and transition animations, and you can toggle between dark and light modes. I got bored of the project halfway through it to work on other stuff, but I ended up coming back more than a month later to finally finish everything and polish it to ship, and the final result is definitely very satisfying and rewarding for me, hopefully you’ll like it :)", "repo": "https://github.com/tonymac129/memeboard", "demo": "https://memeboard-app.vercel.app"}]...
|
[{"post_id": 63210, "ts": "202 [{"post_id": 63210, "ts": "2026-09-06T21:49:05Z", "hours": 1.5575, "text": "Final MemeBoard devlog! I finally finished MemeBoard after working on it over the past 3 months! I’ve implemented all the features I originally planned to make, as well as added a ton of other stuff to make the project interesting and fun to use I mostly just polished the project in this update, so there isn’t actually anything new other than the simple “m” logo/favicon I added to the nav bar and footer Added a top loading bar indicator to show the page is responsive and is actively loading since some pages take a bit of time to fetch data, and I’m too lazy to implement suspense/loading skeleton and all that Clicking on things that require the user to be signed in now redirects you to the sign in page so it’s more user friendly and not confusing Updated the README to document detailed information, all the features, setup instructions, and everything else about the project Fixed an annoying issue where MemeBot didn’t respond at all or took a long time by simply deleting an intentional timeout and the bug was somehow fixed Updated styling and layout components"}, {"post_id": 62607, "ts": "2026-09-06T02:31:58Z", "hours": 3.0308, "text": "Meme reactions, animations, and polishing Added reactions to memes (kind of similar to Reddit awards) so you can now choose an emoji to express what you think about the meme! There is a new React button on the meme bar that opens an emoji selection menu that lets you choose your reaction. You can see all the meme’s reactions sorted by number of users listed below the bar and can click on them to switch your reaction or unreact (since you can only react once) Reactions are anonymous, so you can only see the number of reactions with your own reaction highlighted Added subtle page transition animations to the layout and individual components to make navigation and user interactions a lot smoother and more aesthetically pleasing Added a 404 not found page with an occasional stylized glitching effect and buttons to go home or go back Added more detailed and dynamically generated OpenGraph metadata to improve SEO Updated backend Prisma schema and migrated database Updated types and styling Fixed a few display, light mode, and responsive design bugs MemeBoard is almost finished, it’ll probably be ready to ship after one final devlog and some polishing touches!!!"}, {"post_id": 61608, "ts": "2026-09-04T16:23:00Z", "hours": 1.9592, "text": "Light mode toggle Added a button on the nav bar that toggles the site’s entire appearance between dark and light mode to improve its customizability and accessibility Because every component has a default color transition, switching between the 2 modes has a smooth UI transition instead of flashing to the other color instantly I had to set up the theme provider and manually add the light mode Tailwind classes and the dark mode prefix for all the colors in every page and component, so this took quite a long time but the result was worth it, both modes look pretty consistent and visually appealing"}, {"post_id": 59928, "ts": "2026-09-01T23:23:11Z", "hours": 3.3867, "text": "MemeBoard is back!!! I’ve been a lazy bum this entire summer and didn’t finish a single one of my more serious projects on Stardance before losing interest and moving on to a new idea, but now that the event is ending in a month (nooo ) I finally forced myself to come back and finish up/ship my old projects one by one School just started so I’ll hopefully still have enough time to ship most of my projects before October. Since no one has used MemeBoard at all in over 2 months, I had to upgrade some packages, resetup some deployment stuff, and reactivate the databases for everything to function normally I also spent some time getting familiar with the codebase again, so I didn’t make a lot of changes this update. I added a few quality of life features like sharing/reporting comments, homepage meme and chat sections, and user search for finding people to follow When you click on share for a comment, the share modal pops up listing all your friends that you can select to send the comment and a message to, as well as options to copy the link and to report it Comments show up as embedded text with the user and like count displayed, and clicking on it takes you to its location on the original meme page for easy viewing (definitely not stolen from TikTok ) When you click on add user on the chat page, it shows a modal where you can use the API to search for people to add as friends, making chatting and sharing memes more convenient Added recent, top, all time, friend memes, and recent chat sections to the homepage to make navigating the platform and browsing memes easier Added call to action buttons on the homepage hero to make using the site more intuitive Updated content and styling Updated MemeBot behavior Updated README Fixed chat deployment issue Did some miscellaneous stuff/improvements/fixes that I forgot"}, {"post_id": 19564, "ts": "2026-06-30T21:50:01Z", "hours": 2.1125, "text": "More collections features You can now search, sort, and filter collections on the collections page to browse and explore public collections other people created! You can filter your friends’ and your own collections to make managing them easier You can now add an optional description describing what your collection is about, either on the add or edit collection modal You can now change the visibility of your collection to be either public or private, where public collections are displayed on your profile and the collections page for everyone to see, and only you can see your own private collections Added a new private collections section on your profile that only you can see it Added a create collection modal that shows up when you click on the button on the collections page to make creating collections easier Added a create tag modal that shows up when you click on the button on the tags page, but unlike collections you can only put the name of the tag since that’s the only thing a tag has Updated schema and types Updated styling and SEO"}, {"post_id": 17714, "ts": "2026-06-28T17:01:30Z", "hours": 2.5683, "text": "MemeBot & bug fixes Added MemeBot to everyone’s chat, so even if you haven’t friended someone on the platform you can still try out all the chat features since MemeBot also sends messages in realtime MemeBot isn’t actually another AI chatbot or anything, it just responds with a random hardcoded string message (very intelligent, i know) from the backend whenever a user sends it a message after a certain delay to simulate realtime chatting Since MemeBot isn’t actually a user, I had to modify the chatting system quite a bit and put a lot of extra conditionals and logic to ensure it works properly for both MemeBot and real users, and that was quite annoying to figure out Fixed an annoying caching bug where you had to refresh the entire chat page for realtime interactions to work properly when chatting with someone for the first time, otherwise the chat just froze. This took a long time to fix, but the UX is finally smooth and works well Fixed some issues of the chat related to auth and not being logged in Updated styling"}, {"post_id": 17111, "ts": "2026-06-27T19:43:00Z", "hours": 1.7958, "text": "Random quality of life features I think I’m almost finished with MemeBoard, so now I’m just making random small features that I skipped over earlier Added realtime chat message previews for each of your chats that shows the last message and who sent it on the left sidebar so it feels more like Discord and Slack Added a tag filtering dropdown on the Memes page where you can see all the tags, search for them, and choose one to see all the memes labeled with that tag. This makes it a lot easier to browse, filter, and find similar memes Added an options menu button to the tag page (that only shows if you’re the one who made the tag) similar to the button I added to a bunch of other pages. When clicked, it shows a menu with just a delete option that deletes the tag and removes its label from all the memes after a confirmation modal Added both dynamically generated SEO and static SEO to some pages that didn’t have it Updated styling and navigation"}, {"post_id": 16679, "ts": "2026-06-27T03:33:33Z", "hours": 2.7094, "text": "Collection features & cleanup Similar to the meme page, when you view the page of a collection you created, there is an options icon that when clicked, opens a menu where you can edit or delete the collection If you press on edit, an edit modal pops up where you can edit the name and select which memes should be in the collection If you press on delete, a warning modal shows up, and if you press delete the collection will be permanently deleted Added a search bar on the main collections page where you can search for your own or other people’s collections Added the collections tab to the main nav bar and the footer to improve navigation You can now add a short public about me bio on your profile by clicking on the edit profile button that shows an input edit modal When you hover over your own messages, a delete button now shows up that lets you delete the message for both of you after a confirmation modal just like all the other delete functionalities You can undo the deletion by pressing on the undo button that shows up, which restores the message for both of you I spent most of my time on MemeBoard developing while logged in, so I wasn’t aware most of my pages were completely broken and returning errors if someone visited them while not being logged in, so I implemented a ton of conditionals and permission stuff for auth to make sure every page works properly or redirects to the login page When you’re not logged in, you can still use the app and browse memes, it’s just that a lot of features are unavailable Updated backend schema and types Updated styling Fixed a few bugs and issues caused by auth"}, {"post_id": 15440, "ts": "2026-06-25T03:01:05Z", "hours": 1.8839, "text": "Responsive design Finally added responsive design to all pages on the platform so MemeBoard works properly and the layout stays organized and visually appealing for all screen sizes! Added a menu button that shows up when the screen size is smaller than a certain width, which when clicked opens a sidebar that slides in from the left containing all the links. This declutters the layout while improving the UX of the app Added a search bar to the tags page where you can search all the tags people created and browse memes more easily Refactored code for some UI elements to make everything more optimized and clean Fixed chat layout UI breaking with excessively long messages Added some minor styling adjustments"}, {"post_id": 13355, "ts": "2026-06-21T21:30:32Z", "hours": 4.0244, "text": "Editing/deleting posts & more chat features! Added an option button on the top right of the meme pages you posted which when clicked displays a menu that lets you edit or delete the post Clicking on the edit option takes you to a dedicated post editing page where you can edit the title, tags, description, and source link and reupload the image of the meme (metadata, comments, and everything else remains unchanged), and clicking save takes you back to the newly edited page Clicking on the delete option shows a confirmation modal/dialog warning you, and if you press delete all the meme’s data will be permanently deleted and you get redirected back to the memes pages A similar option menu button is also added to the top right corner of your comment, where you can edit (a modal with an edit input field and buttons shows up) or delete (also has a confirmation dialog) the comment You can now also edit your own messages (only the text and not what you’re replying or the embedded meme), when you click on the edit message button a modal with an edit input pops up, and the edited message is updated in realtime You can now react to both yours or your friends messages to express what you think! When you click on the react button an emoji menu shows up where you can browse for the emoji you want Reactions and their counters update in realtime and you can remove the reaction by clicking on it again (the feature works exactly how all messaging apps’ reactions work) After you press on the share meme button when sharing to a friend, the button now becomes a link that takes you to the chat where you can see the message Updated schema and types Updated styling I kinda forgot to make more devlogs again, so this one is another massive wall of text covering a ton of different features. The video is also 2 minutes so I had to compress it to upload 😭 I promise I’ll try to keep future devlogs shorter and more focused :)"}, {"post_id": 12330, "ts": "2026-06-20T03:35:53Z", "hours": 3.5969, "text": "Meme sharing and more chat features! I sort of got carried away with this chat feature thing so MemeBoard is now a weird combination of Reddit and Discord instead of the original meme platform I planned it to be When you click on the share button on a meme page and open the sharing modal, you can now see all your friends listed and you can select who to send the meme to, as well as an optional message This actually sends a message to the chat with your friend, and it shows up as an embedded preview meme with its creator, title, image, and number of likes/comments/shares displayed Clicking on the embed preview takes you to the actual meme page Added chat replies so when you click on the reply button next to your friend’s message, a box shows up above the input field showing the message you’re currently replying to When you send the message, a reply bar/message preview similar to Discord’s shows up above the message, and clicking on it scrolls the page to the original message and briefly highlights it, similar to Discord’s Messages are grouped together so message header info (sender, time, profile image…) only shows under certain circumstances (similar to Discord) for a cleaner and better UI Refactored how messages and their components are rendered/structured for better optimization and performance Added an API route for client components to fetch meme data from the database Updated schema and types Updated the styling of different chat pages I forgot to make devlogs, so this devlog is pretty long Sorry again for the terrible layout in the video, my lazy bum hasn’t started on responsive styling yet, so the windows are compressed"}, {"post_id": 9670, "ts": "2026-06-16T02:34:11Z", "hours": 3.5231, "text": "Massive update: chat Added realtime chat where you can send and receive text messages with almost no latency to/from your friends on MemeBoard! The base layout of all the chat pages has a sidebar of the left that displays all your friends, and clicking on them takes you to the different direct message channels On each chat channel page, you can see your friend’s profile picture, username, and number of followers/following at the top, similar to TikTok’s chat Your friend’s messages show up on the left while yours are highlighted and on the right, similar to texts, and each message has a timestamp Integrated a Redis database for quick message retrieval, caching, and ease of use for the Upstash realtime library that uses Web Socket under the hood to push realtime updates/events to send and update messages in realtime I already made a much simpler chat app but with a slightly different backend stack a while ago, so it wasn’t that difficult rewriting everything in Next.js and adding additional features There are actually a lot of considerations and logic that go into making a chat app that you normally wouldn’t think of unless building your own chat, so this was an interesting and fun experience coming up with solutions for unexpected problems Updated schema and types I’ll actually optimize the site and implement responsive design after the main app is finished, so the current layout looks terrible on small screens and I apologize for the terrible layout in the video"}, {"post_id": 8477, "ts": "2026-06-14T03:08:02Z", "hours": 2.3269, "text": "Searching, sorting, and filtering memes Added a search bar, a sorting dropdown, a filtering by time and creator dropdown, a tag dropdown (doesn’t work yet, coming soon), and a number of items dropdown on the explore memes page to make finding and browsing new memes a lot more easier The search bar searches by the meme’s title and only searches when you submit the form to improve performance You can sort by best, which sorts by positive/negative vote ratio, top, which sorts by raw upvote count, and new, which sorts by recency You can filter by time range (now, day, week, and all), memes your friends posted, and memes you posted You can choose to show 5, 10, 25, or 50 memes at a time Added a custom dropdown component for the dropdowns with nice UX MemeBoard is now even closer to being a Reddit clone, I took a lot of inspiration from its features except my sorting/filtering is mainly frontend, which is not good practice but I’m too lazy to implement API endpoints for fetching memes Refactored the upvoting/downvoting component and logic so it directly communicates with the backend rather than using a hook to make it more modular and performant Meme cards now show the voting component and vote count I’m almost finished with the meme aspect of this project, the next big part is the realtime chat and sharing with friends and MemeBoard will be finished! I should probably stop using aura monster as the test meme, it’s starting to become corny :("}, {"post_id": 7915, "ts": "2026-06-13T06:13:24Z", "hours": 2.0725, "text": "Comment likes and replies You can now like meme comments (and comment replies since they’re counted as normal comments) by clicking on the heart icon on each comment You can also see how many people liked the comment When you click on the reply option on a comment, an input field for your reply and post/cancel buttons show up for you to post your reply The replies show up as nested inside their parent comments to show the discussion flow, and you can technically thread replies infinite levels deep Spent a ton of time trying to figure out how to generate the threaded tree structure, tried recursion and loops and ended up using hashmaps and pointers to nest parent/child comments (I was not locked in while making the algorithm because of the finals I was going to have the next day) Updated schema and styling"}, {"post_id": 7104, "ts": "2026-06-11T21:33:21Z", "hours": 2.1169, "text": "Collection pages, sharing, and reporting Added a main collection tab that displays all the meme collections users created (not just yours), and you can access the page with a header link on the profile page Each collection card either shows a gray rectangle if there’s no meme or a stack of images with a preview image on top if there’s multiple memes When you click on a collection, it takes you to its own page where its name, creator, and all the memes are displayed Collections a user created are also displayed on their profile page in a new section The share button shows a sharing modal where you can either share the meme to your friends (doesn’t work yet, will be integrated with chat), copy the link and send it somewhere else, or report it If you choose report or click on the report option, another modal shows up where you can select report reasons and provide additional feedback Added new schemas and types Updated navigation and styling"}, {"post_id": 6006, "ts": "2026-06-10T02:14:13Z", "hours": 1.4364, "text": "Additions & Changes Added saving memes to collections so other than voting you can curate, organize, and categorize your own custom lists of memes! When you click on the save option, a modal pops up showing collections you created and a button that lets you add new collections, as well as a search bar for the collections You can also see how many memes are currently saved in the selections When you click save, the option shows the saved state and displays how many collections the meme is saved in You can only save memes to collections you created Added a new user profile section for collections, but it currently doesn’t show anything yet Updated schema and types and learned some new relational database and Prisma concepts"}, {"post_id": 5957, "ts": "2026-06-09T23:41:13Z", "hours": 1.2425, "text": "Additions & Changes Added a voting system for memes (sort of like a rip off Reddit) where you can upvote, downvote, or remove your vote by clicking on the arrows You can also see the total vote count of the meme in real time to see its popularity The upvote/downvote buttons are displayed below the meme, along with the save and share buttons that will work soon Added an optional original source field for posting a meme to link where you got the original image from A link icon now shows up on the meme page if you provided the source link so people can see the original post and author Updated styling and navigation Updated schema and types"}, {"post_id": 5253, "ts": "2026-06-08T23:28:07Z", "hours": 0.9344, "text": "Additions & Changes When you click on a user’s followers and following on their profile page, a new modal pops up with 2 tabs, followers and following, that shows the accounts they’re currently following/being followed There’s also a search bar that lets you search through the listed users to find people more easily and makes it feel a lot more like Instagram If you are following someone who follows you back (mutual follows), you are automatically added as friends, which shows up as a section on the main profile display area You will be able to send messages through a real-time chat with friends in the future! Added the chat tab that’s just a placeholder page for now Added dynamic SEO Updated navigation and styling"}, {"post_id": 4630, "ts": "2026-06-08T00:46:10Z", "hours": 1.3575, "text": "Additions & Changes You can now edit your account information and customize your own profile by clicking on the edit profile button on the page, which shows a edit form modal! You can change your display name to anything you want, your username to anything that’s not already taken (since it’s used as the param account identifier), and upload a custom profile image (PNG, JPG, and GIF are all accepted) You can also follow and unfollow other users by clicking on the follow button on their profile page, making the platform feel more like a social media/community If you and another account are following each other mutually, you will become friends and unlock additional features (coming soon!) Refactored some code to make everything more modular and optimized"}, {"post_id": 4558, "ts": "2026-06-07T22:03:14Z", "hours": 1.5661, "text": "Additions and Changes Added the tags tab which displays all the tags created on the platform, and each tag has a number showing the number of memes it has and takes you to its own page with its memes displayed Added individual tag pages that shows all the memes categorized under a tag and the user that created it Added the meme card component that shows the meme’s title, author, upload date, and image, and clicking on it takes you to the meme page Features like filtering, sorting, and searching for memes for a specific tag are coming soon! Added user pages that takes in a user’s username as the param and displays the account’s memes and other data If you’re viewing your own profile, you can see options for signing out, deleting the account (with a confirmation dialog), and editing the profile Username is used as param instead of user id to be more human friendly Added static and dynamically generated SEO for the new pages Updated the navigation bar and footer links Removed the profile page since it got replaced by the user page"}, {"post_id": 3298, "ts": "2026-06-06T04:56:02Z", "hours": 2.5442, "text": "Additions & Changes This is a pretty big update, so a lot of stuff has been added and improved :) Added comments so signed in users can post plaintext comments using the comment field under every meme Comment threading and liking will be added soon to milk more hours improve community engagement features You can also see other people’s comments, see when it’s posted, and go to their profile A signin button is shown instead of the comment box if you’re not signed in Improved tags a lot, you can now add custom tags and use either the main ones (marked by a star icon) or custom tags other people or you created to make categorization easier Added input validation and required fields for posting memes to prevent errors Added and updated a lot of models and types to make everything more type safe and complete Updated navigation and styling This is my 5th time trying to post this devlog, I had to compress the video hopefully it works this time"}, {"post_id": 2545, "ts": "2026-06-05T02:49:37Z", "hours": 1.635, "text": "Additions & Changes Added file storage/upload and made the backend for posting a meme work so you can now actually upload an image, give it a name and description, assign it tags, and post it as its own public page! Learned how to work with UploadThing and used it as MemeBoard’s file storage service Added the meme page that fetches and shows all the meme’s data as well as who posted it, with a link to their profile (to be implemented) The meme page also generates SEO dynamically Added the memes page that’s just a placeholder for now where you will be able to browse through and explore all the memes Added a meme Prisma model with a user relation as well as custom types Improved navigation, redirects, and overall user experience Happy birthday daniel (I’m not a larper I watched the entirety of Peak:Zero)"}, {"post_id": 2457, "ts": "2026-06-04T23:08:36Z", "hours": 1.9033, "text": "Additions & Changes Added a post page with a beautiful form where you can input a title, select tags, upload PNG, JPG, or GIF, and provide a description for your meme You can search for tags in the custom tag selection modal that pops up when you click on the select tags button or one of the tags Added the meme type and updated some other types and auth stuff Added a simple footer with credits, navigation links, and the GitHub link The post page doesn’t work yet, it’s just a pretty frontend component (for now) Updated styling My future devlogs will all follow this bullet list format (hopefully the markdown layout turns out alright) to improve readability and storytelling :)"}, {"post_id": 1743, "ts": "2026-06-03T22:36:02Z", "hours": 2.0625, "text": "Basically finished the entire auth system with the Better Auth library, and users can now both sign in and sign up with credentials (email, username, display name, and password) or from a social provider using OAuth (Google and GitHub). I haven’t set up this library or the OAuth services in quite a while so I had to spend some time refiguring everything out and configuring all the different stuff. A username is also automatically assigned if you sign up with email. Added a backend and connected the Neon Postgres database as well."}, {"post_id": 1150, "ts": "2026-06-03T00:12:57Z", "hours": 1.4411, "text": "My first devlog on Stardance!!! Time to work my butt off this entire summer :) I’m making this meme exploring/sharing platform where you can browse the most popular memes or upload them yourself. I set up the basic Next.js project and the dependencies, added some pages and components, and made a pretty nice login/signup form (nothing works right now). Also deployed the site on Vercel."}]...
|
Title: MemeBoard by @tonymac129 | Stardance
Devlo Title: MemeBoard by @tonymac129 | Stardance
Devlogs:
My first devlog on Stardance!!! Time to work my butt off this entire summer :) I’m making this meme exploring/sharing platform where you can browse the most popular memes or upload them yourself. I set up the basic Next.js project and the dependencies, added some pages and components, and made a pretty nice login/signup form (nothing works right now). Also deployed the site on Vercel.
Basically finished the entire auth system with the Better Auth library, and users can now both sign in and sign up with credentials (email, username, display name, and password) or from a social provider using OAuth (Google and GitHub). I haven’t set up this library or the OAuth services in quite a while so I had to spend some time refiguring everything out and configuring all the different stuff. A username is also automatically assigned if you sign up with email. Added a backend and connected the Neon Postgres database as well.
Additions & Changes Added a post page with a beautiful form where you can input a title, select tags, upload PNG, JPG, or GIF, and provide a description for your meme You can search for tags in the custom tag selection modal that pops up when you click on the select tags button or one of the tags Added the meme type and updated some other types and auth stuff Added a simple footer with credits, navigation links, and the GitHub link The post page doesn’t work yet, it’s just a pretty frontend component (for now) Updated styling My future devlogs will all follow this bullet list format (hopefully the markdown layout turns out alright) to improve readability and storytelling :)
Additions & Changes Added file storage/upload and made the backend for posting a meme work so you can now actually upload an image, give it a name and description, assign it tags, and post it as its own public page! Learned how to work with UploadThing and used it as MemeBoard’s file storage service Added the meme page that fetches and shows all the meme’s data as well as who posted it, with a link to their profile (to be implemented) The meme page also generates SEO dynamically Added the memes page that’s just a placeholder for now where you will be able to browse through and explore all the memes Added a meme Prisma model with a user relation as well as custom types Improved navigation, redirects, and overall user experience Happy birthday daniel (I’m not a larper I watched the entirety of Peak:Zero)
Additions & Changes This is a pretty big update, so a lot of stuff has been added and improved :) Added comments so signed in users can post plaintext comments using the comment field under every meme Comment threading and liking will be added soon to milk more hours improve community engagement features You can also see other people’s comments, see when it’s posted, and go to their profile A signin button is shown instead of the comment box if you’re not signed in Improved tags a lot, you can now add custom tags and use either the main ones (marked by a star icon) or custom tags other people or you created to make categorization easier Added input validation and required fields for posting memes to prevent errors Added and updated a lot of models and types to make everything more type safe and complete Updated navigation and styling This is my 5th time trying to post this devlog, I had to compress the video hopefully it works this time
Additions and Changes Added the tags tab which displays all the tags created on the platform, and each tag has a number showing the number of memes it has and takes you to its own page with its memes displayed Added individual tag pages that shows all the memes categorized under a tag and the user that created it Added the meme card component that shows the meme’s title, author, upload date, and image, and clicking on it takes you to the meme page Features like filtering, sorting, and searching for memes for a specific tag are coming soon! Added user pages that takes in a user’s username as the param and displays the account’s memes and other data If you’re viewing your own profile, you can see options for signing out, deleting the account (with a confirmation dialog), and editing the profile Username is used as param instead of user id to be more human friendly Added static and dynamically generated SEO for the new pages Updated the navigation bar and footer links Removed the profile page since it got replaced by the user page
Additions & Changes You can now edit your account information and customize your own profile by clicking on the edit profile button on the page, which shows a edit form modal! You can change your display name to anything you want, your username to anything that’s not already taken (since it’s used as the param account identifier), and upload a custom profile image (PNG, JPG, and GIF are all accepted) You can also follow and unfollow other users by clicking on the follow button on their profile page, making the platform feel more like a social media/community If you and another account are following each other mutually, you will become friends and unlock additional features (coming soon!) Refactored some code to make everything more modular and optimized
Additions & Changes When you click on a user’s followers and following on their profile page, a new modal pops up with 2 tabs, followers and following, that shows the accounts they’re currently following/being followed There’s also a search bar that lets you search through the listed users to find people more easily and makes it feel a lot more like Instagram If you are following someone who follows you back (mutual follows), you are automatically added as friends, which shows up as a section on the main profile display area You will be able to send messages through a real-time chat with friends in the future! Added the chat tab that’s just a placeholder page for now Added dynamic SEO Updated navigation and styling
Additions & Changes Added a voting system for memes (sort of like a rip off Reddit) where you can upvote, downvote, or remove your vote by clicking on the arrows You can also see the total vote count of the meme in real time to see its popularity The upvote/downvote buttons are displayed below the meme, along with the save and share buttons that will work soon Added an optional original source field for posting a meme to link where you got the original image from A link icon now shows up on the meme page if you provided the source link so people can see the original post and author Updated styling and navigation Updated schema and types
Additions & Changes Added saving memes to collections so other than voting you can curate, organize, and categorize your own custom lists of memes! When you click on the save option, a modal pops up showing collections you created and a button that lets you add new collections, as well as a search bar for the collections You can also see how many memes are currently saved in the selections When you click save, the option shows the saved state and displays how many collections the meme is saved in You can only save memes to collections you created Added a new user profile section for collections, but it currently doesn’t show anything yet Updated schema and types and learned some new relational database and Prisma concepts
Collection pages, sharing, and reporting Added a main collection tab that displays all the meme collections users created (not just yours), and you can access the page with a header link on the profile page Each collection card either shows a gray rectangle if there’s no meme or a stack of images with a preview image on top if there’s multiple memes When you click on a collection, it takes you to its own page where its name, creator, and all the memes are displayed Collections a user created are also displayed on their profile page in a new section The share button shows a sharing modal where you can either share the meme to your friends (doesn’t work yet, will be integrated with chat), copy the link and send it somewhere else, or report it If you choose report or click on the report option, another modal shows up where you can select report reasons and provide additional feedback Added new schemas and types Updated navigation and styling
Comment likes and replies You can now like meme comments (and comment replies since they’re counted as normal comments) by clicking on the heart icon on each comment You can also see how many people liked the comment When you click on the reply option on a comment, an input field for your reply and post/cancel buttons show up for you to post your reply The replies show up as nested inside their parent comments to show the discussion flow, and you can technically thread replies infinite levels deep Spent a ton of time trying to figure out how to generate the threaded tree structure, tried recursion and loops and ended up using hashmaps and pointers to nest parent/child comments (I was not locked in while making the algorithm because of the finals I was going to have the next day) Updated schema and styling
Searching, sorting, and filtering memes Added a search bar, a sorting dropdown, a filtering by time and creator dropdown, a tag dropdown (doesn’t work yet, coming soon), and a number of items dropdown on the explore memes page to make finding and browsing new memes a lot more easier The search bar searches by the meme’s title and only searches when you submit the form to improve performance You can sort by best, which sorts by positive/negative vote ratio, top, which sorts by raw upvote count, and new, which sorts by recency You can filter by time range (now, day, week, and all), memes your friends posted, and memes you posted You can choose to show 5, 10, 25, or 50 memes at a time Added a custom dropdown component for the dropdowns with nice UX MemeBoard is now even closer to being a Reddit clone, I took a lot of inspiration from its features except my sorting/filtering is mainly frontend, which is not good practice but I’m too lazy to implement API endpoints for fetching memes Refactored the upvoting/downvoting component and logic so it directly communicates with the backend rather than using a hook to make it more modular and performant Meme cards now show the voting component and vote count I’m almost finished with the meme aspect of this project, the next big part is the realtime chat and sharing with friends and MemeBoard will be finished! I should probably stop using aura monster as the test meme, it’s starting to become corny :(
Massive update: chat Added realtime chat where you can send and receive text messages with almost no latency to/from your friends on MemeBoard! The base layout of all the chat pages has a sidebar of the left that displays all your friends, and clicking on them takes you to the different direct message channels On each chat channel page, you can see your friend’s profile picture, username, and number of followers/following at the top, similar to TikTok’s chat Your friend’s messages show up on the left while yours are highlighted and on the right, similar to texts, and each message has a timestamp Integrated a Redis database for quick message retrieval, caching, and ease of use for the Upstash realtime library that uses Web Socket under the hood to push realtime updates/events to send and update messages in realtime I already made a much simpler chat app but with a slightly different backend stack a while ago, so it wasn’t that difficult rewriting everything in Next.js and adding additional features There are actually a lot of considerations and logic that go into making a chat app that you normally wouldn’t think of unless building your own chat, so this was an interesting and fun experience coming up with solutions for unexpected problems Updated schema and types I’ll actually optimize the site and implement responsive design after the main app is finished, so the current layout looks terrible on small screens and I apologize for the terrible layout in the video
Meme sharing and more chat features! I sort of got carried away with this chat feature thing so MemeBoard is now a weird combination of Reddit and Discord instead of the original meme platform I planned it to be When you click on the share button on a meme page and open the sharing modal, you can now see all your friends listed and you can select who to send the meme to, as well as an optional message This actually sends a message to the chat with your friend, and it shows up as an embedded preview meme with its creator, title, image, and number of likes/comments/shares displayed Clicking on the embed preview takes you to the actual meme page Added chat replies so when you click on the reply button next to your friend’s message, a box shows up above the input field showing the message you’re currently replying to When you send the message, a reply bar/message preview similar to Discord’s shows up above the message, and clicking on it scrolls the page to the original message and briefly highlights it, similar to Discord’s Messages are grouped together so message header info (sender, time, profile image…) only shows under certain circumstances (similar to Discord) for a cleaner and better UI Refactored how messages and their components are rendered/structured for better optimization and performance Added an API route for client components to fetch meme data from the database Updated schema and types Updated the styling of different chat pages I forgot to make devlogs, so this devlog is pretty long Sorry again for the terrible layout in the video, my lazy bum hasn’t started on responsive styling yet, so the windows are compressed
Editing/deleting posts & more chat features! Added an option button on the top right of the meme pages you posted which when clicked displays a menu that lets you edit or delete the post Clicking on the edit option takes you to a dedicated post editing page where you can edit the title, tags, description, and source link and reupload the image of the meme (metadata, comments, and everything else remains unchanged), and clicking save takes you back to the newly edited page Clicking on the delete option shows a confirmation modal/dialog warning you, and if you press delete all the meme’s data will be permanently deleted and you get redirected back to the memes pages A similar option menu button is also added to the top right corner of your comment, where you can edit (a modal with an edit input field and buttons shows up) or delete (also has a confirmation dialog) the comment You can now also edit your own messages (only the text and not what you’re replying or the embedded meme), when you click on the edit message button a modal with an edit input pops up, and the edited message is updated in realtime You can now react to both yours or your friends messages to express what you think! When you click on the react button an emoji menu shows up where you can browse for the emoji you want Reactions and their counters update in realtime and you can remove the reaction by clicking on it again (the feature works exactly how all messaging apps’ reactions work) After you press on the share meme button when sharing to a friend, the button now becomes a link that takes you to the chat where you can see the message Updated schema and types Updated styling I kinda forgot to make more devlogs again, so this one is another massive wall of text covering a ton of different features. The video is also 2 minutes so I had to compress it to upload 😭 I promise I’ll try to keep future devlogs shorter and more focused :)
Responsive design Finally added responsive design to all pages on the platform so MemeBoard works properly and the layout stays organized and visually appealing for all screen sizes! Added a menu button that shows up when the screen size is smaller than a certain width, which when clicked opens a sidebar that slides in from the left containing all the links. This declutters the layout while improving the UX of the app Added a search bar to the tags page where you can search all the tags people created and browse memes more easily Refactored code for some UI elements to make everything more optimized and clean Fixed chat layout UI breaking with excessively long messages Added some minor styling adjustments
Collection features & cleanup Similar to the meme page, when you view the page of a collection you created, there is an options icon that when clicked, opens a menu where you can edit or delete the collection If you press on edit, an edit modal pops up where you can edit the name and select which memes should be in the collection If you press on delete, a warning modal shows up, and if you press delete the collection will be permanently deleted Added a search bar on the main collections page where you can search for your own or other people’s collections Added the collections tab to the main nav bar and the footer to improve navigation You can now add a short public about me bio on your profile by clicking on the edit profile button that shows an input edit modal When you hover over your own messages, a delete button now shows up that lets you delete the message for both of you after a confirmation modal just like all the other delete functionalities You can undo the deletion by pressing on the undo button that shows up, which restores the message for both of you I spent most of my time on MemeBoard developing while logged in, so I wasn’t aware most of my pages were completely broken and returning errors if someone visited them while not being logged in, so I implemented a ton of conditionals and permission stuff for auth to make sure every page works properly or redirects to the login page When you’re not logged in, you can still use the app and browse memes, it’s just that a lot of features are unavailable Updated backend schema and types Updated styling Fixed a few bugs and issues caused by auth
Random quality of life features I think I’m almost finished with MemeBoard, so now I’m just making random small features that I skipped over earlier Added realtime chat message previews for each of your chats that shows the last message and who sent it on the left sidebar so it feels more like Discord and Slack Added a tag filtering dropdown on the Memes page where you can see all the tags, search for them, and choose one to see all the memes labeled with that tag. This makes it a lot easier to browse, filter, and find similar memes Added an options menu button to the tag page (that only shows if you’re the one who made the tag) similar to the button I added to a bunch of other pages. When clicked, it shows a menu with just a delete option that deletes the tag and removes its label from all the memes after a confirmation modal Added both dynamically generated SEO and static SEO to some pages that didn’t have it Updated styling and navigation
MemeBot & bug fixes Added MemeBot to everyone’s chat, so even if you haven’t friended someone on the platform you can still try out all the chat features since MemeBot also sends messages in realtime MemeBot isn’t actually another AI chatbot or anything, it just responds with a random hardcoded string message (very intelligent, i know) from the backend whenever a user sends it a message after a certain delay to simulate realtime chatting Since MemeBot isn’t actually a user, I had to modify the chatting system quite a bit and put a lot of extra conditionals and logic to ensure it works properly for both MemeBot and real users, and that was quite annoying to figure out Fixed an annoying caching bug where you had to refresh the entire chat page for realtime interactions to work properly when chatting with someone for the first time, otherwise the chat just froze. This took a long time to fix, but the UX is finally smooth and works well Fixed some issues of the chat related to auth and not being logged in Updated styling
More collections features You can now search, sort, and filter collections on the collections page to browse and explore public collections other people created! You can filter your friends’ and your own collections to make managing them easier You can now add an optional description describing what your collection is about, either on the add or edit collection modal You can now change the visibility of your collection to be either public or private, where public collections are displayed on your profile and the collections page for everyone to see, and only you can see your own private collections Added a new private collections section on your profile that only you can see it Added a create collection modal that shows up when you click on the button on the collections page to make creating collections easier Added a create tag modal that shows up when you click on the button on the tags page, but unlike collections you can only put the name of the tag since that’s the only thing a tag has Updated schema and types Updated styling and SEO
MemeBoard is back!!! I’ve been a lazy bum this entire summer and didn’t finish a single one of my more serious projects on Stardance before losing interest and moving on to a new idea, but now that the event is ending in a month (nooo ) I finally forced myself to come back and finish up/ship my old projects one by one School just started so I’ll hopefully still have enough time to ship most of my projects before October. Since no one has used MemeBoard at all in over 2 months, I had to upgrade some packages, resetup some deployment stuff, and reactivate the databases for everything to function normally I also spent some time getting familiar with the codebase again, so I didn’t make a lot of changes this update. I added a few quality of life features like sharing/reporting comments, homepage meme and chat sections, and user search for finding people to follow When you click on share for a comment, the share modal pops up listing all your friends that you can select to send the comment and a message to, as well as options to copy the link and to report it Comments show up as embedded text with the user and like count displayed, and clicking on it takes you to its location on the original meme page for easy viewing (definitely not stolen from TikTok ) When you click on add user on the chat page, it shows a modal where you can use the API to search for people to add as friends, making chatting and sharing memes more convenient Added recent, top, all time, friend memes, and recent chat sections to the homepage to make navigating the platform and browsing memes easier Added call to action buttons on the homepage hero to make using the site more intuitive Updated content and styling Updated MemeBot behavior Updated README Fixed chat deployment issue Did some miscellaneous stuff/improvements/fixes that I forgot
Light mode toggle Added a button on the nav bar that toggles the site’s entire appearance between dark and light mode to improve its customizability and accessibility Because every component has a default color transition, switching between the 2 modes has a smooth UI transition instead of flashing to the other color instantly I had to set up the theme provider and manually add the light mode Tailwind classes and the dark mode prefix for all the colors in every page and component, so this took quite a long time but the result was worth it, both modes look pretty consistent and visually appealing
Meme reactions, animations, and polishing Added reactions to memes (kind of similar to Reddit awards) so you can now choose an emoji to express what you think about the meme! There is a new React button on the meme bar that opens an emoji selection menu that lets you choose your reaction. You can see all the meme’s reactions sorted by number of users listed below the bar and can click on them to switch your reaction or unreact (since you can only react once) Reactions are anonymous, so you can only see the number of reactions with your own reaction highlighted Added subtle page transition animations to the layout and individual components to make navigation and user interactions a lot smoother and more aesthetically pleasing Added a 404 not found page with an occasional stylized glitching effect and buttons to go home or go back Added more detailed and dynamically generated OpenGraph metadata to improve SEO Updated backend Prisma schema and migrated database Updated types and styling Fixed a few display, light mode, and responsive design bugs MemeBoard is almost finished, it’ll probably be ready to ship after one final devlog and some polishing touches!!!
Final MemeBoard devlog! I finally finished MemeBoard after working on it over the past 3 months! I’ve implemented all the features I originally planned to make, as well as added a ton of other stuff to make the project interesting and fun to use I mostly just polished the project in this update, so there isn’t actually anything new other than the simple “m” logo/favicon I added to the nav bar and footer Added a top loading bar indicator to show the page is responsive and is actively loading since some pages take a bit of time to fetch data, and I’m too lazy to implement suspense/loading skeleton and all that Clicking on things that require the user to be signed in now redirects you to the sign in page so it’s more user friendly and not confusing Updated the README to document detailed information, all the features, setup instructions, and everything else about the project Fixed an annoying issue where MemeBot didn’t respond at all or took a long time by simply deleting an intentional timeout and the bug was somehow fixed Updated styling and layout components
Ships:
I finally finished making MemeBoard after periodically working on it over the past 3 months! MemeBoard is an accessible and easy to use fullstack online social platform for posting, sharing, and exploring all kinds of memes. There are many different post interaction features such as voting, commenting, saving, reacting, and sharing, it’s essentially a simple Reddit clone that’s exclusively for memes. You can browse, filter, and search through memes easily by choosing different sorting options and exploring the different tags and collections. It also has social features like following users and customizing your profile, as well as a full-featured realtime chat (mini Discord clone) where you can send content and chat with your friends or interact with MemeBot (which is not an LLM, it’s just a random thing I thought was fun to implement)! The entire website is also fully responsive and functional on all screen sizes with smooth loading and transition animations, and you can toggle between dark and light modes. I got bored of the project halfway through it to work on other stuff, but I ended up coming back more than a month later to finally finish everything and polish it to ship, and the final result is definitely very satisfying and rewarding for me, hopefully you’ll like it :)...
|
1793145153.3740416
|
1793231553.3740416
|
|
4028
|
Debugr.fun by @jamallyemin | Stardance
|
jamallyemin
|
2
|
25.68
|
270
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T21:22:25Z", "hours": 10.0, "multiplier": 17.57, "payout": 171, "blessing": "neutral", "text": "helo!! shipping this one — it’s the variable game, ranked edition. you write python-like code to satisfy a growing set of rules before a timer starts deleting it from the bottom, one line a second, unless you sync in time. play solo, or host/join a private room and race friends live for the leaderboard. the biggest thing I’m proud of is taskEngine.js — instead of hand-writing 25 fixed rules like the old version, it builds a hidden random solution first and derives every rule from a real fact about it (its actual sum, its actual length, etc), so no matter how many rules stack together they can never contradict each other. infinite non-repeating tasks out of that one trick. hardest part honestly wasn’t the game logic, it was wiring firebase up for real — nicknames, live rooms, race winners decided by firestore transactions so two people submitting at the same millisecond still only lets one through. spent lots of time chasing dumb stuff too. to test it: pick a difficulty and start typing variable assignments, or open two tabs and try hosting + joining a room to see the live race work. note : this project is obviously not perfect but I will try to improve this project and make it an actual kind of web browser game, so feedbacks , bug reports, and suggestions would be really helpful and appreciated", "repo": "https://github.com/jamallyemin/Debugr.fun", "demo": "https://debugr.fun/"}, {"ship_num": 2, "ts": "2026-06-03T23:50:06Z", "hours": 6.0, "multiplier": 15.96, "payout": 99, "blessing": "neutral", "text": "made a browser puzzle where you write Python-like variable assignments to satisfy 25 rules simultaneously - think neal.fun’s password game but for code. rules unlock one by one and start contradicting each other the deeper you go. most proud of the destruction mode. when the 45s timer hits zero the editor gets a red caret and starts deleting your code line by line from the bottom until you hit sync. it creates this genuine panic that felt fun to build. hardest part was making all 25 rules mathematically solvable at the same time. some rules override earlier ones so you keep rewriting the same lines - getting that supersession logic right without breaking the win condition took a while. to test it: just start typing variables. x = 5 will get you past rule 1. it gets weird around rule 7.", "repo": "https://github.com/jamallyemin/Debugr.fun", "demo": "https://debugr.fun/"}]...
|
[{"post_id": 83203, "ts": "202 [{"post_id": 83203, "ts": "2026-10-27T10:04:13Z", "hours": 5.3206, "text": "it’s finally done ( for now), and I finished basically everything I said I’d add last time ^_^ finished : daily challenge: it’s on the main menu now with a countdown, press D to play it. everyone gets the exact same task each day (I seed math.random from the date while taskEngine builds it, so it comes out identical for every player). it alternates between medium and hard, ranked by time, and only your first clear of the day counts, replays are just practice. there’s a copy result button too profile pictures: 5 animals (bug, cat, fox, owl, snake). you unlock them by clearing tasks, doing a daily, and clearing puzzle levels. other players see yours next to your name in lobbies, the leaderboard and the rankings. the pixel art is ai generated btw (chatgpt), I can’t draw I’m sorry keyboard control: esc goes back on every screen, ? shows all the shortcuts, 1/2/3 pick a difficulty. I also added tiny key badges on every button (esc, enter,ctrl+s..) so you can actually see the shortcuts, and there’s a switch in settings to hide them if you hate them sound effects: all web audio api, no audio files, with volume and an on/off in settings also finished cloud save: you can link a google account and your progress (puzzles, stats, avatar, streak) backs up, and signing in on a new device restores it. and the feedback form works now, it saves to firestore and emails me. for some reason I couldn’t set up the logo and change name on log in page but i’ll just do that in the future updates I guess new stuff: the whole page is zoomed a bit on big screens cuz it felt too small tutorial spotlight is fixed for the zoom (it was drawing in the wrong spot) bugs I found: pressing 1 on the menu was handled twice, so it skipped the difficulty screen and instantly started an easy game, and pressing 2 created a room by itself hosting a room a second time showed the old room code game screen was too short on some screens and on phones the puzzle output got pushed off the bottom also I had to use claude to learn coding the mulberry32, math in theme.js, and for debugging it’s finally feeling like an actual game now!! still not perfect so if you find bugs there’s a feedback button in settings, I read all of them :3"}, {"post_id": 80164, "ts": "2026-10-16T14:16:17Z", "hours": 4.3622, "text": "helo again!! it’s been a while, but I finally came back to this and added a bunch of stuff ^_^ the biggest one is puzzles. it’s a roadmap like chess.com’s, with 3 tracks: syntax (fix the broken code), complete (fill in the blanks) and typefix (fix the type errors). levels never run out, just like taskEngine.js. I wrote a tiny python interpreter (pyeval.js) to check the answers instead of loading pyodide, so there’s nothing heavy to download. there’s also a puzzle streak and a top 3 solvers for today / this week. added: themes: light mode, plus a custom theme maker where you pick your own colors (the old amber and cold signal presets are gone) settings: sfx on/off + volume, CRT scanlines on/off, theme, cloud save with an optional google link, and a feedback form will add: daily challenge: one task a day, same for everyone, ranked by time. it sits on the main menu with a countdown, press D to play it profile pictures: you unlock them by clearing puzzles and winning on different difficulties, and other players can see yours next to your name (the pixel art is still placeholder, I’m drawing the real ones later) keyboard control: esc goes back on every screen, and ? shows all the shortcuts sound effects: all made with the web audio api, no audio files most of these are half done, I just have to finish coding some of the javascript files and make sure everything runs perfectly! it’s still not perfect but it feels way more like an actual game now. if you find bugs or have ideas, there’s a feedback button in settings, I will read all of them!! :3 i forgot to add I changed the game’s name from The Variable Game to Debugr.fun cuz kewler.. and I got domain ^-^"}, {"post_id": 63184, "ts": "2026-09-06T21:05:08Z", "hours": 0.81, "text": "helo!! continuing from last time — taskEngine.js is done, and lobby/live-race is actually talking to firebase properly now too. this is it, the project’s finished!! taskEngine.js works backwards instead of using hardcoded rules like the old 25-rule version did: it builds a random hidden “reference solution” first (variable names, numbers, strings, a list), then derives every rule from a real fact about that solution — its actual sum, its actual length, whether one number happens to be prime, etc. since every rule comes from the same solution, they can never contradict each other no matter how many stack together. difficulty just controls how many rules get pulled from the pool (1 easy / 3 medium / 5 hard), and it keeps a history per difficulty so the same combo won’t repeat until the pool’s exhausted. wiring it all together turned up a bunch of small but annoying bugs, mostly not taskEngine’s fault directly: two separate filename casing mismatches (taskEngine.js and firebaseClient.js) — the script tags in index.html didn’t match the actual filenames on disk exactly, fine on windows locally but the dev server (and github pages) treat urls as case-sensitive, so both files were silently 404ing and breaking everything downstream config.js had the firebase config saved under the wrong variable name, so firebase never actually initialized and threw a reference error instead the join-a-room screen was stacking the code input + join button on top of the waiting room instead of hiding them after a successful join, looked broken even when it technically wasn’t rooms never got cleaned up in firestore after cancelling out of one, so an old room code could still say “already started” if you landed on it again later — fixed leaveRoom so the host actually deletes the room on the way out now singleplayer, hosting/joining rooms, live races, the leaderboard, streaks, and the tutorial all work end to end now. and it’s ready to be shipped!!"}, {"post_id": 61742, "ts": "2026-09-04T20:00:37Z", "hours": 3.1894, "text": "helo again!! so after the menu frontend was done last time, spent this session wiring up js to actually make it functional instead of just sitting there as styled html. added: script.js: screen switching between menu/difficulty/lobby/game, the nickname + tutorial onboarding flow, and the actual game loop (timer, save/sync, destruction mode) parser.js : reads whatever gets typed into the editor and pulls out the variables firebaseClient.js: nicknames, scores, streaks, and the room/live-race logic for multiplayer tutorial.js: the spotlight walkthrough for first-time visitors config.js: firebase config + local player state caching taskEngine.js is still on the list, saved it for last since everything else needed to be working first before it made sense to build. tested what’s done so far end to end and caught a handful of small bugs along the way (some css that wasn’t applying, a couple html typos) which I fixed too. next up: taskEngine.js, then getting the lobby/live-race stuff talking to firebase properly ^_^"}, {"post_id": 58238, "ts": "2026-08-30T16:28:08Z", "hours": 3.4475, "text": "helo again!! so quick update on the main menu I mentioned last time: the frontend for it is completely done now!! :Di finished styling the whole thing, here is what’s ready on the screen right now:main buttons for singleplayer, host/join private rooms, and leaderboard ([1] to [4])top bar with day streak tracker and runtime status boxclean footer for how to play & source links now that the main menu frontend is out of the way and not looking like raw HTML anymore, I’m finally moving on to the backend logic for lobbies and real-time multiplayer!! :>"}, {"post_id": 52335, "ts": "2026-08-22T13:20:15Z", "hours": 2.2828, "text": "helo!! so I kinda decided to start all over and improve this game because I like torturing myself, I wanted to make the game multiplayer, less boring, so I removed the old simple looking single editor page and now replacing it with a main menu screen!! here players will be able to: host and join private lobbies and play with their friends; play by themselves or play online!! :D so with these new features I decided to add a leaderboard too in order to make it more competitive, leaderboard will consist win streak , best times!! and wins !! also added diff levels so easy, medium, hard are a thing now :>"}, {"post_id": 1777, "ts": "2026-06-03T23:41:41Z", "hours": 2.6764, "text": "script.js is done. parser reads whatever you type and pulls out strings, numbers, and lists - inline and multiline. 25 rules with a supersession system so later rules can step on earlier ones without creating impossible states. progressive unlock, 45s countdown, sync button, destruction mode that eats your code line by line from the bottom when the timer runs out."}, {"post_id": 929, "ts": "2026-06-02T17:59:06Z", "hours": 3.0431, "text": "the layout skeleton is officially complete now that style.css is implemented. i went for a dark, high-contrast, brutalist terminal look to match the puzzle theme. here are the key UI updates: custom scrollbar: added a minimal 4px scrollbar to the rules list so it blends perfectly into the sidebar unlock animations: handled the transitions for .rule-item. when a rule becomes visible, it smoothly fades in and slides up into place using transform: translateY(6px) to 0. editor grid algnment: synced the code canvas layout, line numbers, and preview panels so the split-view remains perfectly aligned across different workspace sizes. the interface looks clean now, so next up i’m wiring the actual parser and the rule engine in script.js to make it work. :3"}, {"post_id": 615, "ts": "2026-06-02T03:36:14Z", "hours": 0.4664, "text": "just finished the index.html skeleton. as you can see on the right panel, the embedded preview is currently completely raw and unstyled because style.css is literally a blank file right now. looks like a broken 90s blog. now I’ll move on to style.css so my eyes don’t bleed from this ugly white screen… but I think the structure of .html is fine"}]...
|
Title: Debugr.fun by @jamallyemin | Stardance
Dev Title: Debugr.fun by @jamallyemin | Stardance
Devlogs:
just finished the index.html skeleton. as you can see on the right panel, the embedded preview is currently completely raw and unstyled because style.css is literally a blank file right now. looks like a broken 90s blog. now I’ll move on to style.css so my eyes don’t bleed from this ugly white screen… but I think the structure of .html is fine
the layout skeleton is officially complete now that style.css is implemented. i went for a dark, high-contrast, brutalist terminal look to match the puzzle theme. here are the key UI updates: custom scrollbar: added a minimal 4px scrollbar to the rules list so it blends perfectly into the sidebar unlock animations: handled the transitions for .rule-item. when a rule becomes visible, it smoothly fades in and slides up into place using transform: translateY(6px) to 0. editor grid algnment: synced the code canvas layout, line numbers, and preview panels so the split-view remains perfectly aligned across different workspace sizes. the interface looks clean now, so next up i’m wiring the actual parser and the rule engine in script.js to make it work. :3
script.js is done. parser reads whatever you type and pulls out strings, numbers, and lists - inline and multiline. 25 rules with a supersession system so later rules can step on earlier ones without creating impossible states. progressive unlock, 45s countdown, sync button, destruction mode that eats your code line by line from the bottom when the timer runs out.
helo!! so I kinda decided to start all over and improve this game because I like torturing myself, I wanted to make the game multiplayer, less boring, so I removed the old simple looking single editor page and now replacing it with a main menu screen!! here players will be able to: host and join private lobbies and play with their friends; play by themselves or play online!! :D so with these new features I decided to add a leaderboard too in order to make it more competitive, leaderboard will consist win streak , best times!! and wins !! also added diff levels so easy, medium, hard are a thing now :>
helo again!! so quick update on the main menu I mentioned last time: the frontend for it is completely done now!! :Di finished styling the whole thing, here is what’s ready on the screen right now:main buttons for singleplayer, host/join private rooms, and leaderboard ([1] to [4])top bar with day streak tracker and runtime status boxclean footer for how to play & source links now that the main menu frontend is out of the way and not looking like raw HTML anymore, I’m finally moving on to the backend logic for lobbies and real-time multiplayer!! :>
helo again!! so after the menu frontend was done last time, spent this session wiring up js to actually make it functional instead of just sitting there as styled html. added: script.js: screen switching between menu/difficulty/lobby/game, the nickname + tutorial onboarding flow, and the actual game loop (timer, save/sync, destruction mode) parser.js : reads whatever gets typed into the editor and pulls out the variables firebaseClient.js: nicknames, scores, streaks, and the room/live-race logic for multiplayer tutorial.js: the spotlight walkthrough for first-time visitors config.js: firebase config + local player state caching taskEngine.js is still on the list, saved it for last since everything else needed to be working first before it made sense to build. tested what’s done so far end to end and caught a handful of small bugs along the way (some css that wasn’t applying, a couple html typos) which I fixed too. next up: taskEngine.js, then getting the lobby/live-race stuff talking to firebase properly ^_^
helo!! continuing from last time — taskEngine.js is done, and lobby/live-race is actually talking to firebase properly now too. this is it, the project’s finished!! taskEngine.js works backwards instead of using hardcoded rules like the old 25-rule version did: it builds a random hidden “reference solution” first (variable names, numbers, strings, a list), then derives every rule from a real fact about that solution — its actual sum, its actual length, whether one number happens to be prime, etc. since every rule comes from the same solution, they can never contradict each other no matter how many stack together. difficulty just controls how many rules get pulled from the pool (1 easy / 3 medium / 5 hard), and it keeps a history per difficulty so the same combo won’t repeat until the pool’s exhausted. wiring it all together turned up a bunch of small but annoying bugs, mostly not taskEngine’s fault directly: two separate filename casing mismatches (taskEngine.js and firebaseClient.js) — the script tags in index.html didn’t match the actual filenames on disk exactly, fine on windows locally but the dev server (and github pages) treat urls as case-sensitive, so both files were silently 404ing and breaking everything downstream config.js had the firebase config saved under the wrong variable name, so firebase never actually initialized and threw a reference error instead the join-a-room screen was stacking the code input + join button on top of the waiting room instead of hiding them after a successful join, looked broken even when it technically wasn’t rooms never got cleaned up in firestore after cancelling out of one, so an old room code could still say “already started” if you landed on it again later — fixed leaveRoom so the host actually deletes the room on the way out now singleplayer, hosting/joining rooms, live races, the leaderboard, streaks, and the tutorial all work end to end now. and it’s ready to be shipped!!
helo again!! it’s been a while, but I finally came back to this and added a bunch of stuff ^_^ the biggest one is puzzles. it’s a roadmap like chess.com’s, with 3 tracks: syntax (fix the broken code), complete (fill in the blanks) and typefix (fix the type errors). levels never run out, just like taskEngine.js. I wrote a tiny python interpreter (pyeval.js) to check the answers instead of loading pyodide, so there’s nothing heavy to download. there’s also a puzzle streak and a top 3 solvers for today / this week. added: themes: light mode, plus a custom theme maker where you pick your own colors (the old amber and cold signal presets are gone) settings: sfx on/off + volume, CRT scanlines on/off, theme, cloud save with an optional google link, and a feedback form will add: daily challenge: one task a day, same for everyone, ranked by time. it sits on the main menu with a countdown, press D to play it profile pictures: you unlock them by clearing puzzles and winning on different difficulties, and other players can see yours next to your name (the pixel art is still placeholder, I’m drawing the real ones later) keyboard control: esc goes back on every screen, and ? shows all the shortcuts sound effects: all made with the web audio api, no audio files most of these are half done, I just have to finish coding some of the javascript files and make sure everything runs perfectly! it’s still not perfect but it feels way more like an actual game now. if you find bugs or have ideas, there’s a feedback button in settings, I will read all of them!! :3 i forgot to add I changed the game’s name from The Variable Game to Debugr.fun cuz kewler.. and I got domain ^-^
it’s finally done ( for now), and I finished basically everything I said I’d add last time ^_^ finished : daily challenge: it’s on the main menu now with a countdown, press D to play it. everyone gets the exact same task each day (I seed math.random from the date while taskEngine builds it, so it comes out identical for every player). it alternates between medium and hard, ranked by time, and only your first clear of the day counts, replays are just practice. there’s a copy result button too profile pictures: 5 animals (bug, cat, fox, owl, snake). you unlock them by clearing tasks, doing a daily, and clearing puzzle levels. other players see yours next to your name in lobbies, the leaderboard and the rankings. the pixel art is ai generated btw (chatgpt), I can’t draw I’m sorry keyboard control: esc goes back on every screen, ? shows all the shortcuts, 1/2/3 pick a difficulty. I also added tiny key badges on every button (esc, enter,ctrl+s..) so you can actually see the shortcuts, and there’s a switch in settings to hide them if you hate them sound effects: all web audio api, no audio files, with volume and an on/off in settings also finished cloud save: you can link a google account and your progress (puzzles, stats, avatar, streak) backs up, and signing in on a new device restores it. and the feedback form works now, it saves to firestore and emails me. for some reason I couldn’t set up the logo and change name on log in page but i’ll just do that in the future updates I guess new stuff: the whole page is zoomed a bit on big screens cuz it felt too small tutorial spotlight is fixed for the zoom (it was drawing in the wrong spot) bugs I found: pressing 1 on the menu was handled twice, so it skipped the difficulty screen and instantly started an easy game, and pressing 2 created a room by itself hosting a room a second time showed the old room code game screen was too short on some screens and on phones the puzzle output got pushed off the bottom also I had to use claude to learn coding the mulberry32, math in theme.js, and for debugging it’s finally feeling like an actual game now!! still not perfect so if you find bugs there’s a feedback button in settings, I read all of them :3
Ships:
made a browser puzzle where you write Python-like variable assignments to satisfy 25 rules simultaneously - think neal.fun’s password game but for code. rules unlock one by one and start contradicting each other the deeper you go. most proud of the destruction mode. when the 45s timer hits zero the editor gets a red caret and starts deleting your code line by line from the bottom until you hit sync. it creates this genuine panic that felt fun to build. hardest part was making all 25 rules mathematically solvable at the same time. some rules override earlier ones so you keep rewriting the same lines - getting that supersession logic right without breaking the win condition took a while. to test it: just start typing variables. x = 5 will get you past rule 1. it gets weird around rule 7.
helo!! shipping this one — it’s the variable game, ranked edition. you write python-like code to satisfy a growing set of rules before a timer starts deleting it from the bottom, one line a second, unless you sync in time. play solo, or host/join a private room and race friends live for the leaderboard. the biggest thing I’m proud of is taskEngine.js — instead of hand-writing 25 fixed rules like the old version, it builds a hidden random solution first and derives every rule from a real fact about it (its actual sum, its actual length, etc), so no matter how many rules stack together they can never contradict each other. infinite non-repeating tasks out of that one trick. hardest part honestly wasn’t the game logic, it was wiring firebase up for real — nicknames, live rooms, race winners decided by firestore transactions so two people submitting at the same millisecond still only lets one through. spent lots of time chasing dumb stuff too. to test it: pick a difficulty and start typing variable assignments, or open two tabs and try hosting + joining a room to see the live race work. note : this project is obviously not perfect but I will try to improve this project and make it an actual kind of web browser game, so feedbacks , bug reports, and suggestions would be really helpful and appreciated...
|
1793105311.4815369
|
1793191711.4815369
|
|
59105
|
monochrome by @jworden | Stardance
|
jworden
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T20:50:21Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a monochrome themed-minimalistic astronomy picture of the day site. the only challanges were getting the API to work, using vite, and getting my deploy.yml to work", "repo": "https://github.com/venjae/nasa-apod", "demo": "https://venjae.github.io/nasa-apod/"}]...
|
[{"post_id": 63160, "ts": "202 [{"post_id": 63160, "ts": "2026-09-06T20:08:04Z", "hours": 1.0028, "text": "finished site, minimalist monochrome theme"}]...
|
Title: monochrome by @jworden | Stardance
Devlogs Title: monochrome by @jworden | Stardance
Devlogs:
finished site, minimalist monochrome theme
Ships:
I made a monochrome themed-minimalistic astronomy picture of the day site. the only challanges were getting the API to work, using vite, and getting my deploy.yml to work...
|
1793119640.470043
|
1793206040.470043
|
|
37205
|
Neurorust by @toqtu | Stardance
|
toqtu
|
1
|
60.0
|
1254
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T20:32:48Z", "hours": 60.0, "multiplier": 17.4, "payout": 1254, "blessing": "neutral", "text": "Neurorust lets you train a simple neural network in your browser, using the GPU. The network predicts handwritten digits. After training you can draw your own digits and see its predictions. This project has tought me a lot about neural networks, Rust, GPU programming and WebAssembly. It was really challenging to produce a good result when just learning about everything. Even though the code is not perfect and there are a lot of things I would do different next time I feel like the end result has turned out quite well.", "repo": "https://github.com/fritl/neurorust", "demo": "https://neurorust.toqtou.me"}]...
|
[{"post_id": 63169, "ts": "202 [{"post_id": 63169, "ts": "2026-09-06T20:24:25Z", "hours": 4.1433, "text": "Done I added a README, improved the website defaults and did some final debugging. Now the project is ready to ship."}, {"post_id": 61056, "ts": "2026-09-03T19:23:48Z", "hours": 8.6478, "text": "Website finished I finished the frontend. You can now create a network with specific hyperparameters and then train it. After training you can draw a number and see what it predicts. Now I just need a good README and the project is ready to ship."}, {"post_id": 59056, "ts": "2026-08-31T17:25:19Z", "hours": 6.1647, "text": "Does it ever get easier? I thought using the network in the web would be a piece of cake. I was wrong. After fixing some minor issues I wrote some quick code to test training. It worked… technically. It was really slow and froze my whole pc. A quick glance into my system monitor revealed the secret. All CPU cores were almost maxed out while the GPU sat idle. So after spending a bunch of time to use the GPU everything was back to the CPU again. WebGPU is still experimental. Especially on Linux which is why instead of throwing an error when it couldn’t access my graphics card it just used all my CPU cores as a fallback. To get the GPU back into the game I started my browser with some flags and compatibility layers which makes training still slower than on native hardware but faster than with the CPU. Hopefully this was the last major challenge and implementing the frontend will be easier."}, {"post_id": 54637, "ts": "2026-08-25T17:43:42Z", "hours": 6.8453, "text": "It acutally learns (again) After some more pain with the loss function, buffer sizes and shape mismatches I got a neural network running on the gpu. The GPU is about 10x faster than the CPU version although some hyperparameters can affect this result. Now I want to build a small wasm interface and build a small web page around that to allow anyone to run a local neural net in the browser."}, {"post_id": 51621, "ts": "2026-08-21T12:20:16Z", "hours": 4.3658, "text": "GPU Layers I initially thought porting the forward and backward passes to the GPU would be as simple as replacing Matrix with GpuMatrix everywhere. It wasn’t. Unlike CPU operations, GPU operations can’t allocate memory themselves. On the CPU, x + 2 simply creates a new value. On the GPU, every operation needs a pre-existing buffer to write its result into. So x += 2 works, but y = x + 2 requires a buffer for y to exist first. And x = x + 2 isn’t supported on the GPU at all. The solution is to pre-allocate buffers and keep them around, resizing them only when the batch size changes. It works, but it also means every struct starts accumulating buffer fields and scaling that approach to an entire network only makes the problem worse. Next: some kind of global buffer manager, before tackling the loss function."}, {"post_id": 47481, "ts": "2026-08-15T12:37:59Z", "hours": 4.6719, "text": "Forward pass After adding all necessary operations on the GpuMatrix I implemented the forward pass. It was surprisingly hard to get the caching for the backward pass right because reallocating buffers on the gpu should be avoided. As always I let AI write some test cases and everything passed. Next I’ll implement the backward pass which will hopefully let the network learn with incredible speeds."}, {"post_id": 38223, "ts": "2026-07-31T14:55:33Z", "hours": 4.6517, "text": "GPU Matmul I thought beating the CPU at matrix multiplication would be easy. It turns out that hand-optimized assembly code is a tough opponent. My naive GPU version isn’t bad, though: it’s roughly on par with NumPy, and about 13x faster than my CPU code but still worse than I initially expected. There’s plenty of room to improve. Right now the GPU sits idle about 80% of the time, just waiting on memory reads. For now, I’ll keep building out the rest of the neural net on the GPU and come back to optimizing matmul later."}, {"post_id": 37145, "ts": "2026-07-29T17:08:59Z", "hours": 1.7775, "text": "Sidequest: Doubling numbers In my last devlog I stated that doubling numbers on the GPU is only faster if you want to double a HUUUGE amount of numbers. Of course I wanted to see at what point the GPU really is faster. I found out that the CPU is actually quite good at doubling numbers so the GPU wasn’t faster at all. I then measured just the time the GPU takes to double the numbers ignoring the time it needs to transfer the data. With that the GPU eventually overtakes the CPU."}, {"post_id": 36003, "ts": "2026-07-27T20:21:29Z", "hours": 2.0819, "text": "Doubling numbers Turns out you have to go back to square one to run a neural net on the GPU. For me that meant writing a program that multiplies every number in an array by 2, on the GPU. Limited learning resources Rust has a great library called wgpu for talking to the GPU. It’s cross-platform and can even run in WebAssembly if you do it right. The problem: most tutorials only cover rendering, and my neural net doesn’t care about triangles on a screen, it needs compute. I never found a tutorial on compute shaders from scratch, so I read the rendering material, stripped out what didn’t apply (windows, vertices, …), and added what did (workgroup size, how a compute pass works, …). Not trivial, but the official wgpu compute example got me on track. I mostly just copied it. Why it’s hard GPU programming isn’t straightforward. Here’s everything required just to multiply an array by 2: Get a wgpu instance , adapter , device , and queue Create a shader module Create the input , output , and download buffers Create the bind group layout and bind group Create the pipeline layout Create an encoder and a compute pass Copy data CPU → GPU , run the shader, then copy data GPU → CPU After 190 lines and some unexpected debugging (on code copied straight from an example, no less), I could finally double numbers fast, but only with huge arrays. Below a certain size, shuttling data to the GPU and back is slower than just doing the math on the CPU. I don’t fully understand every step yet. Hopefully I won’t need to, or I’ll pick it up along the way. Up next Matrix multiplication is next, and most of the boilerplate above should carry over. Big questions remain about the final network, but taking it one step at a time should get me there eventually… or to a complete surrender, who knows."}, {"post_id": 34824, "ts": "2026-07-25T20:39:43Z", "hours": 5.475, "text": "It actually learns After getting XOR working, I tried my neural net on MNIST (handwritten digit recognition). Loading the data was easier than expected, though getting it into the right shape for my network took some fiddling. To make sure I loaded it correctly, I drew a few of the digits to check they looked right before training. Once that was sorted, training worked well, and the results were better than I hoped: 97.8% accuracy , in about 5 minutes. I also experimented with running the whole thing in a browser, but that turned out to be more involved than expected, so I’m parking it for now and focusing on other improvements first."}, {"post_id": 32587, "ts": "2026-07-21T21:16:07Z", "hours": 7.3772, "text": "It learns (a bit) After implementing loss functions, activation functions, and the forward and backward pass for the layers, I tried training a simple network to predict the XOR function. After running the network, I found that it didn’t learn at all. The loss just stayed at 0.25 without any changes. Not only that, the whole neural network didn’t update anything. After some initial digging, I had a feeling this was one of those dumb, simple bugs you can’t find for hours. Unfortunately, my feeling was right: the error was multiplying the bias instead of adding it. This is really bad because the bias initially has a value of 0, which means all outputs turn out to be 0 (not good). Of course, the fix was a one character change: * to + . Now that the network can predict XOR, I’ll see if it can also handle MNIST. I’m still a bit scared about performance issues with matrix multiplication."}, {"post_id": 31187, "ts": "2026-07-19T12:03:17Z", "hours": 3.8625, "text": "Rust Learning Project: Building a Neural Network I recently read a few chapters of The Rust Programming Language and wanted to put my newly gained knowledge to use. Naturally, the first thing that came to mind was building a neural network in Rust. I’d already tried this in Python and failed, so I figured maybe, for some reason, it would go better this time around. Matmul The first step was implementing matrices and their operations in Rust, the most important of course being matrix multiplication. Since this would likely become the biggest bottleneck for the whole model, I got curious about its performance and benchmarked multiplying two 1024x1024 matrices. The naive implementation took about 20 seconds. One simple optimization brought that down to 14 seconds. Then I built with compiler optimizations enabled, and the naive implementation suddenly ran in 63 nanoseconds. I was floored, briefly convinced I’d stumbled onto some incredible compiler magic, before realizing what actually happened: the compiler had simply skipped the calculation entirely, since the result was never used. Classic dead code elimination. After forcing the compiler to keep the computation, the naive implementation came in at a more believable 2 seconds, and the optimized version dropped to 200ms. For comparison, Numpy does the same multiplication in about 4ms. Whether 200ms is fast enough for training neural nets in reasonable time remains to be seen."}]...
|
Title: Neurorust by @toqtu | Stardance
Devlogs:
R Title: Neurorust by @toqtu | Stardance
Devlogs:
Rust Learning Project: Building a Neural Network I recently read a few chapters of The Rust Programming Language and wanted to put my newly gained knowledge to use. Naturally, the first thing that came to mind was building a neural network in Rust. I’d already tried this in Python and failed, so I figured maybe, for some reason, it would go better this time around. Matmul The first step was implementing matrices and their operations in Rust, the most important of course being matrix multiplication. Since this would likely become the biggest bottleneck for the whole model, I got curious about its performance and benchmarked multiplying two 1024x1024 matrices. The naive implementation took about 20 seconds. One simple optimization brought that down to 14 seconds. Then I built with compiler optimizations enabled, and the naive implementation suddenly ran in 63 nanoseconds. I was floored, briefly convinced I’d stumbled onto some incredible compiler magic, before realizing what actually happened: the compiler had simply skipped the calculation entirely, since the result was never used. Classic dead code elimination. After forcing the compiler to keep the computation, the naive implementation came in at a more believable 2 seconds, and the optimized version dropped to 200ms. For comparison, Numpy does the same multiplication in about 4ms. Whether 200ms is fast enough for training neural nets in reasonable time remains to be seen.
It learns (a bit) After implementing loss functions, activation functions, and the forward and backward pass for the layers, I tried training a simple network to predict the XOR function. After running the network, I found that it didn’t learn at all. The loss just stayed at 0.25 without any changes. Not only that, the whole neural network didn’t update anything. After some initial digging, I had a feeling this was one of those dumb, simple bugs you can’t find for hours. Unfortunately, my feeling was right: the error was multiplying the bias instead of adding it. This is really bad because the bias initially has a value of 0, which means all outputs turn out to be 0 (not good). Of course, the fix was a one character change: * to + . Now that the network can predict XOR, I’ll see if it can also handle MNIST. I’m still a bit scared about performance issues with matrix multiplication.
It actually learns After getting XOR working, I tried my neural net on MNIST (handwritten digit recognition). Loading the data was easier than expected, though getting it into the right shape for my network took some fiddling. To make sure I loaded it correctly, I drew a few of the digits to check they looked right before training. Once that was sorted, training worked well, and the results were better than I hoped: 97.8% accuracy , in about 5 minutes. I also experimented with running the whole thing in a browser, but that turned out to be more involved than expected, so I’m parking it for now and focusing on other improvements first.
Doubling numbers Turns out you have to go back to square one to run a neural net on the GPU. For me that meant writing a program that multiplies every number in an array by 2, on the GPU. Limited learning resources Rust has a great library called wgpu for talking to the GPU. It’s cross-platform and can even run in WebAssembly if you do it right. The problem: most tutorials only cover rendering, and my neural net doesn’t care about triangles on a screen, it needs compute. I never found a tutorial on compute shaders from scratch, so I read the rendering material, stripped out what didn’t apply (windows, vertices, …), and added what did (workgroup size, how a compute pass works, …). Not trivial, but the official wgpu compute example got me on track. I mostly just copied it. Why it’s hard GPU programming isn’t straightforward. Here’s everything required just to multiply an array by 2: Get a wgpu instance , adapter , device , and queue Create a shader module Create the input , output , and download buffers Create the bind group layout and bind group Create the pipeline layout Create an encoder and a compute pass Copy data CPU → GPU , run the shader, then copy data GPU → CPU After 190 lines and some unexpected debugging (on code copied straight from an example, no less), I could finally double numbers fast, but only with huge arrays. Below a certain size, shuttling data to the GPU and back is slower than just doing the math on the CPU. I don’t fully understand every step yet. Hopefully I won’t need to, or I’ll pick it up along the way. Up next Matrix multiplication is next, and most of the boilerplate above should carry over. Big questions remain about the final network, but taking it one step at a time should get me there eventually… or to a complete surrender, who knows.
Sidequest: Doubling numbers In my last devlog I stated that doubling numbers on the GPU is only faster if you want to double a HUUUGE amount of numbers. Of course I wanted to see at what point the GPU really is faster. I found out that the CPU is actually quite good at doubling numbers so the GPU wasn’t faster at all. I then measured just the time the GPU takes to double the numbers ignoring the time it needs to transfer the data. With that the GPU eventually overtakes the CPU.
GPU Matmul I thought beating the CPU at matrix multiplication would be easy. It turns out that hand-optimized assembly code is a tough opponent. My naive GPU version isn’t bad, though: it’s roughly on par with NumPy, and about 13x faster than my CPU code but still worse than I initially expected. There’s plenty of room to improve. Right now the GPU sits idle about 80% of the time, just waiting on memory reads. For now, I’ll keep building out the rest of the neural net on the GPU and come back to optimizing matmul later.
Forward pass After adding all necessary operations on the GpuMatrix I implemented the forward pass. It was surprisingly hard to get the caching for the backward pass right because reallocating buffers on the gpu should be avoided. As always I let AI write some test cases and everything passed. Next I’ll implement the backward pass which will hopefully let the network learn with incredible speeds.
GPU Layers I initially thought porting the forward and backward passes to the GPU would be as simple as replacing Matrix with GpuMatrix everywhere. It wasn’t. Unlike CPU operations, GPU operations can’t allocate memory themselves. On the CPU, x + 2 simply creates a new value. On the GPU, every operation needs a pre-existing buffer to write its result into. So x += 2 works, but y = x + 2 requires a buffer for y to exist first. And x = x + 2 isn’t supported on the GPU at all. The solution is to pre-allocate buffers and keep them around, resizing them only when the batch size changes. It works, but it also means every struct starts accumulating buffer fields and scaling that approach to an entire network only makes the problem worse. Next: some kind of global buffer manager, before tackling the loss function.
It acutally learns (again) After some more pain with the loss function, buffer sizes and shape mismatches I got a neural network running on the gpu. The GPU is about 10x faster than the CPU version although some hyperparameters can affect this result. Now I want to build a small wasm interface and build a small web page around that to allow anyone to run a local neural net in the browser.
Does it ever get easier? I thought using the network in the web would be a piece of cake. I was wrong. After fixing some minor issues I wrote some quick code to test training. It worked… technically. It was really slow and froze my whole pc. A quick glance into my system monitor revealed the secret. All CPU cores were almost maxed out while the GPU sat idle. So after spending a bunch of time to use the GPU everything was back to the CPU again. WebGPU is still experimental. Especially on Linux which is why instead of throwing an error when it couldn’t access my graphics card it just used all my CPU cores as a fallback. To get the GPU back into the game I started my browser with some flags and compatibility layers which makes training still slower than on native hardware but faster than with the CPU. Hopefully this was the last major challenge and implementing the frontend will be easier.
Website finished I finished the frontend. You can now create a network with specific hyperparameters and then train it. After training you can draw a number and see what it predicts. Now I just need a good README and the project is ready to ship.
Done I added a README, improved the website defaults and did some final debugging. Now the project is ready to ship.
Ships:
Neurorust lets you train a simple neural network in your browser, using the GPU. The network predicts handwritten digits. After training you can draw your own digits and see its predictions. This project has tought me a lot about neural networks, Rust, GPU programming and WebAssembly. It was really challenging to produce a good result when just learning about everything. Even though the code is not perfect and there are a lot of things I would do different next time I feel like the end result has turned out quite well....
|
1793145294.3499413
|
1793231694.3499413
|
|
46400
|
WebbFinder by @busy_cheesy | Stardance
|
busy_cheesy
|
2
|
18.0
|
287
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T20:22:30Z", "hours": 4.0, "multiplier": 14.95, "payout": 56, "blessing": "neutral", "text": "This is a refined version of my first ship, WebbFinder, an app made in pygame that lets you view the latest James Webb Space Telescope imagery. After reading the constructive critism left on my ship, I have gone back and made adjustments to the code, notably to improve it’s archetecture and UI, as those were the issues highlighted by the people. I have used the same image as my first ship to show the difference between the two. Now some people also said that this could be a website, but the goal of this project, which was for me to learn how to use APIs, would have been much harder to achieve with a website because I have no experience with html, js, or css. Thus, the project would have taken exponentially longer than python, which I have a lot more experience in. Testing my project truly opened my eyes to how beautiful space really is… there is so much beauty out there and so much more that we have yet to find. The hardest project as a whole still remains the initial API setup, which after several hours I got working, but the feeling of success at the end is always worth it, and I have to say I am very proud of this new version. To run the project, you can either download the exe, or just follow the installation instructions in the read me. If you want to see the simple telescope animation, this only happens if you clone the repository and delete the json file, as the exe comes with the json preloaded. I also didn’t update the json file on purpose to showcase how it updates. If you run the project, you should see the image counter increase after around 30 seconds when the request comes back. All the other features are still here: Jump to date: find the image with the closest date to the one inputted Download: 3 options, medium, large or original. The originals are sometimes very big and might take some time to download Link takes you to the ESA/WEBB website for more information about the image That’s about all there is to it. For more info look at the first ship. Thanks for having read this btw, I appreciate you :D", "repo": "https://github.com/cream-of-wheat/WebbFinder", "demo": "https://github.com/cream-of-wheat/WebbFinder/releases/tag/v1.0.1"}, {"ship_num": 2, "ts": "2026-08-20T01:25:38Z", "hours": 14.0, "multiplier": 16.78, "payout": 231, "blessing": "neutral", "text": "This is WebbFinder, an app made in pygame that lets you browse the latest James Webb Space Telescope images through the official ESA/Webb image API. This is my first time using APIs, so getting that to work was a bit of a hassle, but I thoroughly enjoyed making this project. Space is always fascinating and making something about the James Webb telescope really filled me with awe about how beautiful the universe truly is. The app works like this: If you do not have the data.json file, you will have to wait ~30 seconds for the first page to load. You will then be able to browse the latest 100 images. It is recommended to wait for the rest of the pages to load, so that it is saved and your next startup is much quicker. If you do have the data.json file, the code simply requests the latest page and compares if you already have the images, and adds any new ones. You can browse the images in chronological order, which displays the actual image, its title, the description, date, link to the ESA website, and a download option. The download option gives you 3 options: medium, large or original, each one bigger than the last. A ‘jump to date’ feature is also present, letting you choose to look at images whose date is closest to the date you have selected. To keep the feel of the app smooth, the check for new images is done in the background. This is much different from the first versions where the whole screen would freeze, so multithreading was another thing I had to familiarize myself with. Furthermore, the neighbouring five images are also preloaded to ensure that there are no stutters while viewing. Overall, I am very proud of this system that ensured a smooth browsing experience, and of the project as a whole. Thanks for having read my pitch :D", "repo": "https://github.com/cream-of-wheat/WebbFinder", "demo": "https://github.com/cream-of-wheat/WebbFinder/releases/tag/v1.0.1"}]...
|
[{"post_id": 63157, "ts": "202 [{"post_id": 63157, "ts": "2026-09-06T20:05:58Z", "hours": 2.7256, "text": "Overhauled the UI, it now looks much cleaner than the previous bare-boned look. I also made several adjustments to the code to improve it’s archetecture. Examples include splitting the code into multiple files (it was one 600+ line file before lol), and moving the download file selection to the pygame gui instead of having the manager create a hidden window with tkinter. Also added headers at the top to make it look better, as well as changing the color pallette and fixing a hover bug for the link."}, {"post_id": 51032, "ts": "2026-08-20T14:57:00Z", "hours": 1.0167, "text": "Made an exe version of the python script that holds a preloaded data.json. Had a little trouble with getting pygame_gui to install into the exe but it worked in the end. If you run the exe you should see a data.json created inside the same directory as the exe, and that is so it can be updated with the latest images"}, {"post_id": 50637, "ts": "2026-08-19T21:49:23Z", "hours": 3.3167, "text": "Final update The biggest issue in the earlier versions was the interface freezing whenever the app fetched new APi data or downloaded high-res images. To address this problem, i moved the network requests, cache updates, and image preloading onto the background threads using the threading module in python. Everything is much more smooth now. I also added an input parser that lets the user to select a specific date, which the app will find and jump to the image with the closest date. Furthermore, I added a download selector allowing users to save images in medium, large, or original quality via the native file save option. I also added a buffer system that preloads the previous and next five neighbouring images into memory (also in the background!) making the image switching instant with no lag."}, {"post_id": 49308, "ts": "2026-08-18T01:37:22Z", "hours": 3.1333, "text": "Can now view all of the James Webb space telescope images. Also optimized the manager to fetch just the first page to update the existing data file. If this file didnt exist at all, then a loading screen will display a little animation of stars while the first page loads, and upon it loading it lets the user view the images while the second page is loaded via background threading. Once all the pages have been downloaded, or it has been detected that the data already had that image, the process is stopped and the data is then saved. Also, once the user loads an image by clicking previous or next, that image is stored to avoid unnecesarily calling the same request again. Pretty exciting stuff"}, {"post_id": 48571, "ts": "2026-08-17T00:47:30Z", "hours": 4.4669, "text": "Got the app into a working state, can move forwards and backwards between images, super exciting. Extracted more info from the JSON to get the description, title, and date. UI is looking better, still a little bare. However, it is currently only possible to view the first page of images, so next devlogs will be focused on adding access to all the images, as well as improving their loading speeds. The core viewing mechanic is functional tho!"}, {"post_id": 44880, "ts": "2026-08-10T22:27:57Z", "hours": 2.8336, "text": "First time here, progress is being made. Didn’t know anything about APIs or jsons but here is the first succesful render. Biggest obstacle was figuring out how to request the image data and properly display it in pygame (of which I also knew very little about, which is why it is so barebones right now!) Foundation established, things are looking good."}]...
|
Title: WebbFinder by @busy_cheesy | Stardance
Dev Title: WebbFinder by @busy_cheesy | Stardance
Devlogs:
First time here, progress is being made. Didn’t know anything about APIs or jsons but here is the first succesful render. Biggest obstacle was figuring out how to request the image data and properly display it in pygame (of which I also knew very little about, which is why it is so barebones right now!) Foundation established, things are looking good.
Got the app into a working state, can move forwards and backwards between images, super exciting. Extracted more info from the JSON to get the description, title, and date. UI is looking better, still a little bare. However, it is currently only possible to view the first page of images, so next devlogs will be focused on adding access to all the images, as well as improving their loading speeds. The core viewing mechanic is functional tho!
Can now view all of the James Webb space telescope images. Also optimized the manager to fetch just the first page to update the existing data file. If this file didnt exist at all, then a loading screen will display a little animation of stars while the first page loads, and upon it loading it lets the user view the images while the second page is loaded via background threading. Once all the pages have been downloaded, or it has been detected that the data already had that image, the process is stopped and the data is then saved. Also, once the user loads an image by clicking previous or next, that image is stored to avoid unnecesarily calling the same request again. Pretty exciting stuff
Final update The biggest issue in the earlier versions was the interface freezing whenever the app fetched new APi data or downloaded high-res images. To address this problem, i moved the network requests, cache updates, and image preloading onto the background threads using the threading module in python. Everything is much more smooth now. I also added an input parser that lets the user to select a specific date, which the app will find and jump to the image with the closest date. Furthermore, I added a download selector allowing users to save images in medium, large, or original quality via the native file save option. I also added a buffer system that preloads the previous and next five neighbouring images into memory (also in the background!) making the image switching instant with no lag.
Made an exe version of the python script that holds a preloaded data.json. Had a little trouble with getting pygame_gui to install into the exe but it worked in the end. If you run the exe you should see a data.json created inside the same directory as the exe, and that is so it can be updated with the latest images
Overhauled the UI, it now looks much cleaner than the previous bare-boned look. I also made several adjustments to the code to improve it’s archetecture. Examples include splitting the code into multiple files (it was one 600+ line file before lol), and moving the download file selection to the pygame gui instead of having the manager create a hidden window with tkinter. Also added headers at the top to make it look better, as well as changing the color pallette and fixing a hover bug for the link.
Ships:
This is WebbFinder, an app made in pygame that lets you browse the latest James Webb Space Telescope images through the official ESA/Webb image API. This is my first time using APIs, so getting that to work was a bit of a hassle, but I thoroughly enjoyed making this project. Space is always fascinating and making something about the James Webb telescope really filled me with awe about how beautiful the universe truly is. The app works like this: If you do not have the data.json file, you will have to wait ~30 seconds for the first page to load. You will then be able to browse the latest 100 images. It is recommended to wait for the rest of the pages to load, so that it is saved and your next startup is much quicker. If you do have the data.json file, the code simply requests the latest page and compares if you already have the images, and adds any new ones. You can browse the images in chronological order, which displays the actual image, its title, the description, date, link to the ESA website, and a download option. The download option gives you 3 options: medium, large or original, each one bigger than the last. A ‘jump to date’ feature is also present, letting you choose to look at images whose date is closest to the date you have selected. To keep the feel of the app smooth, the check for new images is done in the background. This is much different from the first versions where the whole screen would freeze, so multithreading was another thing I had to familiarize myself with. Furthermore, the neighbouring five images are also preloaded to ensure that there are no stutters while viewing. Overall, I am very proud of this system that ensured a smooth browsing experience, and of the project as a whole. Thanks for having read my pitch :D
This is a refined version of my first ship, WebbFinder, an app made in pygame that lets you view the latest James Webb Space Telescope imagery. After reading the constructive critism left on my ship, I have gone back and made adjustments to the code, notably to improve it’s archetecture and UI, as those were the issues highlighted by the people. I have used the same image as my first ship to show the difference between the two. Now some people also said that this could be a website, but the goal of this project, which was for me to learn how to use APIs, would have been much harder to achieve with a website because I have no experience with html, js, or css. Thus, the project would have taken exponentially longer than python, which I have a lot more experience in. Testing my project truly opened my eyes to how beautiful space really is… there is so much beauty out there and so much more that we have yet to find. The hardest project as a whole still remains the initial API setup, which after several hours I got working, but the feeling of success at the end is always worth it, and I have to say I am very proud of this new version. To run the project, you can either download the exe, or just follow the installation instructions in the read me. If you want to see the simple telescope animation, this only happens if you clone the repository and delete the json file, as the exe comes with the json preloaded. I also didn’t update the json file on purpose to showcase how it updates. If you run the project, you should see the image counter increase after around 30 seconds when the request comes back. All the other features are still here: Jump to date: find the image with the closest date to the one inputted Download: 3 options, medium, large or original. The originals are sometimes very big and might take some time to download Link takes you to the ESA/WEBB website for more information about the image That’s about all there is to it. For more info look at the first ship. Thanks for having read this btw, I appreciate you :D...
|
1793094824.1843984
|
1793181224.1843984
|
|
950
|
Volvo API playground by @Kl | Stardance
|
Kl
|
1
|
139.12
|
2165
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T20:19:02Z", "hours": 113.0, "multiplier": 19.09, "payout": 2165, "blessing": "neutral", "text": "A Milestone Welcome everybody to the first ship of this project. What is this project? This project simulates how the Volvo API works. Why was this project created in the first place? So it’s easier to create and test your app that uses the Volvo API without using ready-made libraries. I can’t find the features you mentioned in the devlog? Check the scope branch or the upcoming dev branch. What I’m proud of: I learned a lot of things (this is my first big public project): Tailwind Python stuff (I started with C++) Writing documentation (Markdown) I also learned the basics of OAuth2 and how APIs work. Making a project with all the features needed to get started. I created an additional document for you, Stardancers: Stardance PATH What is still on the TODO list? More APIs Scopes docker image See the roadmap . What to see? error logger recreated endpoints dashboard web socket realtime changes internal endpints interactivity of the car", "repo": "https://github.com/klswar0/Volvo-API-playground", "demo": "https://playground.kls.hackclub.app/"}]...
|
[{"post_id": 83102, "ts": "202 [{"post_id": 83102, "ts": "2026-10-26T21:45:37Z", "hours": 8.43, "text": "Devlog Changes More readable errors from SQL. Regeneration function added for all built-in values. Fixed regeneration function. Added a purge option. Fixed a need for a database even if the memory database was used. Fixed adding and removing cars from the SQL database. Added an option to disable debug info from the SQL database. Fixed proxy for normal API calls (fixed the refresh function, conversion, and get item). Added a refresh configuration (it can refresh always or only when data changes). Fixed pytest. Easter egg look for it WIP Columns I changed from using a column containing JSON to a column for every attribute. Pluses: You can easily edit data in database software or using SQL commands. But: The app was designed around dictionaries, so it needs all of the columns always. So that’s something to do in the future. It doesn’t fit on my screen in phpMyAdmin 😂 Testing I added pytest for required proxy functions (only the main database). The additional database I found that the working additional database worked because I forgot to change it in different files, so it still used the dictionary to store data. A first version of the fix is there, but wait for an better one. TODO force the pytest to use dict for most tests update docs finish easter egg finish the additional database for SQL add more pytests misc helpful pages? I’m still thinking Planning to ship at the end of 28th."}, {"post_id": 79861, "ts": "2026-10-15T17:17:04Z", "hours": 7.1881, "text": "Devlog A very long time no see. I have made a lot of progress on adding an SQL database. Testing on MySQL The backup server provider gives me access to one. SQL changes A lot of BIG changes. The reason why I haven’t posted for so long is that I didn’t want to post about something that doesn’t work. Created new classes to intercept data changes, both in case of direct dict changes and when going through the SQL model library. (I didn’t change much in the code, just imported it under the same name as the old database.) And it works! At the start, only reading data worked, but now it can send data back to the database. Added a regen function to make sure built-in API keys are always the same after a restart. Fixed the car creation function (but when I started storing the additional data in SQL, it broke AGAIN). Added configuration attributes. At first, just the database type, but then all the information needed to connect to a MySQL database. Fixed the scenario readconfig (wasn’t it updated in the past?). A really small number of things I added? Yes, but the amount of debugging and changing built-in functions in classes took me so long. (Could be because of school and not having time to do everything in one sitting.) But I learned how to make a dummy dict with a class, as I called it in the commit: proxy . Problems The SQL database can’t create new cars. Need to check all internal endpoints to make sure they work. Still haven’t merged the DEV branch (TODO). All information is stored in one column as JSON. It works, buuuut I don’t like it that way. Need to clean up the proxy classes. updating docs What failed this time? The second photo attached shows it. Have a look before reading more. _contains__ If you see it, congrats! But if you have a screen full of code, it’s harder to spot. It should be __contains__ , and I spent, I think, two days debugging why all in statements just didn’t work. I was so happy when I finally found it! XAMPP and Apple Silicon The manager app doesn’t open after a restart, so after consulting Google and AI, I found a command that I use: sudo /Applications/XAMPP/xamppfiles/xampp start xampp If someone is asking why I didn’t use the server provided one it just wasn’t practical for now."}, {"post_id": 73730, "ts": "2026-09-25T19:56:38Z", "hours": 4.9217, "text": "Devlog A lot of breaking changes later and getting closer to PR and going to 2 ship Token lifetime WORKS made time when token is expired is rounded to int endpoint for invalidating token possibility for enabling expiring token for a specific token when it’s disabled for all in config file misc pytest for location and energy API fix the url for the enrgy API (it started with connectivity url not wi the energy api) cleanup import created new files to make the code more readable dashboard added location values added capabilities and values auto token generation and expiration in dashboard"}, {"post_id": 69307, "ts": "2026-09-16T19:32:57Z", "hours": 5.58, "text": "Read till the end PLEASE 🥺 Devlog A lot of changes from the last devlog only 5 hrs Mostly bc I add stuff on top of but I will suffer in the future (See dev branch for these changes) Change all connectivity API to start with /connected-vehicle/v2/ to make room for different APIs After that I fixed pytest to reflect that I added a location API with a ONE endpoint There were few iterations Added scopes for this API location:read If I remember correctly Unique error responses (because location error look like old (v1) connectivity API Fixed that operationID could be a constant Added a config option to use longer API keys About here I Fixed the url for location api because it used the connectivity scheme Started working on energy API I added all data from it to this project In short one endpoints says what this car is capable of And the other says the values TODO: add its unique error its half done Scopes corresponding to energy API Fixed that some values and capabilities had the same name (bc of that some bool values where number so a it was important) WIP Oauth2 update: JWT tokens for access tokens WIP token can expire! what are JWT token? There consist of three parts header payload and signature The two first is important for my project the 3 isn’t . They store info about issuer, when token is active, scopes… A lot of useless data for this project or useful? We will see Life Bc of school I didn’t have a lot of time to write devlog (and write code) but I try to do my best before the end of stardance The next ship is planned for 28 September BIRTHDAY TODAY (16 September) Im celebrating my birthday 😄 If you write me a few good words It would be motivating for me."}, {"post_id": 63130, "ts": "2026-09-06T19:20:58Z", "hours": 1.6042, "text": "Devlog MAIN added a startup baner fixed snapshots not saving if website was used scope If you didn’t follow from start this branch contains the experimental scope support which is mostly done but I can guarantee stability that’s why it isn’t pushed to main in fist ship made the scope page work added a back button added button to scope on main page fixed snapshots loading/saving"}, {"post_id": 61052, "ts": "2026-09-03T19:22:00Z", "hours": 2.8836, "text": "Long time no see… The school started aaand I didn’t have time I had low motivation The only thing to do before first ship is docs but I could find time to finish them. Buut I back now. AND I promise to ship it before 7 of September. If you are voting on this project PLEASE do not skip. I have my birthday coming and if the shipwrights doesn’t have a long list it could mean this project payout could be my birthday gift. If I ofc ship it 😅 devlog Small marketing changes everywhere to say that this project doesn’t have any ready code to use Added info about error logger on the landing page Scopes A long way from last devlog Fixed pytest ( A second time) TEMPORARY FIX added so the scope error doesn’t - throw just internal error FIXed the Oauth2 endpoint at least 3 times Added a WIP endpoint to edit scope data from API Fixed how cars are created so they work with both - Oauth and scopes stuff Only looking dashboard page for scopes compare I think I forgot to say something in last devlog config file if you would like to use different instance Toml oillevel to oilLever AI disclaimer that I used this project to learn tailwind Make the doors have different statuses in mean time Untracked WIKI Redo the home page Started working on stardance path A lot of misc that I don’t remember other I created a small modified volvo example app to show that my app works like the real one"}, {"post_id": 55226, "ts": "2026-08-26T20:27:11Z", "hours": 4.2503, "text": "Devlog Error logger added colors to the terminal print out using: \\033[31m \\033[0m Good to know that it is so easy to add colors to text added timestamps to log file and - between errors Changes how it reads body once again and fixed url encoded requests logging My additional information I put in detail in the json response (the real API can send it like that buttty I didn’t see it. info from docs ) additional changes: New scenarios mostly about service warnings You can add notes to the website thru config files Scopes I started working on scopes. What are they? They are really permissions (you can know them from discord bots or if you login thru GitHub etc.) I don’t want to put them in this first ship but I needed to work on something (while I work on wiki) and I CAN’T guarantee every thing works after adding them. You can see it in the scopes branch. what is done: I have made preparation so the additional database (dict) I use for OAuth can store more data have updated website func to work with changes and also pytest added all possible conve (connectivity API) scopes WIKI when I add everything to them I will finally try making a ship added the error logger page updated the sidebar scenario and snapshots page a lot of misc Bonus photos from vacation on baltic sea"}, {"post_id": 49931, "ts": "2026-08-18T21:59:53Z", "hours": 3.1292, "text": "Devlog There was a small (or big) problem in my playground. If an error was returned in the response, you could only see it if your app handled it or by printing the response. That’s why I added an error logger. It can show errors in two ways: Terminal Log file How it works There were two ways of doing it (from what I learned): Middleware that captures all responses (this could be helpful in the future). Exception handlers (this is what I chose). I use two handlers: @app.exception_handler(RequestValidationError) @app.exception_handler(HTTPException) It was a horrible time searching for why it didn’t work. At first, I worked in a separate file, but I couldn’t get the (fastapi) app variable into those functions. So I copied them into main file to make them work first. I had to change some JSON responses to HTTPException to make the second handler work. After I captured the first request and printed it, I worked on one function that writes a log and another that prints to the terminal. I also created a class to store useful data. It works like this: Exception handler-> ->Put data into class -> ->Create response -> ->Return response ->Create a background task that logs the error I create a background task so the response doesn’t wait or even worse fails In the end I found that I can wrap these func with this simple func to make them work in different file def setup_error_logging(app: FastAPI): Added a config option: To disable it completely. To disable only the log file. It also bypasses all internal endpoints to make the logs more readable. The best fail… 😅 I returned an exception instead of raising it. I spent a good 15 minutes wondering why the response had status code 200 with a JSON body saying status code 400 . response changes I also checked how the authorization errors look and added two new ones: Missing Authorization header. Invalid vcc-api-key header. WIKI (not counted) I focus on making a GitHub wiki (new docs) After ending them and the error logger. Its time for the first ship !!!!!!! Nest instability: I made a backup server : https://frog01-21185.wykr.es/ Its not ideal one, bc some asian countries are blocked but its shouldn’t have any downtime (I hope so) If an Admin read it why I must copy enter from different text input 😭"}, {"post_id": 48444, "ts": "2026-08-16T19:51:20Z", "hours": 2.4822, "text": "Devlog SITE changes I found that some number inputs didn’t use the utility classes. I gave them inputText because they are really the same; the only difference is the HTML type . I also forgot to update the reloadable fuel section. It now uses the shorter utility class. Made sure that all text in the header is the same size (they weren’t). I copied all changes back to the main branch. config changes Then I added a config file using the configparser library. also added an option to disable the FastAPI docs. I started working on Wiki: reworking docs.md into a GitHub Wiki with up to date information. Error logger, so you can see what’s wrong without printing the API response in your code. I had some problems with catching the fastapi automatic response but I will leave it for next devlog"}, {"post_id": 46236, "ts": "2026-08-13T10:31:45Z", "hours": 4.6175, "text": "Devlog I forgot to add that I worked on the tests in the test branch, not the main one. OAuth2 PKCE testing. Helped me find an error where, if the code was used (it was reset to \"\" ), it was accepted as \"\" . Now it correctly returns an error. OAuth2 flow testing. Warnings and diagnostics now have some simple checks too. And I merged it into main . Then I started cleaning up the Tailwind CSS. NOTE: they are in new branch dashboard/cleanup Why? Because I used the Play CDN in the past, so I couldn’t create utility classes in a CSS file. Soooo I didn’t. Andddd there were a lot of Tailwind classes that didn’t fit on my screen. Now that I started precompiling it, I could add them. I added 5 unique utility classes. All of them combined are used around ~120 times across all HTMLs. The longest one: @utility inputSelection { @apply w-full px-4 py-2 .5 bg-zinc-950 border border-zinc-800 rounded-xl text-zinc-100 focus : outline-none focus : ring-2 focus : ring-blue-300 focus : border-transparent transition-all appearance-none text-center [ text-align-last : center ] cursor-pointer ; } I also minified the CSS file. If I understand it, it removes anything the browser doesn’t need to understand the CSS (new lines, unnecessary spaces…). It’s better because those characters are still sent over the network, and fewer bytes mean less traffic. While using the new utility classes, I tried to preserve the layout, so everything should look the same as before."}, {"post_id": 44802, "ts": "2026-08-10T20:28:29Z", "hours": 3.7639, "text": "Devlog Working hard on pytest tests. I learn how assert works and how to name . I never used or created test in any language so I think they aren’t perfect (not like they should),but they work😄. I looked like AI made few and how other people and read some stuff online Tests created for these endpoints Around 25 of them List cars About car Engine info Engine start/stop Climate start/stop Windows Doors Lock/Unlock Reduced Guard Lock Flash, Honk, and Combination Tyres Statistics Fuel Odometer Engine diagnostics Brakes Command accessibility Still to do Warnings and diagnostics Commands More changes The tests helped me find and clean up several issues: Documentation updates. The honk endpoint was ../horn but should be /honk . Some values ( odometer , fuel ) are int , just like in the OpenAPI specification, not as described in the official docs. Fixed spelling mistakes: - oillevel to oilLevel - coolantLever to coolantLevel Want to help and has access to volvo with active VOC I need to test engine and climate endpoints but I don’t have an access to a car with it. Soooo if you can contact me on slack"}, {"post_id": 42512, "ts": "2026-08-07T09:41:54Z", "hours": 4.2411, "text": "Devlog Tracking headers implemented : There are two vcc-api-operationId - UUID traceparent - W3C traceparent (for now only sends it back) dashboard should look good on small screen (its very long but I don’t want to redesign it now) This is the reason why I there is much time in this devlog. It was a lot of try and error before something looked good both on mobile and desktop and I liked it . But at least it works know 🙃. some small cleanup of comments I worked again on internal updates endpoint (hopefully works now) started working on pytests (but I will talk about in next devlog (I gave my self 2 days for it) I really want to get the first ship out, so it isn’t going to be perfect. I still have a lot of features and improvements I’d like to add."}, {"post_id": 40711, "ts": "2026-08-04T12:41:43Z", "hours": 4.4231, "text": "Devlog I had a problem when I wanted to rewrite the scenario system. It only changed the local version of the Car (It means it really didn’t update anything). I wanted to update a backup version first, and only if everything was correct, replace the original with the backup. In the end, I used an already created function to first test and then apply to the car . Main PKCE misspelling fixed. Added a landing page with an option to disable it and redirect directly to the login screen (like in the last devlog I have photos of making it). Worked on the lights section. Fixed the docs URLs. Dashboard and WebSocket toggles now work. Rewrote and enabled the updates endpoint. Validation now catches values that can’t be converted to int . Scenario loading into a car instance should now be more consistent with the other functions. Improved mobile responsiveness (and then fixed the desktop one). Some elements were outside the screen on mobile (nothing important, but it didn’t look good). NOTE: the dashboard with car attributes still needs to be adapted. Added windows (because I forgot to 😅) to the dashboard and organised the lighting section. OAuth2 and Snapshots buttons should now always be centred. TODO Debug and tracing headers (from the real API). Additional instructions. Then I think it’s finally ready for the first ship. There are still a lot of things I want to add, but I can’t work indefinitely. Compare The compare app now has the Content-Type fix enabled (like the official API). Compiled the Tailwind CSS for the compare app. NOTE: I will add here more screenshots as link later Also thinking about adding it frictionless mission but I’m not sure."}, {"post_id": 39642, "ts": "2026-08-02T19:24:37Z", "hours": 3.62, "text": "Devlog Snapshots loading page (screenshots while I worked. I had more but the limit was 4). As suggested by the Tailwind CSS tools, changed some classes to more canonical ones. You can now delete cars through both the API and the dashboard. Snapshot corruption (when the app is force quit) should be fixed. Started working on the landing page, but I’ll leave it for the next devlog (mostly because I have on my other laptop). Fixes to do Sometimes the new OAuth2 and Snapshots buttons are off-center. Compare app needs fixing (need to enable the Content-Type fix from the official API). PKCE spelling in the internal API."}, {"post_id": 37827, "ts": "2026-07-30T19:39:54Z", "hours": 4.1028, "text": "Devlog The Content-Type problem is SOLVED …… What was the problem? (My reading skills? ) there are two headers with application/json : Content-Type (POST) Accept (GET) The Accept header isn’t required ( can be */* , application/* or application/json ). So the Content-Type mystery is mostly FIXED but I still need to check with a real Volvo car if Content-Type is actually required. (I’ll do it tomorrow.) Changes: Accept is now handled by my API like in the official API. Added Content-Type checks (like the docs say, meaning it’s required). While proofreading the docs, I found that PKCE is written as PCKE in one internal endpoint. (Not fixed yet.) Small README update (I try to keep it up to date). Scenario page: You can now load a scenario using the GUI. Recompiled the Tailwind CSS. I attached screenshots showing it (you can also see snapshot button but its not implemented YET)"}, {"post_id": 36608, "ts": "2026-07-28T20:31:07Z", "hours": 0.5122, "text": "The comparison app is now online! Comparison app: https://compareplay.kls.hackclub.app/ I also updated the main app with the new dashboard design: https://playground.kls.hackclub.app/internal/welcome devlog Tailwind CSS is no longer loaded from the CDN. I think its now precompiled. Note to others: Remember to update your banner to feature your app (see #stardance on Slack). Otherwise, your ship will be rejected. EDIT: A lot of bots try to connect to my apps do you think I should make a honeypot?"}, {"post_id": 36297, "ts": "2026-07-28T09:47:40Z", "hours": 3.2881, "text": "Devlog I found another way to hide the fuel stat when it isn’t useful for a particular type of car: the HTML hidden attribute. At first, I thought I should add or remove the element hidden, but that turned out to be more complicated than I expected. I think using hidden is still a cleaner solution but I still using templates files. While working on the dashboard, I wanted to add units like km , L , and % to some values. Instead of handling that in Python, I added another div with some margins and, in a few places, used flex so everything stays on the same line without adding more backend logic. Added more page changes thru HTMX (nearly all pages use it). Creating a new car now refreshes the page. when an error occurs, I use HX-Reswap and the HX-Retarget response header (when creating new car as proof of concept). Added HTMX transitions to the OAuth2 settings page.(all pages have transitions) What to do before the first release (Mostly a checklist for myself 😅) Content-Type checks. Scenario and snapshot system support in the dashboard. Main showcase page. Finish the remaining documentation. Two READMEs: one for the main repository and one for the companion app repository. I’m thinking about having one technical README and another one that’s easier to understand for people who don’t code. Better error handling in the dashboard. Right now, most errors are just displayed as plain text instead of being part of the page. deploy updated version on nest I wanted to add a video but MacOS made me a half gig and I don’t think stardance would handle"}, {"post_id": 35043, "ts": "2026-07-26T06:29:01Z", "hours": 5.5947, "text": "Devlog Most of my time was spent working on the dashboard with Tailwind CSS. It took a lot of experimenting to find a design I actually like. I also changed how HTMX updates the dashboard through WebSockets. Before: A dedicated template was rendered every time to update that part of the dashboard. Now: Only the text containing the updated value is replaced. That said, in the future it won’t always be just text. For example, if the fuel type changes from hybrid to electric , the fuel level should disappear from the dashboard instead of just changing its value. While working on this, I found a bug caused by HTMX sending boolean values as strings. This caused climate settings to be marked as invalid. I need to distinguish between an invalid value and an invalid attribute instead of always treating the entire attribute as invalid. Note to myself Add transitions. Make all HTML pages use the same CSS file from now on. Update the version on nest server and make a public companion instance Aaand that’s all. Making websites is painfully slow."}, {"post_id": 33472, "ts": "2026-07-23T13:34:25Z", "hours": 4.2786, "text": "Devlog I don’t know if I mentioned it before, but for now the Content-Type checks are disabled. I need to learn more about them and implement better validation. Created an updated OAuth2 settings page and a car selection screen (with Tailwind CSS, of course). Started experimenting with a new dashboard. It’s still a work in progress, but it will most likely become the main design. I’m also thinking about adding a second dashboard style, although I’m not sure if I’ll do that before the first release. I definitely want to clean up the HTML/Tailwind code by moving repeated styles into reusable classes or something similar. I’m also thinking about using more HTMX so that more pages can update data without needing a full page reload. Wrote more documentation. I still need to verify the fuel endpoint because I don’t remember whether it handles different engine types correctly. ( The new OAuth2 settings page and the car selection screen. For next develop I think I will make a video of how everything works)"}, {"post_id": 32303, "ts": "2026-07-21T11:58:32Z", "hours": 2.6278, "text": "Devlog Companion app I said it was finished for now, but I forgot to add one more thing (the one on the left in the screenshots): a dashboard redirect. Main app I’m still investigating the Content-Type problem. I verified that the official Volvo API behaves correctly, so I’m working on matching that behavior. Added work-in-progress Content-Type checks. Started reworking the CSS using Tailwind CSS. It’s still mixed with some plain CSS for now. Enabled support for the reduced guard lock command. You have to manually mark it as supported, and for now it behaves the same as the normal lock command. Let me know which design you like more: the new one (center) or the old one (right)."}, {"post_id": 31979, "ts": "2026-07-20T20:18:13Z", "hours": 3.7667, "text": "Devlog I’m mainly focused on finishing the companion app. I started working on the CSS. Most of my time was spent learning Tailwind CSS (so I didn’t track it). I think it’s a better fit for me than writing plain CSS. Added Tailwind CSS to all pages of the companion app. (I think I need to redo the main app now. 😅) Added a small README with information about the main app. I think it done now but I will come back to it before first ship Main app While working on the companion app, I found another issue. The Content-Type: application/json behavior doesn’t match the official API. I verified that the official API works as expected, checks for it mine doesn’t (I think)"}, {"post_id": 30890, "ts": "2026-07-18T21:12:58Z", "hours": 3.2169, "text": "Devlog Companion app Added manual mode for comparison. Engine start/stop now works in normal mode. Before pushing, I forgot to fix one thing: { \"error\" : \"Failed to retrieve data from unofficial API.\" , \"detail\" :{ \"detail\" :[{ \"type\" : \"dict_type\" , \"loc\" :[ \"body\" ], \"msg\" : \"Input should be a valid dictionary\" , \"input\" : \"{ \\\" runtimeMinutes \\\" : 10}\" }]}} The fix was simple: I forgot to use json.loads() . I pushed a quick fix commit right after. The photo shows the manual comparison page. I’m still working on the comparison logic, which is why it doesn’t have any CSS yet. Sorry for not adding Volvo API keys so you can see the differences between both APIs, but that would have taken too much time today. Its also the reason why Im creating this app Main app Worked on the documentation. The notifier now supports more than one updated attribute at the same time. It’s not the best implementation, but I’ll improve it after the first ship. Fixed snapshot loading and added exception handling. Scenario loading now reports malformed JSON files. Fixed a dashboard bug where tire information was shown three times. I think I planned to add more data there… and then forgot. I should probably test everything before making a devlog or committing, but I also don’t want my devlogs to have to much time."}, {"post_id": 29435, "ts": "2026-07-16T11:46:44Z", "hours": 0.5936, "text": "A public online demo!!!!! The project is finally available online! https://playground.kls.hackclub.app/internal/welcome Please don’t be the bad guy and fight with other people over access. ❤️ That’s all I wanted to say because this is a really big milestone for me. There will also be another commit today to make sure everyone can run their own instance of the project. I found a few issues that only appeared outside of my local environment: Some WebSocket features break when using HTTPS. The dashboard had problems when the instance wasn’t running on the same computer. Those should be fixed in today’s commit. If you find any errors please comment or contact me on slack Also thanks to nest hackclub for hosting"}, {"post_id": 29164, "ts": "2026-07-15T21:37:24Z", "hours": 2.8483, "text": "Devlog Authorization was my mistake. It should have been accessToken , not Authorization . Why I thought that? I have no idea. No it was good before I was sleepy I think when I did that The snapshots system now works. Why it didn’t work as expected: I forgot to use copy(deep=True) . One of the small dictionaries was written incorrectly. Added saving and loading snapshots from a file. The scenarios system now works and has been tested. Difference between snapshots and scenarios Snapshots copy all data about a car. They are persistent and can be saved to a file. Scenarios only change selected attributes. They are designed to be created and edited manually in a JSON file. Main app The main app is mostly ready. Before the first release, I still need to: Finish the documentation. Add a roadmap with future updates. Verify error responses against the real API. Finish the comparison feature in the companion app. Add more ready-to-use scenarios and API keys. Companion app Manual login now works, so only the comparison logic is left. I found a bug where api_key_p was None because one endpoint redirected using api_key instead. Started working on the comparison feature. PS: A photo of why the api_key_p was none"}, {"post_id": 27883, "ts": "2026-07-13T19:57:06Z", "hours": 3.8994, "text": "Devlog Writing documentation is a good way to check whether the code you wrote actually works. I already found four bugs while documenting the project. For example, I forgot to pass the redirect URI in a function in main.py , even though it was already implemented in internal.py . I also fixed a bug where notifications could sometimes contain an older value. The dashboard has been moved into a separate file. Snapshots currently have a problem. They are very similar to the Car class, so I’ll debug it and explain what the issue was in the next devlog. Companion app The companion app is meant to showcase the differences between my implementation and the official Volvo Demo Car Sandbox. It also makes testing easier, since you don’t have to write your own application just to try the API. I had a problem with the built-in LibreSSL because one of the dependencies didn’t support it. I had to reinstall Python so that uv would detect the new OpenSSL installation. After that, I was finally able to start the app and get it working. Auto-login and automatic creation of a test car are now working. There’s is no css but I will do it after logic works One more thing: the reason the devlogs have been quieter recently is that I’ve been dealing with some administrative paperwork. I’ll get back to posting them more regularly once that’s sorted out."}, {"post_id": 25868, "ts": "2026-07-10T10:58:56Z", "hours": 4.3936, "text": "Devlog How I don’t like web development… did I already say that? I’ll say it again. I’m working on the OAuth2 settings, and I had a problem where one of the query parameters wasn’t reaching the backend. I still don’t know what actually fixed it. Then I had another problem. I have a function that changes values in the backend, but only one button worked while everything else didn’t. It turned out to be because I debugged the first problem with AI. Always trust your own mind before trusting AI. The problem was hx-trigger . I also had problems applying CSS through HTMX. In the end, I solved it by using hx-redirect . But in the end everything works (you can see it one the phtoto) I also worked on the scenario system, which loads scenarios from a JSON file. It isn’t tested yet, and I still need to work on state snapshots. The idea is that you’ll be able to save a moment in time and restore it later, so you can test the same scenario as many times as you want without setting up all the data again. I also started working on a companion app to showcase the differences between my implementation and the official demo car sandbox. I’ll write more about it in the next devlog."}, {"post_id": 24338, "ts": "2026-07-07T20:58:43Z", "hours": 3.7069, "text": "Devlog A small error from the last devlog: it’s PKCE , not PCKE . I had to rename a lot of variables because of that. More customizable data Gearbox Model year More diagnostic data for lights (hazard, fog, brake, high beam, low beam, and more) Other additions Added a new default API key with 3 cars, each having different values. Wrote more docs. Started working on scenarios (templates for new or existing cars to make setup faster). I’m thinking about loading them from a file so users can create their own. Started working on setting up OAuth2 through the dashboard. Fixed most command responses because when I first created them, I forgot to wrap everything inside { \"data\": {} } . Added light options to the dashboard. Working: PKCE How does it work? The application generates a random secret. Before redirecting the user to the login page, it sends only a hashed version of that secret. After the user logs in, the application receives an authorization code. When exchanging the code for tokens, it sends the original secret. The server checks whether it matches the previously received hash. If it does, the tokens are issued. It normally protects from having the tokens stolen New promoting picture I made in canva have a look"}, {"post_id": 23100, "ts": "2026-07-05T20:54:08Z", "hours": 3.3289, "text": "Devlog Small additions to the new documentation. changes how the api handles errors BIG ADDITION OAuth2 without PKCE. I started working on PKCE, but I thought I should write a devlog before adding it. Added a login website (I know I mentioned it last time). Added a way to enable and disable OAuth2. Authentication now checks whether OAuth2 is enabled. If it is, requests are authenticated using OAuth2. Tokens don’t expire yet, but that will be added soon. Added endpoints for refreshing tokens and exchanging an authorization code for tokens. How does OAuth2 work? The app redirects the user to a login page. After logging in, the website redirects the user back to the callback URL provided by the app. The app receives an authorization code, which it exchanges for two tokens: a long-lived refresh token and a short-lived access token. When the access token expires, the app can use the refresh endpoint to obtain a new access token. What is PKCE? I’ll write more about it once it’s added to the project. In short, PKCE protects the authorization flow by ensuring that only the application that started the login process can exchange the authorization code for tokens. The application first generates a random secret (called a code verifier). Before the login request is sent, a hashed version of that secret (the code challenge) is sent to the server. Later, when exchanging the authorization code for tokens, the application sends the original secret. The server verifies that it matches the previously received hash before issuing any tokens. I’ll explain the complete flow in the next devlog."}, {"post_id": 20221, "ts": "2026-07-01T19:28:27Z", "hours": 5.3022, "text": "Devlog This devlog will be a short one because I’ve been focusing on implementing OAuth 2.0. I’ll cover that in more detail in the next update but I will add photo of a “login” screen that I created for it (it looks bad on purpose). What’s new The terminal now works with more than one static car. The dashboard can (once again) create new cars. The codebase has been split into multiple files instead of a single large file: main still contains the public API endpoints. internal contains the dashboard logic and internal API endpoints. database will contain multiple predefined car scenarios. I also started writing a new manual that documents the quirks of the Volvo API and my implementation ( and edge cases). I will write more about in next 2 devlogs What’s left before the first ship An example application demonstrating the differences between the official Volvo Sandbox and this project. OAuth 2.0 with PKCE (it would be great to have before the first ship). Documentation. A major code cleanup and refactoring."}, {"post_id": 17924, "ts": "2026-06-28T21:18:15Z", "hours": 2.7358, "text": "Devlog I added two static (for now) endpoints: statistics and warning . The statistics endpoint mostly returns data, so there isn’t much to test. The warning endpoint has a very large response that would require a lot of new code, and for now I don’t want to implement all of it. I started working on adding cars through the dashboard (you could already see part of it in the last devlog), but I found out it doesn’t work, so I need to fix it before the next devlog. Climate and engine STOP commands now respond correctly. In the last invoice update, they incorrectly returned RUNNING . Added checks for the new command endpoints to verify whether the car supports a given command. Added a small terminal page that outputs changes. In the future, you’ll be able to choose whether to display only Volvo changes, all changes, or all information (for example, if you checked whether the windows status). I also used it to verify that the normal WebSocket status works. Added the foundations for disabling WebSockets on startup. Only a configuration file is left to implement. Added UNAVAILABLE reason invoice logic mostly something like this: If the reason is NO_INTERNET , the invoice becomes CONNECTION_FAILURE . If the reason is POWER_SAVING_MODE , the invoice becomes VEHICLE_IN_SLEEP . Made some improvements to the dashboard’s appearance."}, {"post_id": 15774, "ts": "2026-06-25T17:19:10Z", "hours": 7.1422, "text": "Devlog A funny story: I built the invoice system but didn’t always assign values correctly, so the values got mixed up. I spent a long time debugging before realizing that was the cause. { \"error\" : { \"message\" : \"VALUE_ERROR\" , \"description\" : \" \\\" Car \\\" object has no field \\\" 123 \\\" \" } } I also spent a lot of time on CSS. Most of that time went into learning: classes IDs box shadows CSS Grid The reason it took so long since the last devlog is CSS. As I said before, I don’t really like web development, so my motivation was pretty low. I used some AI, but I worked hard to remove most of the generated code. At this point, most of the site’s design looks the way I want it to and will probably stay that way until the end of the project. Made invoices have some logic instead of always sending the same value. That means: If no invoice status is set, it sends COMPLETED or RUNNING depending on whether the engine or climate is running. Loc like actions can’t have a RUNNING invoice status. Added a distinction between successful and failed invoices. PS: Always remember to stop the server with Ctrl+C , not Ctrl+Z , because Ctrl+Z can leave the process running and keep the port blocked."}, {"post_id": 14241, "ts": "2026-06-23T07:56:55Z", "hours": 6.0522, "text": "Devlog It has been a long time since my last devlog, but I was more focused on learning than adding new stuff. Right now, I am focusing on learning HTML, htmx, and Jinja. The welcome page logic is mostly working. I had some problems with it because I used htmx to add new code, but the JavaScript from the is not reloaded with that. Now, I use the HX-Redirect response. I also learned how WebSockets work with FastAPI and htmx. I also designed how the dashboard will look (I attached my drawings. Good luck reading them!)."}, {"post_id": 11274, "ts": "2026-06-18T13:16:22Z", "hours": 3.5742, "text": "Devlog centralLock is called carLocked in the docs. The docs seem to be outdated. I think the OpenAPI specification is more accurate and contains fewer errors. I added a way to validate data using class functions. Implemented timestamps. Using datetime function from python Added tyre endpoints. Added a way to generate new API keys and create new cars (I used python secrets). (getting ready to make first public running version) Roadmap.md file with status of this project What is next to do Start using the updated method for changing data. Update the dashboard to reflect and modify the new data. Add WebSocket support. Add the remaining 2 vehicle and warning endpoints. Create an example app for testers. Redesign dashboard. It looks awful I had a 2 days off because I was on school trip but I back. Next thing on my list is an updated dashboard"}, {"post_id": 9202, "ts": "2026-06-15T13:28:28Z", "hours": 1.9225, "text": "Devlog You can edit data through the dashboard now. It’s not the best solution, and I want to change how it works (probably start from scratch), but not now. Diagnostics endpoints. I had a very good time with them today. Why? Because of the “/diagnostics” docs. I attached a screenshot showing an example from the official website and data from a real car (left: real API, right: docs). If you look at them, you can see two errors and one very small issue that you would only notice if you read the whole documentation: In serviceWarning, you can see the value is NORMAL, but NORMAL is not a valid value for it. It should be NO_WARNING. This is the small one. In engineHoursToService, the API response contains a unit, but the docs don’t mention it at all. And the worst one (and the only real error): there is no information about washerFluidLevelWarning in the docs, but it appears in the data from the car. What do you think I should do? Should I write to them about it? I think you can comment on the post, so let me know what you think."}, {"post_id": 8961, "ts": "2026-06-14T22:15:21Z", "hours": 1.7606, "text": "Devlog Added odometer and fuel endpoints. Funny thing is that Volvo sends in what unit the data is, but the docs say that only metric units are valid, so it really sends always the same unit. Most likely they wanted to add imperial later, or they left it like this for simplicity. Added first version of dashboard. For now, it’s using polling every 5 seconds (I have planned to change it to WebSocket). It only displays some information and can’t edit anything. Also, I wrote some HTML and JavaScript. I never liked web development, so I don’t know a lot (I’m learning while I code 😅). It could be that it will look very rough till the end because I don’t have any patience for HTML and CSS. I “will” do it when I have a very good day, or AI will do it? I would like not to use AI in this way, but I will see. Edit: Forgot to push the updated version to GitHub I will do it tomorrow because it’s late (it’s tomorrow )"}, {"post_id": 8322, "ts": "2026-06-13T20:45:50Z", "hours": 2.8264, "text": "Devlog Added a command accessibility endpoint (it tells if the car can receive commands). I refactored duplicate code in the climate endpoint. Added engine endpoints (they aren’t perfect, but this isn’t the final code). It was also a frustrating day because I repeatedly forgot to save my code before testing (my bad). A photo of the error that cost me way too much time today. (I changed it to “/vehicles/{VIN}/engine-status”, but I didn’t save the file.)"}, {"post_id": 7410, "ts": "2026-06-12T10:41:57Z", "hours": 0.9136, "text": "I setup my codespace and started working on first few endpoints. Additionally I looked how most of Volvos apis looks that gave me direction to go. That was all time I had today. Also I could add screenshot here because of macOS :("}]...
|
Title: Volvo API playground by @Kl | Stardance
De Title: Volvo API playground by @Kl | Stardance
Devlogs:
I setup my codespace and started working on first few endpoints. Additionally I looked how most of Volvos apis looks that gave me direction to go. That was all time I had today. Also I could add screenshot here because of macOS :(
Devlog Added a command accessibility endpoint (it tells if the car can receive commands). I refactored duplicate code in the climate endpoint. Added engine endpoints (they aren’t perfect, but this isn’t the final code). It was also a frustrating day because I repeatedly forgot to save my code before testing (my bad). A photo of the error that cost me way too much time today. (I changed it to “/vehicles/{VIN}/engine-status”, but I didn’t save the file.)
Devlog Added odometer and fuel endpoints. Funny thing is that Volvo sends in what unit the data is, but the docs say that only metric units are valid, so it really sends always the same unit. Most likely they wanted to add imperial later, or they left it like this for simplicity. Added first version of dashboard. For now, it’s using polling every 5 seconds (I have planned to change it to WebSocket). It only displays some information and can’t edit anything. Also, I wrote some HTML and JavaScript. I never liked web development, so I don’t know a lot (I’m learning while I code 😅). It could be that it will look very rough till the end because I don’t have any patience for HTML and CSS. I “will” do it when I have a very good day, or AI will do it? I would like not to use AI in this way, but I will see. Edit: Forgot to push the updated version to GitHub I will do it tomorrow because it’s late (it’s tomorrow )
Devlog You can edit data through the dashboard now. It’s not the best solution, and I want to change how it works (probably start from scratch), but not now. Diagnostics endpoints. I had a very good time with them today. Why? Because of the “/diagnostics” docs. I attached a screenshot showing an example from the official website and data from a real car (left: real API, right: docs). If you look at them, you can see two errors and one very small issue that you would only notice if you read the whole documentation: In serviceWarning, you can see the value is NORMAL, but NORMAL is not a valid value for it. It should be NO_WARNING. This is the small one. In engineHoursToService, the API response contains a unit, but the docs don’t mention it at all. And the worst one (and the only real error): there is no information about washerFluidLevelWarning in the docs, but it appears in the data from the car. What do you think I should do? Should I write to them about it? I think you can comment on the post, so let me know what you think.
Devlog centralLock is called carLocked in the docs. The docs seem to be outdated. I think the OpenAPI specification is more accurate and contains fewer errors. I added a way to validate data using class functions. Implemented timestamps. Using datetime function from python Added tyre endpoints. Added a way to generate new API keys and create new cars (I used python secrets). (getting ready to make first public running version) Roadmap.md file with status of this project What is next to do Start using the updated method for changing data. Update the dashboard to reflect and modify the new data. Add WebSocket support. Add the remaining 2 vehicle and warning endpoints. Create an example app for testers. Redesign dashboard. It looks awful I had a 2 days off because I was on school trip but I back. Next thing on my list is an updated dashboard
Devlog It has been a long time since my last devlog, but I was more focused on learning than adding new stuff. Right now, I am focusing on learning HTML, htmx, and Jinja. The welcome page logic is mostly working. I had some problems with it because I used htmx to add new code, but the JavaScript from the is not reloaded with that. Now, I use the HX-Redirect response. I also learned how WebSockets work with FastAPI and htmx. I also designed how the dashboard will look (I attached my drawings. Good luck reading them!).
Devlog A funny story: I built the invoice system but didn’t always assign values correctly, so the values got mixed up. I spent a long time debugging before realizing that was the cause. { "error" : { "message" : "VALUE_ERROR" , "description" : " \" Car \" object has no field \" 123 \" " } } I also spent a lot of time on CSS. Most of that time went into learning: classes IDs box shadows CSS Grid The reason it took so long since the last devlog is CSS. As I said before, I don’t really like web development, so my motivation was pretty low. I used some AI, but I worked hard to remove most of the generated code. At this point, most of the site’s design looks the way I want it to and will probably stay that way until the end of the project. Made invoices have some logic instead of always sending the same value. That means: If no invoice status is set, it sends COMPLETED or RUNNING depending on whether the engine or climate is running. Loc like actions can’t have a RUNNING invoice status. Added a distinction between successful and failed invoices. PS: Always remember to stop the server with Ctrl+C , not Ctrl+Z , because Ctrl+Z can leave the process running and keep the port blocked.
Devlog I added two static (for now) endpoints: statistics and warning . The statistics endpoint mostly returns data, so there isn’t much to test. The warning endpoint has a very large response that would require a lot of new code, and for now I don’t want to implement all of it. I started working on adding cars through the dashboard (you could already see part of it in the last devlog), but I found out it doesn’t work, so I need to fix it before the next devlog. Climate and engine STOP commands now respond correctly. In the last invoice update, they incorrectly returned RUNNING . Added checks for the new command endpoints to verify whether the car supports a given command. Added a small terminal page that outputs changes. In the future, you’ll be able to choose whether to display only Volvo changes, all changes, or all information (for example, if you checked whether the windows status). I also used it to verify that the normal WebSocket status works. Added the foundations for disabling WebSockets on startup. Only a configuration file is left to implement. Added UNAVAILABLE reason invoice logic mostly something like this: If the reason is NO_INTERNET , the invoice becomes CONNECTION_FAILURE . If the reason is POWER_SAVING_MODE , the invoice becomes VEHICLE_IN_SLEEP . Made some improvements to the dashboard’s appearance.
Devlog This devlog will be a short one because I’ve been focusing on implementing OAuth 2.0. I’ll cover that in more detail in the next update but I will add photo of a “login” screen that I created for it (it looks bad on purpose). What’s new The terminal now works with more than one static car. The dashboard can (once again) create new cars. The codebase has been split into multiple files instead of a single large file: main still contains the public API endpoints. internal contains the dashboard logic and internal API endpoints. database will contain multiple predefined car scenarios. I also started writing a new manual that documents the quirks of the Volvo API and my implementation ( and edge cases). I will write more about in next 2 devlogs What’s left before the first ship An example application demonstrating the differences between the official Volvo Sandbox and this project. OAuth 2.0 with PKCE (it would be great to have before the first ship). Documentation. A major code cleanup and refactoring.
Devlog Small additions to the new documentation. changes how the api handles errors BIG ADDITION OAuth2 without PKCE. I started working on PKCE, but I thought I should write a devlog before adding it. Added a login website (I know I mentioned it last time). Added a way to enable and disable OAuth2. Authentication now checks whether OAuth2 is enabled. If it is, requests are authenticated using OAuth2. Tokens don’t expire yet, but that will be added soon. Added endpoints for refreshing tokens and exchanging an authorization code for tokens. How does OAuth2 work? The app redirects the user to a login page. After logging in, the website redirects the user back to the callback URL provided by the app. The app receives an authorization code, which it exchanges for two tokens: a long-lived refresh token and a short-lived access token. When the access token expires, the app can use the refresh endpoint to obtain a new access token. What is PKCE? I’ll write more about it once it’s added to the project. In short, PKCE protects the authorization flow by ensuring that only the application that started the login process can exchange the authorization code for tokens. The application first generates a random secret (called a code verifier). Before the login request is sent, a hashed version of that secret (the code challenge) is sent to the server. Later, when exchanging the authorization code for tokens, the application sends the original secret. The server verifies that it matches the previously received hash before issuing any tokens. I’ll explain the complete flow in the next devlog.
Devlog A small error from the last devlog: it’s PKCE , not PCKE . I had to rename a lot of variables because of that. More customizable data Gearbox Model year More diagnostic data for lights (hazard, fog, brake, high beam, low beam, and more) Other additions Added a new default API key with 3 cars, each having different values. Wrote more docs. Started working on scenarios (templates for new or existing cars to make setup faster). I’m thinking about loading them from a file so users can create their own. Started working on setting up OAuth2 through the dashboard. Fixed most command responses because when I first created them, I forgot to wrap everything inside { "data": {} } . Added light options to the dashboard. Working: PKCE How does it work? The application generates a random secret. Before redirecting the user to the login page, it sends only a hashed version of that secret. After the user logs in, the application receives an authorization code. When exchanging the code for tokens, it sends the original secret. The server checks whether it matches the previously received hash. If it does, the tokens are issued. It normally protects from having the tokens stolen New promoting picture I made in canva have a look
Devlog How I don’t like web development… did I already say that? I’ll say it again. I’m working on the OAuth2 settings, and I had a problem where one of the query parameters wasn’t reaching the backend. I still don’t know what actually fixed it. Then I had another problem. I have a function that changes values in the backend, but only one button worked while everything else didn’t. It turned out to be because I debugged the first problem with AI. Always trust your own mind before trusting AI. The problem was hx-trigger . I also had problems applying CSS through HTMX. In the end, I solved it by using hx-redirect . But in the end everything works (you can see it one the phtoto) I also worked on the scenario system, which loads scenarios from a JSON file. It isn’t tested yet, and I still need to work on state snapshots. The idea is that you’ll be able to save a moment in time and restore it later, so you can test the same scenario as many times as you want without setting up all the data again. I also started working on a companion app to showcase the differences between my implementation and the official demo car sandbox. I’ll write more about it in the next devlog.
Devlog Writing documentation is a good way to check whether the code you wrote actually works. I already found four bugs while documenting the project. For example, I forgot to pass the redirect URI in a function in main.py , even though it was already implemented in internal.py . I also fixed a bug where notifications could sometimes contain an older value. The dashboard has been moved into a separate file. Snapshots currently have a problem. They are very similar to the Car class, so I’ll debug it and explain what the issue was in the next devlog. Companion app The companion app is meant to showcase the differences between my implementation and the official Volvo Demo Car Sandbox. It also makes testing easier, since you don’t have to write your own application just to try the API. I had a problem with the built-in LibreSSL because one of the dependencies didn’t support it. I had to reinstall Python so that uv would detect the new OpenSSL installation. After that, I was finally able to start the app and get it working. Auto-login and automatic creation of a test car are now working. There’s is no css but I will do it after logic works One more thing: the reason the devlogs have been quieter recently is that I’ve been dealing with some administrative paperwork. I’ll get back to posting them more regularly once that’s sorted out.
Devlog Authorization was my mistake. It should have been accessToken , not Authorization . Why I thought that? I have no idea. No it was good before I was sleepy I think when I did that The snapshots system now works. Why it didn’t work as expected: I forgot to use copy(deep=True) . One of the small dictionaries was written incorrectly. Added saving and loading snapshots from a file. The scenarios system now works and has been tested. Difference between snapshots and scenarios Snapshots copy all data about a car. They are persistent and can be saved to a file. Scenarios only change selected attributes. They are designed to be created and edited manually in a JSON file. Main app The main app is mostly ready. Before the first release, I still need to: Finish the documentation. Add a roadmap with future updates. Verify error responses against the real API. Finish the comparison feature in the companion app. Add more ready-to-use scenarios and API keys. Companion app Manual login now works, so only the comparison logic is left. I found a bug where api_key_p was None because one endpoint redirected using api_key instead. Started working on the comparison feature. PS: A photo of why the api_key_p was none
A public online demo!!!!! The project is finally available online! https://playground.kls.hackclub.app/internal/welcome Please don’t be the bad guy and fight with other people over access. ❤️ That’s all I wanted to say because this is a really big milestone for me. There will also be another commit today to make sure everyone can run their own instance of the project. I found a few issues that only appeared outside of my local environment: Some WebSocket features break when using HTTPS. The dashboard had problems when the instance wasn’t running on the same computer. Those should be fixed in today’s commit. If you find any errors please comment or contact me on slack Also thanks to nest hackclub for hosting
Devlog Companion app Added manual mode for comparison. Engine start/stop now works in normal mode. Before pushing, I forgot to fix one thing: { "error" : "Failed to retrieve data from unofficial API." , "detail" :{ "detail" :[{ "type" : "dict_type" , "loc" :[ "body" ], "msg" : "Input should be a valid dictionary" , "input" : "{ \" runtimeMinutes \" : 10}" }]}} The fix was simple: I forgot to use json.loads() . I pushed a quick fix commit right after. The photo shows the manual comparison page. I’m still working on the comparison logic, which is why it doesn’t have any CSS yet. Sorry for not adding Volvo API keys so you can see the differences between both APIs, but that would have taken too much time today. Its also the reason why Im creating this app Main app Worked on the documentation. The notifier now supports more than one updated attribute at the same time. It’s not the best implementation, but I’ll improve it after the first ship. Fixed snapshot loading and added exception handling. Scenario loading now reports malformed JSON files. Fixed a dashboard bug where tire information was shown three times. I think I planned to add more data there… and then forgot. I should probably test everything before making a devlog or committing, but I also don’t want my devlogs to have to much time.
Devlog I’m mainly focused on finishing the companion app. I started working on the CSS. Most of my time was spent learning Tailwind CSS (so I didn’t track it). I think it’s a better fit for me than writing plain CSS. Added Tailwind CSS to all pages of the companion app. (I think I need to redo the main app now. 😅) Added a small README with information about the main app. I think it done now but I will come back to it before first ship Main app While working on the companion app, I found another issue. The Content-Type: application/json behavior doesn’t match the official API. I verified that the official API works as expected, checks for it mine doesn’t (I think)
Devlog Companion app I said it was finished for now, but I forgot to add one more thing (the one on the left in the screenshots): a dashboard redirect. Main app I’m still investigating the Content-Type problem. I verified that the official Volvo API behaves correctly, so I’m working on matching that behavior. Added work-in-progress Content-Type checks. Started reworking the CSS using Tailwind CSS. It’s still mixed with some plain CSS for now. Enabled support for the reduced guard lock command. You have to manually mark it as supported, and for now it behaves the same as the normal lock command. Let me know which design you like more: the new one (center) or the old one (right).
Devlog I don’t know if I mentioned it before, but for now the Content-Type checks are disabled. I need to learn more about them and implement better validation. Created an updated OAuth2 settings page and a car selection screen (with Tailwind CSS, of course). Started experimenting with a new dashboard. It’s still a work in progress, but it will most likely become the main design. I’m also thinking about adding a second dashboard style, although I’m not sure if I’ll do that before the first release. I definitely want to clean up the HTML/Tailwind code by moving repeated styles into reusable classes or something similar. I’m also thinking about using more HTMX so that more pages can update data without needing a full page reload. Wrote more documentation. I still need to verify the fuel endpoint because I don’t remember whether it handles different engine types correctly. ( The new OAuth2 settings page and the car selection screen. For next develop I think I will make a video of how everything works)
Devlog Most of my time was spent working on the dashboard with Tailwind CSS. It took a lot of experimenting to find a design I actually like. I also changed how HTMX updates the dashboard through WebSockets. Before: A dedicated template was rendered every time to update that part of the dashboard. Now: Only the text containing the updated value is replaced. That said, in the future it won’t always be just text. For example, if the fuel type changes from hybrid to electric , the fuel level should disappear from the dashboard instead of just changing its value. While working on this, I found a bug caused by HTMX sending boolean values as strings. This caused climate settings to be marked as invalid. I need to distinguish between an invalid value and an invalid attribute instead of always treating the entire attribute as invalid. Note to myself Add transitions. Make all HTML pages use the same CSS file from now on. Update the version on nest server and make a public companion instance Aaand that’s all. Making websites is painfully slow.
Devlog I found another way to hide the fuel stat when it isn’t useful for a particular type of car: the HTML hidden attribute. At first, I thought I should add or remove the element hidden, but that turned out to be more complicated than I expected. I think using hidden is still a cleaner solution but I still using templates files. While working on the dashboard, I wanted to add units like km , L , and % to some values. Instead of handling that in Python, I added another div with some margins and, in a few places, used flex so everything stays on the same line without adding more backend logic. Added more page changes thru HTMX (nearly all pages use it). Creating a new car now refreshes the page. when an error occurs, I use HX-Reswap and the HX-Retarget response header (when creating new car as proof of concept). Added HTMX transitions to the OAuth2 settings page.(all pages have transitions) What to do before the first release (Mostly a checklist for myself 😅) Content-Type checks. Scenario and snapshot system support in the dashboard. Main showcase page. Finish the remaining documentation. Two READMEs: one for the main repository and one for the companion app repository. I’m thinking about having one technical README and another one that’s easier to understand for people who don’t code. Better error handling in the dashboard. Right now, most errors are just displayed as plain text instead of being part of the page. deploy updated version on nest I wanted to add a video but MacOS made me a half gig and I don’t think stardance would handle
The comparison app is now online! Comparison app: https://compareplay.kls.hackclub.app/ I also updated the main app with the new dashboard design: https://playground.kls.hackclub.app/internal/welcome devlog Tailwind CSS is no longer loaded from the CDN. I think its now precompiled. Note to others: Remember to update your banner to feature your app (see #stardance on Slack). Otherwise, your ship will be rejected. EDIT: A lot of bots try to connect to my apps do you think I should make a honeypot?
Devlog The Content-Type problem is SOLVED …… What was the problem? (My reading skills? ) there are two headers with application/json : Content-Type (POST) Accept (GET) The Accept header isn’t required ( can be */* , application/* or application/json ). So the Content-Type mystery is mostly FIXED but I still need to check with a real Volvo car if Content-Type is actually required. (I’ll do it tomorrow.) Changes: Accept is now handled by my API like in the official API. Added Content-Type checks (like the docs say, meaning it’s required). While proofreading the docs, I found that PKCE is written as PCKE in one internal endpoint. (Not fixed yet.) Small README update (I try to keep it up to date). Scenario page: You can now load a scenario using the GUI. Recompiled the Tailwind CSS. I attached screenshots showing it (you can also see snapshot button but its not implemented YET)
Devlog Snapshots loading page (screenshots while I worked. I had more but the limit was 4). As suggested by the Tailwind CSS tools, changed some classes to more canonical ones. You can now delete cars through both the API and the dashboard. Snapshot corruption (when the app is force quit) should be fixed. Started working on the landing page, but I’ll leave it for the next devlog (mostly because I have on my other laptop). Fixes to do Sometimes the new OAuth2 and Snapshots buttons are off-center. Compare app needs fixing (need to enable the Content-Type fix from the official API). PKCE spelling in the internal API.
Devlog I had a problem when I wanted to rewrite the scenario system. It only changed the local version of the Car (It means it really didn’t update anything). I wanted to update a backup version first, and only if everything was correct, replace the original with the backup. In the end, I used an already created function to first test and then apply to the car . Main PKCE misspelling fixed. Added a landing page with an option to disable it and redirect directly to the login screen (like in the last devlog I have photos of making it). Worked on the lights section. Fixed the docs URLs. Dashboard and WebSocket toggles now work. Rewrote and enabled the updates endpoint. Validation now catches values that can’t be converted to int . Scenario loading into a car instance should now be more consistent with the other functions. Improved mobile responsiveness (and then fixed the desktop one). Some elements were outside the screen on mobile (nothing important, but it didn’t look good). NOTE: the dashboard with car attributes still needs to be adapted. Added windows (because I forgot to 😅) to the dashboard and organised the lighting section. OAuth2 and Snapshots buttons should now always be centred. TODO Debug and tracing headers (from the real API). Additional instructions. Then I think it’s finally ready for the first ship. There are still a lot of things I want to add, but I can’t work indefinitely. Compare The compare app now has the Content-Type fix enabled (like the official API). Compiled the Tailwind CSS for the compare app. NOTE: I will add here more screenshots as link later Also thinking about adding it frictionless mission but I’m not sure.
Devlog Tracking headers implemented : There are two vcc-api-operationId - UUID traceparent - W3C traceparent (for now only sends it back) dashboard should look good on small screen (its very long but I don’t want to redesign it now) This is the reason why I there is much time in this devlog. It was a lot of try and error before something looked good both on mobile and desktop and I liked it . But at least it works know 🙃. some small cleanup of comments I worked again on internal updates endpoint (hopefully works now) started working on pytests (but I will talk about in next devlog (I gave my self 2 days for it) I really want to get the first ship out, so it isn’t going to be perfect. I still have a lot of features and improvements I’d like to add.
Devlog Working hard on pytest tests. I learn how assert works and how to name . I never used or created test in any language so I think they aren’t perfect (not like they should),but they work😄. I looked like AI made few and how other people and read some stuff online Tests created for these endpoints Around 25 of them List cars About car Engine info Engine start/stop Climate start/stop Windows Doors Lock/Unlock Reduced Guard Lock Flash, Honk, and Combination Tyres Statistics Fuel Odometer Engine diagnostics Brakes Command accessibility Still to do Warnings and diagnostics Commands More changes The tests helped me find and clean up several issues: Documentation updates. The honk endpoint was ../horn but should be /honk . Some values ( odometer , fuel ) are int , just like in the OpenAPI specification, not as described in the official docs. Fixed spelling mistakes: - oillevel to oilLevel - coolantLever to coolantLevel Want to help and has access to volvo with active VOC I need to test engine and climate endpoints but I don’t have an access to a car with it. Soooo if you can contact me on slack
Devlog I forgot to add that I worked on the tests in the test branch, not the main one. OAuth2 PKCE testing. Helped me find an error where, if the code was used (it was reset to "" ), it was accepted as "" . Now it correctly returns an error. OAuth2 flow testing. Warnings and diagnostics now have some simple checks too. And I merged it into main . Then I started cleaning up the Tailwind CSS. NOTE: they are in new branch dashboard/cleanup Why? Because I used the Play CDN in the past, so I couldn’t create utility classes in a CSS file. Soooo I didn’t. Andddd there were a lot of Tailwind classes that didn’t fit on my screen. Now that I started precompiling it, I could add them. I added 5 unique utility classes. All of them combined are used around ~120 times across all HTMLs. The longest one: @utility inputSelection { @apply w-full px-4 py-2 .5 bg-zinc-950 border border-zinc-800 rounded-xl text-zinc-100 focus : outline-none focus : ring-2 focus : ring-blue-300 focus : border-transparent transition-all appearance-none text-center [ text-align-last : center ] cursor-pointer ; } I also minified the CSS file. If I understand it, it removes anything the browser doesn’t need to understand the CSS (new lines, unnecessary spaces…). It’s better because those characters are still sent over the network, and fewer bytes mean less traffic. While using the new utility classes, I tried to preserve the layout, so everything should look the same as before.
Devlog SITE changes I found that some number inputs didn’t use the utility classes. I gave them inputText because they are really the same; the only difference is the HTML type . I also forgot to update the reloadable fuel section. It now uses the shorter utility class. Made sure that all text in the header is the same size (they weren’t). I copied all changes back to the main branch. config changes Then I added a config file using the configparser library. also added an option to disable the FastAPI docs. I started working on Wiki: reworking docs.md into a GitHub Wiki with up to date information. Error logger, so you can see what’s wrong without printing the API response in your code. I had some problems with catching the fastapi automatic response but I will leave it for next devlog
Devlog There was a small (or big) problem in my playground. If an error was returned in the response, you could only see it if your app handled it or by printing the response. That’s why I added an error logger. It can show errors in two ways: Terminal Log file How it works There were two ways of doing it (from what I learned): Middleware that captures all responses (this could be helpful in the future). Exception handlers (this is what I chose). I use two handlers: @app.exception_handler(RequestValidationError) @app.exception_handler(HTTPException) It was a horrible time searching for why it didn’t work. At first, I worked in a separate file, but I couldn’t get the (fastapi) app variable into those functions. So I copied them into main file to make them work first. I had to change some JSON responses to HTTPException to make the second handler work. After I captured the first request and printed it, I worked on one function that writes a log and another that prints to the terminal. I also created a class to store useful data. It works like this: Exception handler-> ->Put data into class -> ->Create response -> ->Return response ->Create a background task that logs the error I create a background task so the response doesn’t wait or even worse fails In the end I found that I can wrap these func with this simple func to make them work in different file def setup_error_logging(app: FastAPI): Added a config option: To disable it completely. To disable only the log file. It also bypasses all internal endpoints to make the logs more readable. The best fail… 😅 I returned an exception instead of raising it. I spent a good 15 minutes wondering why the response had status code 200 with a JSON body saying status code 400 . response changes I also checked how the authorization errors look and added two new ones: Missing Authorization header. Invalid vcc-api-key header. WIKI (not counted) I focus on making a GitHub wiki (new docs) After ending them and the error logger. Its time for the first ship !!!!!!! Nest instability: I made a backup server : https://frog01-21185.wykr.es/ Its not ideal one, bc some asian countries are blocked but its shouldn’t have any downtime (I hope so) If an Admin read it why I must copy enter from different text input 😭
Devlog Error logger added colors to the terminal print out using: \033[31m \033[0m Good to know that it is so easy to add colors to text added timestamps to log file and - between errors Changes how it reads body once again and fixed url encoded requests logging My additional information I put in detail in the json response (the real API can send it like that buttty I didn’t see it. info from docs ) additional changes: New scenarios mostly about service warnings You can add notes to the website thru config files Scopes I started working on scopes. What are they? They are really permissions (you can know them from discord bots or if you login thru GitHub etc.) I don’t want to put them in this first ship but I needed to work on something (while I work on wiki) and I CAN’T guarantee every thing works after adding them. You can see it in the scopes branch. what is done: I have made preparation so the additional database (dict) I use for OAuth can store more data have updated website func to work with changes and also pytest added all possible conve (connectivity API) scopes WIKI when I add everything to them I will finally try making a ship added the error logger page updated the sidebar scenario and snapshots page a lot of misc Bonus photos from vacation on baltic sea
Long time no see… The school started aaand I didn’t have time I had low motivation The only thing to do before first ship is docs but I could find time to finish them. Buut I back now. AND I promise to ship it before 7 of September. If you are voting on this project PLEASE do not skip. I have my birthday coming and if the shipwrights doesn’t have a long list it could mean this project payout could be my birthday gift. If I ofc ship it 😅 devlog Small marketing changes everywhere to say that this project doesn’t have any ready code to use Added info about error logger on the landing page Scopes A long way from last devlog Fixed pytest ( A second time) TEMPORARY FIX added so the scope error doesn’t - throw just internal error FIXed the Oauth2 endpoint at least 3 times Added a WIP endpoint to edit scope data from API Fixed how cars are created so they work with both - Oauth and scopes stuff Only looking dashboard page for scopes compare I think I forgot to say something in last devlog config file if you would like to use different instance Toml oillevel to oilLever AI disclaimer that I used this project to learn tailwind Make the doors have different statuses in mean time Untracked WIKI Redo the home page Started working on stardance path A lot of misc that I don’t remember other I created a small modified volvo example app to show that my app works like the real one
Devlog MAIN added a startup baner fixed snapshots not saving if website was used scope If you didn’t follow from start this branch contains the experimental scope support which is mostly done but I can guarantee stability that’s why it isn’t pushed to main in fist ship made the scope page work added a back button added button to scope on main page fixed snapshots loading/saving
Read till the end PLEASE 🥺 Devlog A lot of changes from the last devlog only 5 hrs Mostly bc I add stuff on top of but I will suffer in the future (See dev branch for these changes) Change all connectivity API to start with /connected-vehicle/v2/ to make room for different APIs After that I fixed pytest to reflect that I added a location API with a ONE endpoint There were few iterations Added scopes for this API location:read If I remember correctly Unique error responses (because location error look like old (v1) connectivity API Fixed that operationID could be a constant Added a config option to use longer API keys About here I Fixed the url for location api because it used the connectivity scheme Started working on energy API I added all data from it to this project In short one endpoints says what this car is capable of And the other says the values TODO: add its unique error its half done Scopes corresponding to energy API Fixed that some values and capabilities had the same name (bc of that some bool values where number so a it was important) WIP Oauth2 update: JWT tokens for access tokens WIP token can expire! what are JWT token? There consist of three parts header payload and signature The two first is important for my project the 3 isn’t . They store info about issuer, when token is active, scopes… A lot of useless data for this project or useful? We will see Life Bc of school I didn’t have a lot of time to write devlog (and write code) but I try to do my best before the end of stardance The next ship is planned for 28 September BIRTHDAY TODAY (16 September) Im celebrating my birthday 😄 If you write me a few good words It would be motivating for me.
Devlog A lot of breaking changes later and getting closer to PR and going to 2 ship Token lifetime WORKS made time when token is expired is rounded to int endpoint for invalidating token possibility for enabling expiring token for a specific token when it’s disabled for all in config file misc pytest for location and energy API fix the url for the enrgy API (it started with connectivity url not wi the energy api) cleanup import created new files to make the code more readable dashboard added location values added capabilities and values auto token generation and expiration in dashboard
Devlog A very long time no see. I have made a lot of progress on adding an SQL database. Testing on MySQL The backup server provider gives me access to one. SQL changes A lot of BIG changes. The reason why I haven’t posted for so long is that I didn’t want to post about something that doesn’t work. Created new classes to intercept data changes, both in case of direct dict changes and when going through the SQL model library. (I didn’t change much in the code, just imported it under the same name as the old database.) And it works! At the start, only reading data worked, but now it can send data back to the database. Added a regen function to make sure built-in API keys are always the same after a restart. Fixed the car creation function (but when I started storing the additional data in SQL, it broke AGAIN). Added configuration attributes. At first, just the database type, but then all the information needed to connect to a MySQL database. Fixed the scenario readconfig (wasn’t it updated in the past?). A really small number of things I added? Yes, but the amount of debugging and changing built-in functions in classes took me so long. (Could be because of school and not having time to do everything in one sitting.) But I learned how to make a dummy dict with a class, as I called it in the commit: proxy . Problems The SQL database can’t create new cars. Need to check all internal endpoints to make sure they work. Still haven’t merged the DEV branch (TODO). All information is stored in one column as JSON. It works, buuuut I don’t like it that way. Need to clean up the proxy classes. updating docs What failed this time? The second photo attached shows it. Have a look before reading more. _contains__ If you see it, congrats! But if you have a screen full of code, it’s harder to spot. It should be __contains__ , and I spent, I think, two days debugging why all in statements just didn’t work. I was so happy when I finally found it! XAMPP and Apple Silicon The manager app doesn’t open after a restart, so after consulting Google and AI, I found a command that I use: sudo /Applications/XAMPP/xamppfiles/xampp start xampp If someone is asking why I didn’t use the server provided one it just wasn’t practical for now.
Devlog Changes More readable errors from SQL. Regeneration function added for all built-in values. Fixed regeneration function. Added a purge option. Fixed a need for a database even if the memory database was used. Fixed adding and removing cars from the SQL database. Added an option to disable debug info from the SQL database. Fixed proxy for normal API calls (fixed the refresh function, conversion, and get item). Added a refresh configuration (it can refresh always or only when data changes). Fixed pytest. Easter egg look for it WIP Columns I changed from using a column containing JSON to a column for every attribute. Pluses: You can easily edit data in database software or using SQL commands. But: The app was designed around dictionaries, so it needs all of the columns always. So that’s something to do in the future. It doesn’t fit on my screen in phpMyAdmin 😂 Testing I added pytest for required proxy functions (only the main database). The additional database I found that the working additional database worked because I forgot to change it in different files, so it still used the dictionary to store data. A first version of the fix is there, but wait for an better one. TODO force the pytest to use dict for most tests update docs finish easter egg finish the additional database for SQL add more pytests misc helpful pages? I’m still thinking Planning to ship at the end of 28th.
Ships:
A Milestone Welcome everybody to the first ship of this project. What is this project? This project simulates how the Volvo API works. Why was this project created in the first place? So it’s easier to create and test your app that uses the Volvo API without using ready-made libraries. I can’t find the features you mentioned in the devlog? Check the scope branch or the upcoming dev branch. What I’m proud of: I learned a lot of things (this is my first big public project): Tailwind Python stuff (I started with C++) Writing documentation (Markdown) I also learned the basics of OAuth2 and how APIs work. Making a project with all the features needed to get started. I created an additional document for you, Stardancers: Stardance PATH What is still on the TODO list? More APIs Scopes docker image See the roadmap . What to see? error logger recreated endpoints dashboard web socket realtime changes internal endpints interactivity of the car...
|
1793148537.2470438
|
1793234937.2470438
|
|
54033
|
AdagiOS by @evanssidhu | Stardance
|
evanssidhu
|
1
|
10.37
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T20:02:19Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I finally finished the first part of my WebOS! Publishing took a bit longer than expected due to some cross origin/coep errors, but thats all been sorted out now and the site’s properly deployed. So far, this project includes a couple apps/features, including a login screen, dock, top bar, resizeable/draggable windows, etc. In terms of apps I added a simple quick notes app, alongside integrating demos of some other projects I made, including a weather app, chess app, and satellite tracker. Overall this was a pretty nice and fun project to make, and I am looking forward to expanding this even more in WebOS 2.", "repo": "https://github.com/es1228/AdagiOS", "demo": "https://es1228.github.io/AdagiOS/"}]...
|
[{"post_id": 63787, "ts": "202 [{"post_id": 63787, "ts": "2026-09-07T19:01:31Z", "hours": 1.3708, "text": "Devlog 6 This message is mainly for the shipwright. I addressed your feedback and now all the iframes should work just fine on firefox. It is still recommended to use chrome for this website, as there may be some underlying issues still on firefox due to the lack of support of some features due to fingerprinting concerns, but most features should still work on firefox."}, {"post_id": 62658, "ts": "2026-09-06T04:07:56Z", "hours": 2.8306, "text": "Devlog 5 I spent a while thinking and trying to experiment with new apps to come up with, but then I realized that instead of making all new apps for the os, why not just integrate my already made projects into this project. I’ve added three more apps in total, a weather app, a chess app, and a satellite tracker. This wraps up the guide steps outlined in WebOS 1 so I am going to ship this to the mission and hopefully continue on to WebOS 2."}, {"post_id": 56375, "ts": "2026-08-28T03:46:22Z", "hours": 1.2786, "text": "Devlog 4 I finished adding the first basic app, which is a notes app with autosave and persistent storage. I also added in active app functionality in the top bar and to manage which app appears on top above the others"}, {"post_id": 55366, "ts": "2026-08-27T04:33:53Z", "hours": 1.3853, "text": "Devlog 3 Drag and drop, open, and close functionality have been added in this devlog. I have attached a demo video below, and will look towards adding the first proper app to the os. Maybe later on I will also expand on the titlebar functionality by adding minimize and fullscreen."}, {"post_id": 55229, "ts": "2026-08-26T21:04:23Z", "hours": 0.7603, "text": "Devlog 2 Building off of last devlog, I have added the top bar to the website. For now I have also decided to remove the flyouts and replace everything with a universal top bar."}, {"post_id": 54684, "ts": "2026-08-25T18:59:40Z", "hours": 2.5, "text": "Devlog 1 I’m starting work on my webOS AdagiOS (which comes from the italian word adagio, meaning something that is very calm and graceful). Anyways I have begun to work on the login screen, which has a clock, login button, power menu, and battery menu. The clock and battery features are actually a little more difficult then they look due to how react handles asynchronous events and live updates, but I was able to get them to work fairly easily and simply. Next up i’ll start work on the top bar and making interactive flyouts."}]...
|
Title: AdagiOS by @evanssidhu | Stardance
Devlogs Title: AdagiOS by @evanssidhu | Stardance
Devlogs:
Devlog 1 I’m starting work on my webOS AdagiOS (which comes from the italian word adagio, meaning something that is very calm and graceful). Anyways I have begun to work on the login screen, which has a clock, login button, power menu, and battery menu. The clock and battery features are actually a little more difficult then they look due to how react handles asynchronous events and live updates, but I was able to get them to work fairly easily and simply. Next up i’ll start work on the top bar and making interactive flyouts.
Devlog 2 Building off of last devlog, I have added the top bar to the website. For now I have also decided to remove the flyouts and replace everything with a universal top bar.
Devlog 3 Drag and drop, open, and close functionality have been added in this devlog. I have attached a demo video below, and will look towards adding the first proper app to the os. Maybe later on I will also expand on the titlebar functionality by adding minimize and fullscreen.
Devlog 4 I finished adding the first basic app, which is a notes app with autosave and persistent storage. I also added in active app functionality in the top bar and to manage which app appears on top above the others
Devlog 5 I spent a while thinking and trying to experiment with new apps to come up with, but then I realized that instead of making all new apps for the os, why not just integrate my already made projects into this project. I’ve added three more apps in total, a weather app, a chess app, and a satellite tracker. This wraps up the guide steps outlined in WebOS 1 so I am going to ship this to the mission and hopefully continue on to WebOS 2.
Devlog 6 This message is mainly for the shipwright. I addressed your feedback and now all the iframes should work just fine on firefox. It is still recommended to use chrome for this website, as there may be some underlying issues still on firefox due to the lack of support of some features due to fingerprinting concerns, but most features should still work on firefox.
Ships:
I finally finished the first part of my WebOS! Publishing took a bit longer than expected due to some cross origin/coep errors, but thats all been sorted out now and the site’s properly deployed. So far, this project includes a couple apps/features, including a login screen, dock, top bar, resizeable/draggable windows, etc. In terms of apps I added a simple quick notes app, alongside integrating demos of some other projects I made, including a weather app, chess app, and satellite tracker. Overall this was a pretty nice and fun project to make, and I am looking forward to expanding this even more in WebOS 2....
|
1793105468.7591813
|
1793191868.7591813
|
|
1910
|
Planet Trotter by @Atlus | Stardance
|
Atlus
|
1
|
59.0
|
583
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T19:40:39Z", "hours": 59.0, "multiplier": 9.84, "payout": 583, "blessing": "neutral", "text": "This is a very early version of my game Planet Trotter. I am very proud of the progress I’ve made as before this I didn’t know anything of game development. The game is still very early in development, but I thought I’d put something out and ship a working version. have fun playing my game! :D", "repo": "https://github.com/Atlus06/Planet-Trotter", "demo": "https://atlus06.itch.io/planet-trotter"}]...
|
[{"post_id": 56284, "ts": "202 [{"post_id": 56284, "ts": "2026-08-28T00:04:50Z", "hours": 6.2547, "text": "I tried adding a new game button. It did not work. the last for the last month or so and recorded 6 hours, I’ve been trying to create a system in my game to reset the player’s save. I SEVERELY underestimated how hard it’d be. It really is weird what gets you caught up in a project, if you wanna know more about my prosses and possibly help you can read below. So first I thought it would be as easy as deleting the save file that is already on the player’s system, that not only crashed, but after I fixed all of the bugs and errors I noticed it completely destroyed the saving system and the level loading system with it. after hours which turned to weeks of debugging, I figured it wasn’t worth it. At least not right now, this is a challenge I’ll tackle another day, or at least when I don’t have a time limit. But as they say, failure is apart of the process and I’m okay with that."}, {"post_id": 43368, "ts": "2026-08-08T15:57:40Z", "hours": 8.6789, "text": "Changes: Added state machine Added NPC with dialogue Added more menu options Added Debug mode"}, {"post_id": 36707, "ts": "2026-07-28T22:47:47Z", "hours": 6.5531, "text": "Changes: Added jump cutting - make platforming feel better/ more responsive added settings menu added controls rebinding menu"}, {"post_id": 32625, "ts": "2026-07-21T22:15:39Z", "hours": 2.1347, "text": "Changes: Made a checkpoint System After disagreeing with a bunch of tutorials I decided to reuse a system I already had. Used the code to set player position at the start of the level and a global variables scripts to remember the position of the checkpoint and respawn the player when their equaled to 0 Made a “return to checkpoint” button to give use to the checkpoints in the levels due to there being nothing that will kill the player yet"}, {"post_id": 30765, "ts": "2026-07-18T16:59:21Z", "hours": 2.66, "text": "Changes: Added UI with a working health, dash cooldown and collectable counting system -Tweaked dash adding a slight start lag and changed the way cooldowns work"}, {"post_id": 29869, "ts": "2026-07-17T00:59:28Z", "hours": 7.8633, "text": "Changes: Made 5 levels Finished first reeditions of levels that will be included in the demo Small Tweaks: Made wall slide way faster Changed how dash cooldown works Here are 2 level layouts and their renditions/ filled out versions"}, {"post_id": 24941, "ts": "2026-07-08T20:30:51Z", "hours": 3.9625, "text": "Changes Reworked double jump Other small Tweaks"}, {"post_id": 23631, "ts": "2026-07-06T18:23:24Z", "hours": 2.4867, "text": "Changes: -Added a placeholder level transition/ loading screen -Finally made level spawn points work -Added textures/ replaced placeholder platforms with actual assets The 2 photos are an example of making something unnecessarily complex. The few lines of code I used where the whole reason that the level spawn points took weeks the work out. So make sure you understand your code so you really know what’s actually helping and what’s bloat and holding you back."}, {"post_id": 19254, "ts": "2026-06-30T14:51:35Z", "hours": 2.7731, "text": "Changes: Added a Health System Re-added the Collectable counter Life Update: To explain the big gap in updates, I got burnout. while working on the project I ended up working too hard and too fast, and a certain point I stopped to take a break and couldn’t bring myself to work, but I’m back now and won’t let that happen again."}, {"post_id": 9581, "ts": "2026-06-15T23:19:01Z", "hours": 1.7408, "text": "Devlog 8: Did: -Started w/ fixing coyote time Reworked jump to make coyote time work Remade double jump by making double jump variable -Make System for changing levels Used signals w/ parameters to send path to next level -Fixed up collectables Turned of collisions for .1 seconds so collectables won’t be collected on start up (hopefully)"}, {"post_id": 9273, "ts": "2026-06-15T15:57:48Z", "hours": 2.4539, "text": "Changes: -Cleaned up backend more -added coyote time -make scene/ level changing work"}, {"post_id": 7007, "ts": "2026-06-11T19:14:31Z", "hours": 2.5389, "text": "Changes: -organized file system and scene tree"}, {"post_id": 2797, "ts": "2026-06-05T16:43:33Z", "hours": 2.0925, "text": "Changes: Changed dash mechanic so dashing downwards is possible Added sliding mechanic The sliding was strange to add, but I ended up figuring it out. Adding this I’ll make the game’s movement feel more fluid, like celeste. Later I’ll make a momentum system to increase the slide and the dash distance depending on speed"}, {"post_id": 2643, "ts": "2026-06-05T09:25:51Z", "hours": 1.1644, "text": "Changes: -Added camera zoom -Added collectable counter The camera zoom feature is mainly for testing, but I though while I work on a map system I’ll give a pseudo map that make traversing the test area easier."}, {"post_id": 1702, "ts": "2026-06-03T21:19:03Z", "hours": 3.9031, "text": "Changes: -Polished movement -player jumps off of walls -dash is stronger -Added collectables -Added camera movement The collectable system was the most challenges from collision errors to tracking & counting collectables, but I did figure it out and learned how to signal between scripts at the same time. I also learned about the camera positioning smoothing option in Godot which cut out a lot of learning and trial & error that I would need to figure out."}, {"post_id": 416, "ts": "2026-06-01T20:23:52Z", "hours": 2.0153, "text": "I and a couple friends are going to create a game about venturing unknown planets in search of a new earth to inhabit To start off I created a simple movement system with a double jump, dash and wall cling mechanic. the dash was hardest to implement because of all the small hiccups and things to keep track of, but I did manage to get a hold of it after a lot of trial and error. I started this project with the aim to learn composition and I’m happy that I was able to implement that into this project. If you don’t know composition makes your code more readable and modular. As you can tell there aren’t any sprites, but there will be in the future, but for now the Godot logo will be my placeholder."}]...
|
Title: Planet Trotter by @Atlus | Stardance
Devlo Title: Planet Trotter by @Atlus | Stardance
Devlogs:
I and a couple friends are going to create a game about venturing unknown planets in search of a new earth to inhabit To start off I created a simple movement system with a double jump, dash and wall cling mechanic. the dash was hardest to implement because of all the small hiccups and things to keep track of, but I did manage to get a hold of it after a lot of trial and error. I started this project with the aim to learn composition and I’m happy that I was able to implement that into this project. If you don’t know composition makes your code more readable and modular. As you can tell there aren’t any sprites, but there will be in the future, but for now the Godot logo will be my placeholder.
Changes: -Polished movement -player jumps off of walls -dash is stronger -Added collectables -Added camera movement The collectable system was the most challenges from collision errors to tracking & counting collectables, but I did figure it out and learned how to signal between scripts at the same time. I also learned about the camera positioning smoothing option in Godot which cut out a lot of learning and trial & error that I would need to figure out.
Changes: -Added camera zoom -Added collectable counter The camera zoom feature is mainly for testing, but I though while I work on a map system I’ll give a pseudo map that make traversing the test area easier.
Changes: Changed dash mechanic so dashing downwards is possible Added sliding mechanic The sliding was strange to add, but I ended up figuring it out. Adding this I’ll make the game’s movement feel more fluid, like celeste. Later I’ll make a momentum system to increase the slide and the dash distance depending on speed
Changes: -organized file system and scene tree
Changes: -Cleaned up backend more -added coyote time -make scene/ level changing work
Devlog 8: Did: -Started w/ fixing coyote time Reworked jump to make coyote time work Remade double jump by making double jump variable -Make System for changing levels Used signals w/ parameters to send path to next level -Fixed up collectables Turned of collisions for .1 seconds so collectables won’t be collected on start up (hopefully)
Changes: Added a Health System Re-added the Collectable counter Life Update: To explain the big gap in updates, I got burnout. while working on the project I ended up working too hard and too fast, and a certain point I stopped to take a break and couldn’t bring myself to work, but I’m back now and won’t let that happen again.
Changes: -Added a placeholder level transition/ loading screen -Finally made level spawn points work -Added textures/ replaced placeholder platforms with actual assets The 2 photos are an example of making something unnecessarily complex. The few lines of code I used where the whole reason that the level spawn points took weeks the work out. So make sure you understand your code so you really know what’s actually helping and what’s bloat and holding you back.
Changes Reworked double jump Other small Tweaks
Changes: Made 5 levels Finished first reeditions of levels that will be included in the demo Small Tweaks: Made wall slide way faster Changed how dash cooldown works Here are 2 level layouts and their renditions/ filled out versions
Changes: Added UI with a working health, dash cooldown and collectable counting system -Tweaked dash adding a slight start lag and changed the way cooldowns work
Changes: Made a checkpoint System After disagreeing with a bunch of tutorials I decided to reuse a system I already had. Used the code to set player position at the start of the level and a global variables scripts to remember the position of the checkpoint and respawn the player when their equaled to 0 Made a “return to checkpoint” button to give use to the checkpoints in the levels due to there being nothing that will kill the player yet
Changes: Added jump cutting - make platforming feel better/ more responsive added settings menu added controls rebinding menu
Changes: Added state machine Added NPC with dialogue Added more menu options Added Debug mode
I tried adding a new game button. It did not work. the last for the last month or so and recorded 6 hours, I’ve been trying to create a system in my game to reset the player’s save. I SEVERELY underestimated how hard it’d be. It really is weird what gets you caught up in a project, if you wanna know more about my prosses and possibly help you can read below. So first I thought it would be as easy as deleting the save file that is already on the player’s system, that not only crashed, but after I fixed all of the bugs and errors I noticed it completely destroyed the saving system and the level loading system with it. after hours which turned to weeks of debugging, I figured it wasn’t worth it. At least not right now, this is a challenge I’ll tackle another day, or at least when I don’t have a time limit. But as they say, failure is apart of the process and I’m okay with that.
Ships:
This is a very early version of my game Planet Trotter. I am very proud of the progress I’ve made as before this I didn’t know anything of game development. The game is still very early in development, but I thought I’d put something out and ship a working version. have fun playing my game! :D...
|
1793065706.648508
|
1793152106.648508
|
|
58997
|
TeleSpace100 by @emin | Stardance
|
emin
|
1
|
2.25
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T19:29:54Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made telespace100, a retro 80s teletext space portal. It fetches live space weather data from NOAA, displays NASA’s Picture of the Day, and features a Spaceflight News feed with clickable links to full articles. The hardest part was getting the CRT visual effect right using CSS and setting up keyboard navigation without breaking the classic teletext layout. I’m really proud of how authentic the UI feels and how all the dynamic space APIs blend together. To test it, just use your keyboard numbers like typing 100, 200, 300 or 400 to jump between pages and explore the news, space weather, and images.", "repo": "https://github.com/muhammet842/TeleSpace100", "demo": "https://telespace100.vercel.app/"}]...
|
[{"post_id": 64749, "ts": "202 [{"post_id": 64749, "ts": "2026-09-09T11:59:56Z", "hours": 0.2506, "text": "I’m so proud of that my project has been approvedd yesterday! Now, it’s time to build a new one."}, {"post_id": 63050, "ts": "2026-09-06T16:59:48Z", "hours": 0.8914, "text": "I roughly finished my project. At least I completed it as it’s purposes. In the page 200, you can see the current magnetic activity level of the Earth, status inducatur and measurement date. In the page 300, you can see the daily news about space and the picture of day from NASA. In the Page 400, you can see the current developments about space. If you want, you can try it from the link: https://telespace100.vercel.app/"}, {"post_id": 62964, "ts": "2026-09-06T15:11:54Z", "hours": 0.7075, "text": "I approximately 1 hour ago started my new project that I named TeleSpace100. What this project can do: Transform the browser’s New Tab page into a retro 1980s TV Teletext interface. Fetch and display live space data from NASA and NOAA APIs in real time. Enable authentic retro navigation using only page number keypresses instead of a mouse like 100, 200 and 300."}]...
|
Title: TeleSpace100 by @emin | Stardance
Devlogs: Title: TeleSpace100 by @emin | Stardance
Devlogs:
I approximately 1 hour ago started my new project that I named TeleSpace100. What this project can do: Transform the browser’s New Tab page into a retro 1980s TV Teletext interface. Fetch and display live space data from NASA and NOAA APIs in real time. Enable authentic retro navigation using only page number keypresses instead of a mouse like 100, 200 and 300.
I roughly finished my project. At least I completed it as it’s purposes. In the page 200, you can see the current magnetic activity level of the Earth, status inducatur and measurement date. In the page 300, you can see the daily news about space and the picture of day from NASA. In the Page 400, you can see the current developments about space. If you want, you can try it from the link: https://telespace100.vercel.app/
I’m so proud of that my project has been approvedd yesterday! Now, it’s time to build a new one.
Ships:
I made telespace100, a retro 80s teletext space portal. It fetches live space weather data from NOAA, displays NASA’s Picture of the Day, and features a Spaceflight News feed with clickable links to full articles. The hardest part was getting the CRT visual effect right using CSS and setting up keyboard navigation without breaking the classic teletext layout. I’m really proud of how authentic the UI feels and how all the dynamic space APIs blend together. To test it, just use your keyboard numbers like typing 100, 200, 300 or 400 to jump between pages and explore the news, space weather, and images....
|
1793112447.9498143
|
1793198847.9498143
|
|
46283
|
portfolio by @jworden | Stardance
|
jworden
|
3
|
4.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T18:44:13Z", "hours": 1.0, "multiplier": 1.73, "payout": 1, "blessing": "neutral", "text": "I redid my entire portfolio website in a monochrome design. I didn’t like how blocky and overwhelming my previous two were. some challenges were doing complex css and javascript as i’ve never induldged in learning them. i spent 7 hours recoding it and only got 58 minutes of time as i forgot to re-install hackatime after switching operating systems.", "repo": "https://github.com/venjae/project-castles", "demo": "https://www.jaysite.info"}, {"ship_num": 2, "ts": "2026-08-19T22:10:05Z", "hours": 1.0, "multiplier": 1.14, "payout": 1, "blessing": "neutral", "text": "i lwk redid the entire site, didnt like how clanky the old one looked, added projects, and devlogs pages", "repo": "https://github.com/venjae/project-castles", "demo": "https://www.jaysite.info"}, {"ship_num": 3, "ts": "2026-08-11T20:31:40Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Old School Runescape themed portfolio style website. It was tricky because i’ve never touched html or css before this, I tried doing some backend work but got burnt out so i didnt finish it (the guest messages do not work fyi)", "repo": "https://github.com/venjae/project-castles", "demo": "https://www.jaysite.info"}]...
|
[{"post_id": 63108, "ts": "202 [{"post_id": 63108, "ts": "2026-09-06T18:42:36Z", "hours": 0.8497, "text": "redid it.. again. made it more minimalist and modern. didnt like previous designs, no template this time!! switched to arch and forgot to install hackatime."}, {"post_id": 50644, "ts": "2026-08-19T22:09:01Z", "hours": 0.3092, "text": "made devlogs, and project pages"}, {"post_id": 49877, "ts": "2026-08-18T20:31:47Z", "hours": 0.9639, "text": "re-did entire site.. didnt like how it looked. still working"}, {"post_id": 44907, "ts": "2026-08-10T23:33:40Z", "hours": 2.0331, "text": "hackatime didnt load.. all done now"}]...
|
Title: portfolio by @jworden | Stardance
Devlogs: Title: portfolio by @jworden | Stardance
Devlogs:
hackatime didnt load.. all done now
re-did entire site.. didnt like how it looked. still working
made devlogs, and project pages
redid it.. again. made it more minimalist and modern. didnt like previous designs, no template this time!! switched to arch and forgot to install hackatime.
Ships:
I made a Old School Runescape themed portfolio style website. It was tricky because i’ve never touched html or css before this, I tried doing some backend work but got burnt out so i didnt finish it (the guest messages do not work fyi)
i lwk redid the entire site, didnt like how clanky the old one looked, added projects, and devlogs pages
I redid my entire portfolio website in a monochrome design. I didn’t like how blocky and overwhelming my previous two were. some challenges were doing complex css and javascript as i’ve never induldged in learning them. i spent 7 hours recoding it and only got 58 minutes of time as i forgot to re-install hackatime after switching operating systems....
|
1793112454.3824954
|
1793198854.3824954
|
|
45076
|
skyStart by @skyFonix | Stardance
|
skyFonix
|
2
|
12.0
|
18
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T18:09:33Z", "hours": 6.0, "multiplier": 2.33, "payout": 18, "blessing": "neutral", "text": "I added a synchronization feature across multiple devices with a centralized backend!", "repo": "https://github.com/FonixPython/skyStart", "demo": "https://skystart.cigoria.eu"}, {"ship_num": 2, "ts": "2026-08-08T19:24:01Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a start page in React, with a customizable search engine optional background blur for the photos fetched from the APOD api from NASA an unlimited amount of shortcuts collapse-able sticky notes with synchronization across tabs and windows!", "repo": "https://github.com/FonixPython/skyStart", "demo": "https://skystart.cigoria.eu"}]...
|
[{"post_id": 63086, "ts": "202 [{"post_id": 63086, "ts": "2026-09-06T17:57:09Z", "hours": 3.8553, "text": "After quite a lot of work, syncing settings and notes between devices is finally done! It’s accomplished with generated uuid, that can be shared between clients!"}, {"post_id": 61766, "ts": "2026-09-04T20:37:16Z", "hours": 1.7011, "text": "Been a while! School started so I’ve been pretty busy with that ig. I wanted to continue working on the coffeeTracker, but I’m a bit bored of that currently so I decided to work a bit more on skystart. I’ve wanted to add syncs from the begging and even tried, but ultimately gave up on in. But I’m giving it another shot! Already moved the project to typescript and initialized PrismaORM with sqlite! Next up are the endpoints! This feature will be pretty useful for me!"}, {"post_id": 43544, "ts": "2026-08-08T21:31:43Z", "hours": 0.7861, "text": "Added snap to grid and middle click to add sticky notes!"}, {"post_id": 43423, "ts": "2026-08-08T17:31:36Z", "hours": 2.1342, "text": "Added collapseable sticky notes that have a relative position to the screen so they can’t move out of sight! Also added option for background blur! I think it’s pretty much finished I just need to deploy it!"}, {"post_id": 43333, "ts": "2026-08-08T15:10:15Z", "hours": 2.7244, "text": "Changes: I connected my site to the APOD api, for the background, but directly accessing the api every time, was slow, so I made a cache for it Added a settings panel, so now the search engine can be changed, along with the shortcuts!"}, {"post_id": 42715, "ts": "2026-08-07T15:56:23Z", "hours": 1.5472, "text": "searching and shortcuts work now, next is the wallpaper from apod and maybe better shortcut icons"}]...
|
Title: skyStart by @skyFonix | Stardance
Devlogs: Title: skyStart by @skyFonix | Stardance
Devlogs:
searching and shortcuts work now, next is the wallpaper from apod and maybe better shortcut icons
Changes: I connected my site to the APOD api, for the background, but directly accessing the api every time, was slow, so I made a cache for it Added a settings panel, so now the search engine can be changed, along with the shortcuts!
Added collapseable sticky notes that have a relative position to the screen so they can’t move out of sight! Also added option for background blur! I think it’s pretty much finished I just need to deploy it!
Added snap to grid and middle click to add sticky notes!
Been a while! School started so I’ve been pretty busy with that ig. I wanted to continue working on the coffeeTracker, but I’m a bit bored of that currently so I decided to work a bit more on skystart. I’ve wanted to add syncs from the begging and even tried, but ultimately gave up on in. But I’m giving it another shot! Already moved the project to typescript and initialized PrismaORM with sqlite! Next up are the endpoints! This feature will be pretty useful for me!
After quite a lot of work, syncing settings and notes between devices is finally done! It’s accomplished with generated uuid, that can be shared between clients!
Ships:
I made a start page in React, with a customizable search engine optional background blur for the photos fetched from the APOD api from NASA an unlimited amount of shortcuts collapse-able sticky notes with synchronization across tabs and windows!
I added a synchronization feature across multiple devices with a centralized backend!...
|
1793127005.9209113
|
1793213405.9209113
|
|
58943
|
Cyber-Tab by @IshanWarrior2012 | Stardance
|
IshanWarrior2012
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T18:01:46Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made this project look like a tablet", "repo": "https://github.com/kurkuregamerz/Cyber_New_Tab", "demo": "https://kurkuregamerz.github.io/Cyber_New_Tab/"}]...
|
[{"post_id": 63070, "ts": "202 [{"post_id": 63070, "ts": "2026-09-06T17:41:52Z", "hours": 2.9578, "text": "So I made the UI look like a TAB."}]...
|
Title: Cyber-Tab by @IshanWarrior2012 | Stardance
Title: Cyber-Tab by @IshanWarrior2012 | Stardance
Devlogs:
So I made the UI look like a TAB.
Ships:
I made this project look like a tablet...
|
1793108969.3894892
|
1793195369.3894892
|
|
8385
|
My first slack bot! by @AdaChan | Stardance
|
AdaChan
|
2
|
21.0
|
75
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T17:54:11Z", "hours": 17.0, "multiplier": 4.36, "payout": 75, "blessing": "neutral", "text": "I made Koizinho, a Slack bot with several fun and useful commands. Some of my favorite commands are /koi-user, which generates a card with information about a selected user, /koi-sound, which lets you choose and listen to animal sounds, and /koi-tts, which converts text into spoken audio. The most challenging part was definitely /koi-user. I wanted the bot to generate a custom image with information about a user, but working with Canvas in JavaScript was much harder than I expected. I ran into a lot of errors, especially with positioning and generating the image correctly. I also experimented with Python and JavaScript communicating with each other before eventually deciding to keep the image generation in JavaScript. There were many moments where fixing one error somehow created another one. 😭 I’m proud that I managed to keep working on the project even when some parts became really frustrating. I learned a lot about Slack commands, modals, APIs, image generation, audio, and organizing a larger JavaScript project. /koi-user was especially satisfying because it went from being a huge mess of errors to actually working.", "repo": "https://github.com/Hallow303/MySlackBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BJ6DKPT36"}, {"ship_num": 2, "ts": "2026-07-14T22:21:44Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a Slack bot using JavaScript. My bot features nine commands, including /koi-ping, which replies with “Pong!” to check if the bot is online; /koi-apod, which uses the NASA API to send the Astronomy Picture of the Day; commands like /koi-cat, /koi-dog, /koi-fox, and /koi-duck, which use APIs to send random animal images; /koi-sound, which sends MP3 animal sounds; /koi-say, which repeats the user’s message; and /koi-tts, which converts text to speech using Microsoft Edge TTS. To develop the project, I used various APIs, primarily to fetch images from NASA and of animals. I also worked with audio files to implement the commands related to sounds and text-to-speech conversion. The biggest challenge during development was dealing with file paths. Honestly… who decided it had to work that way? 😭 I spent a long time trying to figure out why the files weren’t being found before I managed to organize everything correctly.", "repo": "https://github.com/Hallow303/MySlackBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BJ6DKPT36"}]...
|
[{"post_id": 63069, "ts": "202 [{"post_id": 63069, "ts": "2026-09-06T17:41:50Z", "hours": 3.6686, "text": "DevLog #22 I finally got it working. I discovered the error was in how the commands were being loaded, since they were all being loaded from a “commands” folder via index.js , they were taking too long to respond; because of the response time limit, an error kept popping up. I managed to fix it, though, and now it works =) I also fixed some bugs in other commands."}, {"post_id": 62211, "ts": "2026-09-05T14:00:46Z", "hours": 0.6558, "text": "DevLog #21 I made some adjustments, I think I’ll rewrite some of the bot’s commands, I fixed some existing errors (and created others =( unfortunately). But I think it’s getting better now."}, {"post_id": 61188, "ts": "2026-09-04T00:12:53Z", "hours": 0.4742, "text": "DevLog #20 I updated the project’s README; it remains quite simple because the bot is also simple, haha. I gave up on the /koi-user command for now, it was giving me too many headaches, so I’ll leave it for later."}, {"post_id": 59935, "ts": "2026-09-02T00:06:33Z", "hours": 0.4239, "text": "DevLog #19 I created a command called /koi-help that lists all the bot’s available commands. This will be useful since we already have quite a few commands; I plan to replace that wall of text with a menu where the user can choose a category (general, animals, utilities, games), and the bot will respond with the commands for that category to avoid cluttering the chat."}, {"post_id": 59929, "ts": "2026-09-01T23:27:35Z", "hours": 1.2503, "text": "DevLog #18 So… this command is really frustrating me; every time I fix something, another error pops up, and I don’t know what to do. At least most of it is already done. I hope I can sort this out soon."}, {"post_id": 58183, "ts": "2026-08-30T15:18:53Z", "hours": 1.08, "text": "DevLog #17 Still struggling with this command ( /koi-user ), it was supposed to be ‘easy,’ but I just ended up complicating the code even further. Well, I’m still trying to organize the elements in the image and fix an error that prevents the bot from sending the card to the user, it’s getting really annoying (why does JS have to be like this?). I hope to finish this command soon; maybe DevLog 18 will be about that, but for now, I’ll keep working on it 🥀🙏"}, {"post_id": 51363, "ts": "2026-08-20T23:57:09Z", "hours": 0.3933, "text": "DevLog #16 Fixing bugs again. I gave up on using Python + JavaScript; honestly, it was getting too difficult. Now I need to sort out the positioning, because when I was porting the code from Python to JS, the elements ended up out of place. I’m not sure if Python and JS handle image pixels differently."}, {"post_id": 50302, "ts": "2026-08-19T13:47:19Z", "hours": 0.5353, "text": "DevLog #15 I’m reviewing some commands I’ve already implemented and fixing a few issues. Strangely, the bot is taking a while to respond; it keeps displaying the message /koi-calc failed because the app did not respond... repeatedly, yet a few seconds later, the bot actually executes the command which is really odd."}, {"post_id": 49987, "ts": "2026-08-19T00:40:21Z", "hours": 0.8622, "text": "DevLog #14 Today I added two more simple commands /koi-rps and /koi-calc . /koi-calc actually already existed, but I had ended up deleting it. /koi-rps is a small Rock, Paper, Scissors game. The user chooses rock, paper, or scissors, and Koizinho makes a random choice. Then, the bot compares the two choices and announces whether the player won, lost, or tied."}, {"post_id": 46635, "ts": "2026-08-14T01:05:51Z", "hours": 1.1544, "text": "DevLogs #13 I didn’t implement any new features today; I just fixed some bugs that were cropping up in Koizinho’s commands."}, {"post_id": 44304, "ts": "2026-08-09T23:34:58Z", "hours": 0.4442, "text": "DevLog #12 I discovered that it’s possible to make .py and .js interact with each other. Now I’m learning how this communication works and trying not to explode in the process. XD"}, {"post_id": 44012, "ts": "2026-08-09T14:39:57Z", "hours": 1.5331, "text": "DevLog #11 Well, I finally finished the Easy-PIL part in Python! The card is ready now. I also set up the system so that data is automatically populated based on a JSON file. When someone uses the /koi-user command, it generates a JSON file with the selected user’s information, and then the Python script uses that data to create the card. I designed the card myself in Canva. I spent way too much time on something so simple XD, but I really liked the result!"}, {"post_id": 43630, "ts": "2026-08-09T00:23:13Z", "hours": 2.215, "text": "DevLog #10 I’m changing the user info card. I’m now using Python to generate the images. Honestly, using the JS Canvas is a real pain, and Python’s Easy-PIL turns out to be much easier. Now, the tricky part will be handling the communication between the .js and .py files."}, {"post_id": 41051, "ts": "2026-08-05T00:23:54Z", "hours": 1.3928, "text": "DevLog #9 I’m developing a new command called /koi-user . It displays information about the user you choose. Since the arguments of slash commands in Slack aren’t very organized (in the sense of having defined types), I had to work around the problem. In Discord, for example, you can define an argument as user_mention , so Discord itself understands that it’s a user. In Slack, it doesn’t work that way. You can’t even pass a mention as an argument to the command, lol. So the solution I found was to create a modal. When you use the command, a window opens with all the users in the workspace, and you can search by name or choose one from the list. After sending, the bot generates an image with some user information and sends the result to you. (Some text is still in Portuguese because I haven’t translated everything into English yet. ;-;)"}, {"post_id": 38937, "ts": "2026-08-01T15:28:57Z", "hours": 1.1856, "text": "DevLog #8 I decided to continue developing the bot, so here’s what I’ve done since the last update: 1. Code organization I improved the project’s organization by separating command groups into different files. Now, each file has a specific responsibility: animals → animal-related commands, such as /koi-duck , /koi-cat , /koi-dog , and others. space → space-related commands, such as /koi-apod . I plan to add more commands in this category later. utility → general commands, such as /koi-say and /koi-tts . This has made the code much easier to maintain and allows for easier addition of new features. 2. Loading system for responses One thing that really bothered me was when a command took a while to respond. On Discord, when a bot is processing something, a “Bot is thinking…” message appears while it works. I couldn’t find an exact equivalent on Slack, so I decided to create my own system. Now, some commands send a loading message first—for example: 🦆 Looking for a duck… Once the command finishes, that message is updated with the final response. This makes for a much better experience; before, it used to look like the bot had stopped working lol. 3. Direct messages with the bot I finally managed to enable DMs for the bot! Now you can chat directly with Koizinho in private. It can already respond to simple messages, for example: User: Hi! Koizinho: Hello! I still want to improve this part. Maybe I’ll add some form of AI or a smarter conversation system in the future."}, {"post_id": 28574, "ts": "2026-07-14T22:13:38Z", "hours": 0.2719, "text": "DevLog #7 The bot is finally online! 🚀 I deployed it to Hack Club Nest, so now it runs 24/7."}, {"post_id": 27993, "ts": "2026-07-13T23:19:54Z", "hours": 0.6744, "text": "DevLog #6 Okay… I finally finished the project’s README! 🎉 I think it turned out pretty cool; it’s not super professional yet, but I think it does a good job of showing what the bot can do. I might improve it in the future whenever I can shake off the laziness, haha. I also realized I used Axios quite a bit in this project. Most of the new commands rely on external APIs. There isn’t much else to add to this devlog; at least I’m happy it’s not just a bot that replies “pong” 😆"}, {"post_id": 27958, "ts": "2026-07-13T22:02:39Z", "hours": 0.6086, "text": "DevLog #5 New command, wow!! 🎉🎉🎉🎉 Person: “Wait… isn’t that just /koi-say ?” Well… sort of. It’s basically an improved /koi-say . Meet the new command: /koi-tts . As the name suggests, TTS stands for Text to Speech . The bot takes the text you send, uses Microsoft Edge’s TTS voices to turn it into an MP3, and then sends the audio back to you. Pretty cool. =) (I hate path 😭)"}, {"post_id": 27928, "ts": "2026-07-13T21:07:14Z", "hours": 0.2622, "text": "DevLog #4 Today I added a very simple command: /koi-say . It does exactly what the name suggests: the bot repeats the message you type. Nothing spectacular, but it’s a classic, useful command for testing interactions. If you don’t type anything, the bot replies by letting you know that text is required. The message might seem a bit blunt… but remember: it’s just a koizinho . 😭 By the way, I was thinking about how to explain the bot’s name in English. I think the closest equivalent would be something like “little koi” . In Portuguese, we use the suffix -zinho to form a diminutive that often conveys affection or cuteness. So, koizinho would be something like a “little koi” or an affectionate way to refer to the bot."}, {"post_id": 27912, "ts": "2026-07-13T20:43:58Z", "hours": 0.6733, "text": "DevLog #3 So… continuing the animal saga, I present to you: /koi-sound . 🐾 This command makes the bot send a humble animal selection menu. Then, you just pick one (there are still only a few, hahaha), and the bot replies with an .mp3 file containing the chosen animal’s sound. The list of animals is still small, but I plan to add many more in future devlogs. And a quick rant: I hate path . 😭 Who decided that handling file paths had to be done this way?"}, {"post_id": 27881, "ts": "2026-07-13T19:50:39Z", "hours": 0.7331, "text": "DevLog #2 Today I added 4 new commands to the bot. To be honest, it wasn’t very difficult. It was basically copying the code from the first command, changing the API, and adapting it to the particularities of each one. (Seriously… who decided that each API would return the data in a different way? 😭 I just wanted to grab a humble image.) The new commands are: 🦆 /koi-duck — shows a picture of a random duck. 🐱 /koi-cat — shows a picture of a random cat. 🐶 /koi-dog — shows a picture of a random dog. 🦊 /koi-fox — shows a picture of a random fox. It was a short devlog, but at least now the bot is becoming more fun."}, {"post_id": 27406, "ts": "2026-07-12T23:10:13Z", "hours": 1.0067, "text": "DevLog #1 For this fresh start, I’ve added two commands: /koi-ping — a command that makes the bot reply with “🏓 Pong!”. /koi-apod — fetches NASA’s Astronomy Picture of the Day (APOD) and sends the image along with its description. Well… I think that’s it for this devlog."}]...
|
Title: My first slack bot! by @AdaChan | Stardance Title: My first slack bot! by @AdaChan | Stardance
Devlogs:
DevLog #1 For this fresh start, I’ve added two commands: /koi-ping — a command that makes the bot reply with “🏓 Pong!”. /koi-apod — fetches NASA’s Astronomy Picture of the Day (APOD) and sends the image along with its description. Well… I think that’s it for this devlog.
DevLog #2 Today I added 4 new commands to the bot. To be honest, it wasn’t very difficult. It was basically copying the code from the first command, changing the API, and adapting it to the particularities of each one. (Seriously… who decided that each API would return the data in a different way? 😭 I just wanted to grab a humble image.) The new commands are: 🦆 /koi-duck — shows a picture of a random duck. 🐱 /koi-cat — shows a picture of a random cat. 🐶 /koi-dog — shows a picture of a random dog. 🦊 /koi-fox — shows a picture of a random fox. It was a short devlog, but at least now the bot is becoming more fun.
DevLog #3 So… continuing the animal saga, I present to you: /koi-sound . 🐾 This command makes the bot send a humble animal selection menu. Then, you just pick one (there are still only a few, hahaha), and the bot replies with an .mp3 file containing the chosen animal’s sound. The list of animals is still small, but I plan to add many more in future devlogs. And a quick rant: I hate path . 😭 Who decided that handling file paths had to be done this way?
DevLog #4 Today I added a very simple command: /koi-say . It does exactly what the name suggests: the bot repeats the message you type. Nothing spectacular, but it’s a classic, useful command for testing interactions. If you don’t type anything, the bot replies by letting you know that text is required. The message might seem a bit blunt… but remember: it’s just a koizinho . 😭 By the way, I was thinking about how to explain the bot’s name in English. I think the closest equivalent would be something like “little koi” . In Portuguese, we use the suffix -zinho to form a diminutive that often conveys affection or cuteness. So, koizinho would be something like a “little koi” or an affectionate way to refer to the bot.
DevLog #5 New command, wow!! 🎉🎉🎉🎉 Person: “Wait… isn’t that just /koi-say ?” Well… sort of. It’s basically an improved /koi-say . Meet the new command: /koi-tts . As the name suggests, TTS stands for Text to Speech . The bot takes the text you send, uses Microsoft Edge’s TTS voices to turn it into an MP3, and then sends the audio back to you. Pretty cool. =) (I hate path 😭)
DevLog #6 Okay… I finally finished the project’s README! 🎉 I think it turned out pretty cool; it’s not super professional yet, but I think it does a good job of showing what the bot can do. I might improve it in the future whenever I can shake off the laziness, haha. I also realized I used Axios quite a bit in this project. Most of the new commands rely on external APIs. There isn’t much else to add to this devlog; at least I’m happy it’s not just a bot that replies “pong” 😆
DevLog #7 The bot is finally online! 🚀 I deployed it to Hack Club Nest, so now it runs 24/7.
DevLog #8 I decided to continue developing the bot, so here’s what I’ve done since the last update: 1. Code organization I improved the project’s organization by separating command groups into different files. Now, each file has a specific responsibility: animals → animal-related commands, such as /koi-duck , /koi-cat , /koi-dog , and others. space → space-related commands, such as /koi-apod . I plan to add more commands in this category later. utility → general commands, such as /koi-say and /koi-tts . This has made the code much easier to maintain and allows for easier addition of new features. 2. Loading system for responses One thing that really bothered me was when a command took a while to respond. On Discord, when a bot is processing something, a “Bot is thinking…” message appears while it works. I couldn’t find an exact equivalent on Slack, so I decided to create my own system. Now, some commands send a loading message first—for example: 🦆 Looking for a duck… Once the command finishes, that message is updated with the final response. This makes for a much better experience; before, it used to look like the bot had stopped working lol. 3. Direct messages with the bot I finally managed to enable DMs for the bot! Now you can chat directly with Koizinho in private. It can already respond to simple messages, for example: User: Hi! Koizinho: Hello! I still want to improve this part. Maybe I’ll add some form of AI or a smarter conversation system in the future.
DevLog #9 I’m developing a new command called /koi-user . It displays information about the user you choose. Since the arguments of slash commands in Slack aren’t very organized (in the sense of having defined types), I had to work around the problem. In Discord, for example, you can define an argument as user_mention , so Discord itself understands that it’s a user. In Slack, it doesn’t work that way. You can’t even pass a mention as an argument to the command, lol. So the solution I found was to create a modal. When you use the command, a window opens with all the users in the workspace, and you can search by name or choose one from the list. After sending, the bot generates an image with some user information and sends the result to you. (Some text is still in Portuguese because I haven’t translated everything into English yet. ;-;)
DevLog #10 I’m changing the user info card. I’m now using Python to generate the images. Honestly, using the JS Canvas is a real pain, and Python’s Easy-PIL turns out to be much easier. Now, the tricky part will be handling the communication between the .js and .py files.
DevLog #11 Well, I finally finished the Easy-PIL part in Python! The card is ready now. I also set up the system so that data is automatically populated based on a JSON file. When someone uses the /koi-user command, it generates a JSON file with the selected user’s information, and then the Python script uses that data to create the card. I designed the card myself in Canva. I spent way too much time on something so simple XD, but I really liked the result!
DevLog #12 I discovered that it’s possible to make .py and .js interact with each other. Now I’m learning how this communication works and trying not to explode in the process. XD
DevLogs #13 I didn’t implement any new features today; I just fixed some bugs that were cropping up in Koizinho’s commands.
DevLog #14 Today I added two more simple commands /koi-rps and /koi-calc . /koi-calc actually already existed, but I had ended up deleting it. /koi-rps is a small Rock, Paper, Scissors game. The user chooses rock, paper, or scissors, and Koizinho makes a random choice. Then, the bot compares the two choices and announces whether the player won, lost, or tied.
DevLog #15 I’m reviewing some commands I’ve already implemented and fixing a few issues. Strangely, the bot is taking a while to respond; it keeps displaying the message /koi-calc failed because the app did not respond... repeatedly, yet a few seconds later, the bot actually executes the command which is really odd.
DevLog #16 Fixing bugs again. I gave up on using Python + JavaScript; honestly, it was getting too difficult. Now I need to sort out the positioning, because when I was porting the code from Python to JS, the elements ended up out of place. I’m not sure if Python and JS handle image pixels differently.
DevLog #17 Still struggling with this command ( /koi-user ), it was supposed to be ‘easy,’ but I just ended up complicating the code even further. Well, I’m still trying to organize the elements in the image and fix an error that prevents the bot from sending the card to the user, it’s getting really annoying (why does JS have to be like this?). I hope to finish this command soon; maybe DevLog 18 will be about that, but for now, I’ll keep working on it 🥀🙏
DevLog #18 So… this command is really frustrating me; every time I fix something, another error pops up, and I don’t know what to do. At least most of it is already done. I hope I can sort this out soon.
DevLog #19 I created a command called /koi-help that lists all the bot’s available commands. This will be useful since we already have quite a few commands; I plan to replace that wall of text with a menu where the user can choose a category (general, animals, utilities, games), and the bot will respond with the commands for that category to avoid cluttering the chat.
DevLog #20 I updated the project’s README; it remains quite simple because the bot is also simple, haha. I gave up on the /koi-user command for now, it was giving me too many headaches, so I’ll leave it for later.
DevLog #21 I made some adjustments, I think I’ll rewrite some of the bot’s commands, I fixed some existing errors (and created others =( unfortunately). But I think it’s getting better now.
DevLog #22 I finally got it working. I discovered the error was in how the commands were being loaded, since they were all being loaded from a “commands” folder via index.js , they were taking too long to respond; because of the response time limit, an error kept popping up. I managed to fix it, though, and now it works =) I also fixed some bugs in other commands.
Ships:
I created a Slack bot using JavaScript. My bot features nine commands, including /koi-ping, which replies with “Pong!” to check if the bot is online; /koi-apod, which uses the NASA API to send the Astronomy Picture of the Day; commands like /koi-cat, /koi-dog, /koi-fox, and /koi-duck, which use APIs to send random animal images; /koi-sound, which sends MP3 animal sounds; /koi-say, which repeats the user’s message; and /koi-tts, which converts text to speech using Microsoft Edge TTS. To develop the project, I used various APIs, primarily to fetch images from NASA and of animals. I also worked with audio files to implement the commands related to sounds and text-to-speech conversion. The biggest challenge during development was dealing with file paths. Honestly… who decided it had to work that way? 😭 I spent a long time trying to figure out why the files weren’t being found before I managed to organize everything correctly.
I made Koizinho, a Slack bot with several fun and useful commands. Some of my favorite commands are /koi-user, which generates a card with information about a selected user, /koi-sound, which lets you choose and listen to animal sounds, and /koi-tts, which converts text into spoken audio. The most challenging part was definitely /koi-user. I wanted the bot to generate a custom image with information about a user, but working with Canvas in JavaScript was much harder than I expected. I ran into a lot of errors, especially with positioning and generating the image correctly. I also experimented with Python and JavaScript communicating with each other before eventually deciding to keep the image generation in JavaScript. There were many moments where fixing one error somehow created another one. 😭 I’m proud that I managed to keep working on the project even when some parts became really frustrating. I learned a lot about Slack commands, modals, APIs, image generation, audio, and organizing a larger JavaScript project. /koi-user was especially satisfying because it went from being a huge mess of errors to actually working....
|
1793127351.7577357
|
1793213751.7577357
|
|
44760
|
NHNK by @bali0531 | Stardance
|
bali0531
|
3
|
203.0
|
3419
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T17:48:14Z", "hours": 85.0, "multiplier": 19.62, "payout": 1664, "blessing": "neutral", "text": "Last ship was about optimizing stuff and fixing small bugs, while this ship is a bit more focused on new features, a new OOBE page, dev mode for advanced statistics about the application, and another batch of bug and UI fixes. So the main goal was to make the app look better and provide a better experience while using it overall + making it easier to diagnose possible problems through the devmode. UI/UX fixes include a new OLED theme, fixed overlapping elements, fixed contrast of the pages. For the UX part a new Out Of Box Experience, its basically a new login/info flow on first start, so now instead of separate pages for TOS/PP login, institution search etc, everything is on one seemless experience. It had some bug fixes too, like the .ics calendar exporting and auto-updating has been fixed now. Also fixed the broken widgets too so now it actually shows what classes you have that day. In terms of New Functions this ship introduces a new Dev mode by clicking the version number fast multiple times, it has a lot of informations about the startup, resource usage etc. For the future plans, I don’t have any new idea for now, the ones I had turned out to be not possible because of the api I have to use, I will probably fix the findings from the reviews of this ship + google playstore closed testing findings too. If you have any good idea make sure to write it down in the reviews / on the github page. (or on discord at @ bali411)", "repo": "https://github.com/Bali0531-RC/NHNK", "demo": "https://github.com/Bali0531-RC/NHNK/releases"}, {"ship_num": 2, "ts": "2026-08-29T18:07:52Z", "hours": 59.0, "multiplier": 18.22, "payout": 934, "blessing": "neutral", "text": "The previous ship was about fixing up the basics and making everyting work as intended. If you are interested in the main points of this project etc make sure to read the previous ship description too. In this ship I focused on optimizing the app, making the load time shorter, fixing some bugs like haptics etc, also logged the readme and website rework too. This ship is mainly for ending this stage before I start working on new features and more fixes. I optimized almost everything I can, made loading parallel where it was possible etc. Next ship will be packed with new features, I plan to add a dev mode to help find and debug edge cases or loading issues / resource leaks, also planning to add an “OOBE” to make the onboarding more seamless and modern. (No new images for this ship, since most of the changes are code related and not cosmetical. )", "repo": "https://github.com/Bali0531-RC/NHNK", "demo": "https://github.com/Bali0531-RC/NHNK/releases"}, {"ship_num": 3, "ts": "2026-08-11T18:50:41Z", "hours": 59.0, "multiplier": 17.56, "payout": 821, "blessing": "neutral", "text": "This project’s (NHNK = “Nem Hivatalos Neptun Kliens”, or in english “Unofficial Neptun Client” so you can say unc) goal is to make the life of university students easier, by creating a mobile app that lets them view their schedule, grades, statistics, upcoming events, messages and a lot more in one place, without the need to login every 30 minutes. The main problem was figuring out how the official university system “Neptun” works, and finding their API routes, but after figuring that out, the app works perfectly fine. This project makes major improvements over the official websites, First of all, every university has their own URL for the management site, that the students have to find / memorize, my app only needs the name of the university, and it automatically uses the saved address(es) from our list. Most universities have multiple urls/servers for “Neptun”, so if one is down, there is another. This again requires the users to figure out which server is up and usable, my app auto selects a server from the fallback list, if the default website is not available, and makes the switching seamless without even the users notice. The “Neptun” website also require users to login after 30min inactivity again, while in the same time most universities enabled the function to require 2fa for all accounts. While this is good for security, it makes checking your schedule grades etc a hassle. My app only needs users to enter their details once, and it wont ask for them again (except if the auth fails because of invalid credentials.), I know it might seems a security issue, that the app wont log users out, but the app is fully read only, as its only meant to check your data. these are the main improvements, but there are a lot more fun and usable features in the app, like detailed statistics etc. You can try the app out on https://nhnk.bali0531.hu via the live demo, or you can download it from github releases (and google play store too soon), but it requires a hungarian university student status to log in. (For non hungarian people who are interested in the app, a DEMO mode is also available in the app itself, but at that point you can just check it out on the website without downloading anything.", "repo": "https://github.com/Bali0531-RC/NHNK", "demo": "https://github.com/Bali0531-RC/NHNK/releases"}]...
|
[{"post_id": 63063, "ts": "202 [{"post_id": 63063, "ts": "2026-09-06T17:32:06Z", "hours": 5.5081, "text": "Added an OLED theme, picked it on my phone, and most of the screen was still grey. Rather than argue with my own eyes I took a screenshot and read the actual pixel values out of it, which took about a minute and saved me a lot of guessing. The background was 121212 when I had asked for pure black. Turned out the theme was never reaching the screen. The app builds its colour scheme without setting a surface colour, so every page fell back to Material’s own default grey and quietly ignored the palette it had been handed. One line, and the background went to 000000 and the cards to 080808. The bit I liked was the leftovers. A few tiles stayed light and I was about to go and edit the seventy something places that paint card backgrounds by hand, until I noticed the colour was 3B4548. That is not grey. Grey has equal channels. It was the teal accent bleeding in, because Material tints raised surfaces with your primary colour, so that was one setting too rather than an afternoon of find and replace. Also checked the contrast while I was in there and every accent clears AA on black between 9.37 and 18.80 to one, and found that choosing OLED did not survive the phone flipping to light mode and back, because the theme listener was overwriting whatever you picked. Not finished yet, the tile fix still needs a look on a real device."}, {"post_id": 62859, "ts": "2026-09-06T12:01:46Z", "hours": 9.5653, "text": "The old setup opened with a page of legal text and then asked whether you wanted to pick your school from a list or type in a Neptun URL, which is a strange thing to ask someone who has not been told what the app does yet. One of the reviews said it was a bit hard to set up and that was the honest version of it. It is four steps now with a bar across the top so you can see where the end is. Terms first, then a screen that actually says what NHNK is, then your school, then the login. The school search used to live behind that how do you want to log in question and now it is just the third step, so there is one less screen to get through. While testing it I typed obuda and got nothing back, because the school is called Óbudai Egyetem and I had not thought about accents. Nobody types those into a search box. It folds them now and there are tests so it stays that way. The screen I deleted was also quietly running the update check and the language prompt, which I only noticed on the last read through before removing it. Testing any of this used to mean wiping my own login, so debug builds install separately now."}, {"post_id": 62309, "ts": "2026-09-05T16:43:11Z", "hours": 5.9292, "text": "The next release replaces the login flow, so before touching anything I sat down and read the one I already have. It is four screens before anyone sees a timetable, all of them living in a single file of 2148 lines with five page classes in it. Disclosure, then pick how you want to log in, then find your university, then your Neptun code and password. The university list is 54 entries that I typed in by hand, and the app openly admits in its own description that your school might not be there. That is the part I keep coming back to, because someone whose university is missing has to understand what a Neptun URL is before they can get in. I also found out I had a note wrong. I had written down that the app forces Hungarian and needs country detection added. It does not. It already reads the phone language and falls back to English for anything it does not have. Good thing I checked before building a feature that exists. The genuinely awkward bit is the disclaimer. Translations get downloaded from GitHub while the app runs, which is lovely for adding languages and completely wrong for legal text, since nothing downloaded should be able to rewrite what the disclaimer says. So it is compiled in, and the one screen that most needs to be understood is the one screen stuck in two languages. I do not have a clean answer for that yet. Smaller things I wrote down. A class called SetupPageInstitudeSelection, spelled that way in eleven places. One university with its URL fixed up by hand inside the login handler. The Linux desktop build does not compile at all, which I only discovered because I tried to run the first-run flow there rather than wipe my own account off my phone. Four screens is not really the problem. Not knowing which of them people give up on is."}, {"post_id": 62096, "ts": "2026-09-05T10:46:49Z", "hours": 6.6283, "text": "Someone sent me a screenshot of the home screen widget saying they had no classes, last updated 00:00. They had a class at nine. The 00:00 was not a rounding problem or a timezone problem, it was every day, for everyone, since the widget shipped. When the app caches your week it stores the date as midnight on purpose, because the check for whether the cache is a day old compares whole days. The widget read that same value and printed the clock part of it, so it was showing you the definition of midnight rather than when anything happened. Reading the fetch path to fix it turned up a worse one. If a refresh fails the app puts the old rows back so you still have something to look at, which is right, but then it saves them again with today’s date on them. A week of failed refreshes and the cache still swears it is current. Restored rows keep their original timestamp now. The widget cannot fetch anything by itself, so past a day it says to open the app instead of telling you your day is empty. I nearly shipped that badly too, because the new timestamp only gets written on a real fetch, so every existing user would have been told to refresh the moment they updated. It falls back to the old date for them until their next fetch. An empty widget is fine. An empty widget that looks confident is not."}, {"post_id": 61698, "ts": "2026-09-04T18:56:47Z", "hours": 2.2917, "text": "The statistics page asks you to type how many credits your degree is, which has always annoyed me because Neptun obviously knows. So I went looking, and it will not tell me. There is an endpoint for it sitting in my own code that I have never called, except it only exists on the old API and the modern one has no equivalent among the ten endpoints I use. The one call that touches your programme at all already runs on every startup, and it returns three fields: whether the training is current, its id, and its name. Not a credit count anywhere. I even tried working it out from the programme name and that failed too, because it is a plain string with no BSc or MSc in it. So the box where you type 180 stays, and the release that was going to remove it does not exist. An evening to find that out is a lot cheaper than half a feature."}, {"post_id": 61464, "ts": "2026-09-04T12:10:44Z", "hours": 10.0589, "text": "Tap the version seven times and the app now has a developer tab: startup timings, every request it makes, how stale each cache is, and how many frames it dropped. The interesting part was not building it, it was working out what it is allowed to say, because this thing is holding somebody’s Neptun password. So the list of stored keys is an allowlist rather than a blocklist, meaning a key I add next year is hidden until I say otherwise, and the cached grades and messages only ever show their size. The redaction lives in the recorder instead of the screen, which matters more than it sounds, because one of my own URLs turned out to be a credential and a log that printed URLs would have published it."}, {"post_id": 60573, "ts": "2026-09-03T00:32:04Z", "hours": 10.0933, "text": "Next release I want a developer tab that shows what the app is storing and every request it makes, which sounds harmless right up until you remember my app is holding somebody’s Neptun password. So before writing any of it I went through all 77 things it keeps on disk, and only 46 can have their value put on screen. The trap was sorting by key name, because CachedMarkbook_3 sounds like nothing and is actually somebody’s grades, so that whole group gets to show its size and age and nothing else. The one that nearly got me is the calendar export link, which keeps working with no session at all, meaning the URL is the credential, and a network log that prints URLs would have published it in plain text."}, {"post_id": 60246, "ts": "2026-09-02T14:26:30Z", "hours": 5.3231, "text": "Someone reviewing the last ship said my contrast was bad, the corners did not match and things needed more padding, so instead of squinting at it I went and measured all three. Every accent colour in the light theme failed WCAG AA, and the worst was the one I use for links and section headers, sitting at 1.43 to 1, which is pale blue text on pale grey. Then I counted the corner radii and found fifteen different values across 88 places, which is exactly the kind of thing you stop seeing in your own app. The padding one turned out to be a single number, the search box above the message list had zero bottom padding, and while I was looking at spacing I finally noticed the week switcher on the timetable has always been two separate boxes of different widths with mismatched corners, pretending to be one panel."}, {"post_id": 59878, "ts": "2026-09-01T21:18:00Z", "hours": 10.0089, "text": "I added screen reader labels to the payments, messages and periods cards, then dumped the accessibility tree off the phone to actually hear what came out. Good thing, because the order was backwards: every card read its details first and the name of the thing last, so a subject announced itself as “6 credits, not completed, Introduction to Programming”. That was true of the markbook labels I shipped months ago as well, which nobody had ever mentioned to me. Also finished the calendar export fix from last time, so exporting your timetable no longer tells you the file type is unsupported."}, {"post_id": 59071, "ts": "2026-08-31T17:55:45Z", "hours": 9.8689, "text": "Spent this one adding screen reader labels to the cards that never had any, and then dumping the accessibility tree off the phone to check what actually comes out. Two things fell out of that: the order was backwards everywhere, so cards read their details before the name of the thing, and that was true of labels I shipped months ago too. The honest scoreboard is three of seven card types verified, payments is impossible for me to check because my account has no bills on it, and I have not run an actual screen reader yet, only read the tree, which tells me nothing about focus order or whether you can even swipe to them. So this one is going into closed testing before it gets a tag."}, {"post_id": 58018, "ts": "2026-08-30T11:09:29Z", "hours": 9.7206, "text": "Someone told me the timetable export says “unsupported file type” on their phone, and then mine did it too, which at least made it easy to chase. Turns out the plugin I use picks the file type from a big list of extensions and there is no entry for ics, so it falls through to / and Android hands that to whatever generic file previewer the manufacturer ships, which obviously cannot read a calendar. The annoying part is the phone had the right app the whole time, because Honor’s calendar registers itself for text/calendar and I just never asked for it. One extra argument and the export now offers the calendar first, which ships in the next update."}, {"post_id": 57516, "ts": "2026-08-29T18:00:19Z", "hours": 2.3325, "text": "Last time I said the real problem was that startup waits for the keystore at all, and that fixing it meant making six getters async across a pile of call sites. Did it, and it went from 239ms to 144ms because the timetable comes out of the cache and never needed a password in the first place. What I did not expect was that the compiler only caught 22 of the 27 places that broke, because the last five build the old API request body by gluing strings together, and a string is happy to take a Future and turn it into “Instance of ‘Future<String?>’”. So those five would have quietly posted that to the university as my password instead of failing, which I only found because I went looking after the analyser had already gone green."}, {"post_id": 57413, "ts": "2026-08-29T15:39:47Z", "hours": 9.7889, "text": "Last release I added timers to the app. This one I finally pointed them at startup, and the answer was annoying: 153ms of a 251ms cold start was one function, and 128ms of that was six separate trips to the Android keystore to read six saved values one at a time. None of which the timetable needs, because it draws from cache. I have a fix half done that reads them once and starts before anything asks, but while measuring I noticed the bigger problem is that startup waits for those values at all, and unpicking that means changing six getters used in 46 places, so that is the next few evenings."}, {"post_id": 56915, "ts": "2026-08-28T22:43:52Z", "hours": 9.1436, "text": "I have been shipping features for weeks without ever measuring any of them. So I plugged the phone in and actually timed things, and the Upcoming screen I added last week turned out to fire eight calendar requests one after another. One slow week took 3.2 seconds and the other seven just sat in the queue behind it. Sending them four at a time took the whole thing from 3987ms to 297ms. Then while I was reading the log I noticed every haptic in the app has been throwing an exception instead of vibrating, because I gave Android an amplitude list of the wrong length in all seven places, so vibration has never once worked."}, {"post_id": 56621, "ts": "2026-08-28T13:34:18Z", "hours": 10.9206, "text": "My app ships a 22.9 MB emoji font to draw 28 emoji. It’s bundled on purpose, so the icons look identical on every phone instead of Samsung doing its own thing. Fine goal. But it’s the whole font, 1485 codepoints, sitting in the base module so every single user downloads all of it. Subset it to the ones I actually use and it’s 1.93 MB.Most of what was left after subsetting turned out to be the SVG table. Google ships every glyph twice, once as COLR and once as SVG, and Skia only draws the COLR one, so 6.1 MB of it was duplicate artwork nothing would ever read.Also learned to measure the thing that matters. Uncompressed it’s a 21 MB saving, which sounds great, but the font compresses inside the APK so the real number is 7.30 MB to 1.01 MB, and the APK went 67.6 to 61.0. Still good, just not the number I wanted to write. Separately, my last release failed twice for reasons that had nothing to do with me: CI tracked Flutter stable, stable moved to 3.47, and it raised the minimum Gradle and then the minimum AGP. Pinned CI to the version I actually build with."}, {"post_id": 56177, "ts": "2026-08-27T20:14:51Z", "hours": 10.6, "text": "Last ship’s feedback was blunt: five people said they couldn’t tell what the project was because they don’t read Hungarian. The UI switched to English fine, but the demo data never did, so you’d open it and still get “Analízis I. (előadás)” and “bejelentkezési időszak”. So every bit of fake data the demo makes up now follows the app language. Timetable, exams, deadlines, grades, four semesters of history, payments, periods, mail. Two things had to stay Hungarian underneath though: the period icons are picked by string-matching the period name (Neptun only ever replies in Hungarian), and the “is this payment cancelled” check keys off the word “törölt”. Translating those naively would’ve silently killed every period icon and made cancelled payments look paid. Kept the raw values for the logic, translate only what’s on screen.Found a bug doing it too. Switched to Hungarian and half the demo stayed English, because markbook/payments/periods cache their data for 24h and nobody had exempted demo mode. The calendar already did. Now they all do.Also killed 9 languages. German, Romanian, Russian, Turkish, Ukrainian, Arabic, Spanish, Chinese and Pirate were all downloadable and all mostly half-translated, so picking one left you in a mix of two languages, which is worse than just being in one. Magyar and English only now."}, {"post_id": 55132, "ts": "2026-08-26T16:25:24Z", "hours": 16.6372, "text": "Spent the last stretch on the parts of the project that aren’t the app itself. Rewrote the README three times. First pass just bolted an English version onto the Hungarian one and it ballooned to 351 lines. Second pass I tried to make it “proper” and somehow ended up at 3,185 words, which is longer than most of my essays and nobody was ever going to read it. Third pass I threw that out and wrote it like I’d explain the thing to a friend. Ended up at 184 lines, shorter than what I started with, in two languages instead of one.Then rewrote the whole website. The old one had a big slogan hero, “Neptun, the way it should work on your phone”, which sounds nice but doesn’t tell you what the thing actually is. New one just says it: an unofficial Neptun client for Android, with a little spec row underneath (platform, licence, tracking, price) so you get the whole picture in about two seconds. 13 files, ~5k lines. Also finally wired the site into the app repo as a submodule so they stop drifting apart. Not the most exciting work but the feedback from last ship was that people couldn’t tell what the project was if they didn’t speak Hungarian, so this was the fix."}, {"post_id": 45330, "ts": "2026-08-11T18:32:36Z", "hours": 11.6211, "text": "Your exams were always in the app, you just had to guess which week to scroll to. Built an Upcoming screen that pulls every exam, deadline and open registration period into one list with countdowns, plus a degree progress ring and proper subject pages that finally put the grade, the classes and the exam together."}, {"post_id": 44854, "ts": "2026-08-10T21:49:43Z", "hours": 7.0381, "text": "Was adding a stats page and realised the app had been downloading all 6 of my semesters this whole time and then throwing away everything except the last one. So now there’s actual history: semester averages, credits, grade distribution, on charts I painted by hand because adding a chart library for two graphs felt dumb.Also found out cancelled payments were counting as money you’d spent, so it was telling you that you’d paid 5000 Ft you never paid. Fixed that too. 1.2.3 is out."}, {"post_id": 44620, "ts": "2026-08-10T14:47:36Z", "hours": 8.6858, "text": "I was shipping 20 MB that nobody downloads"}, {"post_id": 44179, "ts": "2026-08-09T19:26:38Z", "hours": 8.5783, "text": "Added live demo for the app to the website."}, {"post_id": 43585, "ts": "2026-08-08T22:40:44Z", "hours": 20.7336, "text": "Fixed some bugs, added widgets, offline mode and a lot more stuff. 5/14 days done until playstore prod release."}, {"post_id": 42540, "ts": "2026-08-07T10:46:27Z", "hours": 2.4797, "text": "Play Store closed testing is in progress!"}]...
|
Title: NHNK by @bali0531 | Stardance
Devlogs:
Pla Title: NHNK by @bali0531 | Stardance
Devlogs:
Play Store closed testing is in progress!
Fixed some bugs, added widgets, offline mode and a lot more stuff. 5/14 days done until playstore prod release.
Added live demo for the app to the website.
I was shipping 20 MB that nobody downloads
Was adding a stats page and realised the app had been downloading all 6 of my semesters this whole time and then throwing away everything except the last one. So now there’s actual history: semester averages, credits, grade distribution, on charts I painted by hand because adding a chart library for two graphs felt dumb.Also found out cancelled payments were counting as money you’d spent, so it was telling you that you’d paid 5000 Ft you never paid. Fixed that too. 1.2.3 is out.
Your exams were always in the app, you just had to guess which week to scroll to. Built an Upcoming screen that pulls every exam, deadline and open registration period into one list with countdowns, plus a degree progress ring and proper subject pages that finally put the grade, the classes and the exam together.
Spent the last stretch on the parts of the project that aren’t the app itself. Rewrote the README three times. First pass just bolted an English version onto the Hungarian one and it ballooned to 351 lines. Second pass I tried to make it “proper” and somehow ended up at 3,185 words, which is longer than most of my essays and nobody was ever going to read it. Third pass I threw that out and wrote it like I’d explain the thing to a friend. Ended up at 184 lines, shorter than what I started with, in two languages instead of one.Then rewrote the whole website. The old one had a big slogan hero, “Neptun, the way it should work on your phone”, which sounds nice but doesn’t tell you what the thing actually is. New one just says it: an unofficial Neptun client for Android, with a little spec row underneath (platform, licence, tracking, price) so you get the whole picture in about two seconds. 13 files, ~5k lines. Also finally wired the site into the app repo as a submodule so they stop drifting apart. Not the most exciting work but the feedback from last ship was that people couldn’t tell what the project was if they didn’t speak Hungarian, so this was the fix.
Last ship’s feedback was blunt: five people said they couldn’t tell what the project was because they don’t read Hungarian. The UI switched to English fine, but the demo data never did, so you’d open it and still get “Analízis I. (előadás)” and “bejelentkezési időszak”. So every bit of fake data the demo makes up now follows the app language. Timetable, exams, deadlines, grades, four semesters of history, payments, periods, mail. Two things had to stay Hungarian underneath though: the period icons are picked by string-matching the period name (Neptun only ever replies in Hungarian), and the “is this payment cancelled” check keys off the word “törölt”. Translating those naively would’ve silently killed every period icon and made cancelled payments look paid. Kept the raw values for the logic, translate only what’s on screen.Found a bug doing it too. Switched to Hungarian and half the demo stayed English, because markbook/payments/periods cache their data for 24h and nobody had exempted demo mode. The calendar already did. Now they all do.Also killed 9 languages. German, Romanian, Russian, Turkish, Ukrainian, Arabic, Spanish, Chinese and Pirate were all downloadable and all mostly half-translated, so picking one left you in a mix of two languages, which is worse than just being in one. Magyar and English only now.
My app ships a 22.9 MB emoji font to draw 28 emoji. It’s bundled on purpose, so the icons look identical on every phone instead of Samsung doing its own thing. Fine goal. But it’s the whole font, 1485 codepoints, sitting in the base module so every single user downloads all of it. Subset it to the ones I actually use and it’s 1.93 MB.Most of what was left after subsetting turned out to be the SVG table. Google ships every glyph twice, once as COLR and once as SVG, and Skia only draws the COLR one, so 6.1 MB of it was duplicate artwork nothing would ever read.Also learned to measure the thing that matters. Uncompressed it’s a 21 MB saving, which sounds great, but the font compresses inside the APK so the real number is 7.30 MB to 1.01 MB, and the APK went 67.6 to 61.0. Still good, just not the number I wanted to write. Separately, my last release failed twice for reasons that had nothing to do with me: CI tracked Flutter stable, stable moved to 3.47, and it raised the minimum Gradle and then the minimum AGP. Pinned CI to the version I actually build with.
I have been shipping features for weeks without ever measuring any of them. So I plugged the phone in and actually timed things, and the Upcoming screen I added last week turned out to fire eight calendar requests one after another. One slow week took 3.2 seconds and the other seven just sat in the queue behind it. Sending them four at a time took the whole thing from 3987ms to 297ms. Then while I was reading the log I noticed every haptic in the app has been throwing an exception instead of vibrating, because I gave Android an amplitude list of the wrong length in all seven places, so vibration has never once worked.
Last release I added timers to the app. This one I finally pointed them at startup, and the answer was annoying: 153ms of a 251ms cold start was one function, and 128ms of that was six separate trips to the Android keystore to read six saved values one at a time. None of which the timetable needs, because it draws from cache. I have a fix half done that reads them once and starts before anything asks, but while measuring I noticed the bigger problem is that startup waits for those values at all, and unpicking that means changing six getters used in 46 places, so that is the next few evenings.
Last time I said the real problem was that startup waits for the keystore at all, and that fixing it meant making six getters async across a pile of call sites. Did it, and it went from 239ms to 144ms because the timetable comes out of the cache and never needed a password in the first place. What I did not expect was that the compiler only caught 22 of the 27 places that broke, because the last five build the old API request body by gluing strings together, and a string is happy to take a Future and turn it into “Instance of ‘Future<String?>’”. So those five would have quietly posted that to the university as my password instead of failing, which I only found because I went looking after the analyser had already gone green.
Someone told me the timetable export says “unsupported file type” on their phone, and then mine did it too, which at least made it easy to chase. Turns out the plugin I use picks the file type from a big list of extensions and there is no entry for ics, so it falls through to / and Android hands that to whatever generic file previewer the manufacturer ships, which obviously cannot read a calendar. The annoying part is the phone had the right app the whole time, because Honor’s calendar registers itself for text/calendar and I just never asked for it. One extra argument and the export now offers the calendar first, which ships in the next update.
Spent this one adding screen reader labels to the cards that never had any, and then dumping the accessibility tree off the phone to check what actually comes out. Two things fell out of that: the order was backwards everywhere, so cards read their details before the name of the thing, and that was true of labels I shipped months ago too. The honest scoreboard is three of seven card types verified, payments is impossible for me to check because my account has no bills on it, and I have not run an actual screen reader yet, only read the tree, which tells me nothing about focus order or whether you can even swipe to them. So this one is going into closed testing before it gets a tag.
I added screen reader labels to the payments, messages and periods cards, then dumped the accessibility tree off the phone to actually hear what came out. Good thing, because the order was backwards: every card read its details first and the name of the thing last, so a subject announced itself as “6 credits, not completed, Introduction to Programming”. That was true of the markbook labels I shipped months ago as well, which nobody had ever mentioned to me. Also finished the calendar export fix from last time, so exporting your timetable no longer tells you the file type is unsupported.
Someone reviewing the last ship said my contrast was bad, the corners did not match and things needed more padding, so instead of squinting at it I went and measured all three. Every accent colour in the light theme failed WCAG AA, and the worst was the one I use for links and section headers, sitting at 1.43 to 1, which is pale blue text on pale grey. Then I counted the corner radii and found fifteen different values across 88 places, which is exactly the kind of thing you stop seeing in your own app. The padding one turned out to be a single number, the search box above the message list had zero bottom padding, and while I was looking at spacing I finally noticed the week switcher on the timetable has always been two separate boxes of different widths with mismatched corners, pretending to be one panel.
Next release I want a developer tab that shows what the app is storing and every request it makes, which sounds harmless right up until you remember my app is holding somebody’s Neptun password. So before writing any of it I went through all 77 things it keeps on disk, and only 46 can have their value put on screen. The trap was sorting by key name, because CachedMarkbook_3 sounds like nothing and is actually somebody’s grades, so that whole group gets to show its size and age and nothing else. The one that nearly got me is the calendar export link, which keeps working with no session at all, meaning the URL is the credential, and a network log that prints URLs would have published it in plain text.
Tap the version seven times and the app now has a developer tab: startup timings, every request it makes, how stale each cache is, and how many frames it dropped. The interesting part was not building it, it was working out what it is allowed to say, because this thing is holding somebody’s Neptun password. So the list of stored keys is an allowlist rather than a blocklist, meaning a key I add next year is hidden until I say otherwise, and the cached grades and messages only ever show their size. The redaction lives in the recorder instead of the screen, which matters more than it sounds, because one of my own URLs turned out to be a credential and a log that printed URLs would have published it.
The statistics page asks you to type how many credits your degree is, which has always annoyed me because Neptun obviously knows. So I went looking, and it will not tell me. There is an endpoint for it sitting in my own code that I have never called, except it only exists on the old API and the modern one has no equivalent among the ten endpoints I use. The one call that touches your programme at all already runs on every startup, and it returns three fields: whether the training is current, its id, and its name. Not a credit count anywhere. I even tried working it out from the programme name and that failed too, because it is a plain string with no BSc or MSc in it. So the box where you type 180 stays, and the release that was going to remove it does not exist. An evening to find that out is a lot cheaper than half a feature.
Someone sent me a screenshot of the home screen widget saying they had no classes, last updated 00:00. They had a class at nine. The 00:00 was not a rounding problem or a timezone problem, it was every day, for everyone, since the widget shipped. When the app caches your week it stores the date as midnight on purpose, because the check for whether the cache is a day old compares whole days. The widget read that same value and printed the clock part of it, so it was showing you the definition of midnight rather than when anything happened. Reading the fetch path to fix it turned up a worse one. If a refresh fails the app puts the old rows back so you still have something to look at, which is right, but then it saves them again with today’s date on them. A week of failed refreshes and the cache still swears it is current. Restored rows keep their original timestamp now. The widget cannot fetch anything by itself, so past a day it says to open the app instead of telling you your day is empty. I nearly shipped that badly too, because the new timestamp only gets written on a real fetch, so every existing user would have been told to refresh the moment they updated. It falls back to the old date for them until their next fetch. An empty widget is fine. An empty widget that looks confident is not.
The next release replaces the login flow, so before touching anything I sat down and read the one I already have. It is four screens before anyone sees a timetable, all of them living in a single file of 2148 lines with five page classes in it. Disclosure, then pick how you want to log in, then find your university, then your Neptun code and password. The university list is 54 entries that I typed in by hand, and the app openly admits in its own description that your school might not be there. That is the part I keep coming back to, because someone whose university is missing has to understand what a Neptun URL is before they can get in. I also found out I had a note wrong. I had written down that the app forces Hungarian and needs country detection added. It does not. It already reads the phone language and falls back to English for anything it does not have. Good thing I checked before building a feature that exists. The genuinely awkward bit is the disclaimer. Translations get downloaded from GitHub while the app runs, which is lovely for adding languages and completely wrong for legal text, since nothing downloaded should be able to rewrite what the disclaimer says. So it is compiled in, and the one screen that most needs to be understood is the one screen stuck in two languages. I do not have a clean answer for that yet. Smaller things I wrote down. A class called SetupPageInstitudeSelection, spelled that way in eleven places. One university with its URL fixed up by hand inside the login handler. The Linux desktop build does not compile at all, which I only discovered because I tried to run the first-run flow there rather than wipe my own account off my phone. Four screens is not really the problem. Not knowing which of them people give up on is.
The old setup opened with a page of legal text and then asked whether you wanted to pick your school from a list or type in a Neptun URL, which is a strange thing to ask someone who has not been told what the app does yet. One of the reviews said it was a bit hard to set up and that was the honest version of it. It is four steps now with a bar across the top so you can see where the end is. Terms first, then a screen that actually says what NHNK is, then your school, then the login. The school search used to live behind that how do you want to log in question and now it is just the third step, so there is one less screen to get through. While testing it I typed obuda and got nothing back, because the school is called Óbudai Egyetem and I had not thought about accents. Nobody types those into a search box. It folds them now and there are tests so it stays that way. The screen I deleted was also quietly running the update check and the language prompt, which I only noticed on the last read through before removing it. Testing any of this used to mean wiping my own login, so debug builds install separately now.
Added an OLED theme, picked it on my phone, and most of the screen was still grey. Rather than argue with my own eyes I took a screenshot and read the actual pixel values out of it, which took about a minute and saved me a lot of guessing. The background was 121212 when I had asked for pure black. Turned out the theme was never reaching the screen. The app builds its colour scheme without setting a surface colour, so every page fell back to Material’s own default grey and quietly ignored the palette it had been handed. One line, and the background went to 000000 and the cards to 080808. The bit I liked was the leftovers. A few tiles stayed light and I was about to go and edit the seventy something places that paint card backgrounds by hand, until I noticed the colour was 3B4548. That is not grey. Grey has equal channels. It was the teal accent bleeding in, because Material tints raised surfaces with your primary colour, so that was one setting too rather than an afternoon of find and replace. Also checked the contrast while I was in there and every accent clears AA on black between 9.37 and 18.80 to one, and found that choosing OLED did not survive the phone flipping to light mode and back, because the theme listener was overwriting whatever you picked. Not finished yet, the tile fix still needs a look on a real device.
Ships:
This project’s (NHNK = “Nem Hivatalos Neptun Kliens”, or in english “Unofficial Neptun Client” so you can say unc) goal is to make the life of university students easier, by creating a mobile app that lets them view their schedule, grades, statistics, upcoming events, messages and a lot more in one place, without the need to login every 30 minutes. The main problem was figuring out how the official university system “Neptun” works, and finding their API routes, but after figuring that out, the app works perfectly fine. This project makes major improvements over the official websites, First of all, every university has their own URL for the management site, that the students have to find / memorize, my app only needs the name of the university, and it automatically uses the saved address(es) from our list. Most universities have multiple urls/servers for “Neptun”, so if one is down, there is another. This again requires the users to figure out which server is up and usable, my app auto selects a server from the fallback list, if the default website is not available, and makes the switching seamless without even the users notice. The “Neptun” website also require users to login after 30min inactivity again, while in the same time most universities enabled the function to require 2fa for all accounts. While this is good for security, it makes checking your schedule grades etc a hassle. My app only needs users to enter their details once, and it wont ask for them again (except if the auth fails because of invalid credentials.), I know it might seems a security issue, that the app wont log users out, but the app is fully read only, as its only meant to check your data. these are the main improvements, but there are a lot more fun and usable features in the app, like detailed statistics etc. You can try the app out on https://nhnk.bali0531.hu via the live demo, or you can download it from github releases (and google play store too soon), but it requires a hungarian university student status to log in. (For non hungarian people who are interested in the app, a DEMO mode is also available in the app itself, but at that point you can just check it out on the website without downloading anything.
The previous ship was about fixing up the basics and making everyting work as intended. If you are interested in the main points of this project etc make sure to read the previous ship description too. In this ship I focused on optimizing the app, making the load time shorter, fixing some bugs like haptics etc, also logged the readme and website rework too. This ship is mainly for ending this stage before I start working on new features and more fixes. I optimized almost everything I can, made loading parallel where it was possible etc. Next ship will be packed with new features, I plan to add a dev mode to help find and debug edge cases or loading issues / resource leaks, also planning to add an “OOBE” to make the onboarding more seamless and modern. (No new images for this ship, since most of the changes are code related and not cosmetical. )
Last ship was about optimizing stuff and fixing small bugs, while this ship is a bit more focused on new features, a new OOBE page, dev mode for advanced statistics about the application, and another batch of bug and UI fixes. So the main goal was to make the app look better and provide a better experience while using it overall + making it easier to diagnose possible problems through the devmode. UI/UX fixes include a new OLED theme, fixed overlapping elements, fixed contrast of the pages. For the UX part a new Out Of Box Experience, its basically a new login/info flow on first start, so now instead of separate pages for TOS/PP login, institution search etc, everything is on one seemless experience. It had some bug fixes too, like the .ics calendar exporting and auto-updating has been fixed now. Also fixed the broken widgets too so now it actually shows what classes you have that day. In terms of New Functions this ship introduces a new Dev mode by clicking the version number fast multiple times, it has a lot of informations about the startup, resource usage etc. For the future plans, I don’t have any new idea for now, the ones I had turned out to be not possible because of the api I have to use, I will probably fix the findings from the reviews of this ship + google playstore closed testing findings too. If you have any good idea make sure to write it down in the reviews / on the github page. (or on discord at @ bali411)...
|
1792878441.7529333
|
1793742441.7529333
|
|
54091
|
ImtCard by @Imtiaz | Stardance
|
Imtiaz
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T17:45:10Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So, I made ImtCard, a reference/example product of hacker card from jams-hack club. i checked it with my uncles phone, but while video-ing, i had no phone to show lol, my main phone got broken, so i took another phone and just shot a video. So, here we go- github: github.com/imtua/ImtCard", "repo": "https://github.com/imtua/nfc-card", "demo": ""}]...
|
[{"post_id": 63052, "ts": "202 [{"post_id": 63052, "ts": "2026-09-06T17:04:09Z", "hours": 0.2947, "text": "the orders came, and its working, like wow. now, time to ship and finish!"}, {"post_id": 55307, "ts": "2026-08-27T01:39:36Z", "hours": 2.85, "text": "Stardance got some serious issue and that is the reason, it’s showing 22m instead of my 2h 47m, oh god! Whatever, here’s the 3d model of the card, it’s the front and the back."}, {"post_id": 54294, "ts": "2026-08-25T07:36:33Z", "hours": 1.7667, "text": "Here we go, everything I’ve done is written on the readme file of github repo. I made it from Jams - Hack Club."}]...
|
Title: ImtCard by @Imtiaz | Stardance
Devlogs:
He Title: ImtCard by @Imtiaz | Stardance
Devlogs:
Here we go, everything I’ve done is written on the readme file of github repo. I made it from Jams - Hack Club.
Stardance got some serious issue and that is the reason, it’s showing 22m instead of my 2h 47m, oh god! Whatever, here’s the 3d model of the card, it’s the front and the back.
the orders came, and its working, like wow. now, time to ship and finish!
Ships:
So, I made ImtCard, a reference/example product of hacker card from jams-hack club. i checked it with my uncles phone, but while video-ing, i had no phone to show lol, my main phone got broken, so i took another phone and just shot a video. So, here we go- github: github.com/imtua/ImtCard...
|
1793108967.4221375
|
1793195367.4221375
|
|
44495
|
3d printer live view by @yaj_09 | Stardance
|
yaj_09
|
1
|
26.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T17:27:46Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a 3D printer live view system using an ESP32 camera module. The most challenging part was transitioning to hardware and adapting an Arduino IDE project to work with the ESP32. I had to debug PWM dimming using analogWrite and fix compilation errors along the way. I’m proud of getting everything to successfully compile, logging 26 hours of work, and setting up sensor inputs to utilize the ESP32’s cams wireless features! To test it, you can view the source code and connect the ESP32 camera module to your local network.", "repo": "https://github.com/LogicGate752/Esp32cam-3d-printer-live-view", "demo": ""}]...
|
[{"post_id": 60256, "ts": "202 [{"post_id": 60256, "ts": "2026-09-02T14:51:51Z", "hours": 16.0419, "text": "Started learning hardware by adapting an Arduino LED project to my ESP32. Used analogWrite(redPin, 40) to test PWM dimming, fixed a missing semicolon bug, and successfully compiled. Next up: reading sensor inputs to leverage the ESP32’s wireless features! part 2"}, {"post_id": 56707, "ts": "2026-08-28T16:01:11Z", "hours": 3.3167, "text": "i was learning coding part 1"}, {"post_id": 56594, "ts": "2026-08-28T12:36:16Z", "hours": 3.1725, "text": "watched few videos about programming on arduino ide. Learning basic coding on how to program an esp32 cam. Also saw how we can use arduino cloud to make web browsers for live feed."}, {"post_id": 53186, "ts": "2026-08-23T16:59:48Z", "hours": 1.1006, "text": "As a beginner diving into the world of computer science, learning to code through generic console exercises can feel abstract and disconnected. This project represents my shift into applied programming. Instead of writing code that stays trapped inside a text editor, I am using the Arduino IDE to build an independent, edge-hosted camera node that interacts directly with the physical world to monitor my 3D printer. i used youtube to learn some coding."}, {"post_id": 51856, "ts": "2026-08-21T18:38:13Z", "hours": 0.6189, "text": "This project implements an efficient, event-driven web-streaming server using the Arduino IDE framework to flash custom firmware directly onto an ESP32-CAM chip. Written entirely in embedded C++, the code maximizes the hardware’s dual-core architecture by multi-tasking network delivery and raw camera data processing without relying on any external operating system or resource-heavy cloud services."}, {"post_id": 50224, "ts": "2026-08-19T11:25:46Z", "hours": 1.3514, "text": "That is a massive milestone for this project! Designing or printing a custom case is one of the most practical steps you can take, especially for a 3D printing setup. The ESP32-CAM module has a loose camera ribbon cable and exposed solder joints, so getting it into a protective enclosure keeps it safe from accidental shorts on the printer’s frame."}, {"post_id": 49716, "ts": "2026-08-18T17:02:44Z", "hours": 0.8778, "text": "This project builds a compact, cost-effective, and fully wireless remote monitoring station for 3D printers using the ESP32-CAM micro-architecture. It addresses the critical need for continuous supervision during long print runs, mitigating risks like print failure (“spaghetti prints”) or hardware hazards.The system runs a lightweight local web server directly on the microcontroller chip, eliminating any dependence on third-party cloud applications. Users can open an interactive web browser dashboard on any local network device to monitor print progress via a continuous, low-latency live video feed. Furthermore, the interface includes a remote snapshot utility that temporarily switches the hardware sensor to High-Definition mode to capture, review, and store sharp, high-resolution progress updates on demand."}]...
|
Title: 3d printer live view by @yaj_09 | Stardance Title: 3d printer live view by @yaj_09 | Stardance
Devlogs:
This project builds a compact, cost-effective, and fully wireless remote monitoring station for 3D printers using the ESP32-CAM micro-architecture. It addresses the critical need for continuous supervision during long print runs, mitigating risks like print failure (“spaghetti prints”) or hardware hazards.The system runs a lightweight local web server directly on the microcontroller chip, eliminating any dependence on third-party cloud applications. Users can open an interactive web browser dashboard on any local network device to monitor print progress via a continuous, low-latency live video feed. Furthermore, the interface includes a remote snapshot utility that temporarily switches the hardware sensor to High-Definition mode to capture, review, and store sharp, high-resolution progress updates on demand.
That is a massive milestone for this project! Designing or printing a custom case is one of the most practical steps you can take, especially for a 3D printing setup. The ESP32-CAM module has a loose camera ribbon cable and exposed solder joints, so getting it into a protective enclosure keeps it safe from accidental shorts on the printer’s frame.
This project implements an efficient, event-driven web-streaming server using the Arduino IDE framework to flash custom firmware directly onto an ESP32-CAM chip. Written entirely in embedded C++, the code maximizes the hardware’s dual-core architecture by multi-tasking network delivery and raw camera data processing without relying on any external operating system or resource-heavy cloud services.
As a beginner diving into the world of computer science, learning to code through generic console exercises can feel abstract and disconnected. This project represents my shift into applied programming. Instead of writing code that stays trapped inside a text editor, I am using the Arduino IDE to build an independent, edge-hosted camera node that interacts directly with the physical world to monitor my 3D printer. i used youtube to learn some coding.
watched few videos about programming on arduino ide. Learning basic coding on how to program an esp32 cam. Also saw how we can use arduino cloud to make web browsers for live feed.
i was learning coding part 1
Started learning hardware by adapting an Arduino LED project to my ESP32. Used analogWrite(redPin, 40) to test PWM dimming, fixed a missing semicolon bug, and successfully compiled. Next up: reading sensor inputs to leverage the ESP32’s wireless features! part 2
Ships:
I made a 3D printer live view system using an ESP32 camera module. The most challenging part was transitioning to hardware and adapting an Arduino IDE project to work with the ESP32. I had to debug PWM dimming using analogWrite and fix compilation errors along the way. I’m proud of getting everything to successfully compile, logging 26 hours of work, and setting up sensor inputs to utilize the ESP32’s cams wireless features! To test it, you can view the source code and connect the ESP32 camera module to your local network....
|
1793101906.2244034
|
1793188306.2244034
|
|
58437
|
MyNewTab by @UmarFarooq | Stardance
|
UmarFarooq
|
2
|
7.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T17:08:48Z", "hours": 5.0, "multiplier": 1.97, "payout": 5, "blessing": "neutral", "text": "I have built a clean, responsive custom new tab browser page. Features: NASA’s Astronomy Picture of the Day as a background image. Enter URL or search on google. Glassmorphism applied to the elements. Formatted date and time displayed at the top-left corner. Quote of famous personalities in the top-right corner. Multiple search engines available Add, edit and delete shortcuts. Added ambience mixer with many sounds for relaxation.", "repo": "https://codeberg.org/umarfarooq/my-new-tab", "demo": "https://my-new-tab.vercel.app/"}, {"ship_num": 2, "ts": "2026-09-05T10:32:06Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a custom new tab which features a search bar where you can enter url or search on google. Write your query in the search box and press enter to explore the internet. Plus, formatted time and date is shown at the top-left corner.", "repo": "https://codeberg.org/umarfarooq/my-new-tab", "demo": "https://my-new-tab.vercel.app/"}]...
|
[{"post_id": 63046, "ts": "202 [{"post_id": 63046, "ts": "2026-09-06T16:51:31Z", "hours": 0.9269, "text": "Welcome to MyNewTab, in this update, I’ve added an ambient sound mixer with many sounds for relaxation."}, {"post_id": 62912, "ts": "2026-09-06T13:28:30Z", "hours": 2.0456, "text": "Added shortcuts section. You can add, edit and delete shortcuts."}, {"post_id": 62829, "ts": "2026-09-06T11:08:00Z", "hours": 0.5539, "text": "Welcome to new devlog of MyNewTab. I’ve added support for multiple search engines. Click on the name of any search engine to change it. It is stored in localstorage."}, {"post_id": 62371, "ts": "2026-09-05T18:17:48Z", "hours": 1.0825, "text": "Welcome to new devlog of MyNewTab. I’ve added a quote card that fetches quotes of famous personalities from dummyjson.com and displays them beautifully using cursive font. Plus, I have also implemented cache checking for the background image so my app does not have to fetch it everytime user reloads the page."}, {"post_id": 62082, "ts": "2026-09-05T10:17:41Z", "hours": 1.2164, "text": "Added time and date card at the top-left corner. The format for time is HH:MM + AM/PM . While the format for date is Day, Month Date ."}, {"post_id": 61986, "ts": "2026-09-05T05:55:48Z", "hours": 0.72, "text": "Setup vite project and added NASA APOD as background image on my new tab. Plus, the input box is working now, you can add url or search on Google. the next step is to built shortcuts section."}]...
|
Title: MyNewTab by @UmarFarooq | Stardance
Devlog Title: MyNewTab by @UmarFarooq | Stardance
Devlogs:
Setup vite project and added NASA APOD as background image on my new tab. Plus, the input box is working now, you can add url or search on Google. the next step is to built shortcuts section.
Added time and date card at the top-left corner. The format for time is HH:MM + AM/PM . While the format for date is Day, Month Date .
Welcome to new devlog of MyNewTab. I’ve added a quote card that fetches quotes of famous personalities from dummyjson.com and displays them beautifully using cursive font. Plus, I have also implemented cache checking for the background image so my app does not have to fetch it everytime user reloads the page.
Welcome to new devlog of MyNewTab. I’ve added support for multiple search engines. Click on the name of any search engine to change it. It is stored in localstorage.
Added shortcuts section. You can add, edit and delete shortcuts.
Welcome to MyNewTab, in this update, I’ve added an ambient sound mixer with many sounds for relaxation.
Ships:
I built a custom new tab which features a search bar where you can enter url or search on google. Write your query in the search box and press enter to explore the internet. Plus, formatted time and date is shown at the top-left corner.
I have built a clean, responsive custom new tab browser page. Features: NASA’s Astronomy Picture of the Day as a background image. Enter URL or search on google. Glassmorphism applied to the elements. Formatted date and time displayed at the top-left corner. Quote of famous personalities in the top-right corner. Multiple search engines available Add, edit and delete shortcuts. Added ambience mixer with many sounds for relaxation....
|
1793084032.7117922
|
1793170432.7117922
|
|
56244
|
What'sTheWeather by @Afraz | Stardance
|
Afraz
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T16:35:24Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I made WhatsTheWeather (WTW), a compact weather station built around an ESP32 DevKit C. It gets live weather data from the internet and also takes local temperature and humidity readings using a sensor. The information is displayed on an OLED screen, while LEDs give a quick visual indication of the current temperature. What was challenging? Most of the project went pretty smoothly, but getting the Wi-Fi connection working properly was probably the most challenging part. It took a bit more troubleshooting than the other parts of the project, especially when connecting the ESP32 to the internet and getting it to reliably receive the weather data. What are you proud of? I’m most proud of how everything came together into one working device. The ESP32 connects to the internet, gets real weather data, reads from a physical sensor, and displays everything on the OLED and LEDs. Seeing all of those different parts work together was probably the best part of building WTW. What should people know to test your product? Since WTW is a hardware project, the easiest way to see how it works is through the demo video provided. It shows the device running and demonstrates its main features, including the OLED display, temperature readings, and LED indicators.", "repo": "https://github.com/afrazakbar/WhatsTheWeather", "demo": ""}]...
|
[{"post_id": 63029, "ts": "202 [{"post_id": 63029, "ts": "2026-09-06T16:22:54Z", "hours": 0.2833, "text": "Made a case in tinkercad so i dont get rejected for not having a 3d model atleast"}, {"post_id": 62311, "ts": "2026-09-05T16:47:36Z", "hours": 0.4592, "text": "finished editing demo video, shipping tomorrow"}, {"post_id": 61535, "ts": "2026-09-04T14:26:03Z", "hours": 0.3, "text": "Finished the README, Prob the last devlog, will ship very soon, stay tuned for a demo video too!!"}, {"post_id": 60942, "ts": "2026-09-03T16:51:04Z", "hours": 0.55, "text": "I finished a Really Basic Copy Of the README Files, didnt get motivation to do anything else"}, {"post_id": 60223, "ts": "2026-09-02T13:44:44Z", "hours": 0.8906, "text": "Rewrote the code again (lol) to use normal LEDS for weather info instead of the single WS2812 as the ESP32 was browning out as it already has 2 things to power (DHT 11 and oled) and the WS2812 needed 5v, so simply swapped it out and reprogrammed, works beautifully now !"}, {"post_id": 60179, "ts": "2026-09-02T12:14:03Z", "hours": 0.7167, "text": "Replaced the adressable led with normal leds as the esp32 was having issues powering it along with all the other components and wifi, now i just gotta reprogram it as the entire code was based from the WS2812 led"}, {"post_id": 59355, "ts": "2026-09-01T03:08:25Z", "hours": 0.8167, "text": "Re did the code as i left it half done yesterday and i forgot the logic lol What the code does is basically it gets the local weather from open-meteo (internet) and also the sensor data from the DHT11, then it shows it on the oled and shows colours like red, green or blue depending on weather conditions on the addressable leds. the code if for an esp32, forgot to mention that"}, {"post_id": 59033, "ts": "2026-08-31T16:49:42Z", "hours": 0.4333, "text": "Coded Half The code, i will do the rest tomorrow night, have school lol"}, {"post_id": 58089, "ts": "2026-08-30T13:21:54Z", "hours": 1.8358, "text": "Made the circuit on a perfboard, it contains ESP32 DHT11 OLED WS2812 LED"}]...
|
Title: What'sTheWeather by @Afraz | Stardance
Title: What'sTheWeather by @Afraz | Stardance
Devlogs:
Made the circuit on a perfboard, it contains ESP32 DHT11 OLED WS2812 LED
Coded Half The code, i will do the rest tomorrow night, have school lol
Re did the code as i left it half done yesterday and i forgot the logic lol What the code does is basically it gets the local weather from open-meteo (internet) and also the sensor data from the DHT11, then it shows it on the oled and shows colours like red, green or blue depending on weather conditions on the addressable leds. the code if for an esp32, forgot to mention that
Replaced the adressable led with normal leds as the esp32 was having issues powering it along with all the other components and wifi, now i just gotta reprogram it as the entire code was based from the WS2812 led
Rewrote the code again (lol) to use normal LEDS for weather info instead of the single WS2812 as the ESP32 was browning out as it already has 2 things to power (DHT 11 and oled) and the WS2812 needed 5v, so simply swapped it out and reprogrammed, works beautifully now !
I finished a Really Basic Copy Of the README Files, didnt get motivation to do anything else
Finished the README, Prob the last devlog, will ship very soon, stay tuned for a demo video too!!
finished editing demo video, shipping tomorrow
Made a case in tinkercad so i dont get rejected for not having a 3d model atleast
Ships:
What did you make? I made WhatsTheWeather (WTW), a compact weather station built around an ESP32 DevKit C. It gets live weather data from the internet and also takes local temperature and humidity readings using a sensor. The information is displayed on an OLED screen, while LEDs give a quick visual indication of the current temperature. What was challenging? Most of the project went pretty smoothly, but getting the Wi-Fi connection working properly was probably the most challenging part. It took a bit more troubleshooting than the other parts of the project, especially when connecting the ESP32 to the internet and getting it to reliably receive the weather data. What are you proud of? I’m most proud of how everything came together into one working device. The ESP32 connects to the internet, gets real weather data, reads from a physical sensor, and displays everything on the OLED and LEDs. Seeing all of those different parts work together was probably the best part of building WTW. What should people know to test your product? Since WTW is a hardware project, the easiest way to see how it works is through the demo video provided. It shows the device running and demonstrates its main features, including the OLED display, temperature readings, and LED indicators....
|
1793116074.6447232
|
1793202474.6447232
|
|
57242
|
FFmpeg benchmark tool by @spectra | Stardance
|
spectra
|
1
|
15.0
|
152
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T16:04:50Z", "hours": 15.0, "multiplier": 9.81, "payout": 152, "blessing": "neutral", "text": "Hi! I made a benchmarking tool to compare different video processing configurations by quality, size, encoding speed and bitrate. This tool is shipped with its own little dashboard, with different charts where you can compare the results. There’s also a tab that estimates what would be the best configuration. I made this tool because I’m also working on a video platform, and this tool was actually really helpful to find out what configuration was the best to save space (in my case). Surprisingly the most challenging part was the frontend, because it’s raw HTML and I personally prefer working with frameworks. I already work with bun and typescript for the backend of video platform project (fairplayvideo.org if you can to take a look). I’m pretty proud of how the code architecture turned out. I think it’s pretty clean. What should people know to test your project? The dashboard is available on github pages, but it’s only the dashboard. You’ll have to clone the repo if you want to try the whole flow (the instructions are available on the readme). Thank you!", "repo": "https://github.com/NaFo44/transcode-bench", "demo": "https://github.com/NaFo44/transcode-bench/releases/tag/v1.0.0"}]...
|
[{"post_id": 62992, "ts": "202 [{"post_id": 62992, "ts": "2026-09-06T15:43:58Z", "hours": 0.7186, "text": "Devlog #9: You can now try the UI of my FFmpeg benchmarking tool on my github page! nafo44.github.io/transcode-bench Also, I forgot to tell you about this, but I added another tab that shows what’s the best configuration in term of quality/processing time/size."}, {"post_id": 62944, "ts": "2026-09-06T14:26:21Z", "hours": 3.1722, "text": "Devlog #8: I’m pretty happy of how my FFmpeg transcoding benchmark turned out! So here’s the new UI. As you can see, I added a bunch of statistics (with chart.js). Next step: write the documentation and few improvements!"}, {"post_id": 62467, "ts": "2026-09-05T20:26:17Z", "hours": 2.6214, "text": "Devlog #7: A lot has happened! I restructured the results, added few more statistics, and more importantly, you now have the ability to measure the VMAF score of your videos. I think I’m done with the backend, now I’m moving on to the frontend to show you guys some nerd-ish statistics!"}, {"post_id": 62310, "ts": "2026-09-05T16:46:21Z", "hours": 1.5711, "text": "Devlog #6: I just finished cleaning up the code, with a new architecture. It’s more modular and now the next step is to add some test units!"}, {"post_id": 62208, "ts": "2026-09-05T13:58:25Z", "hours": 1.9011, "text": "I added a simple frontend to my ffmpeg benchmarking tool so you guys can better visualize the concept behind my project!"}, {"post_id": 61739, "ts": "2026-09-04T19:55:33Z", "hours": 2.1667, "text": "Day 4 of working on my FFmpeg benchmarking tool: I added ffprobe to extract more details from the output file! I also prepared a small web server for a future frontend…"}, {"post_id": 61106, "ts": "2026-09-03T20:36:52Z", "hours": 1.075, "text": "My FFmpeg benchmarking tool can now run custom benchmarks and export the results in a clean structured file"}, {"post_id": 59857, "ts": "2026-09-01T20:39:33Z", "hours": 1.1497, "text": "You can now build your own benchmark configuration and run it. Next: structure results and validation"}, {"post_id": 59810, "ts": "2026-09-01T19:20:06Z", "hours": 1.1056, "text": "I’m working on an FFmpeg benchmark tool. It can be used to compare different transcoding configurations (first commit, basic stuff for the moment)"}]...
|
Title: FFmpeg benchmark tool by @spectra | Stardan Title: FFmpeg benchmark tool by @spectra | Stardance
Devlogs:
I’m working on an FFmpeg benchmark tool. It can be used to compare different transcoding configurations (first commit, basic stuff for the moment)
You can now build your own benchmark configuration and run it. Next: structure results and validation
My FFmpeg benchmarking tool can now run custom benchmarks and export the results in a clean structured file
Day 4 of working on my FFmpeg benchmarking tool: I added ffprobe to extract more details from the output file! I also prepared a small web server for a future frontend…
I added a simple frontend to my ffmpeg benchmarking tool so you guys can better visualize the concept behind my project!
Devlog #6: I just finished cleaning up the code, with a new architecture. It’s more modular and now the next step is to add some test units!
Devlog #7: A lot has happened! I restructured the results, added few more statistics, and more importantly, you now have the ability to measure the VMAF score of your videos. I think I’m done with the backend, now I’m moving on to the frontend to show you guys some nerd-ish statistics!
Devlog #8: I’m pretty happy of how my FFmpeg transcoding benchmark turned out! So here’s the new UI. As you can see, I added a bunch of statistics (with chart.js). Next step: write the documentation and few improvements!
Devlog #9: You can now try the UI of my FFmpeg benchmarking tool on my github page! nafo44.github.io/transcode-bench Also, I forgot to tell you about this, but I added another tab that shows what’s the best configuration in term of quality/processing time/size.
Ships:
Hi! I made a benchmarking tool to compare different video processing configurations by quality, size, encoding speed and bitrate. This tool is shipped with its own little dashboard, with different charts where you can compare the results. There’s also a tab that estimates what would be the best configuration. I made this tool because I’m also working on a video platform, and this tool was actually really helpful to find out what configuration was the best to save space (in my case). Surprisingly the most challenging part was the frontend, because it’s raw HTML and I personally prefer working with frameworks. I already work with bun and typescript for the backend of video platform project (fairplayvideo.org if you can to take a look). I’m pretty proud of how the code architecture turned out. I think it’s pretty clean. What should people know to test your project? The dashboard is available on github pages, but it’s only the dashboard. You’ll have to clone the repo if you want to try the whole flow (the instructions are available on the readme). Thank you!...
|
1793098108.3149414
|
1793184508.3149414
|
|
59041
|
NewTabLayout-RudraGoel by @RudraGoel | Stardance
|
RudraGoel
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T16:02:18Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve made a New Tab layout, this is sort of what i’d want in my browser. Though, this is still pretty raw and if it was in an actual browser.. i’d have made it wayy better, such as linking the calendar to real calendar providers such as google calendar. And google tasks, etc. But, this is what i’d want in my new tab page.!", "repo": "https://github.com/rudraagoel/HCB_NewTabPage_Stardance", "demo": "https://hcbstardance-newtablayout.vercel.app/"}]...
|
[{"post_id": 63009, "ts": "202 [{"post_id": 63009, "ts": "2026-09-06T16:01:40Z", "hours": 2.9336, "text": "I’ve made a New Tab layout, this is sort of what i’d want in my browser. Though, this is still pretty raw and if it was in an actual browser.. i’d have made it wayy better, such as linking the calendar to real calendar providers such as google calendar. And google tasks, etc. But, this is what i’d want in my new tab page.!"}]...
|
Title: NewTabLayout-RudraGoel by @RudraGoel | Star Title: NewTabLayout-RudraGoel by @RudraGoel | Stardance
Devlogs:
I’ve made a New Tab layout, this is sort of what i’d want in my browser. Though, this is still pretty raw and if it was in an actual browser.. i’d have made it wayy better, such as linking the calendar to real calendar providers such as google calendar. And google tasks, etc. But, this is what i’d want in my new tab page.!
Ships:
I’ve made a New Tab layout, this is sort of what i’d want in my browser. Though, this is still pretty raw and if it was in an actual browser.. i’d have made it wayy better, such as linking the calendar to real calendar providers such as google calendar. And google tasks, etc. But, this is what i’d want in my new tab page.!...
|
1793112813.7396123
|
1793199213.7396123
|
|
21797
|
Kursal by @koschi | Stardance
|
koschi
|
1
|
110.0
|
1954
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T15:56:24Z", "hours": 110.0, "multiplier": 17.9, "payout": 1954, "blessing": "neutral", "text": "Hey, I made an introduction video for my friend’s project Kursal, a decentralized messaging app with end-to-end post-quantum encryption. 100% of the visuals were made by myself in Blender, and the sound editing in DaVinci Resolve. No AI were used in the making process of this video. The goal of the video was to showcase the project to the world, and giving it a bit more visibility, even though I honestly just wanted to do it for fun ngl :) Btw they are a few references throughout the video. For exemple the first scene was directly inspired by the movie Tron Legacy’s intro lmao.", "repo": "https://github.com/KursalChat/assets", "demo": "https://www.youtube.com/watch?v=Jhyxh1NrVjo"}]...
|
[{"post_id": 61103, "ts": "202 [{"post_id": 61103, "ts": "2026-09-03T20:32:43Z", "hours": 7.3403, "text": "Well I realized that Stardance doesn’t allow for soundtracks so the video stays muted and you can’t hear the sound effects and everything, which kinda sucks. But anyway I finished the project, the sound editing and added the credit scene at the end for all the sound effects, the musics, the Macbook 3d model and the SVG icons. However the video is 200 MB so that won’t fit in a github description… nor in here. So I’ll have to compress it heavily which will affect the video quality."}, {"post_id": 46828, "ts": "2026-08-14T10:59:01Z", "hours": 3.3008, "text": "Okay sorry for the delay, I had some issues with lapse as it seemed to have somewhat disconnected from my hackatime so it wouldn’t let me select a project to link the lapses to. But I just found out I can just type the name of this project, and even though it says it will create a new folder for that project, it still links to the actual Kursal file. But anyway, enough with that, I started reworking the audio for the 1st scene of the video, this time using royalty free music and sound effect (sadly we had to replace the nintendo switch sound effect to avoid any possible lawsuit lol) and of course all of the artists will be credited at the end of the video. Now I just have to find out what to do for the next scene…"}, {"post_id": 43407, "ts": "2026-08-08T17:05:37Z", "hours": 3.8506, "text": "FINALLY !!! The animation is done, I just finished linking the last two parts with a clean animation and now we just have to render everything and edit it in adobe or Da Vinci with some sound effects and everything and that’s it. Well that makes it seem like it’ll be a fast and easy process but I’m pretty sure it’d be the complete opposite idk why…"}, {"post_id": 42834, "ts": "2026-08-07T19:34:25Z", "hours": 3.9378, "text": "I fixed that last part and started animating the final scene of the whole video, there isn’t much to say about it as there also isn’t much to show, but I will have to include the credits after that, once the video is completely done, including the sound design and everything. Btw I still need to make a proper transition between this and the previous shot, but I’ll do that tomorrow I think."}, {"post_id": 42280, "ts": "2026-08-06T22:16:16Z", "hours": 4.9142, "text": "ok so about that tutorial, well it turned out to be for after effects, not blender, so that sucks. But anyway, I still tried doing it myself, it doesn’t look as good but it’s fine. Don’t worry about the timings, that part was kinda rushed ngl, this is just a proof of concept after all."}, {"post_id": 41506, "ts": "2026-08-05T19:12:05Z", "hours": 11.215, "text": "Managed to show off Kursal’s many color themes. At first I tried using curves and array modifiers to make the laptops move along a bezier curve but sadly because of the way the Macbook’s 3d model has been made, that was pretty hard and even then it was too hard to coordinate its movement with the Kursal screens they were suppose to show, so I had to scrap that idea. Instead, I just duplicated them over 5 layers twice and extended them on the side while the camera zoomed out. Now you might think the camera movement is a bit weird and stuff but don’t worry we’ve got an idea in mind with sound effects, nw. Finally this is just half of the work, as those were only the Dark mode color palets, so I’ll have to do the same with white mode and somehow make a cool animation with a switch that goes from night no day ,or the opposite I don’t really know yet but I remember having seen a tutorial for that in my youtube recommendations a while ago so we’ll see."}, {"post_id": 40414, "ts": "2026-08-03T21:56:11Z", "hours": 4.6669, "text": "fixed the camera movement for that last part and added a few things to make the scene look less empty. And I re-rendered previous scenes to put them all together in order to get an idea of what the whole things looked like. I had to fix some minor stuff like transitions and glitched animations. However I noticed that the last part is way too fast and you can’t read the text so I’ll have to fix that next."}, {"post_id": 39670, "ts": "2026-08-02T19:59:44Z", "hours": 5.5339, "text": "Okay so I remade that last part to get rid of some of some of the animations glitches, it might not be as nice as I envisioned but it is definitely cleaner than my first attempt. Though I think I might have a few tweaks to do concerning the animation’s speed. But that’s it for now."}, {"post_id": 39075, "ts": "2026-08-01T19:21:28Z", "hours": 8.0881, "text": "I hate Blender, I just spent 8 hours straight without break fixing shit Blender messed up, and it’s still not done yet. For some reason it doesn’t want to see the laptop as a single object made up of different pieces, but rather a random arrangement of stuff which cannot move together as one, so rotating it means that half of the components will spin in one direction while the second half will spin in the other. Furthermore for some reason some parts have a habit of straight up vanishing towards outer space, which really doesn’t help with the process. But anyway I still manage to animate the first 3 seconds as I envisioned and the rest is, well… to optimize in the future… But one good news at least is that we’re getting very close to the end. Oh actually no I forgot we still have video editing and sound design to do after that."}, {"post_id": 38339, "ts": "2026-07-31T17:47:50Z", "hours": 5.9503, "text": "Just finished animating a transition between part 2 and part 3, got to play with blender’s geometry nodes a bit but I did need a quick tutorial for that last part ngl"}, {"post_id": 37749, "ts": "2026-07-30T17:40:01Z", "hours": 5.3486, "text": "After some thinking I finally figured out what I’m going to do next, hopefully what will be the last part of the video. For now I replaced the chat instances with actual ones and not just exact copies, and animated the central server to die out once everyone connects together through a decentralized network."}, {"post_id": 36470, "ts": "2026-07-28T16:35:58Z", "hours": 5.8214, "text": "Finally done with the decentralized network animation, which might be the hardest part in the whole introduction video. The connections are a bit weird since a majority of those animations play at the exact same time at the end but I just have to move the keyframes accordingly to what I want so I guess that’s an easy fix no worries."}, {"post_id": 35859, "ts": "2026-07-27T15:57:08Z", "hours": 2.8839, "text": "probably gonna stop here for today so here’s the latest result, good enough for me but probably need a few tweaks either way."}, {"post_id": 35756, "ts": "2026-07-27T12:15:23Z", "hours": 2.1503, "text": "just spent two and a half hours trying to make a single object glowy because every tutorial out there was outdated or made everything glowy even the 2 windows. Why is Blender so complicated I swear."}, {"post_id": 35411, "ts": "2026-07-26T19:53:52Z", "hours": 10.0172, "text": "daaaaamn that was atrocious but here’s the chatting demo section finally fully animated (for now at least…). Special thanks to that indian guy on youtube for the text’s typewriting animation tutorial lmao. Oh btw sorry but I was too lazy to render a proper gooq quality video this is 720p using low render setting, and I just noticed I forgot to get rid of the bar at the beginning but eh whatever who here cares anyway…"}, {"post_id": 24666, "ts": "2026-07-08T12:22:45Z", "hours": 4.3403, "text": "Finally after 6 hours of rendering, we’ve got it. Yeah we brainstormed a bit more and finally found ideas for what we would do next in the video, so we’re doing a demo of 2 instances connecting to each other. Not finished tho, we still need them actually making contact and sending messages, and sound editing it all together, and then scene 2 will be finished."}, {"post_id": 22361, "ts": "2026-07-04T19:55:31Z", "hours": 2.0503, "text": "Rendered all actual scenes I made in Blender together, and put some sound effects in (a bit randomly ngl) using Da Vinci Resolve (if my dumb ahh can’t do video editiong at least I can try sound design… I think). On that point there are some adjustments to make on the sound effects as we do NOT wish to get a cease and desist from Nintendo before the project even gets published in the first place…"}, {"post_id": 20979, "ts": "2026-07-02T18:33:39Z", "hours": 2.2333, "text": "Because of my sheer incompetence in using Da Vinci Resolve, I decided I might be better off sticking with Blender, so I remade that last part in 3d, no sounds yet, but at least that took like half the time I needed to do the same in da vinci resolve. Gotta say, I’m still not happy with how it turned out rn, but I’ll fix it later nw."}, {"post_id": 19974, "ts": "2026-07-01T13:21:22Z", "hours": 7.3172, "text": "Started doing some stuff in Da Vinci Resolve like adding Texts and sounds, has a few Fusion issues to fix which was a nightmare but for now I have a proof of concept if you will, it’s nowhere near clean enough rn but it’s like a draft."}, {"post_id": 13315, "ts": "2026-06-21T20:07:17Z", "hours": 9.4397, "text": "Sketched out the Kursal introduction video script (kinda) and animated the v1 of the first part using Blender 2D animation tool, even though it’s supposed to be used by 2D artists to animate their drawings, but somehow it still works quite well so whatever ig."}]...
|
Title: Kursal by @koschi | Stardance
Devlogs:
Ske Title: Kursal by @koschi | Stardance
Devlogs:
Sketched out the Kursal introduction video script (kinda) and animated the v1 of the first part using Blender 2D animation tool, even though it’s supposed to be used by 2D artists to animate their drawings, but somehow it still works quite well so whatever ig.
Started doing some stuff in Da Vinci Resolve like adding Texts and sounds, has a few Fusion issues to fix which was a nightmare but for now I have a proof of concept if you will, it’s nowhere near clean enough rn but it’s like a draft.
Because of my sheer incompetence in using Da Vinci Resolve, I decided I might be better off sticking with Blender, so I remade that last part in 3d, no sounds yet, but at least that took like half the time I needed to do the same in da vinci resolve. Gotta say, I’m still not happy with how it turned out rn, but I’ll fix it later nw.
Rendered all actual scenes I made in Blender together, and put some sound effects in (a bit randomly ngl) using Da Vinci Resolve (if my dumb ahh can’t do video editiong at least I can try sound design… I think). On that point there are some adjustments to make on the sound effects as we do NOT wish to get a cease and desist from Nintendo before the project even gets published in the first place…
Finally after 6 hours of rendering, we’ve got it. Yeah we brainstormed a bit more and finally found ideas for what we would do next in the video, so we’re doing a demo of 2 instances connecting to each other. Not finished tho, we still need them actually making contact and sending messages, and sound editing it all together, and then scene 2 will be finished.
daaaaamn that was atrocious but here’s the chatting demo section finally fully animated (for now at least…). Special thanks to that indian guy on youtube for the text’s typewriting animation tutorial lmao. Oh btw sorry but I was too lazy to render a proper gooq quality video this is 720p using low render setting, and I just noticed I forgot to get rid of the bar at the beginning but eh whatever who here cares anyway…
just spent two and a half hours trying to make a single object glowy because every tutorial out there was outdated or made everything glowy even the 2 windows. Why is Blender so complicated I swear.
probably gonna stop here for today so here’s the latest result, good enough for me but probably need a few tweaks either way.
Finally done with the decentralized network animation, which might be the hardest part in the whole introduction video. The connections are a bit weird since a majority of those animations play at the exact same time at the end but I just have to move the keyframes accordingly to what I want so I guess that’s an easy fix no worries.
After some thinking I finally figured out what I’m going to do next, hopefully what will be the last part of the video. For now I replaced the chat instances with actual ones and not just exact copies, and animated the central server to die out once everyone connects together through a decentralized network.
Just finished animating a transition between part 2 and part 3, got to play with blender’s geometry nodes a bit but I did need a quick tutorial for that last part ngl
I hate Blender, I just spent 8 hours straight without break fixing shit Blender messed up, and it’s still not done yet. For some reason it doesn’t want to see the laptop as a single object made up of different pieces, but rather a random arrangement of stuff which cannot move together as one, so rotating it means that half of the components will spin in one direction while the second half will spin in the other. Furthermore for some reason some parts have a habit of straight up vanishing towards outer space, which really doesn’t help with the process. But anyway I still manage to animate the first 3 seconds as I envisioned and the rest is, well… to optimize in the future… But one good news at least is that we’re getting very close to the end. Oh actually no I forgot we still have video editing and sound design to do after that.
Okay so I remade that last part to get rid of some of some of the animations glitches, it might not be as nice as I envisioned but it is definitely cleaner than my first attempt. Though I think I might have a few tweaks to do concerning the animation’s speed. But that’s it for now.
fixed the camera movement for that last part and added a few things to make the scene look less empty. And I re-rendered previous scenes to put them all together in order to get an idea of what the whole things looked like. I had to fix some minor stuff like transitions and glitched animations. However I noticed that the last part is way too fast and you can’t read the text so I’ll have to fix that next.
Managed to show off Kursal’s many color themes. At first I tried using curves and array modifiers to make the laptops move along a bezier curve but sadly because of the way the Macbook’s 3d model has been made, that was pretty hard and even then it was too hard to coordinate its movement with the Kursal screens they were suppose to show, so I had to scrap that idea. Instead, I just duplicated them over 5 layers twice and extended them on the side while the camera zoomed out. Now you might think the camera movement is a bit weird and stuff but don’t worry we’ve got an idea in mind with sound effects, nw. Finally this is just half of the work, as those were only the Dark mode color palets, so I’ll have to do the same with white mode and somehow make a cool animation with a switch that goes from night no day ,or the opposite I don’t really know yet but I remember having seen a tutorial for that in my youtube recommendations a while ago so we’ll see.
ok so about that tutorial, well it turned out to be for after effects, not blender, so that sucks. But anyway, I still tried doing it myself, it doesn’t look as good but it’s fine. Don’t worry about the timings, that part was kinda rushed ngl, this is just a proof of concept after all.
I fixed that last part and started animating the final scene of the whole video, there isn’t much to say about it as there also isn’t much to show, but I will have to include the credits after that, once the video is completely done, including the sound design and everything. Btw I still need to make a proper transition between this and the previous shot, but I’ll do that tomorrow I think.
FINALLY !!! The animation is done, I just finished linking the last two parts with a clean animation and now we just have to render everything and edit it in adobe or Da Vinci with some sound effects and everything and that’s it. Well that makes it seem like it’ll be a fast and easy process but I’m pretty sure it’d be the complete opposite idk why…
Okay sorry for the delay, I had some issues with lapse as it seemed to have somewhat disconnected from my hackatime so it wouldn’t let me select a project to link the lapses to. But I just found out I can just type the name of this project, and even though it says it will create a new folder for that project, it still links to the actual Kursal file. But anyway, enough with that, I started reworking the audio for the 1st scene of the video, this time using royalty free music and sound effect (sadly we had to replace the nintendo switch sound effect to avoid any possible lawsuit lol) and of course all of the artists will be credited at the end of the video. Now I just have to find out what to do for the next scene…
Well I realized that Stardance doesn’t allow for soundtracks so the video stays muted and you can’t hear the sound effects and everything, which kinda sucks. But anyway I finished the project, the sound editing and added the credit scene at the end for all the sound effects, the musics, the Macbook 3d model and the SVG icons. However the video is 200 MB so that won’t fit in a github description… nor in here. So I’ll have to compress it heavily which will affect the video quality.
Ships:
Hey, I made an introduction video for my friend’s project Kursal, a decentralized messaging app with end-to-end post-quantum encryption. 100% of the visuals were made by myself in Blender, and the sound editing in DaVinci Resolve. No AI were used in the making process of this video. The goal of the video was to showcase the project to the world, and giving it a bit more visibility, even though I honestly just wanted to do it for fun ngl :) Btw they are a few references throughout the video. For exemple the first scene was directly inspired by the movie Tron Legacy’s intro lmao....
|
1793130695.3635464
|
1793217095.3635464
|
|
49383
|
os compiller by @Ggiver | Stardance
|
Ggiver
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T15:41:18Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my first try at making a fully fledged compiler. My twist on the project is that instead of compiling the source code into an executable, it turns it into a whole operating system (bootloader actually)! I was unfortunately not able to manage the memory nor make loops (that’s because you have to manage memory for that), the instruction set is very limited (you can basically just print, restart the computer, and get keyboard input). Even if the projects does poorly, i will still retain that as a valuable lesson on knowing how computers work. Thank you for trying out my project!", "repo": "https://github.com/supr10/os_compiler", "demo": "https://github.com/supr10/os_compiler/releases/tag/release"}]...
|
[{"post_id": 62981, "ts": "202 [{"post_id": 62981, "ts": "2026-09-06T15:31:58Z", "hours": 1.2494, "text": "This is the final version. I’m very sad that this is, because it is still very buggy and i couldn’t implement what i originally wanted to add. You can still print characters, do infinite loops and get a character to print later (don’t forget that the program compiles your code into an operating system, hence the trouble with memory management) I cannot finish it because my school has a too harsh schedule to keep up. I hope to be able to re join and finish it in later editions… Goodbye world!"}, {"post_id": 52927, "ts": "2026-08-23T09:36:43Z", "hours": 1.6642, "text": "writing operating systems in pure hexadecimal, like the good ol’ days"}, {"post_id": 52238, "ts": "2026-08-22T10:28:35Z", "hours": 1.3447, "text": "I just made the first instruction, it prints a character on the BIOS."}, {"post_id": 48174, "ts": "2026-08-16T13:56:26Z", "hours": 0.5256, "text": "I’m building the initial UI (yes, before the actual compiler part)"}]...
|
Title: os compiller by @Ggiver | Stardance
Devlog Title: os compiller by @Ggiver | Stardance
Devlogs:
I’m building the initial UI (yes, before the actual compiler part)
I just made the first instruction, it prints a character on the BIOS.
writing operating systems in pure hexadecimal, like the good ol’ days
This is the final version. I’m very sad that this is, because it is still very buggy and i couldn’t implement what i originally wanted to add. You can still print characters, do infinite loops and get a character to print later (don’t forget that the program compiles your code into an operating system, hence the trouble with memory management) I cannot finish it because my school has a too harsh schedule to keep up. I hope to be able to re join and finish it in later editions… Goodbye world!
Ships:
This is my first try at making a fully fledged compiler. My twist on the project is that instead of compiling the source code into an executable, it turns it into a whole operating system (bootloader actually)! I was unfortunately not able to manage the memory nor make loops (that’s because you have to manage memory for that), the instruction set is very limited (you can basically just print, restart the computer, and get keyboard input). Even if the projects does poorly, i will still retain that as a valuable lesson on knowing how computers work. Thank you for trying out my project!...
|
1793105299.8864846
|
1793191699.8864846
|
|
58314
|
Smart Air Traffic Control System by @Sparky10 | St Smart Air Traffic Control System by @Sparky10 | Stardance...
|
Sparky10
|
1
|
2.36
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T15:24:59Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Smart Air Traffic Control System as a web project. It can track aircraft, check weather, detect possible collisions, detect emergencies and assign runways. The hardest part was getting the Flask backend, MySQL database and frontend to work together. I’m pretty proud of how everything came together and actually works as one system", "repo": "https://github.com/kaviyasuriya10-bot/Smart-Air-Traffic-System", "demo": "https://smart-air-traffic-system-a5wy.vercel.app/"}]...
|
[{"post_id": 68753, "ts": "202 [{"post_id": 68753, "ts": "2026-09-15T17:53:59Z", "hours": 0.3569, "text": "Hi guys, I made a important change after my first shipping ,and I faced a problem in hosting my web I mean creating a demo URL so I made some major changes in the code, completely removed python and MYSQL"}, {"post_id": 62227, "ts": "2026-09-05T14:17:50Z", "hours": 2.1222, "text": "Hi guys this is just a simulation of Air Traffic Control System, and I almost done with this small project and I am having a plan of integrating local Ollama Ai and if possible real satellites with help of some space research company. And i also added the flowchart for the better understanding of the flow of the code"}]...
|
Title: Smart Air Traffic Control System by @Sparky Title: Smart Air Traffic Control System by @Sparky10 | Stardance
Devlogs:
Hi guys this is just a simulation of Air Traffic Control System, and I almost done with this small project and I am having a plan of integrating local Ollama Ai and if possible real satellites with help of some space research company. And i also added the flowchart for the better understanding of the flow of the code
Hi guys, I made a important change after my first shipping ,and I faced a problem in hosting my web I mean creating a demo URL so I made some major changes in the code, completely removed python and MYSQL
Ships:
I made a Smart Air Traffic Control System as a web project. It can track aircraft, check weather, detect possible collisions, detect emergencies and assign runways. The hardest part was getting the Flask backend, MySQL database and frontend to work together. I’m pretty proud of how everything came together and actually works as one system...
|
1793066019.4358249
|
1793152419.4358249
|
|
56387
|
Procrastination Center by @Alexx | Stardance
|
Alexx
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T15:19:58Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Procrastination Center - This is my very first site, and I learned how to add special features like CSS box styling, flex organization, hyperlinks, images, and a working button. One thing that still confuses me is the jekyll deployment configurations, but I figured it out for this site.", "repo": "https://github.com/xuealex2010-blip/personalSite", "demo": "https://xuealex2010-blip.github.io/personalSite/"}]...
|
[{"post_id": 61854, "ts": "202 [{"post_id": 61854, "ts": "2026-09-04T23:46:58Z", "hours": 1.5817, "text": "Finishing up the website. I wanted to see how easy it was to add other things, so along with adding a bunch more text boxes, I added a working button, hyperlinks, and an image. I am now troubleshooting the site being published via github. The file should include everything that I would like. This was a fun journey learning basic web design."}, {"post_id": 60575, "ts": "2026-09-03T00:42:23Z", "hours": 0.5333, "text": "Took a while but finally got the CSS boxes done. It took me a while to realize that the CSS should be done in a separate file, and that is why the code in the guide was not working as expected. Once I figured this out I instantly got it working. It looks like I should have the basics down."}, {"post_id": 59041, "ts": "2026-08-31T17:00:30Z", "hours": 0.6167, "text": "Figured out the Basics. Took a few minutes but I figured out how to properly manage the tags and customize the text in HTML. Next step will be to take this to a full page."}]...
|
Title: Procrastination Center by @Alexx | Stardanc Title: Procrastination Center by @Alexx | Stardance
Devlogs:
Figured out the Basics. Took a few minutes but I figured out how to properly manage the tags and customize the text in HTML. Next step will be to take this to a full page.
Took a while but finally got the CSS boxes done. It took me a while to realize that the CSS should be done in a separate file, and that is why the code in the guide was not working as expected. Once I figured this out I instantly got it working. It looks like I should have the basics down.
Finishing up the website. I wanted to see how easy it was to add other things, so along with adding a bunch more text boxes, I added a working button, hyperlinks, and an image. I am now troubleshooting the site being published via github. The file should include everything that I would like. This was a fun journey learning basic web design.
Ships:
Procrastination Center - This is my very first site, and I learned how to add special features like CSS box styling, flex organization, hyperlinks, images, and a working button. One thing that still confuses me is the jekyll deployment configurations, but I figured it out for this site....
|
1793123363.420532
|
1793209763.420532
|
|
19677
|
modOS by @Huseyin | Stardance
|
Huseyin
|
2
|
69.87
|
203
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T14:51:27Z", "hours": 47.0, "multiplier": 4.4, "payout": 203, "blessing": "neutral", "text": "modOS Sevda Çiçeği: A fully open-source, modular, and multi-platform webOS. Features: modOS, unlike other webOS projects, has a plentiful of unique features allowing more customization: Modular build. Developer friendly API’s Pre-built desktop Account service And many more! Usage: modOS can be used everywhere by anyone, making it a great option for people on the move. Development: modOS comes with API’s to allow integration and make it easier for developers to make new packages.", "repo": "https://github.com/krambo345/modOS", "demo": "https://modos.krambo.space"}, {"ship_num": 2, "ts": "2026-06-30T18:15:01Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Welcome to modOS v1.0.0 Cambaz. It is a full webOS that comes with the basics of a computer. This full (almost) stable release is modular, flexible, and heavily optimized to up stand multiple situations. There were many challenges when it came to converting what I did from the guide into a modular system. It came with many problems, errors, lack of sleep, so on and so forth. Thanks to Lil ’G(PT), I was able to automate small tasks like converting HTML apps to a format that could be published in JSON. Features of modOS Cambaz: A fully modular system, with the ability to publish your own JS files with others. A small “terminal” named run. Package/App manager. Bartender(the bar of modOS) WER (Window Manager of modOS) Automated system set up. Developer friendly design. An aesthetic that combines 2000s retro and today’s modern. From here, the future releases of modOS will focus on making a full, complete package manager which makes distributing and receiving applications across modOS more easy. NOTE: In order to use many of the special features of modOS, you have to download and run modOS locally on your device. The picture shows what you would get in an out-of-the-box experience.", "repo": "https://github.com/krambo345/modOS", "demo": "https://modos.krambo.space"}]...
|
[{"post_id": 68315, "ts": "202 [{"post_id": 68315, "ts": "2026-09-14T22:29:25Z", "hours": 2.7064, "text": "SO MUCH BETTER! modOS is now more than just a template for your OS. It now makes it easier to template your own web OS! New Additions Settings package Splash Screen(you can turn it off in settings!) Saving settings 💾 Uses With these new features, your modOS account will officially have a working function. You can open your environment wherever you want. Future Plans Saving installed packages Saving user-made files/folders(There is already a immature version, however it does not work). Package development IDE. Customized Splash Screen Notification Daemon D-Bus Events 😟 Problems That Occured Resetting custom CSS. New user check(supposed to work. literally no reason it should not) Send Recommendations/Suggestions Sorry for excess use of EMOJIS they are fun"}, {"post_id": 67589, "ts": "2026-09-13T18:52:38Z", "hours": 3.1647, "text": "A Path to Stable From the previous… and unsuccessful ship… I learned many things that could improve modOS(other than a temporary Firebase bug🙄) First of all, there were a lot of bugs. A plenty of the time reported on this devlog are from bug fixing. Secondly, seems like people want to be able to customize the preinstalled system. So I have been working on a settings package to allow managing your account and CUSTOMIZING your system! DISCOVERY❗! Apperiantly, because modOS is modular by design, and because you can import packages, and because you can edit those packages, it turns out app development in the sense of an IDE is by design built in to modOS! With this, I was able to resolve many package related bugs running in a live environment, and even build packages! This will be utilized even more to hopefully make a full modern IDE package for anyone to use and build packages!!! Check out the video below for demonstration! I am looking for ideas, so please hit me up with some!"}, {"post_id": 47520, "ts": "2026-08-15T14:07:54Z", "hours": 8.6556, "text": "Adding stuff As of now, modOS comes with pre-installed packages to get you, the user, started. These include terminal, desktop, bartender, wer(window manager), editor, and more! With these packages you can install more packages(that do not exist yet). Do you want to be a developer? modOS is made to be one of the most developer friendly webOS’s out there! With over 10 different API’s, you can build applications that are easily integrated into the system. You can check out the source code of each package I made for modOS via first, finding the package with ls packages (in terminal) and then reading them with cat packages/PACKAGE (also in terminal)! oooor just go to the krambools github repository https://github.com/krambo345/krambools Bootstrap recovery Bootstrap works right now, for me. However, if anyone else gets errors while booting modOS, they will have the opportunity to repair it via bootstrap recovery that is presented upon failure. link due to a situation, i can not put modOS link to the information. use this link to access modOS: https://modos.krambo.space Thank yall"}, {"post_id": 45147, "ts": "2026-08-11T13:30:21Z", "hours": 11.2347, "text": "BOOYAH! After so long, we finally have VISUAL IMPROVEMENT!!! Before we start, I would appreciate if y’all followed modOS! Link: modos.krambo.space New Additions: You can now install(via packer get) or remove(via packer remove) ANY PACKAGE(from existing directory, use packer fetch for a list) You get some propriety software for modOS so it is easier for you to do stuff :) Package delivered commands! Developers can implement their own commands and API’s to the modOS ecosystem! API integration into packages Dependencies work flow modOS-VT has officially been made modOS, with the original being retired under modOS-pre. It will be removed from GitHub soon. And MANY more minor updates! Things that are needed to be fixed Guest option does not work, special rules needed to be implemented. packer.get API blindly makes a new blob file every time it is used(potential memory leak) There is no settings feature(yet), so the accounts are pretty useless rn. Sorry. And yeah that’s it to my knowledge DEVELOPERS!!! You can officially use the modOS API to make an application for the modOS ecosystem! Sadly, we do not have any documentation, but you can see the existing packages I made for reference, I tried my best to make it easy on y’all! https://github.com/krambo345/krambools/tree/master Publishing If you are a developer that made an application for modOS(tysm!), there sadly is no official way to register the application to modOS(yet!). It is still being implemented. Please hold on to your application until there is a method. Follow this project to be updated for when it is implemented! Thank you! Disclaimers: AI has been heavily used in this part of the project due to the advanced levels of TS used(that I can’t do myself). In my defense, this is the first project I ever made using TypeScript and Vite. Almost every new feature exposes me to another new thing(and problem) to learn!"}, {"post_id": 42585, "ts": "2026-08-07T12:28:48Z", "hours": 7.7994, "text": "Tada! modOS-VT is SO close to being done! I feel it! Disclaimers AI was heavily used at this point of the project. The reason is that the code was starting to get very messy(and not cool looking), which is why I asked AI to REORGANIZE the code. It basically took what I wrote, made them more organized, and made the connections. It is more than likely that the AI added a few of lines itself. Alongside that, I used AI to COMPLETELY make a terminal system using xterm.js(node module). The reason is, xterm has one of the worst and most incomplete documentations I ever saw. I really couldn’t make it myself after three tries. And finally, I used AI to make a package installation/launching system, as that would lead me into parts of Java/Type Script that I previously had no experience with. I am still trying to learn how to make it myself, however. I am very sorry for the heavy usage of AI. This is a very niche project that you can not find a lot of information for. I believe the code still meets AI requirements of Stardance. New Additions There is a fully set-up(with a Firebase back end) account management system to signup or login users. There is a guest option for people who just want to try it out! System-wide terminal. It is made so different software can be built on it! Package installation and launching: This is HUGE! This is what was needed to make modOS MODULAR ! New API’s Very cool and clean looking code(developer friendly). Future Updates modOS-VT will be rebranded to just modOS. There will be some base packages that are needed to make. A README.md for developers with the instructions on making a package. And yeah that is what’s left for modOS-VT."}, {"post_id": 28076, "ts": "2026-07-14T03:22:04Z", "hours": 9.6597, "text": "Longer Yet Shorter [Dev Post 6] After some long work, modOS is finally getting easier to get done. But it’s not done just yet. What is new? modOS now has some basic API’s, which will be used in the future by developers to make applications that can be fully integrated into the ecosystem. Bootstrap is reaching completion, which will bring us to the next step: display. We also have one of the most important functions of an OS, file management! modOS utilizes zenfs/core to store files and folders(alongside their structure) in memory! This will allow the creation of file explorers, document making, and more! This is also a crucial piece to make a modular OS. What is needed? modOS still needs some more API’s, most which will come from packages. Due to that, the next dev post should be of packer, the official package manager for modOS. It will be the connectiong between users, database, and developers. User <--> Database <--> Developer Meaning dev’s will be able to publish packages, and user’s will be able to download them! And finally, we need an account session thingy to keep track of each user’s installed packages. This also will allow the usage of YOUR modOS anywhere! Final Regards pretty cool"}, {"post_id": 25326, "ts": "2026-07-09T15:28:04Z", "hours": 6.805, "text": "A New Beginning [Dev Post 5] Here is what I got done ever since I announced modOS Sevda Çiçeği! git init So we now have modOS-VT as a GitHub repository. It’s pretty cool. VT stands for Vite Type, indicating how the project utilizes Vite and TypeScript instead of just html and javascript. What is made? I made: A bootstrap, which initializes every service necessary for modOS runtime. Basic system. Firebase!!! Jeez, why did it take 7 hours? Well, my friend, modOS is completely modular. So there is a bit of contradiction when I need to make a bootstrap that launches things, if there is no things . I worked on making a placeholder for almost everything. Core Idea modOS will be just like any other Linux distribution. You have the base system that gives you whatever you need. And you install user-generated content with a package manager! It will be so cool! But right now, I am still working on making the base system part. PSST! Do you want to contribute to modOS by making an app for it? Well you absolutely can! Right now it’s a bit difficult as there is no modOS . However, you can develop applications using typescript any time! Later modOS versions will come with API’s that you can integrate your app into the modOS ecosystem. Challenges The main challenge was getting started with modOS… again… but when I did start, it starts flowing like butter. What I LOVE about modOS right now: Because modOS-VT is built on Vite, I can use packages and make it easier to use with GitHub pages! I did not have to make 15 commits for a bug fix while setting up GitHub pages! Final Regards Thank you. :)"}, {"post_id": 19732, "ts": "2026-07-01T03:52:27Z", "hours": 3.1253, "text": "Announcing modOS Sevda Çiçeği Concept After completing the pretty underdeveloped modOS Cambaz, I think it is time we move on to a full, stable, environment. Plans for modOS Sevda Çiçeği: A fully modular webOS where you can change everything from the window rules to the very development environment. A package manager for distributing, installing, and managing user created packages. A full modOS API for consistency and compatibality. And MANY more. Here is a checklist/roadmap for modOS that you can follow as I check off the tasks: https://docs.google.com/document/d/1H7caegzGowVeYkntmm87eaJ8XJtSyU1Pbvb5vVNmgYI/edit?usp=sharing Logged hours for this dev post come from earlier bug fixes and polishing to modOS Cambaz alongside the making of modOS Sevda Çiçeği"}, {"post_id": 19271, "ts": "2026-06-30T15:17:32Z", "hours": 6.3744, "text": "The End..? [Dev Post 4] With the guide finally being done, I announce modOS v1.0.0 Cambaz . Before I nerd out about everything added, here is more information about Mor ve Ötesi , the band behind Cambaz: https://en.wikipedia.org/wiki/Mor_ve_%C3%B6tesi Why is modOS different? Well, throughout the path of following the guide and making modOS, I completely rejected the idea of a hard-coded anything. Sure, it might be open-source, but what is the point of open-source if changing the source is going to take many hours of coding? modOS competes against a permanent webOS. The following features highlight how modOS achieves that: modOS does not have any hard-coded applications, bar, desktop, etc. Every app is found in a JSON file (apps.json located in /base/system/) which can be modified to install any application you want, easily! Currently this step is manual, and there is no official repository of verified applications. However, that is subject to change. Bartender (the bar system of modOS) is a JavaScript file (bartender.js found in /base/system/bartender.js) which can be modified to make the bar whatever you want! WER (Window Manager for modOS) is a script that inserts window functions such as the minimize and close buttons alongside the name of the window, icon, and movement system. The whole script is launched with initwindow(win) where win is the main window element. Got confused with the initwindow(win) command? Not to worry, modOS comes with the exec command, which follows the format exec(appname, icon) , where you can determine the name of the application ( REQUIRED ) and its icon ( NOT REQUIRED ). Whenever the command is run, the script ( exec.js found in /base/system/ ) looks through apps.json and pulls the necessary content and scripts, giving you a fully functional app. Note: If you decide to use a custom icon with an existing app, exec.js will still use the icon used in the database to maintain the developers creativity! So are you even more lazy? Cuz modOS desktop shows every app in apps.json for easier access. All you need is the ability to double click the app you want! Note: Psst! There are hidden applications. You need to run showhidden() to show them, and hidehidden() if you would like to hide them back. You can customize modOS off of the base CSS by editing config.css (config.css found in /system/user/) Default Applications List App Template: It is a template for you to make your own app! (hidden by default) run: An alternative for the developer console that comes with modern browsers. A great option for mobile users or older, unsupported browsers. Release Notes: Your updated news for modOS! Theme Song: The theme song of modOS! Plays Cambaz by Mor ve Ötesi. Future Updates A signup/login system is planned to be added for cross-platform sync ability (e.g. apps, settings, customizations, etc). This will be optional and you can still use modOS as a guest. modOS developer mode: A way for you to build applications for you and others on modOS! Window minimization: Currently, windows do get minimized. However, you really cannot un-minimize them without running the command document.querySelector(\".win\").style.display=\"block\" , which is unreliable and annoying. More applications: You will use modOS developer mode to develop applications for the ecosystem. No more work for me."}, {"post_id": 18381, "ts": "2026-06-29T14:53:03Z", "hours": 7.1789, "text": "A Big Jump [Dev Post 3] Here is an update of what I’ve been working on over the weekend. And there is a lot! Window Movement I followed the guide to make windows movable. However, there was a challenge. Challenge If I want to make modOS modular, how could I identify user-made windows? The guide showed a hard-coded movement system, but that would mean other people couldn’t make their own apps! Solution I used .querySelector to give every window of the same class movement functionality while keeping each instance separate. This means no matter how many windows of the same app you make, they’ll all be movable! So yes, you could have 30 copies of the same ping pong app ( not on modOS… yet ) and every window would work normally. Account Feature (Still in Progress) This is mainly what took most of the 7 hours I logged today. What was used? I used Firebase to establish a backend where user info would be stored. The info consists of a username, password, and user data. The first two are self-explanatory, but the data will store user changes to their OS so they can jump back in where they left off. Challenges The account creation script should theoretically work. However, I didn’t build the project around a package manager. Firebase works much better with one, meaning the project would need to be migrated to a framework like Vite. Solution There is a solution: create a new repository with Vite installed, then move everything over. I really didn’t want to deal with that right now, so the account feature will be implemented once the base build of modOS is complete. App Launching You can now use a terminal interface to launch apps! Challenges To keep apps modular while still being… apps, I couldn’t just say “open this app.” I needed users to be able to define a preferred name, icon, and content. The first two were easy, but I also needed a list of apps and their content. This way, future modOS developers can publish their applications to the modOS environment. Solution There is now an apps.json file with a full list of apps ( 1 app right now ). Whenever you launch an app via exec(name, icon) from the Dev Console, it checks whether the app exists in the JSON file and, if it does, fetches its corresponding content. A Step Towards Modular… modOS is officially MODULAR ! What is modular as of now? Many things! I scratched the modular clock idea from the previous Dev Post… AND REPLACED IT WITH A COMPLETELY MODULAR BAR!!! So now the entire bar is modular. :) Apps are now modular too! You can launch any app via exec(name, icon) in the Dev Console (often opened with F12) to render a new window with your preferred name and icon. The clock idea was scratched… BUT THE CLOCK ITSELF IS STILL MODULAR! Challenges Making things modular takes a lot of time. You don’t just write your program in HTML anymore—you have to generate it through JavaScript. To make it modular, individual variables need to go through their own processes before everything connects together. And of course… that usually comes with a bug or two. Solution Uh… yeah, that was the challenge. Doesn’t really need a solution. Releases From now on, every new release will be named after a song from a 2000s Turkish Alternative Rock band. The next major release will be called: modOS v0.x.x-alpha [Mor Ve Ötesi - Cambaz] Make sure you give it a listen. It’s a banger! Final Thoughts I think the project is going very well. It’s taking a lot of time, but it’s worthwhile since I’m learning new things about a programming language I’ve been using for five years now. I’m hoping to add more features, finish the base build, and finally move on to the backend side of things."}, {"post_id": 10467, "ts": "2026-06-17T06:18:54Z", "hours": 2.2683, "text": "Getting Started [Dev Post 2] Today, I did not do much visual progress. However, there is way more that goes on in the background. What’s new? We now have a bar tender. There is a clock now. But it’s not just any clock, this clock is MODULAR ! A very fancy weather widget with a very (not) fancy API. A MODULAR Clock? What does that mean? I’m glad you asked. Unlike a traditional clock, this clock actually is separated in multiple tags. That means you can move the tags around to change the order of the clock values. API This Dev Post is sponsored by wttr.in! With it’s simple, no sign-up, and no data limit, wttr.in is in my top 5 API’s. With a single fetch , we achieve great things like burnin’ hot weather. Notes: The clock is by definition modular, however not too accessible. This will be fixed with future updates. No, this Dev Post is not actually sponsored. You can check out the current state of modOS here ."}, {"post_id": 9757, "ts": "2026-06-16T05:59:35Z", "hours": 1.2353, "text": "modOS v0.0.1-alpha [Dev Post 1] This is a base release for an early preview of the main idea for modOS. Current “features” Website loads. Backgrounds. Base window infrastructure. Cool window hover/leave effect. :D Notes: Although the project is supposed to be modular, it is still in early development. So every line is hard-coded and is not modular."}]...
|
Title: modOS by @Huseyin | Stardance
Devlogs:
mod Title: modOS by @Huseyin | Stardance
Devlogs:
modOS v0.0.1-alpha [Dev Post 1] This is a base release for an early preview of the main idea for modOS. Current “features” Website loads. Backgrounds. Base window infrastructure. Cool window hover/leave effect. :D Notes: Although the project is supposed to be modular, it is still in early development. So every line is hard-coded and is not modular.
Getting Started [Dev Post 2] Today, I did not do much visual progress. However, there is way more that goes on in the background. What’s new? We now have a bar tender. There is a clock now. But it’s not just any clock, this clock is MODULAR ! A very fancy weather widget with a very (not) fancy API. A MODULAR Clock? What does that mean? I’m glad you asked. Unlike a traditional clock, this clock actually is separated in multiple tags. That means you can move the tags around to change the order of the clock values. API This Dev Post is sponsored by wttr.in! With it’s simple, no sign-up, and no data limit, wttr.in is in my top 5 API’s. With a single fetch , we achieve great things like burnin’ hot weather. Notes: The clock is by definition modular, however not too accessible. This will be fixed with future updates. No, this Dev Post is not actually sponsored. You can check out the current state of modOS here .
A Big Jump [Dev Post 3] Here is an update of what I’ve been working on over the weekend. And there is a lot! Window Movement I followed the guide to make windows movable. However, there was a challenge. Challenge If I want to make modOS modular, how could I identify user-made windows? The guide showed a hard-coded movement system, but that would mean other people couldn’t make their own apps! Solution I used .querySelector to give every window of the same class movement functionality while keeping each instance separate. This means no matter how many windows of the same app you make, they’ll all be movable! So yes, you could have 30 copies of the same ping pong app ( not on modOS… yet ) and every window would work normally. Account Feature (Still in Progress) This is mainly what took most of the 7 hours I logged today. What was used? I used Firebase to establish a backend where user info would be stored. The info consists of a username, password, and user data. The first two are self-explanatory, but the data will store user changes to their OS so they can jump back in where they left off. Challenges The account creation script should theoretically work. However, I didn’t build the project around a package manager. Firebase works much better with one, meaning the project would need to be migrated to a framework like Vite. Solution There is a solution: create a new repository with Vite installed, then move everything over. I really didn’t want to deal with that right now, so the account feature will be implemented once the base build of modOS is complete. App Launching You can now use a terminal interface to launch apps! Challenges To keep apps modular while still being… apps, I couldn’t just say “open this app.” I needed users to be able to define a preferred name, icon, and content. The first two were easy, but I also needed a list of apps and their content. This way, future modOS developers can publish their applications to the modOS environment. Solution There is now an apps.json file with a full list of apps ( 1 app right now ). Whenever you launch an app via exec(name, icon) from the Dev Console, it checks whether the app exists in the JSON file and, if it does, fetches its corresponding content. A Step Towards Modular… modOS is officially MODULAR ! What is modular as of now? Many things! I scratched the modular clock idea from the previous Dev Post… AND REPLACED IT WITH A COMPLETELY MODULAR BAR!!! So now the entire bar is modular. :) Apps are now modular too! You can launch any app via exec(name, icon) in the Dev Console (often opened with F12) to render a new window with your preferred name and icon. The clock idea was scratched… BUT THE CLOCK ITSELF IS STILL MODULAR! Challenges Making things modular takes a lot of time. You don’t just write your program in HTML anymore—you have to generate it through JavaScript. To make it modular, individual variables need to go through their own processes before everything connects together. And of course… that usually comes with a bug or two. Solution Uh… yeah, that was the challenge. Doesn’t really need a solution. Releases From now on, every new release will be named after a song from a 2000s Turkish Alternative Rock band. The next major release will be called: modOS v0.x.x-alpha [Mor Ve Ötesi - Cambaz] Make sure you give it a listen. It’s a banger! Final Thoughts I think the project is going very well. It’s taking a lot of time, but it’s worthwhile since I’m learning new things about a programming language I’ve been using for five years now. I’m hoping to add more features, finish the base build, and finally move on to the backend side of things.
The End..? [Dev Post 4] With the guide finally being done, I announce modOS v1.0.0 Cambaz . Before I nerd out about everything added, here is more information about Mor ve Ötesi , the band behind Cambaz: https://en.wikipedia.org/wiki/Mor_ve_%C3%B6tesi Why is modOS different? Well, throughout the path of following the guide and making modOS, I completely rejected the idea of a hard-coded anything. Sure, it might be open-source, but what is the point of open-source if changing the source is going to take many hours of coding? modOS competes against a permanent webOS. The following features highlight how modOS achieves that: modOS does not have any hard-coded applications, bar, desktop, etc. Every app is found in a JSON file (apps.json located in /base/system/) which can be modified to install any application you want, easily! Currently this step is manual, and there is no official repository of verified applications. However, that is subject to change. Bartender (the bar system of modOS) is a JavaScript file (bartender.js found in /base/system/bartender.js) which can be modified to make the bar whatever you want! WER (Window Manager for modOS) is a script that inserts window functions such as the minimize and close buttons alongside the name of the window, icon, and movement system. The whole script is launched with initwindow(win) where win is the main window element. Got confused with the initwindow(win) command? Not to worry, modOS comes with the exec command, which follows the format exec(appname, icon) , where you can determine the name of the application ( REQUIRED ) and its icon ( NOT REQUIRED ). Whenever the command is run, the script ( exec.js found in /base/system/ ) looks through apps.json and pulls the necessary content and scripts, giving you a fully functional app. Note: If you decide to use a custom icon with an existing app, exec.js will still use the icon used in the database to maintain the developers creativity! So are you even more lazy? Cuz modOS desktop shows every app in apps.json for easier access. All you need is the ability to double click the app you want! Note: Psst! There are hidden applications. You need to run showhidden() to show them, and hidehidden() if you would like to hide them back. You can customize modOS off of the base CSS by editing config.css (config.css found in /system/user/) Default Applications List App Template: It is a template for you to make your own app! (hidden by default) run: An alternative for the developer console that comes with modern browsers. A great option for mobile users or older, unsupported browsers. Release Notes: Your updated news for modOS! Theme Song: The theme song of modOS! Plays Cambaz by Mor ve Ötesi. Future Updates A signup/login system is planned to be added for cross-platform sync ability (e.g. apps, settings, customizations, etc). This will be optional and you can still use modOS as a guest. modOS developer mode: A way for you to build applications for you and others on modOS! Window minimization: Currently, windows do get minimized. However, you really cannot un-minimize them without running the command document.querySelector(".win").style.display="block" , which is unreliable and annoying. More applications: You will use modOS developer mode to develop applications for the ecosystem. No more work for me.
Announcing modOS Sevda Çiçeği Concept After completing the pretty underdeveloped modOS Cambaz, I think it is time we move on to a full, stable, environment. Plans for modOS Sevda Çiçeği: A fully modular webOS where you can change everything from the window rules to the very development environment. A package manager for distributing, installing, and managing user created packages. A full modOS API for consistency and compatibality. And MANY more. Here is a checklist/roadmap for modOS that you can follow as I check off the tasks: https://docs.google.com/document/d/1H7caegzGowVeYkntmm87eaJ8XJtSyU1Pbvb5vVNmgYI/edit?usp=sharing Logged hours for this dev post come from earlier bug fixes and polishing to modOS Cambaz alongside the making of modOS Sevda Çiçeği
A New Beginning [Dev Post 5] Here is what I got done ever since I announced modOS Sevda Çiçeği! git init So we now have modOS-VT as a GitHub repository. It’s pretty cool. VT stands for Vite Type, indicating how the project utilizes Vite and TypeScript instead of just html and javascript. What is made? I made: A bootstrap, which initializes every service necessary for modOS runtime. Basic system. Firebase!!! Jeez, why did it take 7 hours? Well, my friend, modOS is completely modular. So there is a bit of contradiction when I need to make a bootstrap that launches things, if there is no things . I worked on making a placeholder for almost everything. Core Idea modOS will be just like any other Linux distribution. You have the base system that gives you whatever you need. And you install user-generated content with a package manager! It will be so cool! But right now, I am still working on making the base system part. PSST! Do you want to contribute to modOS by making an app for it? Well you absolutely can! Right now it’s a bit difficult as there is no modOS . However, you can develop applications using typescript any time! Later modOS versions will come with API’s that you can integrate your app into the modOS ecosystem. Challenges The main challenge was getting started with modOS… again… but when I did start, it starts flowing like butter. What I LOVE about modOS right now: Because modOS-VT is built on Vite, I can use packages and make it easier to use with GitHub pages! I did not have to make 15 commits for a bug fix while setting up GitHub pages! Final Regards Thank you. :)
Longer Yet Shorter [Dev Post 6] After some long work, modOS is finally getting easier to get done. But it’s not done just yet. What is new? modOS now has some basic API’s, which will be used in the future by developers to make applications that can be fully integrated into the ecosystem. Bootstrap is reaching completion, which will bring us to the next step: display. We also have one of the most important functions of an OS, file management! modOS utilizes zenfs/core to store files and folders(alongside their structure) in memory! This will allow the creation of file explorers, document making, and more! This is also a crucial piece to make a modular OS. What is needed? modOS still needs some more API’s, most which will come from packages. Due to that, the next dev post should be of packer, the official package manager for modOS. It will be the connectiong between users, database, and developers. User <--> Database <--> Developer Meaning dev’s will be able to publish packages, and user’s will be able to download them! And finally, we need an account session thingy to keep track of each user’s installed packages. This also will allow the usage of YOUR modOS anywhere! Final Regards pretty cool
Tada! modOS-VT is SO close to being done! I feel it! Disclaimers AI was heavily used at this point of the project. The reason is that the code was starting to get very messy(and not cool looking), which is why I asked AI to REORGANIZE the code. It basically took what I wrote, made them more organized, and made the connections. It is more than likely that the AI added a few of lines itself. Alongside that, I used AI to COMPLETELY make a terminal system using xterm.js(node module). The reason is, xterm has one of the worst and most incomplete documentations I ever saw. I really couldn’t make it myself after three tries. And finally, I used AI to make a package installation/launching system, as that would lead me into parts of Java/Type Script that I previously had no experience with. I am still trying to learn how to make it myself, however. I am very sorry for the heavy usage of AI. This is a very niche project that you can not find a lot of information for. I believe the code still meets AI requirements of Stardance. New Additions There is a fully set-up(with a Firebase back end) account management system to signup or login users. There is a guest option for people who just want to try it out! System-wide terminal. It is made so different software can be built on it! Package installation and launching: This is HUGE! This is what was needed to make modOS MODULAR ! New API’s Very cool and clean looking code(developer friendly). Future Updates modOS-VT will be rebranded to just modOS. There will be some base packages that are needed to make. A README.md for developers with the instructions on making a package. And yeah that is what’s left for modOS-VT.
BOOYAH! After so long, we finally have VISUAL IMPROVEMENT!!! Before we start, I would appreciate if y’all followed modOS! Link: modos.krambo.space New Additions: You can now install(via packer get) or remove(via packer remove) ANY PACKAGE(from existing directory, use packer fetch for a list) You get some propriety software for modOS so it is easier for you to do stuff :) Package delivered commands! Developers can implement their own commands and API’s to the modOS ecosystem! API integration into packages Dependencies work flow modOS-VT has officially been made modOS, with the original being retired under modOS-pre. It will be removed from GitHub soon. And MANY more minor updates! Things that are needed to be fixed Guest option does not work, special rules needed to be implemented. packer.get API blindly makes a new blob file every time it is used(potential memory leak) There is no settings feature(yet), so the accounts are pretty useless rn. Sorry. And yeah that’s it to my knowledge DEVELOPERS!!! You can officially use the modOS API to make an application for the modOS ecosystem! Sadly, we do not have any documentation, but you can see the existing packages I made for reference, I tried my best to make it easy on y’all! https://github.com/krambo345/krambools/tree/master Publishing If you are a developer that made an application for modOS(tysm!), there sadly is no official way to register the application to modOS(yet!). It is still being implemented. Please hold on to your application until there is a method. Follow this project to be updated for when it is implemented! Thank you! Disclaimers: AI has been heavily used in this part of the project due to the advanced levels of TS used(that I can’t do myself). In my defense, this is the first project I ever made using TypeScript and Vite. Almost every new feature exposes me to another new thing(and problem) to learn!
Adding stuff As of now, modOS comes with pre-installed packages to get you, the user, started. These include terminal, desktop, bartender, wer(window manager), editor, and more! With these packages you can install more packages(that do not exist yet). Do you want to be a developer? modOS is made to be one of the most developer friendly webOS’s out there! With over 10 different API’s, you can build applications that are easily integrated into the system. You can check out the source code of each package I made for modOS via first, finding the package with ls packages (in terminal) and then reading them with cat packages/PACKAGE (also in terminal)! oooor just go to the krambools github repository https://github.com/krambo345/krambools Bootstrap recovery Bootstrap works right now, for me. However, if anyone else gets errors while booting modOS, they will have the opportunity to repair it via bootstrap recovery that is presented upon failure. link due to a situation, i can not put modOS link to the information. use this link to access modOS: https://modos.krambo.space Thank yall
A Path to Stable From the previous… and unsuccessful ship… I learned many things that could improve modOS(other than a temporary Firebase bug🙄) First of all, there were a lot of bugs. A plenty of the time reported on this devlog are from bug fixing. Secondly, seems like people want to be able to customize the preinstalled system. So I have been working on a settings package to allow managing your account and CUSTOMIZING your system! DISCOVERY❗! Apperiantly, because modOS is modular by design, and because you can import packages, and because you can edit those packages, it turns out app development in the sense of an IDE is by design built in to modOS! With this, I was able to resolve many package related bugs running in a live environment, and even build packages! This will be utilized even more to hopefully make a full modern IDE package for anyone to use and build packages!!! Check out the video below for demonstration! I am looking for ideas, so please hit me up with some!
SO MUCH BETTER! modOS is now more than just a template for your OS. It now makes it easier to template your own web OS! New Additions Settings package Splash Screen(you can turn it off in settings!) Saving settings 💾 Uses With these new features, your modOS account will officially have a working function. You can open your environment wherever you want. Future Plans Saving installed packages Saving user-made files/folders(There is already a immature version, however it does not work). Package development IDE. Customized Splash Screen Notification Daemon D-Bus Events 😟 Problems That Occured Resetting custom CSS. New user check(supposed to work. literally no reason it should not) Send Recommendations/Suggestions Sorry for excess use of EMOJIS they are fun
Ships:
Welcome to modOS v1.0.0 Cambaz. It is a full webOS that comes with the basics of a computer. This full (almost) stable release is modular, flexible, and heavily optimized to up stand multiple situations. There were many challenges when it came to converting what I did from the guide into a modular system. It came with many problems, errors, lack of sleep, so on and so forth. Thanks to Lil ’G(PT), I was able to automate small tasks like converting HTML apps to a format that could be published in JSON. Features of modOS Cambaz: A fully modular system, with the ability to publish your own JS files with others. A small “terminal” named run. Package/App manager. Bartender(the bar of modOS) WER (Window Manager of modOS) Automated system set up. Developer friendly design. An aesthetic that combines 2000s retro and today’s modern. From here, the future releases of modOS will focus on making a full, complete package manager which makes distributing and receiving applications across modOS more easy. NOTE: In order to use many of the special features of modOS, you have to download and run modOS locally on your device. The picture shows what you would get in an out-of-the-box experience.
modOS Sevda Çiçeği: A fully open-source, modular, and multi-platform webOS. Features: modOS, unlike other webOS projects, has a plentiful of unique features allowing more customization: Modular build. Developer friendly API’s Pre-built desktop Account service And many more! Usage: modOS can be used everywhere by anyone, making it a great option for people on the move. Development: modOS comes with API’s to allow integration and make it easier for developers to make new packages....
|
1793137931.0095267
|
1793224331.0095267
|
|
26635
|
My awesome macropad! by @ierotheos | Stardance
|
ierotheos
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T14:37:15Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "IeroPad A simple 3-key macropad built for the most essential shortcuts — Ctrl+C , Ctrl+V , Ctrl+Z and Volume Changer", "repo": "https://github.com/Ierotheos15/IeroPad", "demo": ""}]...
|
[{"post_id": 62949, "ts": "202 [{"post_id": 62949, "ts": "2026-09-06T14:34:50Z", "hours": 1.25, "text": "I finally completed the IeroPad, even though it looks a little weird it still works!"}, {"post_id": 26186, "ts": "2026-07-10T20:46:45Z", "hours": 2.8075, "text": "Added a Rotary encoder for changing the volume and muting"}, {"post_id": 23237, "ts": "2026-07-06T01:58:46Z", "hours": 0.4667, "text": "Just made the assembled CAD, I think it looks pretty nice"}, {"post_id": 20447, "ts": "2026-07-02T01:22:53Z", "hours": 1.1, "text": "Just coded and Compiled the qmk firmware because I forgot, I have only added Ctrl + C Ctrl + V Ctrl + Z"}, {"post_id": 18037, "ts": "2026-06-29T00:26:19Z", "hours": 2.0833, "text": "Devlog 2 What I did Originally modeled the case as one single part had to remake it as 2 separate parts because the PCB wont be able to go in Modeled the 2-part case in Fusion 360 Added my name as engraved text on the case"}, {"post_id": 17692, "ts": "2026-06-28T16:26:03Z", "hours": 2.8667, "text": "Hackpad Devlog A little 3-key macropad, built from scratch. Built a tiny 3-key macropad — PCB, plate, and case, all from scratch. PCB — designed in KiCad, three switches in a column. Plate — generated online, then shaped in Fusion 360. Case — modeled in Fusion 360: sized to fit the PCB, mounting holes, hollowed out, USB cutout on the side. Tricky bits — hidden sketches after extruding, accidentally moving the whole case instead of one part, and figuring out that centering a part isn’t the same as closing the gap around it. What’s left 🎨 Color it Coming up in the next devlog. Status Hardware design: ✅ done"}]...
|
Title: My awesome macropad! by @ierotheos | Starda Title: My awesome macropad! by @ierotheos | Stardance
Devlogs:
Hackpad Devlog A little 3-key macropad, built from scratch. Built a tiny 3-key macropad — PCB, plate, and case, all from scratch. PCB — designed in KiCad, three switches in a column. Plate — generated online, then shaped in Fusion 360. Case — modeled in Fusion 360: sized to fit the PCB, mounting holes, hollowed out, USB cutout on the side. Tricky bits — hidden sketches after extruding, accidentally moving the whole case instead of one part, and figuring out that centering a part isn’t the same as closing the gap around it. What’s left 🎨 Color it Coming up in the next devlog. Status Hardware design: ✅ done
Devlog 2 What I did Originally modeled the case as one single part had to remake it as 2 separate parts because the PCB wont be able to go in Modeled the 2-part case in Fusion 360 Added my name as engraved text on the case
Just coded and Compiled the qmk firmware because I forgot, I have only added Ctrl + C Ctrl + V Ctrl + Z
Just made the assembled CAD, I think it looks pretty nice
Added a Rotary encoder for changing the volume and muting
I finally completed the IeroPad, even though it looks a little weird it still works!
Ships:
IeroPad A simple 3-key macropad built for the most essential shortcuts — Ctrl+C , Ctrl+V , Ctrl+Z and Volume Changer...
|
1793094604.6869545
|
1793181004.6869545
|
|
12938
|
PetTrack by @szabence | Stardance
|
szabence
|
1
|
72.63
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T14:24:17Z", "hours": 71.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PetTrack! A beautiful Pet Monitoring system that upcycles old smartphones into IP-cameras that you can use to see your small pet I made this project because I took in a Rabbit in May 2026 and I didn’t know what she was doing when i wasn’t home, so I decided to code this app that you can install on any Android 7+ / iPhone 6s or newer device, and use it to check on your pet, with a beautiful UI, Zone tracking, replays, medicine and vaccine tracking, and a lot more :) The hardest part was, getting used to writing Flutter. I have never used Flutter in the past, but I read about it and I liked the mentality and the mechanics of the code or how should I say, and I decided to give it a go. I love it. Simple but effective, and I can use this 1 codebase on the web, on my iPhone, on my Android and even on my WearOS smartwatch :) The project is working, and you can check it by the bottom below, select language, select Client and press Demo mode, it will show the UI. You can see it working in action on the screenshots. Check the README, and thank you for reading this!", "repo": "https://github.com/szbnce/PetTrack", "demo": "https://pettrackdemo.szabence.com"}]...
|
[{"post_id": 68851, "ts": "202 [{"post_id": 68851, "ts": "2026-09-15T21:18:20Z", "hours": 1.6314, "text": "PetTrack reship no.2 Hey guys, I have shipped the project last week, but I got rejected because I’ve used the project logo as banner and not a screenshot… Anyways, I fixed some bugs that Ive seen since shipping, which was the Notification, on both iOS and Android and Web, it wasn’t working correctly anywhere, but because of lack of time at the moment, I have removed the Notification option. on iOS it will never work self-hosted, because it requires apple dev account and the app to be on the app store or have a real backend behind it, or something like that I’ve read. I also removed the Sync with watch button from the iOS builds and Web builds, since there is only WearOS build. Google play! I have started the process to put the app on the Google Play. I was originally against this, as y’all have read in one of the first devlogs, but I thought, 25 bucks once isn’t that much, so PetTrack will be on the Play store soon, but by the looks of things, only after Stardance has already finished. WearOS I started school once again, and I couldn’t always get to my phone so I have made a minimalist app to use on the watch, it’s not that full, you can only see 1 frame / 5 seconds, and you can’t edit anything, only check the live feed, check the Monitors battery percentage and the last seen in X zone. I will ship my project once again, thank you for reading! EDIT: I did not know I just need recertification instead of a full reship lol"}, {"post_id": 62924, "ts": "2026-09-06T13:52:19Z", "hours": 5.8556, "text": "PetTrack has been released! Hello guys! I’m not going to mess around with Markdown for this last devlog, I have been testing the project for 2 weeks now, and it is working great. I fixed up minor bugs that I found, added 5 AI-translated languages for more multilang support, though Hungarian and English has been translated by me, so those are definetly correct :) I changed on the UI a bit, removed the last seen and most seen cards from the dashboard and changed it to a diagram about the Zone visits, and changed the Medical UI cards a bit. Also made the resolution in the app better, now you can make pictures from the app, and instantly share them, replays work now on both iOS and Android. The first release of PetTrack has been finally published on GitHub, so please go and check it out! https://github.com/szbnce/PetTrack/releases/tag/1.0.0 Thank you everybody who has been though this journey over 3 months with me. Thank you!"}, {"post_id": 53494, "ts": "2026-08-24T02:11:25Z", "hours": 5.7447, "text": "PetTrack Demo is finally here! I haven’t worked on PetTrack in the past 1,5 months, mostly because I just couldn’t bring myself to code, and I am going on vacation as I am writing this, and I figured, omg, if i come home, it will be already september, and besides school, i will definetly not finish this, and then, what was I working for for days on end? So, I got my sxit together, and started working on the project. Sadly, because of the time, I had to use AI so I will finish until I leave for vacation. I almost did not. It’s 3:45 AM, I left 2 hours ago, and I set up the server 15 whole minutes before leaving my house. So it was calculated, but I managed. Unified Flutter codebase: I merged the pettrack_client , pettrack_montior and pettrack_web , into one package, and is written in Flutter. The app is entirely in Flutter, I kept designs of the Client so it won’t look very different. Deployment & OS Support: The new one app method is Docker compatible, so the project will offer a Docker option, and a non-docker MacOS and Linux native installer, and a Windows installer aswell, without docker :) Branching: The one where I used AI has been moved to a new branch \"allFlutter\" . iOS Support: I initally did not want to make an iOS version because I don’t really agree with the yearly 100 usd developer program payment, and I don’t really agree with Google Play 25usd purchase aswell, but that’s very much more manageable than a yearly model, on a FOSS app. Anyways, I will publish the .ipa file, and do what you want with it :) If you have the courage and understanding, you can jailbreak and install it indefinetly, or you can sideload it, though you will have to renew it every week. If you don’t want to do that, you can of course use the Web version in a browser, it will work the exact same way, they are the same codebase under. Web support: This was my original plan to make PetTrack work on iOS devices, but then, I decided why not make it fully work on any browser? One codebase, the Webapp, the Android app and iOS app will work the EXACT SAME WAY! if you want to install a full app, you may, but if you don’t, you have all options. Medical panel: I think I have made a devlog about that, or mentioned that, but I will write it once again. We have a Medical tab now, where you will be able to track Medications and get notifications to give them to your pet, and the Vaccines tab, where you can track what the pet has gotten, when, and when its next Due. You can also set more colors. Replay: You can now replay movement. Currently for some reason, It does not work (I started implementing it at 0:30 AM, left at 1:30 so I could’ve expected that), or atleast it does not work from the browser. If i log into the server, and check it, the videos are there, and visible. It records a few seconds before and after the movement. Demo! Now you can check out PetTrack at: 👉 https://pettrackdemo.szabence.com How to access: Select language (colors are broken i know) Select Viewer For IP write asd or something, just dont leave it empty For password, write 8068 Press next, and you will see it asking if you want to go into Demo Press yes, and you are in! Its a quite basic demo, its the same codebase, just no server behind. You can add medications, test zones, etc. After you close the tab, everything will be deleted. I will test the project as I am going about my week, fix errors at night, and I will ship the project next week. Have a great week guys, and thank you for watching the project."}, {"post_id": 40217, "ts": "2026-08-03T16:58:52Z", "hours": 4.8564, "text": "Hey guys.. Its been 17 days since the last Devlog, I dont even know what I “upgraded” or didn’t. I wont’t try to make it a big devlog or anything, really i just want to get the hours logged so I can start fresh. I’ve decided to ditch all 3 (pettrack_monitor, pettrack_client and pettrack_web) codebases and rewrite everything as one flutter app. Making sure 4 sections of the app written in 3 different languages wasn’t easy on my level so I decided to ditch all and write one “pettrack_app” codebase. It will work on Android, iOS and Web, and for iOS users also PWA app, so you don’t have to install anything, and it will all work under one codebase, so everything will be the same across all devices. So. I don’t know when I will finish or anything, or write the next devlog, because I have so many things to do this month, soo…"}, {"post_id": 30037, "ts": "2026-07-17T09:22:29Z", "hours": 6.6725, "text": "The Flutter apps and the Server is 99% done until shipping! This is rather a bigger devlog, I didn’t make a more smaller ones, but let’s see what I’ve done: Easier pairing : Now instead of using a qr code (which in the Docker terminal is unreliable), you get a 4 number pairing code, which you can use to communicate the 64 char JWT token. It’s much easier, and much more reliable. Docker : I implemented Docker, but it seems like at the moment that it only really works on MacOS, i might phase Docker out and make setup commands for each, maybe a oneliner with curl, or something like that. Bugfixes : Lots of bugfixes in those 6,5 hours, I can’t even list all of them, connectivity issues, pairing issues, camera issues, UI Cleanup : I removed developer overlays from the web e.g Eruda mobile console overlay. I will be focusing a lot more on the Mock API for the demo site, and polishing for Shipping EXCEPT for one feature that I still want to add, and that would be insanely good. Bye guys!"}, {"post_id": 27994, "ts": "2026-07-13T23:20:55Z", "hours": 4.0786, "text": "🚀 WebClient is getting ready! I’ve done multiple things with the WebClient over the last 4 hours, and we are getting closer and closer to shipping! Here is a quick rundown of the progress: 🛠️ Key Features & Updates Unified Multi-Mode: You can now choose whether you want to use a device as a Client (Viewer) or a Monitor (Camera). Zone Management: Zone adding now works! (Showing current zones is still slightly broken, but we are getting there). Event Tracking: Zone enter/exit detection is fully functional. Dashboard Stats: Added panels to show “Last seen” and “Most seen” locations. Pet Profiles: You can now edit your pet’s profile directly from the Settings tab. Settings Reset: Added the ability to wipe all local settings if you want a fresh start. 🎨 UI & UX Polish Dark Mode: Synced theme with Client, dark and light mode aswell. Cleaned up the UI: Removed all unnecessary buttons. P.S. Berci got vaccinated today! 💉🐇 So now he’s immune to both physical viruses and mental breakdowns over JavaScript!"}, {"post_id": 27081, "ts": "2026-07-12T10:04:49Z", "hours": 5.1319, "text": "now i understand why web developers are all bald and angry… Okkkay so, little bit of a backgound here, I do not agree on the fact that I should pay for FOSS apps to be put on the play store and app store, that for one company i should pay 25 bucks once and then i can put my app on the app store and i have to pay 100 BUCKS YEARLY TO APPLE. So, instead of creating an app for iOS, since you can’t really sideload (there are ways for people in Europe and you can jailbreak bla bla bla…) and this app is made for ordinary people. Not developers. So, as a last resort, I am making a WebClient and WebMonitor, so the apps are able to run without even installing anything. Obviously the installed apps will run better and feel better, but then no iOS support, which I did not want. So, I started working with AI on a WebClient and WebMonitor and started learning JavaScript, but that…. Dart next to Javascript is a kids game honestly, very hard, I tried to make it easier for me by using TailwindCSS which I have some experience in, but it wasn’t that easy. To eliminate AI slop, I have a great Web developer friend (became bald at the bold age of 30), and he’ll monitor the code and check if it is alright for “prod”…"}, {"post_id": 25564, "ts": "2026-07-09T21:53:54Z", "hours": 4.0792, "text": "🛠️ BUGFIXES! BUGFIXES! I didn’t really add any new features this time, but rather focused on fixing and polishing already existing features. 🔒 Security and Stability Token Generation: I removed hardcoded “placeholder” tokens; the system now creates a new API token seamlessly. Storage Limits: Added a maximum 500 picture limit on the server, so it doesn’t fill up the storage if the cleanup task fails. Syntax Fixes: Fixed a broken dictionary on the server which threw garbage JSON. ✨ UI and Usability Notification Cooldown: Added a 1-minute cooldown between notifications to prevent spam. Better Statistics: Now the Activities tab shows 50 events instead of 5 for more accurate data. Dynamic Names: Removed fallback placeholder names (no more hardcoded fake names). 100% Localization: Removed all hardcoded UI strings and moved absolutely everything into l10n and .arb dictionaries. 🏗️ Architecture Hardware JPEG Streaming: Switched to native hardware JPEG streaming for faster picture taking, completely replacing the heavy RepaintBoundary method. 🚧 IN THE WORKS: WebSocket migration! I will tackle that tomorrow to achieve real-time streaming. Here is a picture showing git graph (lol) and Berci as I was fixing up issues. Bye guys!"}, {"post_id": 25297, "ts": "2026-07-09T14:26:21Z", "hours": 6.7308, "text": "More seamless Setup! I have edited the Setups, so now, it is more seamless: When you Install the server, it spits out a QR-code, which you have to scan while setting up the Client app, they connect, and you have to set up the profile of the pet, and a 4 digit pin code, which will be for the WebClient that I am planning to make. After that, the phone spits out another QR code, which you have to scan with the Monitor, and it will connect automatically, and only then will the app let you in. Also, I added E2EE to the server - client connection, to make it more secure, and I also did some bugfixes. I will start to Polish the apps, make it so easy to set up that even somebody who doesn’t use technology day-to-day would be able to set it up perfectly. Bye guys!"}, {"post_id": 24346, "ts": "2026-07-07T21:10:21Z", "hours": 4.4408, "text": "Monitor ready, server working, Client UI is mostly done, we are shipping soon! I made a few adjustments today: Monitor: Synced theme with Client Fixed alignment issues Added Auto reconnect and Auto capture Monitor is basically finished, I don’t think I will add anything to the monitor before shipping now. New README.md: I completly redesigned the README, now in my opinion its almost perfect. Tomorrow, I will start to make a webpage for the project, and I might make a WebUI before the project ships, and add some more tests, but I will sleep on that. Bye guys!"}, {"post_id": 22216, "ts": "2026-07-04T16:05:40Z", "hours": 3.8428, "text": "Frontend Changes to PetTrack! Today I worked a lot on PetTrack, and I made a few small but nice changes: Zone Notifications: You now get notified if a pet enters or exits a zone. Battery Alerts: Get notifications if the monitor’s battery is low (can be set between 5% and 50%). Camera Placeholder: Added a placeholder picture for when the camera is offline. Pet Types: You can now set the type of pet you have. I’ve added a few common ones, but I can add more if needed! Dynamic Live Badge: Fixed the hardcoded “Live” text on the dashboard. Now it shows exactly when the picture was taken (e.g., “30 seconds ago”), and if it’s under 10 seconds, it will say “Live”. “Continuous” Video: It’s still using pictures, but instead of updating every 30 seconds, it now updates roughly every 2 seconds. UI Cleanup: Removed the zoom buttons from the Zones screen since they were unnecessary. Custom Zones & Icons: When adding a new zone, you can now assign it a category (play area, toilet, food, water, bed) with matching icons. I’ll add a fully customizable option later! Bug Fixes: Fixed some minor layout issues. That’s all I think. Bye guys!"}, {"post_id": 21821, "ts": "2026-07-03T23:05:28Z", "hours": 3.5933, "text": "Miscellaneous Updates to PetTrack! Hey guys! I know I haven’t posted in almost 2 weeks at this point. I needed a break from coding and doing work at the PC/PetTrack. We have a few miscellaneous updates to share: Custom Monitor IDs : You can now set a custom Monitor ID, and it will show up properly in the PetTrack app as well, instead of just defaulting to “Main Monitor”. Battery Status : You can now see the battery percentage and whether it’s charging directly in the app! I plan to add a feature later that will send a notification to the PetTrack Client app when the monitor phone’s battery is running low. Backend Testing : Added testing to the PetTrack server for both the WebSocket and REST API, so you can easily check if the API and WS are working correctly. I will put more effort and hours into the project soon, but I have a lot of other things going on besides this project, and I don’t want to risk burning out. Bye! P.S: This is Berci from a few days ago and I pushed everything to GH!"}, {"post_id": 12162, "ts": "2026-06-19T21:23:36Z", "hours": 5.9286, "text": "Hey guys! I haven’t posted a devlog in a few days now, I have been working on some stuff here, and I have to say that I have some very good news! We finally have a Client app! It is a work in progress, but it is something! I don’t remember everything I have changed in the code, but: API adjusted, added a layer of security, because the API wasn’t secured. Added zones to pettrack_server, and added an API to edit it, Added Database (maybe mentioned in last devlog) Takes pictures every 2 seconds, only saves every 30 seconds for 12 hours (will add a replay mode or something like that) pettrack_monitor almost fully done, only need to add some stuff here and there. pettrack_server is in an MVP state now, it works beautifully but some features are still missing before shipping pettrack_client has been made (not pushed to GH yet), works well, though I am pretty fking shyt in UI design, so I made the UI with stitch.withgoogle.com and coded some of it with Gemini, though it still needs a lot of work. Live camera somewhat works (TODO: need to add when watching in the app to show the new pictures (that are taken every 2 seconds and not the 30 seconds saved)) Shows which zone was the most used- Shows last interaction (movement) Last 15 activities (entered zone, left zone, will add more later ? (NEED IDEAS!)) You can add zones (see the live camera and set it via adding points on the picture) You can set a picture and name for your pet in the client app- Always changing welcome greetings No logo / face for the program yet, and no website, will start working on that later The Client app seems very stable for now, no issues found, pettrack_monitor has issues with focusing, server seems stable aswell. I am soon looking for testers for the program, before shipping I want to make sure that this is functional and useful for small pet owners, and what might work for me in my use case, it might not for somebody else, and I want to make it as stable as I am able to. Everything is opensource, available on https://github.com/szbnce/PetTrack (will push everything to GH tomorrow!), DM me on Slack if interested, currently only available for Android. I will start working on the UI and fix the bugs, and get back to you guys soon! Here are some pictures of the UI!"}, {"post_id": 10248, "ts": "2026-06-16T21:39:22Z", "hours": 2.5683, "text": "Hey guys! It’s been a long day, once again, but I have some good news! I have started working on PetTrack Client, started writing the UI and the functions of the app, but that’s when I realised that I still have no way of storing the data, analyzing the data and I don’t have any API routes where I could check or see the NON EXISTENT DATA! so, I left pettrack_client and started working on the backend, it’s getting somewhere, but I have not pushed changes to GH yet, because I haven’t finished it yet and it would not run in this state. I will try to finish changes with the backend tomorrow so I can start working on the frontend / client with real, actual data. Until then, here is a picture of PetTrack Monitor running on a somewhat low end Android 8.0 device and my IDE :D"}, {"post_id": 8371, "ts": "2026-06-13T22:29:10Z", "hours": 2.42, "text": "Good day everybody! It’s been a long day. I have done a lot of things today, mainly with pettrack_monitor. Basically: Firstly, I did a git rebase and made my last few commits make a bit more sense. There were commits that weren’t that useful or had the wrong name; it’s always better to have a good commit history. Next, I finally installed the app on a real device, and let’s just say, there were some problems. The flashlight was on while taking pictures, which is what I fixed first. It was quite easy, just one line: await _controller.setFlashMode(FlashMode.off); Afterward, it dawned on me that most people (including me) will use this app in Landscape mode, not Portrait. I fixed that issue next, but that itself came with a batch of new problems. The layout broke, like, fully. I couldn’t use the app at all, so I had to rewrite the whole layout with flexes and SizedBoxes; it was a pain in the a**. After this issue, instead of showing the SetupScreen every time the app opens, I made it a one-time thing and added a Settings menu and an About page. There were some issues with overflowing, but I fixed that as well. Now the app is fully functional. However, there is an issue I haven’t gotten around to fixing yet: when I exit the SetupScreen and go into MonitorScreen, the Xiaomi Camera API kills itself for whatever reason. I tried fixing it, but to no avail. It’s currently 12:30 AM, and I am very tired now. Tomorrow, I hope I will fix all remaining issues with the Monitor app and move onto the Server-side logic, zones, database, etc. And while doing that, I will start working on the Client-side app (at least an MVP) so I can start testing the app and server together. Berci is also looking forward to testing the app! (And don’t ask why he is there he is there because he wants to I have no idea why that’s good for him) Peace out!"}, {"post_id": 7131, "ts": "2026-06-11T22:16:46Z", "hours": 1.8947, "text": "We finally have the server in Docker up and running! I haven’t had much time to work on the project yesterday and today, but I started working on the Docker and Dockerfile, and well this is still whichcraft for me :p But, we are developing and we are getting ahead, and I hope that after the MVP for the server is working, I can start working on the client side MVP of the app, and we can start implementing features from there. I am very tired, and I have a long day tomorrow. Until then, there is another picture of Berci! P.S: Tomorrow I hope I can show some of the actual project!"}, {"post_id": 5844, "ts": "2026-06-09T19:49:41Z", "hours": 3.1944, "text": "Hey! Welcome to my project, PetTrack, this is the first Devlog of the project. I just recently got a rabbit, and while in school, I don’t know what she’s doing. And I assume a lot of animal parents face the same issue, or not an issue but just an uncomfortable feeling, maybe she/he got out, maybe they are doing something wrong, maybe they are not doing well, etc. This is what PetTrack aims to solve, so this uncomfortable feeling goes away, and you can be sure that your pet is safe and sound, while you are away. It uses an old phone as a “Monitor”, which will be attached to for example the cage of a pet, and connected to external power. Originally I wanted to make it so that there is no “central” computing, but after thinking about this for some time, and figuring that most of the people who are going to use this are going to use a close to min requirement phone (assuming low range old phone, and not a new flagship/new anything basically) and the issues with if the monitor dies for some issue, I decided on using a “central server” and using FastAPI with WebSockets to make the usage more seamless. It will be a simple Docker image that you will need to compose and run on a RPI or your server. The Client will be the “main” app, the one you will use the most, the one you’ll use daily. This is my last priority at the moment, let’s get the data first (Monitor), analyze and make use of the data (Server/backend), and the last is to see the data (Client). I’m open to any and all feedback on the project, any tips, help with Py/Flutter, would appreciate! Thanks for reading! Pic Description: My rabbit, named Berci, and an MVP of the server and Monitor."}]...
|
Title: PetTrack by @szabence | Stardance
Devlogs: Title: PetTrack by @szabence | Stardance
Devlogs:
Hey! Welcome to my project, PetTrack, this is the first Devlog of the project. I just recently got a rabbit, and while in school, I don’t know what she’s doing. And I assume a lot of animal parents face the same issue, or not an issue but just an uncomfortable feeling, maybe she/he got out, maybe they are doing something wrong, maybe they are not doing well, etc. This is what PetTrack aims to solve, so this uncomfortable feeling goes away, and you can be sure that your pet is safe and sound, while you are away. It uses an old phone as a “Monitor”, which will be attached to for example the cage of a pet, and connected to external power. Originally I wanted to make it so that there is no “central” computing, but after thinking about this for some time, and figuring that most of the people who are going to use this are going to use a close to min requirement phone (assuming low range old phone, and not a new flagship/new anything basically) and the issues with if the monitor dies for some issue, I decided on using a “central server” and using FastAPI with WebSockets to make the usage more seamless. It will be a simple Docker image that you will need to compose and run on a RPI or your server. The Client will be the “main” app, the one you will use the most, the one you’ll use daily. This is my last priority at the moment, let’s get the data first (Monitor), analyze and make use of the data (Server/backend), and the last is to see the data (Client). I’m open to any and all feedback on the project, any tips, help with Py/Flutter, would appreciate! Thanks for reading! Pic Description: My rabbit, named Berci, and an MVP of the server and Monitor.
We finally have the server in Docker up and running! I haven’t had much time to work on the project yesterday and today, but I started working on the Docker and Dockerfile, and well this is still whichcraft for me :p But, we are developing and we are getting ahead, and I hope that after the MVP for the server is working, I can start working on the client side MVP of the app, and we can start implementing features from there. I am very tired, and I have a long day tomorrow. Until then, there is another picture of Berci! P.S: Tomorrow I hope I can show some of the actual project!
Good day everybody! It’s been a long day. I have done a lot of things today, mainly with pettrack_monitor. Basically: Firstly, I did a git rebase and made my last few commits make a bit more sense. There were commits that weren’t that useful or had the wrong name; it’s always better to have a good commit history. Next, I finally installed the app on a real device, and let’s just say, there were some problems. The flashlight was on while taking pictures, which is what I fixed first. It was quite easy, just one line: await _controller.setFlashMode(FlashMode.off); Afterward, it dawned on me that most people (including me) will use this app in Landscape mode, not Portrait. I fixed that issue next, but that itself came with a batch of new problems. The layout broke, like, fully. I couldn’t use the app at all, so I had to rewrite the whole layout with flexes and SizedBoxes; it was a pain in the a**. After this issue, instead of showing the SetupScreen every time the app opens, I made it a one-time thing and added a Settings menu and an About page. There were some issues with overflowing, but I fixed that as well. Now the app is fully functional. However, there is an issue I haven’t gotten around to fixing yet: when I exit the SetupScreen and go into MonitorScreen, the Xiaomi Camera API kills itself for whatever reason. I tried fixing it, but to no avail. It’s currently 12:30 AM, and I am very tired now. Tomorrow, I hope I will fix all remaining issues with the Monitor app and move onto the Server-side logic, zones, database, etc. And while doing that, I will start working on the Client-side app (at least an MVP) so I can start testing the app and server together. Berci is also looking forward to testing the app! (And don’t ask why he is there he is there because he wants to I have no idea why that’s good for him) Peace out!
Hey guys! It’s been a long day, once again, but I have some good news! I have started working on PetTrack Client, started writing the UI and the functions of the app, but that’s when I realised that I still have no way of storing the data, analyzing the data and I don’t have any API routes where I could check or see the NON EXISTENT DATA! so, I left pettrack_client and started working on the backend, it’s getting somewhere, but I have not pushed changes to GH yet, because I haven’t finished it yet and it would not run in this state. I will try to finish changes with the backend tomorrow so I can start working on the frontend / client with real, actual data. Until then, here is a picture of PetTrack Monitor running on a somewhat low end Android 8.0 device and my IDE :D
Hey guys! I haven’t posted a devlog in a few days now, I have been working on some stuff here, and I have to say that I have some very good news! We finally have a Client app! It is a work in progress, but it is something! I don’t remember everything I have changed in the code, but: API adjusted, added a layer of security, because the API wasn’t secured. Added zones to pettrack_server, and added an API to edit it, Added Database (maybe mentioned in last devlog) Takes pictures every 2 seconds, only saves every 30 seconds for 12 hours (will add a replay mode or something like that) pettrack_monitor almost fully done, only need to add some stuff here and there. pettrack_server is in an MVP state now, it works beautifully but some features are still missing before shipping pettrack_client has been made (not pushed to GH yet), works well, though I am pretty fking shyt in UI design, so I made the UI with stitch.withgoogle.com and coded some of it with Gemini, though it still needs a lot of work. Live camera somewhat works (TODO: need to add when watching in the app to show the new pictures (that are taken every 2 seconds and not the 30 seconds saved)) Shows which zone was the most used- Shows last interaction (movement) Last 15 activities (entered zone, left zone, will add more later ? (NEED IDEAS!)) You can add zones (see the live camera and set it via adding points on the picture) You can set a picture and name for your pet in the client app- Always changing welcome greetings No logo / face for the program yet, and no website, will start working on that later The Client app seems very stable for now, no issues found, pettrack_monitor has issues with focusing, server seems stable aswell. I am soon looking for testers for the program, before shipping I want to make sure that this is functional and useful for small pet owners, and what might work for me in my use case, it might not for somebody else, and I want to make it as stable as I am able to. Everything is opensource, available on https://github.com/szbnce/PetTrack (will push everything to GH tomorrow!), DM me on Slack if interested, currently only available for Android. I will start working on the UI and fix the bugs, and get back to you guys soon! Here are some pictures of the UI!
Miscellaneous Updates to PetTrack! Hey guys! I know I haven’t posted in almost 2 weeks at this point. I needed a break from coding and doing work at the PC/PetTrack. We have a few miscellaneous updates to share: Custom Monitor IDs : You can now set a custom Monitor ID, and it will show up properly in the PetTrack app as well, instead of just defaulting to “Main Monitor”. Battery Status : You can now see the battery percentage and whether it’s charging directly in the app! I plan to add a feature later that will send a notification to the PetTrack Client app when the monitor phone’s battery is running low. Backend Testing : Added testing to the PetTrack server for both the WebSocket and REST API, so you can easily check if the API and WS are working correctly. I will put more effort and hours into the project soon, but I have a lot of other things going on besides this project, and I don’t want to risk burning out. Bye! P.S: This is Berci from a few days ago and I pushed everything to GH!
Frontend Changes to PetTrack! Today I worked a lot on PetTrack, and I made a few small but nice changes: Zone Notifications: You now get notified if a pet enters or exits a zone. Battery Alerts: Get notifications if the monitor’s battery is low (can be set between 5% and 50%). Camera Placeholder: Added a placeholder picture for when the camera is offline. Pet Types: You can now set the type of pet you have. I’ve added a few common ones, but I can add more if needed! Dynamic Live Badge: Fixed the hardcoded “Live” text on the dashboard. Now it shows exactly when the picture was taken (e.g., “30 seconds ago”), and if it’s under 10 seconds, it will say “Live”. “Continuous” Video: It’s still using pictures, but instead of updating every 30 seconds, it now updates roughly every 2 seconds. UI Cleanup: Removed the zoom buttons from the Zones screen since they were unnecessary. Custom Zones & Icons: When adding a new zone, you can now assign it a category (play area, toilet, food, water, bed) with matching icons. I’ll add a fully customizable option later! Bug Fixes: Fixed some minor layout issues. That’s all I think. Bye guys!
Monitor ready, server working, Client UI is mostly done, we are shipping soon! I made a few adjustments today: Monitor: Synced theme with Client Fixed alignment issues Added Auto reconnect and Auto capture Monitor is basically finished, I don’t think I will add anything to the monitor before shipping now. New README.md: I completly redesigned the README, now in my opinion its almost perfect. Tomorrow, I will start to make a webpage for the project, and I might make a WebUI before the project ships, and add some more tests, but I will sleep on that. Bye guys!
More seamless Setup! I have edited the Setups, so now, it is more seamless: When you Install the server, it spits out a QR-code, which you have to scan while setting up the Client app, they connect, and you have to set up the profile of the pet, and a 4 digit pin code, which will be for the WebClient that I am planning to make. After that, the phone spits out another QR code, which you have to scan with the Monitor, and it will connect automatically, and only then will the app let you in. Also, I added E2EE to the server - client connection, to make it more secure, and I also did some bugfixes. I will start to Polish the apps, make it so easy to set up that even somebody who doesn’t use technology day-to-day would be able to set it up perfectly. Bye guys!
🛠️ BUGFIXES! BUGFIXES! I didn’t really add any new features this time, but rather focused on fixing and polishing already existing features. 🔒 Security and Stability Token Generation: I removed hardcoded “placeholder” tokens; the system now creates a new API token seamlessly. Storage Limits: Added a maximum 500 picture limit on the server, so it doesn’t fill up the storage if the cleanup task fails. Syntax Fixes: Fixed a broken dictionary on the server which threw garbage JSON. ✨ UI and Usability Notification Cooldown: Added a 1-minute cooldown between notifications to prevent spam. Better Statistics: Now the Activities tab shows 50 events instead of 5 for more accurate data. Dynamic Names: Removed fallback placeholder names (no more hardcoded fake names). 100% Localization: Removed all hardcoded UI strings and moved absolutely everything into l10n and .arb dictionaries. 🏗️ Architecture Hardware JPEG Streaming: Switched to native hardware JPEG streaming for faster picture taking, completely replacing the heavy RepaintBoundary method. 🚧 IN THE WORKS: WebSocket migration! I will tackle that tomorrow to achieve real-time streaming. Here is a picture showing git graph (lol) and Berci as I was fixing up issues. Bye guys!
now i understand why web developers are all bald and angry… Okkkay so, little bit of a backgound here, I do not agree on the fact that I should pay for FOSS apps to be put on the play store and app store, that for one company i should pay 25 bucks once and then i can put my app on the app store and i have to pay 100 BUCKS YEARLY TO APPLE. So, instead of creating an app for iOS, since you can’t really sideload (there are ways for people in Europe and you can jailbreak bla bla bla…) and this app is made for ordinary people. Not developers. So, as a last resort, I am making a WebClient and WebMonitor, so the apps are able to run without even installing anything. Obviously the installed apps will run better and feel better, but then no iOS support, which I did not want. So, I started working with AI on a WebClient and WebMonitor and started learning JavaScript, but that…. Dart next to Javascript is a kids game honestly, very hard, I tried to make it easier for me by using TailwindCSS which I have some experience in, but it wasn’t that easy. To eliminate AI slop, I have a great Web developer friend (became bald at the bold age of 30), and he’ll monitor the code and check if it is alright for “prod”…
🚀 WebClient is getting ready! I’ve done multiple things with the WebClient over the last 4 hours, and we are getting closer and closer to shipping! Here is a quick rundown of the progress: 🛠️ Key Features & Updates Unified Multi-Mode: You can now choose whether you want to use a device as a Client (Viewer) or a Monitor (Camera). Zone Management: Zone adding now works! (Showing current zones is still slightly broken, but we are getting there). Event Tracking: Zone enter/exit detection is fully functional. Dashboard Stats: Added panels to show “Last seen” and “Most seen” locations. Pet Profiles: You can now edit your pet’s profile directly from the Settings tab. Settings Reset: Added the ability to wipe all local settings if you want a fresh start. 🎨 UI & UX Polish Dark Mode: Synced theme with Client, dark and light mode aswell. Cleaned up the UI: Removed all unnecessary buttons. P.S. Berci got vaccinated today! 💉🐇 So now he’s immune to both physical viruses and mental breakdowns over JavaScript!
The Flutter apps and the Server is 99% done until shipping! This is rather a bigger devlog, I didn’t make a more smaller ones, but let’s see what I’ve done: Easier pairing : Now instead of using a qr code (which in the Docker terminal is unreliable), you get a 4 number pairing code, which you can use to communicate the 64 char JWT token. It’s much easier, and much more reliable. Docker : I implemented Docker, but it seems like at the moment that it only really works on MacOS, i might phase Docker out and make setup commands for each, maybe a oneliner with curl, or something like that. Bugfixes : Lots of bugfixes in those 6,5 hours, I can’t even list all of them, connectivity issues, pairing issues, camera issues, UI Cleanup : I removed developer overlays from the web e.g Eruda mobile console overlay. I will be focusing a lot more on the Mock API for the demo site, and polishing for Shipping EXCEPT for one feature that I still want to add, and that would be insanely good. Bye guys!
Hey guys.. Its been 17 days since the last Devlog, I dont even know what I “upgraded” or didn’t. I wont’t try to make it a big devlog or anything, really i just want to get the hours logged so I can start fresh. I’ve decided to ditch all 3 (pettrack_monitor, pettrack_client and pettrack_web) codebases and rewrite everything as one flutter app. Making sure 4 sections of the app written in 3 different languages wasn’t easy on my level so I decided to ditch all and write one “pettrack_app” codebase. It will work on Android, iOS and Web, and for iOS users also PWA app, so you don’t have to install anything, and it will all work under one codebase, so everything will be the same across all devices. So. I don’t know when I will finish or anything, or write the next devlog, because I have so many things to do this month, soo…
PetTrack Demo is finally here! I haven’t worked on PetTrack in the past 1,5 months, mostly because I just couldn’t bring myself to code, and I am going on vacation as I am writing this, and I figured, omg, if i come home, it will be already september, and besides school, i will definetly not finish this, and then, what was I working for for days on end? So, I got my sxit together, and started working on the project. Sadly, because of the time, I had to use AI so I will finish until I leave for vacation. I almost did not. It’s 3:45 AM, I left 2 hours ago, and I set up the server 15 whole minutes before leaving my house. So it was calculated, but I managed. Unified Flutter codebase: I merged the pettrack_client , pettrack_montior and pettrack_web , into one package, and is written in Flutter. The app is entirely in Flutter, I kept designs of the Client so it won’t look very different. Deployment & OS Support: The new one app method is Docker compatible, so the project will offer a Docker option, and a non-docker MacOS and Linux native installer, and a Windows installer aswell, without docker :) Branching: The one where I used AI has been moved to a new branch "allFlutter" . iOS Support: I initally did not want to make an iOS version because I don’t really agree with the yearly 100 usd developer program payment, and I don’t really agree with Google Play 25usd purchase aswell, but that’s very much more manageable than a yearly model, on a FOSS app. Anyways, I will publish the .ipa file, and do what you want with it :) If you have the courage and understanding, you can jailbreak and install it indefinetly, or you can sideload it, though you will have to renew it every week. If you don’t want to do that, you can of course use the Web version in a browser, it will work the exact same way, they are the same codebase under. Web support: This was my original plan to make PetTrack work on iOS devices, but then, I decided why not make it fully work on any browser? One codebase, the Webapp, the Android app and iOS app will work the EXACT SAME WAY! if you want to install a full app, you may, but if you don’t, you have all options. Medical panel: I think I have made a devlog about that, or mentioned that, but I will write it once again. We have a Medical tab now, where you will be able to track Medications and get notifications to give them to your pet, and the Vaccines tab, where you can track what the pet has gotten, when, and when its next Due. You can also set more colors. Replay: You can now replay movement. Currently for some reason, It does not work (I started implementing it at 0:30 AM, left at 1:30 so I could’ve expected that), or atleast it does not work from the browser. If i log into the server, and check it, the videos are there, and visible. It records a few seconds before and after the movement. Demo! Now you can check out PetTrack at: 👉 https://pettrackdemo.szabence.com How to access: Select language (colors are broken i know) Select Viewer For IP write asd or something, just dont leave it empty For password, write 8068 Press next, and you will see it asking if you want to go into Demo Press yes, and you are in! Its a quite basic demo, its the same codebase, just no server behind. You can add medications, test zones, etc. After you close the tab, everything will be deleted. I will test the project as I am going about my week, fix errors at night, and I will ship the project next week. Have a great week guys, and thank you for watching the project.
PetTrack has been released! Hello guys! I’m not going to mess around with Markdown for this last devlog, I have been testing the project for 2 weeks now, and it is working great. I fixed up minor bugs that I found, added 5 AI-translated languages for more multilang support, though Hungarian and English has been translated by me, so those are definetly correct :) I changed on the UI a bit, removed the last seen and most seen cards from the dashboard and changed it to a diagram about the Zone visits, and changed the Medical UI cards a bit. Also made the resolution in the app better, now you can make pictures from the app, and instantly share them, replays work now on both iOS and Android. The first release of PetTrack has been finally published on GitHub, so please go and check it out! https://github.com/szbnce/PetTrack/releases/tag/1.0.0 Thank you everybody who has been though this journey over 3 months with me. Thank you!
PetTrack reship no.2 Hey guys, I have shipped the project last week, but I got rejected because I’ve used the project logo as banner and not a screenshot… Anyways, I fixed some bugs that Ive seen since shipping, which was the Notification, on both iOS and Android and Web, it wasn’t working correctly anywhere, but because of lack of time at the moment, I have removed the Notification option. on iOS it will never work self-hosted, because it requires apple dev account and the app to be on the app store or have a real backend behind it, or something like that I’ve read. I also removed the Sync with watch button from the iOS builds and Web builds, since there is only WearOS build. Google play! I have started the process to put the app on the Google Play. I was originally against this, as y’all have read in one of the first devlogs, but I thought, 25 bucks once isn’t that much, so PetTrack will be on the Play store soon, but by the looks of things, only after Stardance has already finished. WearOS I started school once again, and I couldn’t always get to my phone so I have made a minimalist app to use on the watch, it’s not that full, you can only see 1 frame / 5 seconds, and you can’t edit anything, only check the live feed, check the Monitors battery percentage and the last seen in X zone. I will ship my project once again, thank you for reading! EDIT: I did not know I just need recertification instead of a full reship lol
Ships:
PetTrack! A beautiful Pet Monitoring system that upcycles old smartphones into IP-cameras that you can use to see your small pet I made this project because I took in a Rabbit in May 2026 and I didn’t know what she was doing when i wasn’t home, so I decided to code this app that you can install on any Android 7+ / iPhone 6s or newer device, and use it to check on your pet, with a beautiful UI, Zone tracking, replays, medicine and vaccine tracking, and a lot more :) The hardest part was, getting used to writing Flutter. I have never used Flutter in the past, but I read about it and I liked the mentality and the mechanics of the code or how should I say, and I decided to give it a go. I love it. Simple but effective, and I can use this 1 codebase on the web, on my iPhone, on my Android and even on my WearOS smartwatch :) The project is working, and you can check it by the bottom below, select language, select Client and press Demo mode, it will show the UI. You can see it working in action on the screenshots. Check the README, and thank you for reading this!...
|
1793145372.4601498
|
1793231772.4601498
|
|
58984
|
Self Driving Car Simulation by @dreamwithpriyanshu Self Driving Car Simulation by @dreamwithpriyanshu | Stardance...
|
dreamwithpriyanshu
|
1
|
13.02
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T13:58:51Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a self driving car simulation, for learning SARS algo of reinforcement learning. The model is trained and stored locally and dashboard and stats in Streamlit. This is made from scratch. Challenge were ideating and picking one solution switched from DQN vs SARS to SARS only, the control GUI option werent working, the code was ambiguious alll that thing had to be resolved, I learnt how to make project using Ai and human code mix, that is a great mix to look for, the architecture documentation and researching was a great win.", "repo": "https://github.com/dreamwithpriyanshu/arena-self-driving", "demo": "https://arena-self-driving.vercel.app/"}]...
|
[{"post_id": 67198, "ts": "202 [{"post_id": 67198, "ts": "2026-09-13T08:07:10Z", "hours": 0.7669, "text": "Fix Deployment Change the current structure to Vercel, as requested in feedback , The demo link is just for reference for running the model properly, install it locally. Also, the project is ML based and will require Pytorch, so hopefully Project will be approved"}, {"post_id": 63094, "ts": "2026-09-06T18:13:41Z", "hours": 1.4331, "text": "Final Documentation and Enhancements These are the one’s I did, took more than 3 hours but the work is finally finished. Fixed Render WebSocket training and headless evaluation. Migrated from DQN to transparent tabular SARSA. Improved native human/agent playback, controls, traffic, and flicker. Redesigned the frontend with calmer typography, colors, spacing, and CTAs. The main task was to develop this graphs, it felt impossible but synching is also done ! Added comprehensive architecture, security, algorithm, command, UI, and timeline documentation."}, {"post_id": 63030, "ts": "2026-09-06T16:28:11Z", "hours": 1.8233, "text": "Deployment and Hosting Done This was a basically a ai ml project still added a frontend for easier acces, if you install the project locally then each feature work perfectly, but for hosting web version just background service without demonstration work. The first task was to reinvent the UI , figure out small issues like fresh github install will retrain the model from zero meaning all progress in vain. But now it resumes as the attributes are also posted and can be continued from saved checkpoint that are updated when we update the github code. On render it works on persistent history. Apart from that worked on many issues and finally the project is completed. Lot of hardwork switching from Streamlit to FASTAPI"}, {"post_id": 62920, "ts": "2026-09-06T13:42:04Z", "hours": 8.6767, "text": "Ideation & Initial Code Generation - What began just as school project, didnt thought to be too harsh, even using Ai to assist. I had this idea to build Self driving car simulation, in which I researched and found we can use reinforcement algoritmns and chose Streamlit for Frotend, then finalised the plan Tech Stack : - Python I used Gymnassium - Highway env for Highway Environment, SAARS and DQN for learning and training model. The model is trained using State - Action - Reward system, with control of location thrust, speed lane and more. There was no novelty just to write it, then I chose streamlit for the visualization of training but turned out to be my biggest mistake, started scaffolding the project, building helper function and script for training, start datbase and Q learning table. Everything was good, then streamlit code for frontend the challenge I faced was, errors and not able to control environment and controls. then shifted to native python shell, and optimized gui controls, code shortening, documentations for quick start, control and journals. These are the major parts I did. Almost had 40 + commits unlimited brain storming, decision making still model needs improvement, but I think its NERDEST. What started as simple prompt journey taught several things, git merge conflicts to logical headache what to do now, at the end everything works fine button everything working and code is structured without AI slop. If you are reading till now, leave a feedback for me to improve, I know its just a start but small steps count. Whoever is reading this, GOD BLESS YOU."}]...
|
Title: Self Driving Car Simulation by @dreamwithpr Title: Self Driving Car Simulation by @dreamwithpriyanshu | Stardance
Devlogs:
Ideation & Initial Code Generation - What began just as school project, didnt thought to be too harsh, even using Ai to assist. I had this idea to build Self driving car simulation, in which I researched and found we can use reinforcement algoritmns and chose Streamlit for Frotend, then finalised the plan Tech Stack : - Python I used Gymnassium - Highway env for Highway Environment, SAARS and DQN for learning and training model. The model is trained using State - Action - Reward system, with control of location thrust, speed lane and more. There was no novelty just to write it, then I chose streamlit for the visualization of training but turned out to be my biggest mistake, started scaffolding the project, building helper function and script for training, start datbase and Q learning table. Everything was good, then streamlit code for frontend the challenge I faced was, errors and not able to control environment and controls. then shifted to native python shell, and optimized gui controls, code shortening, documentations for quick start, control and journals. These are the major parts I did. Almost had 40 + commits unlimited brain storming, decision making still model needs improvement, but I think its NERDEST. What started as simple prompt journey taught several things, git merge conflicts to logical headache what to do now, at the end everything works fine button everything working and code is structured without AI slop. If you are reading till now, leave a feedback for me to improve, I know its just a start but small steps count. Whoever is reading this, GOD BLESS YOU.
Deployment and Hosting Done This was a basically a ai ml project still added a frontend for easier acces, if you install the project locally then each feature work perfectly, but for hosting web version just background service without demonstration work. The first task was to reinvent the UI , figure out small issues like fresh github install will retrain the model from zero meaning all progress in vain. But now it resumes as the attributes are also posted and can be continued from saved checkpoint that are updated when we update the github code. On render it works on persistent history. Apart from that worked on many issues and finally the project is completed. Lot of hardwork switching from Streamlit to FASTAPI
Final Documentation and Enhancements These are the one’s I did, took more than 3 hours but the work is finally finished. Fixed Render WebSocket training and headless evaluation. Migrated from DQN to transparent tabular SARSA. Improved native human/agent playback, controls, traffic, and flicker. Redesigned the frontend with calmer typography, colors, spacing, and CTAs. The main task was to develop this graphs, it felt impossible but synching is also done ! Added comprehensive architecture, security, algorithm, command, UI, and timeline documentation.
Fix Deployment Change the current structure to Vercel, as requested in feedback , The demo link is just for reference for running the model properly, install it locally. Also, the project is ML based and will require Pytorch, so hopefully Project will be approved
Ships:
I made a self driving car simulation, for learning SARS algo of reinforcement learning. The model is trained and stored locally and dashboard and stats in Streamlit. This is made from scratch. Challenge were ideating and picking one solution switched from DQN vs SARS to SARS only, the control GUI option werent working, the code was ambiguious alll that thing had to be resolved, I learnt how to make project using Ai and human code mix, that is a great mix to look for, the architecture documentation and researching was a great win....
|
1793112432.6052446
|
1793198832.6052446
|
|
50329
|
Forgotten valley by @ankit677 | Stardance
|
ankit677
|
1
|
2.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T13:34:24Z", "hours": 2.0, "multiplier": 3.43, "payout": 5, "blessing": "neutral", "text": "I made Forgotten Valley, a horror game built with Unity and C#. I worked on the player gameplay, scripting, and game mechanics. I’m proud of turning my ideas into a playable game and improving it through testing and fixing problems. I want people to know that Forgotten Valley is an indie horror game that I’m continuing to develop and improve.", "repo": "https://github.com/Ankit6772012/Forgotten-valley", "demo": "https://play.unity.com/en/games/db7fa15c-116a-49cf-b69a-96806234995a/forgotten-valley"}]...
|
[{"post_id": 52945, "ts": "202 [{"post_id": 52945, "ts": "2026-08-23T10:06:48Z", "hours": 0.6683, "text": "I added settings option in my game adding resume,restart,quit and main menu options. I also added sliders.This was not a easy task my script was not so good,it have too errors. I firstly solved all the errors in my script then i procced to next steps."}, {"post_id": 52257, "ts": "2026-08-22T11:09:04Z", "hours": 0.8733, "text": "Today,as a first day on stardance,working on forgotten valley horror game.I added pausemenu script to make my game settings like a professional.My goal was to add sensitivity,resume and restart controls.I wrote pausemenu script and added it to maincamera game object."}]...
|
Title: Forgotten valley by @ankit677 | Stardance
Title: Forgotten valley by @ankit677 | Stardance
Devlogs:
Today,as a first day on stardance,working on forgotten valley horror game.I added pausemenu script to make my game settings like a professional.My goal was to add sensitivity,resume and restart controls.I wrote pausemenu script and added it to maincamera game object.
I added settings option in my game adding resume,restart,quit and main menu options. I also added sliders.This was not a easy task my script was not so good,it have too errors. I firstly solved all the errors in my script then i procced to next steps.
Ships:
I made Forgotten Valley, a horror game built with Unity and C#. I worked on the player gameplay, scripting, and game mechanics. I’m proud of turning my ideas into a playable game and improving it through testing and fixing problems. I want people to know that Forgotten Valley is an indie horror game that I’m continuing to develop and improve....
|
1793076490.4423723
|
1793162890.4423723
|
|
55864
|
ARCHIVYY by @Pranav23 | Stardance
|
Pranav23
|
2
|
8.0
|
7
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T13:19:18Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Archivyy is a personal digital archive built with Go, Echo, JavaScript, and SeaweedFS. Users can upload files through the web interface, which are sent by the Go backend to an S3-compatible SeaweedFS storage server. The backend uses S3 pagination to retrieve stored files and is being extended to allow users to stream media directly from the archive. The Go application is hosted on Render, while the storage is hosted separately on Hack Club Nest. btw for the s3 server to work start it up locally by cloning the whole project.. i recently also worked on adding metadata and streaming the data and previewing it before download", "repo": "https://github.com/Pranavtejar/archivyy", "demo": "https://pranav.hackclub.app/"}, {"ship_num": 2, "ts": "2026-08-30T04:22:20Z", "hours": 5.0, "multiplier": 1.53, "payout": 7, "blessing": "neutral", "text": "Archivyy is a personal digital archive built with Go, Echo, JavaScript, and SeaweedFS. Users can upload files through the web interface, which are sent by the Go backend to an S3-compatible SeaweedFS storage server. The backend uses S3 pagination to retrieve stored files and is being extended to allow users to stream media directly from the archive. The Go application is hosted on Render, while the storage is hosted separately on Hack Club Nest. btw for the s3 server to work start it up locally by cloning the whole project", "repo": "https://github.com/Pranavtejar/archivyy", "demo": "https://pranav.hackclub.app/"}]...
|
[{"post_id": 62905, "ts": "202 [{"post_id": 62905, "ts": "2026-09-06T13:17:58Z", "hours": 0.5389, "text": "i added a metadata feature that prevents the lag"}, {"post_id": 59401, "ts": "2026-09-01T06:30:15Z", "hours": 1.9761, "text": "i worked on adding thumbnails to mp4 and video data and also added a preview feature so instead of downloading the data the server streams data"}, {"post_id": 57822, "ts": "2026-08-30T03:53:01Z", "hours": 4.7139, "text": "this is the initial devlog for my archive webapp"}]...
|
Title: ARCHIVYY by @Pranav23 | Stardance
Devlogs: Title: ARCHIVYY by @Pranav23 | Stardance
Devlogs:
this is the initial devlog for my archive webapp
i worked on adding thumbnails to mp4 and video data and also added a preview feature so instead of downloading the data the server streams data
i added a metadata feature that prevents the lag
Ships:
Archivyy is a personal digital archive built with Go, Echo, JavaScript, and SeaweedFS. Users can upload files through the web interface, which are sent by the Go backend to an S3-compatible SeaweedFS storage server. The backend uses S3 pagination to retrieve stored files and is being extended to allow users to stream media directly from the archive. The Go application is hosted on Render, while the storage is hosted separately on Hack Club Nest. btw for the s3 server to work start it up locally by cloning the whole project
Archivyy is a personal digital archive built with Go, Echo, JavaScript, and SeaweedFS. Users can upload files through the web interface, which are sent by the Go backend to an S3-compatible SeaweedFS storage server. The backend uses S3 pagination to retrieve stored files and is being extended to allow users to stream media directly from the archive. The Go application is hosted on Render, while the storage is hosted separately on Hack Club Nest. btw for the s3 server to work start it up locally by cloning the whole project.. i recently also worked on adding metadata and streaming the data and previewing it before download...
|
1793098152.1001458
|
1793184552.1001458
|
|
32533
|
Kobayashi OS by @Riko | Stardance
|
Riko
|
2
|
151.0
|
2155
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T13:18:06Z", "hours": 108.0, "multiplier": 19.95, "payout": 2155, "blessing": "neutral", "text": "What did you make? Kobayashi OS — a web OS themed around Miss Kobayashi’s Dragon Maid . I wanted to make one of the most feature-rich and polished web OS experiences possible, something that actually feels like you’re using a PC. And yeah, this is Kobayashi’s PC, so don’t be surprised if you find something interesting related to her. The main thing I focused on was making everything feel connected, just like a real OS. Apps don’t just exist separately — Camera connects to Gallery and Files, downloads go into Files, Kanvas can save things to Files, widgets remember where you put them, and Kobayashi-chan can actually interact with the system. Basically, it’s not just a collection of apps. It’s one big little OS. What was challenging? Interconnecting all the apps and keeping everything persistent was definitely a challenge. I wanted things to behave like an actual OS instead of just being separate demos. Making the Kobayashi-chan AI work was one of the toughest hurdles. Getting tool calling, memory, emotions, and system interaction to work together took a lot of trial and error. Designing and building the widget system was another tough one. Making widgets draggable, positionable, persistent, and actually useful took quite a bit of work. Honestly, getting all the small details and polish right took way more time than I expected. What am I proud of? First — Kobayashi-chan AI. This is probably my favorite part of the whole project. She has tool calling, memory, emotions, and can actually interact with the OS. I genuinely didn’t expect I would be able to make something like this. It’s basically a little Jarvis, but Kobayashi-chan. The piano. I spent way more time on this than I probably should have. Not building it — playing it. It’s such a stupidly fun little feature that I keep losing track of time playing on it. The overall polish. I’ve been working on this for so long that I’ve honestly lost count of all the little things I added. I designed the UI in Figma, made a lot of the icons myself, kept redesigning things, learned a ridiculous amount along the way, and kept adding small details until it finally started feeling like a real OS. I’m genuinely proud of how it turned out. There are a lot of things packed into this project, and I think the best way to understand the amount of work that went into it is to actually explore it yourself. What should you know before testing? The project: https://kobayashi.cawai.site/ Please explore the widgets. This is one of the parts I spent a lot of time on. Please try the piano. Seriously. On the first load, some images may take 1–2 seconds to appear. Give it a moment. Wallpaper customization, live wallpapers, and icon customization may also take a little time on the first load. There are a LOT of games: Thor, Spider-Man, Minecraft, etc. If you open one and see a black screen, don’t panic. Some of them just take a little while to load. Come on, we’re talking about Minecraft here. Give it some time. And obviously, click around. Open things. Break things. Try stuff. A lot of the fun is finding the little details hidden around the OS. That’s Kobayashi OS. I started with the idea of making a web OS, but somewhere along the way it turned into this huge little world with its own apps, games, music, memories, AI, and way too many tiny details. Hope you have fun exploring it.", "repo": "https://github.com/anshumitasahu/Kobayashi--OS", "demo": "https://kobayashi.cawai.site/"}, {"ship_num": 2, "ts": "2026-08-01T08:57:08Z", "hours": 43.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Kobayashi OS v1.0 is finally live! Kobayashi OS is a lightweight, anime-inspired Web Operating System built to bring a desktop-like experience to the browser. This first release focuses on a smooth window management system, allowing multiple instances of the same application, along with wallpaper, icon, and brightness customization. It uses React, TypeScript, Bun, Tailwind CSS, Zustand, and Local Storage to provide a persistent experience. The custom logo and launch banner were also designed specifically for this release. Some applications currently contain placeholder alerts and are still under development, with more features and apps planned for future updates. Highlights Anime-inspired light theme Interactive multi-window desktop Multiple instances of the same app Wallpaper, icon & brightness customization Zustand + Local Storage More apps and features coming soon", "repo": "https://github.com/anshumitasahu/Kobayashi--OS", "demo": "https://kobayashi.cawai.site/"}]...
|
[{"post_id": 62884, "ts": "202 [{"post_id": 62884, "ts": "2026-09-06T12:36:45Z", "hours": 1.8994, "text": "Polished the UI of the widgets, improved wallpaper customization, refined the app UX, resized the apps, added a bunch of new features, and made countless small tweaks across the OS. A lot has gone into this project, and I really hope it becomes the star project considering how much time I’ve poured into it. 🥹 Still more to come!"}, {"post_id": 62379, "ts": "2026-09-05T18:24:34Z", "hours": 1.5711, "text": "Kobayashi-chan is here! Chat, open apps, change settings. She remembers, reacts, and doesn’t mind a little flirting. :) Major changes!! A summary of everything I’ve done over the past 5 days. Lots of design work too—especially Figma stuff. StarDance doesn’t log my Figma hours though… too bad."}, {"post_id": 62033, "ts": "2026-09-05T07:58:56Z", "hours": 10.0164, "text": "Damnn!! Been a while haven’t posted anything bout my Work!!!!!! added a piano added a lots of Fun games improved the architecture and UI/UX improved the response of the Kobai added Terminal and Code editor.. added a proper and nice widget system changed the whole UI of my apps_ and more features are coming soon!!!!!"}, {"post_id": 58672, "ts": "2026-08-31T05:42:22Z", "hours": 9.2753, "text": "Added a lots of appppss!!! embeded few games, hackclub and typingtest.com … and Yeah added my own built apps (Json Lab , DevScope, and MoneyTrail)"}, {"post_id": 55183, "ts": "2026-08-26T18:06:02Z", "hours": 3.21, "text": "Another day on Kobayashi OS. Damn, I really turned the AI Assistant into what I actually wanted it to be. And yeah, now the Shorts app isn’t just some mere app with a icon sitting there — it actually has Shorts embedded hehe. And yeah… there’s a Kanvas app now too lol."}, {"post_id": 54549, "ts": "2026-08-25T16:00:46Z", "hours": 9.8811, "text": "Damn !! Been a while !! Yup was working on the assistant.. yeah which actually works!!! changed the architecture of ai chatbot and yeah its much better now !! and Yeah some more tweaks ongoing"}, {"post_id": 52981, "ts": "2026-08-23T11:05:21Z", "hours": 1.2497, "text": "Making the UI of music player nicer .."}, {"post_id": 52917, "ts": "2026-08-23T09:19:23Z", "hours": 3.9803, "text": "BIG ALERT IN KOBAYASHI OS I SUCCESSFULLY BUILT AN AI ASSISTANT FOR MY WEB OS! 🎉 It can actually understand commands and interact with the OS — opening apps, handling actions, and more.Another huge step for Kobayashi OS. I’m learning a LOT about AI while building this, and it’s honestly crazy seeing everything come together."}, {"post_id": 52189, "ts": "2026-08-22T08:54:28Z", "hours": 5.2606, "text": "Worked on the adding more apps.. with functionality and zero css hehe but yeah add it later currently working on a ai chat box on my project apps"}, {"post_id": 51173, "ts": "2026-08-20T17:52:30Z", "hours": 3.4503, "text": "Today was more focused on research and architecture than coding, but I still made some solid progress. I perfected the widgets, made the right-click menu fully functional, and built a basic music player that’s already working. I’ll be focusing on the CSS and visual polish for the music player tomorrow. Overall, another productive day on Kobayashi OS."}, {"post_id": 50444, "ts": "2026-08-19T16:37:20Z", "hours": 3.5219, "text": "Spent some more time working on the Widgets section 👀 Made the widgets draggable and closable only when the widgets menu the widgets top bar is being displayed.Also fixed up some CSS issues, added a right-click context menu, and added an Open option. So far, only one widget is actually openable; the rest will come later 😅 That’s enough UI work for today though — my shoulders and back are officially protesting. 💀 More to come!"}, {"post_id": 50174, "ts": "2026-08-19T09:00:29Z", "hours": 1.9064, "text": "Update Made a few solid improvements to the widget experience: Widget positions are now stored globally and persisted in local storage, so the app restores exactly where you left it after a refresh. Tweaked the visuals for a cleaner, more polished look. Added resizable widgets for a more flexible, customizable layout. Small changes, but they make the overall experience feel much smoother. More to come!"}, {"post_id": 49755, "ts": "2026-08-18T17:54:09Z", "hours": 3.4989, "text": "A little update on the Widgets section It’s already looking pretty cool , but I’m not quite done with it yet. There are still a few tweaks and some changes I want to make to how the widget system works under the hood. The goal is to make the whole experience feel cleaner, more flexible, and easier to build on as I keep adding more widgets. For now, though… I’m pretty happy with how it’s coming together. 🚀More tweaks incoming."}, {"post_id": 49478, "ts": "2026-08-18T10:44:19Z", "hours": 5.8236, "text": "Yahooooooo! Made some awesome progress! Added the Widgets feature Added a toggle function to open/close the Widgets list Added a Calendar widget Added a Clock widget Added toggle functionality for opening and closing widgets So happy to see it all coming together! 😄 🔥One step at a time, and the project is getting better and better! ✨ 💪"}, {"post_id": 48289, "ts": "2026-08-16T16:27:18Z", "hours": 3.5703, "text": "Camera Improvements Fixed a few bugs and made some nice improvements to the camera flow. Now, the last captured photo is shown directly in the camera. Tap it, and the gallery opens with the image displayed at full width and height. From there, you can swipe through the rest of your photos. Still have a few things I want to tweak in this flow, but the experience is already feeling much smoother. Next up: widgets !!"}, {"post_id": 47551, "ts": "2026-08-15T15:04:05Z", "hours": 7.6117, "text": "Been a while! Added a working camera + gallery and implemented IndexedDB for storing captured photos.Honestly, the camera logic and IndexedDB were the biggest challenges since I knew nothing about them before this. Learned from internet resources, experimented, broke things, fixed them… and finally cracked it."}, {"post_id": 44158, "ts": "2026-08-09T18:47:51Z", "hours": 3.5058, "text": "I worked on improving the app bar behavior in Kobayashi OS. I added the Menu app icon to the apps bar whenever it’s opened, and also implemented position shifting for existing apps so they adjust automatically when a new app appears. Small interaction improvements, but they make the desktop feel more dynamic and consistent."}, {"post_id": 43954, "ts": "2026-08-09T12:32:36Z", "hours": 4.1286, "text": "Gallery is successfully made! Glad it turned out well. The main challenge was the UI 🙄, but yeah, it now has Next/Previous and Back functionality. The selected image expands to the full width and height—just like we see in a proper gallery, without appearing in some corner or another section. Overall, pretty happy with how it turned out!"}, {"post_id": 43099, "ts": "2026-08-08T05:43:08Z", "hours": 7.2944, "text": "It’s been a while since my last update, but I’m happy to say Kobayashi OS is getting closer to the finish line! 🚀 Update: Added a toggle to open/close the Menu app Improved the Settings & overall UI Added app resizing App bar now hides when the screen is maximized Added a background for active page in settings Changed the About us Section More apps and features coming soon!🔥"}, {"post_id": 41836, "ts": "2026-08-06T09:25:46Z", "hours": 1.5522, "text": "Worked on the menu app UI. It’s not fully functional yet, but I’ve added some basic functionality. I think it’s looking pretty good so far. This isn’t the final version, but the overall design will probably stay pretty close to this."}, {"post_id": 41800, "ts": "2026-08-06T07:15:41Z", "hours": 4.815, "text": "Worked on the icon styling and UI, and implemented the app menu with close functionality. What ended up taking most of my time was a tiny bug—I was referencing a value as a string in one place while providing it as an object in another. It took me hours to spot the mismatch. Funny how the smallest errors can consume the most time."}, {"post_id": 40844, "ts": "2026-08-04T17:03:57Z", "hours": 3.7994, "text": "I’ve been working on the app’s UI in the maximized state. Initially, the main challenges were around the overall workflow and approach. After experimenting with a few different directions, everything clicked and I landed on this design. Next, I’ll be refining the icon styles further."}, {"post_id": 40140, "ts": "2026-08-03T15:22:36Z", "hours": 4.1178, "text": "I updated the minimize/maximize buttons so restored windows remember their previous position via the global store. Minimized apps now show a dot indicator at the bottom instead of the top. I also fixed a topbar bug where its z-index and absolute positioning caused maximized windows to get stuck underneath. My main hurdle right now is UI scaling: the window container maximizes fine, but the internal components don’t resize with it. I’m weighing a few fixes to see which approach works best."}, {"post_id": 39349, "ts": "2026-08-02T08:39:42Z", "hours": 0.9731, "text": "Just fixed the README"}, {"post_id": 38957, "ts": "2026-08-01T16:01:53Z", "hours": 2.0964, "text": "Implemented minimize and restore with functionality and the maximize feat will be implemented in the 2nd version.."}, {"post_id": 38729, "ts": "2026-08-01T08:51:37Z", "hours": 1.1942, "text": "Fixed the README and got it ready for the first official launch. The main issue was that the images and screenshots weren’t displaying correctly. Since it was a GitHub README, every small change required a commit and push just to verify whether the images loaded properly, which made the process slower than expected. Despite that, the final README turned out well and is now ready for launch."}, {"post_id": 38361, "ts": "2026-07-31T18:19:40Z", "hours": 3.6125, "text": "Added a notes app and added loading and welcome page .. Creating the logo was a bit hard :< More feats and apps are coming!!"}, {"post_id": 38107, "ts": "2026-07-31T10:07:15Z", "hours": 3.5414, "text": "Worked on the icons bar and added a new feature to the Settings app — you can now switch icon styles. Also saved wallpaper, brightness, and icon styles to localStorage . Biggest challenges were digging through a massive icon file, organising them, and getting the UI right. At one point the icons just wouldn’t change… turns out I forgot to call the function. 😅 Moving on to more features and apps."}, {"post_id": 37465, "ts": "2026-07-30T07:17:09Z", "hours": 1.4686, "text": "Updated the app icons — they look so much better now. The old ones felt a bit off. Funny disaster though: right after the change, nothing would open. Threw in some console.log()s … and the system crashed. Turns out the old icon was still being called in the main code, which made every window try to open. 😂"}, {"post_id": 37085, "ts": "2026-07-29T15:46:45Z", "hours": 2.3036, "text": "Very small visible change this time. Added functionality to the settings sidebar . Yeah thinking bout the architecture!! I did added different colors to my app background then removed it due to change in the architecture. Working on something which looks like a small change 🥲 but needs a solid time and architecture 🫠 😮💨."}, {"post_id": 36496, "ts": "2026-07-28T17:20:36Z", "hours": 2.3367, "text": "Nothing!! Just refactored the UI of the Settings app. Added a side bar with the search bar. The main headache was the Architecture !! Damn!! My head hurts !! Still moving on. I will update the full functionality of settings app next time !! (That’s my goal) . But yeah will add the other features later as the OS grows."}, {"post_id": 36275, "ts": "2026-07-28T08:28:19Z", "hours": 1.7669, "text": "Just dropped a fresh update for my web OS, Kobayashi OS ! It can now fully customize the desktop’s wallpaper with solid colors and gradients , all powered by a global store so everything stays smooth and in sync. And Yo!! not gonna lie, building this took me on a absolute emotional roller coaster. I hit bug after bug, spent ages searching for answers, only to discover the culprits were… simple typos and missed JavaScript punctuation!! Classic! But hey, every bug fixed is a lesson learned. I’m on a roll , so expect more updates super soon! Next up on the build list: making the Settings app feel like a real-deal OS and dropping some brand-new apps."}, {"post_id": 35678, "ts": "2026-07-27T08:43:11Z", "hours": 2.6417, "text": "I recently refactored our z-index management from local storage to a global system. Naturally, it brought a wave of visual bugs along with it—fix one, and four more pop up!After a solid debugging session with console.log(), everything is stable and working as expected. Next up: building out the Settings app to make it fully functional."}, {"post_id": 34138, "ts": "2026-07-24T17:18:12Z", "hours": 1.5758, "text": "Cleaned up the codebase, fixed a minor bug, and finally built a manual wallpaper changer. Decided to use global state for it and… wow. It actually clicked. I was stuck for a minute overthinking how the workflow should look, but once I just started typing, it made total sense. State management isn’t nearly as painful as I used to think. Naturally, it didn’t work on the first try—the wallpaper wasn’t updating at all. Turns out I forgot a set of parentheses and had a stupid typo. Classic. Fixed that, and now it’s smooth sailing."}, {"post_id": 33969, "ts": "2026-07-24T10:18:51Z", "hours": 2.7989, "text": "I started moving my app state from local state to a global store using Zustand. Right now, the open/close state of applications is managed globally, and next I’ll move the window dragging logic there as well. The dragging system already works locally, so this is mostly a refactor to make the OS easier to scale.I also added a Settings app, although it doesn’t do anything yet. I decided to focus on getting the core OS functionality solid before adding more features and applications. Once that’s done, I’ll add things like manually changeable wallpapers and expand the Settings app. As someone who’s still new to state management, I had no idea how to use a global store when I started. So before writing code, I spent time learning Zustand, understanding how global state works, and planning the architecture instead of jumping straight into implementation.There were plenty of moments where I got stuck. I had a few headaches trying to wrap my head around the concepts, but I kept going until it finally clicked. No big visual changes, but I think I crossed a small milestone—one that’s going to make everything I build next much cleaner and easier to manage."}, {"post_id": 31816, "ts": "2026-07-20T14:35:36Z", "hours": 1.2033, "text": "Fixed a sneaky LocalStorage bug today! 🛠️ I initially put JSON.stringify directly inside useState , which completely crashed the app and prevented it from opening. Rewrote the logic by moving JSON.stringify into a useEffect hook with tasks as a dependency. That got it working, but refreshing the page triggered a new bug: local storage was getting overwritten with an empty array. I logged the data flow at every stage and caught the issue: useEffect was running on initial mount before state was restored. Added a simple length check (tasks.length > 0) before stringifying, and everything works perfectly now! Always check your mount cycles! 🚀"}, {"post_id": 31692, "ts": "2026-07-20T09:40:11Z", "hours": 6.9306, "text": "It’s been a while since my last update, so here is what I’ve been building and refining lately: UI Refactoring: Invested a significant amount of time redesigning and polishing the UI (still a work in progress, but looking much better!). Window Management: Added support for opening, minimizing, and closing windows. Calculator App: Cleaned up the codebase and added new functionality. Task Tracking: Added a strike-through feature for completed items in To-Dos App. Next up: Implementing localStorage so task completions and window states persist across sessions."}, {"post_id": 27792, "ts": "2026-07-13T17:37:49Z", "hours": 1.6667, "text": "Focus was the window manager. Completed Implemented dynamic z-index so the active window is always brought to the front. Added window minimization.Implemented restore functionality from the Apps Bar. Preserved window state while minimized instead of closing the application. Challenge: Initially, minimizing a window removed it from the UI, but there was no way to bring it back because clicking the app icon simply ignored already opened apps. Solution: Instead of treating minimized windows as closed, I introduced a minimized state for each window. The Apps Bar now checks whether an app is already open, minimized, or closed, and performs the appropriate action—open, restore, or bring it to the front. This keeps the component mounted and preserves its state while hidden. The desktop now supports opening, closing, dragging, minimizing, restoring, and proper window stacking. With these core interactions in place, the next milestone is maximize/restore, followed by window resizing and a global state refactor with Zustand."}, {"post_id": 27668, "ts": "2026-07-13T13:16:12Z", "hours": 2.5236, "text": "Continued building the window management system for Kobayashi OS. Implemented draggable application windows from scratch using React mouse events (mousedown, mousemove, mouseup) with proper drag offsets for smooth movement. Refactored the layout to introduce a dedicated desktop area, keeping windows constrained within the workspace instead of the entire page. Spent most of the session debugging positioning logic, DOM measurements, and boundary constraints. The draggable window system is now functional and forms the foundation for upcoming features like minimize, maximize, focus (z-index), and Zustand-powered window state management."}, {"post_id": 27273, "ts": "2026-07-12T18:23:14Z", "hours": 1.3567, "text": "Continued refining the Kobayashi OS interface.Finalized the built-in app icons and continued shaping the application dock and overall desktop structure to make the OS feel more like a complete desktop environment.Built the first built-in application—a basic calculator—with support for standard arithmetic operations. This marks the beginning of adding functional utilities to the OS.The focus remains on establishing a solid foundation before expanding into more advanced applications and features."}, {"post_id": 27129, "ts": "2026-07-12T12:31:10Z", "hours": 1.3028, "text": "Continued working on the Kobayashi OS layout. The overall design is still evolving, and I’m experimenting with different arrangements before settling on a final structure. I added icons for the built-in applications and started shaping how the interface should feel. No application logic yet—right now the focus is on finding the right layout before building the functionality."}, {"post_id": 27073, "ts": "2026-07-12T09:23:01Z", "hours": 1.6333, "text": "DevDock is no longer just a collection of developer tools—it’s being redesigned into Kobayashi OS , a browser-based operating system built for developers . This update focuses on restructuring the application’s architecture, replacing the original layout with an OS-inspired interface, and laying the groundwork for applications, tools, and a desktop-like workflow. The goal is to create a cohesive environment where developer utilities feel like native applications rather than separate web pages.The transition is still in progress, but the foundation for Kobayashi OS is now replacing the original DevDock vision."}, {"post_id": 25205, "ts": "2026-07-09T09:44:08Z", "hours": 3.5269, "text": "DevLog 1 — DevDock After wrapping up DevScope, I wanted to build something that solves a problem. Introducing DevDock — a workspace that brings essential developer tools together in one place, reducing context switching and making common development tasks faster and more convenient.I’ve already finished the initial landing page. It took far more CSS work than I’m used to, but I’m happy with where it stands for now. Of course, nothing is ever truly finished—I’ll keep refining it if future feedback or better ideas come up.This is only the beginning. The real work starts now as I begin building the tools that will make DevDock genuinely useful."}]...
|
Title: Kobayashi OS by @Riko | Stardance
Devlogs: Title: Kobayashi OS by @Riko | Stardance
Devlogs:
DevLog 1 — DevDock After wrapping up DevScope, I wanted to build something that solves a problem. Introducing DevDock — a workspace that brings essential developer tools together in one place, reducing context switching and making common development tasks faster and more convenient.I’ve already finished the initial landing page. It took far more CSS work than I’m used to, but I’m happy with where it stands for now. Of course, nothing is ever truly finished—I’ll keep refining it if future feedback or better ideas come up.This is only the beginning. The real work starts now as I begin building the tools that will make DevDock genuinely useful.
DevDock is no longer just a collection of developer tools—it’s being redesigned into Kobayashi OS , a browser-based operating system built for developers . This update focuses on restructuring the application’s architecture, replacing the original layout with an OS-inspired interface, and laying the groundwork for applications, tools, and a desktop-like workflow. The goal is to create a cohesive environment where developer utilities feel like native applications rather than separate web pages.The transition is still in progress, but the foundation for Kobayashi OS is now replacing the original DevDock vision.
Continued working on the Kobayashi OS layout. The overall design is still evolving, and I’m experimenting with different arrangements before settling on a final structure. I added icons for the built-in applications and started shaping how the interface should feel. No application logic yet—right now the focus is on finding the right layout before building the functionality.
Continued refining the Kobayashi OS interface.Finalized the built-in app icons and continued shaping the application dock and overall desktop structure to make the OS feel more like a complete desktop environment.Built the first built-in application—a basic calculator—with support for standard arithmetic operations. This marks the beginning of adding functional utilities to the OS.The focus remains on establishing a solid foundation before expanding into more advanced applications and features.
Continued building the window management system for Kobayashi OS. Implemented draggable application windows from scratch using React mouse events (mousedown, mousemove, mouseup) with proper drag offsets for smooth movement. Refactored the layout to introduce a dedicated desktop area, keeping windows constrained within the workspace instead of the entire page. Spent most of the session debugging positioning logic, DOM measurements, and boundary constraints. The draggable window system is now functional and forms the foundation for upcoming features like minimize, maximize, focus (z-index), and Zustand-powered window state management.
Focus was the window manager. Completed Implemented dynamic z-index so the active window is always brought to the front. Added window minimization.Implemented restore functionality from the Apps Bar. Preserved window state while minimized instead of closing the application. Challenge: Initially, minimizing a window removed it from the UI, but there was no way to bring it back because clicking the app icon simply ignored already opened apps. Solution: Instead of treating minimized windows as closed, I introduced a minimized state for each window. The Apps Bar now checks whether an app is already open, minimized, or closed, and performs the appropriate action—open, restore, or bring it to the front. This keeps the component mounted and preserves its state while hidden. The desktop now supports opening, closing, dragging, minimizing, restoring, and proper window stacking. With these core interactions in place, the next milestone is maximize/restore, followed by window resizing and a global state refactor with Zustand.
It’s been a while since my last update, so here is what I’ve been building and refining lately: UI Refactoring: Invested a significant amount of time redesigning and polishing the UI (still a work in progress, but looking much better!). Window Management: Added support for opening, minimizing, and closing windows. Calculator App: Cleaned up the codebase and added new functionality. Task Tracking: Added a strike-through feature for completed items in To-Dos App. Next up: Implementing localStorage so task completions and window states persist across sessions.
Fixed a sneaky LocalStorage bug today! 🛠️ I initially put JSON.stringify directly inside useState , which completely crashed the app and prevented it from opening. Rewrote the logic by moving JSON.stringify into a useEffect hook with tasks as a dependency. That got it working, but refreshing the page triggered a new bug: local storage was getting overwritten with an empty array. I logged the data flow at every stage and caught the issue: useEffect was running on initial mount before state was restored. Added a simple length check (tasks.length > 0) before stringifying, and everything works perfectly now! Always check your mount cycles! 🚀
I started moving my app state from local state to a global store using Zustand. Right now, the open/close state of applications is managed globally, and next I’ll move the window dragging logic there as well. The dragging system already works locally, so this is mostly a refactor to make the OS easier to scale.I also added a Settings app, although it doesn’t do anything yet. I decided to focus on getting the core OS functionality solid before adding more features and applications. Once that’s done, I’ll add things like manually changeable wallpapers and expand the Settings app. As someone who’s still new to state management, I had no idea how to use a global store when I started. So before writing code, I spent time learning Zustand, understanding how global state works, and planning the architecture instead of jumping straight into implementation.There were plenty of moments where I got stuck. I had a few headaches trying to wrap my head around the concepts, but I kept going until it finally clicked. No big visual changes, but I think I crossed a small milestone—one that’s going to make everything I build next much cleaner and easier to manage.
Cleaned up the codebase, fixed a minor bug, and finally built a manual wallpaper changer. Decided to use global state for it and… wow. It actually clicked. I was stuck for a minute overthinking how the workflow should look, but once I just started typing, it made total sense. State management isn’t nearly as painful as I used to think. Naturally, it didn’t work on the first try—the wallpaper wasn’t updating at all. Turns out I forgot a set of parentheses and had a stupid typo. Classic. Fixed that, and now it’s smooth sailing.
I recently refactored our z-index management from local storage to a global system. Naturally, it brought a wave of visual bugs along with it—fix one, and four more pop up!After a solid debugging session with console.log(), everything is stable and working as expected. Next up: building out the Settings app to make it fully functional.
Just dropped a fresh update for my web OS, Kobayashi OS ! It can now fully customize the desktop’s wallpaper with solid colors and gradients , all powered by a global store so everything stays smooth and in sync. And Yo!! not gonna lie, building this took me on a absolute emotional roller coaster. I hit bug after bug, spent ages searching for answers, only to discover the culprits were… simple typos and missed JavaScript punctuation!! Classic! But hey, every bug fixed is a lesson learned. I’m on a roll , so expect more updates super soon! Next up on the build list: making the Settings app feel like a real-deal OS and dropping some brand-new apps.
Nothing!! Just refactored the UI of the Settings app. Added a side bar with the search bar. The main headache was the Architecture !! Damn!! My head hurts !! Still moving on. I will update the full functionality of settings app next time !! (That’s my goal) . But yeah will add the other features later as the OS grows.
Very small visible change this time. Added functionality to the settings sidebar . Yeah thinking bout the architecture!! I did added different colors to my app background then removed it due to change in the architecture. Working on something which looks like a small change 🥲 but needs a solid time and architecture 🫠 😮💨.
Updated the app icons — they look so much better now. The old ones felt a bit off. Funny disaster though: right after the change, nothing would open. Threw in some console.log()s … and the system crashed. Turns out the old icon was still being called in the main code, which made every window try to open. 😂
Worked on the icons bar and added a new feature to the Settings app — you can now switch icon styles. Also saved wallpaper, brightness, and icon styles to localStorage . Biggest challenges were digging through a massive icon file, organising them, and getting the UI right. At one point the icons just wouldn’t change… turns out I forgot to call the function. 😅 Moving on to more features and apps.
Added a notes app and added loading and welcome page .. Creating the logo was a bit hard :< More feats and apps are coming!!
Fixed the README and got it ready for the first official launch. The main issue was that the images and screenshots weren’t displaying correctly. Since it was a GitHub README, every small change required a commit and push just to verify whether the images loaded properly, which made the process slower than expected. Despite that, the final README turned out well and is now ready for launch.
Implemented minimize and restore with functionality and the maximize feat will be implemented in the 2nd version..
Just fixed the README
I updated the minimize/maximize buttons so restored windows remember their previous position via the global store. Minimized apps now show a dot indicator at the bottom instead of the top. I also fixed a topbar bug where its z-index and absolute positioning caused maximized windows to get stuck underneath. My main hurdle right now is UI scaling: the window container maximizes fine, but the internal components don’t resize with it. I’m weighing a few fixes to see which approach works best.
I’ve been working on the app’s UI in the maximized state. Initially, the main challenges were around the overall workflow and approach. After experimenting with a few different directions, everything clicked and I landed on this design. Next, I’ll be refining the icon styles further.
Worked on the icon styling and UI, and implemented the app menu with close functionality. What ended up taking most of my time was a tiny bug—I was referencing a value as a string in one place while providing it as an object in another. It took me hours to spot the mismatch. Funny how the smallest errors can consume the most time.
Worked on the menu app UI. It’s not fully functional yet, but I’ve added some basic functionality. I think it’s looking pretty good so far. This isn’t the final version, but the overall design will probably stay pretty close to this.
It’s been a while since my last update, but I’m happy to say Kobayashi OS is getting closer to the finish line! 🚀 Update: Added a toggle to open/close the Menu app Improved the Settings & overall UI Added app resizing App bar now hides when the screen is maximized Added a background for active page in settings Changed the About us Section More apps and features coming soon!🔥
Gallery is successfully made! Glad it turned out well. The main challenge was the UI 🙄, but yeah, it now has Next/Previous and Back functionality. The selected image expands to the full width and height—just like we see in a proper gallery, without appearing in some corner or another section. Overall, pretty happy with how it turned out!
I worked on improving the app bar behavior in Kobayashi OS. I added the Menu app icon to the apps bar whenever it’s opened, and also implemented position shifting for existing apps so they adjust automatically when a new app appears. Small interaction improvements, but they make the desktop feel more dynamic and consistent.
Been a while! Added a working camera + gallery and implemented IndexedDB for storing captured photos.Honestly, the camera logic and IndexedDB were the biggest challenges since I knew nothing about them before this. Learned from internet resources, experimented, broke things, fixed them… and finally cracked it.
Camera Improvements Fixed a few bugs and made some nice improvements to the camera flow. Now, the last captured photo is shown directly in the camera. Tap it, and the gallery opens with the image displayed at full width and height. From there, you can swipe through the rest of your photos. Still have a few things I want to tweak in this flow, but the experience is already feeling much smoother. Next up: widgets !!
Yahooooooo! Made some awesome progress! Added the Widgets feature Added a toggle function to open/close the Widgets list Added a Calendar widget Added a Clock widget Added toggle functionality for opening and closing widgets So happy to see it all coming together! 😄 🔥One step at a time, and the project is getting better and better! ✨ 💪
A little update on the Widgets section It’s already looking pretty cool , but I’m not quite done with it yet. There are still a few tweaks and some changes I want to make to how the widget system works under the hood. The goal is to make the whole experience feel cleaner, more flexible, and easier to build on as I keep adding more widgets. For now, though… I’m pretty happy with how it’s coming together. 🚀More tweaks incoming.
Update Made a few solid improvements to the widget experience: Widget positions are now stored globally and persisted in local storage, so the app restores exactly where you left it after a refresh. Tweaked the visuals for a cleaner, more polished look. Added resizable widgets for a more flexible, customizable layout. Small changes, but they make the overall experience feel much smoother. More to come!
Spent some more time working on the Widgets section 👀 Made the widgets draggable and closable only when the widgets menu the widgets top bar is being displayed.Also fixed up some CSS issues, added a right-click context menu, and added an Open option. So far, only one widget is actually openable; the rest will come later 😅 That’s enough UI work for today though — my shoulders and back are officially protesting. 💀 More to come!
Today was more focused on research and architecture than coding, but I still made some solid progress. I perfected the widgets, made the right-click menu fully functional, and built a basic music player that’s already working. I’ll be focusing on the CSS and visual polish for the music player tomorrow. Overall, another productive day on Kobayashi OS.
Worked on the adding more apps.. with functionality and zero css hehe but yeah add it later currently working on a ai chat box on my project apps
BIG ALERT IN KOBAYASHI OS I SUCCESSFULLY BUILT AN AI ASSISTANT FOR MY WEB OS! 🎉 It can actually understand commands and interact with the OS — opening apps, handling actions, and more.Another huge step for Kobayashi OS. I’m learning a LOT about AI while building this, and it’s honestly crazy seeing everything come together.
Making the UI of music player nicer ..
Damn !! Been a while !! Yup was working on the assistant.. yeah which actually works!!! changed the architecture of ai chatbot and yeah its much better now !! and Yeah some more tweaks ongoing
Another day on Kobayashi OS. Damn, I really turned the AI Assistant into what I actually wanted it to be. And yeah, now the Shorts app isn’t just some mere app with a icon sitting there — it actually has Shorts embedded hehe. And yeah… there’s a Kanvas app now too lol.
Added a lots of appppss!!! embeded few games, hackclub and typingtest.com … and Yeah added my own built apps (Json Lab , DevScope, and MoneyTrail)
Damnn!! Been a while haven’t posted anything bout my Work!!!!!! added a piano added a lots of Fun games improved the architecture and UI/UX improved the response of the Kobai added Terminal and Code editor.. added a proper and nice widget system changed the whole UI of my apps_ and more features are coming soon!!!!!
Kobayashi-chan is here! Chat, open apps, change settings. She remembers, reacts, and doesn’t mind a little flirting. :) Major changes!! A summary of everything I’ve done over the past 5 days. Lots of design work too—especially Figma stuff. StarDance doesn’t log my Figma hours though… too bad.
Polished the UI of the widgets, improved wallpaper customization, refined the app UX, resized the apps, added a bunch of new features, and made countless small tweaks across the OS. A lot has gone into this project, and I really hope it becomes the star project considering how much time I’ve poured into it. 🥹 Still more to come!
Ships:
Kobayashi OS v1.0 is finally live! Kobayashi OS is a lightweight, anime-inspired Web Operating System built to bring a desktop-like experience to the browser. This first release focuses on a smooth window management system, allowing multiple instances of the same application, along with wallpaper, icon, and brightness customization. It uses React, TypeScript, Bun, Tailwind CSS, Zustand, and Local Storage to provide a persistent experience. The custom logo and launch banner were also designed specifically for this release. Some applications currently contain placeholder alerts and are still under development, with more features and apps planned for future updates. Highlights Anime-inspired light theme Interactive multi-window desktop Multiple instances of the same app Wallpaper, icon & brightness customization Zustand + Local Storage More apps and features coming soon
What did you make? Kobayashi OS — a web OS themed around Miss Kobayashi’s Dragon Maid . I wanted to make one of the most feature-rich and polished web OS experiences possible, something that actually feels like you’re using a PC. And yeah, this is Kobayashi’s PC, so don’t be surprised if you find something interesting related to her. The main thing I focused on was making everything feel connected, just like a real OS. Apps don’t just exist separately — Camera connects to Gallery and Files, downloads go into Files, Kanvas can save things to Files, widgets remember where you put them, and Kobayashi-chan can actually interact with the system. Basically, it’s not just a collection of apps. It’s one big little OS. What was challenging? Interconnecting all the apps and keeping everything persistent was definitely a challenge. I wanted things to behave like an actual OS instead of just being separate demos. Making the Kobayashi-chan AI work was one of the toughest hurdles. Getting tool calling, memory, emotions, and system interaction to work together took a lot of trial and error. Designing and building the widget system was another tough one. Making widgets draggable, positionable, persistent, and actually useful took quite a bit of work. Honestly, getting all the small details and polish right took way more time than I expected. What am I proud of? First — Kobayashi-chan AI. This is probably my favorite part of the whole project. She has tool calling, memory, emotions, and can actually interact with the OS. I genuinely didn’t expect I would be able to make something like this. It’s basically a little Jarvis, but Kobayashi-chan. The piano. I spent way more time on this than I probably should have. Not building it — playing it. It’s such a stupidly fun little feature that I keep losing track of time playing on it. The overall polish. I’ve been working on this for so long that I’ve honestly lost count of all the little things I added. I designed the UI in Figma, made a lot of the icons myself, kept redesigning things, learned a ridiculous amount along the way, and kept adding small details until it finally started feeling like a real OS. I’m genuinely proud of how it turned out. There are a lot of things packed into this project, and I think the best way to understand the amount of work that went into it is to actually explore it yourself. What should you know before testing? The project: https://kobayashi.cawai.site/ Please explore the widgets. This is one of the parts I spent a lot of time on. Please try the piano. Seriously. On the first load, some images may take 1–2 seconds to appear. Give it a moment. Wallpaper customization, live wallpapers, and icon customization may also take a little time on the first load. There are a LOT of games: Thor, Spider-Man, Minecraft, etc. If you open one and see a black screen, don’t panic. Some of them just take a little while to load. Come on, we’re talking about Minecraft here. Give it some time. And obviously, click around. Open things. Break things. Try stuff. A lot of the fun is finding the little details hidden around the OS. That’s Kobayashi OS. I started with the idea of making a web OS, but somewhere along the way it turned into this huge little world with its own apps, games, music, memories, AI, and way too many tiny details. Hope you have fun exploring it....
|
1792878436.301216
|
1793742436.301216
|
|
58803
|
EonPulse by @nithish1201 | Stardance
|
nithish1201
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T13:04:34Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "EonPulse is basically a new tab page that I made because the normal browser new tab pages are kinda boring. it has the normal stuff like the clock, search and shortcuts but i wanted to add some more interesting things to it too, so it has stuff like the age of the universe, Mars time, solar activity and NASA’s Astronomy Picture of the Day. the main idea was to make something that looks simple but has a lot of little things going on in the background.", "repo": "https://github.com/Nithish1201-code/EonPulse", "demo": "https://github.com/Nithish1201-code/EonPulse/releases/tag/v1"}]...
|
[{"post_id": 62839, "ts": "202 [{"post_id": 62839, "ts": "2026-09-06T11:28:23Z", "hours": 0.7125, "text": "DEVLOG 4: i think im gonna ship it after this! I think it turned out really nice. I made the background oled black, increased the brightness of the lines, made it unscrollable so its like an actual new tab, and made sure everything works."}, {"post_id": 62798, "ts": "2026-09-06T09:54:44Z", "hours": 1.1594, "text": "DEVLOG 3: things were pretty easy going as i just copied the design and js for the background from my personal portfolio project (which has been shipped on here btw) so mostly I only had to hook up APOD, refine the math of the mars sol calculation, and making some minor refinements here and there, next devlog will be me completeing widgets and refinement"}, {"post_id": 62713, "ts": "2026-09-06T06:18:31Z", "hours": 0.6786, "text": "Devlog #2 Yoooooo i got the actual fetch and formatting of the date up and running."}, {"post_id": 62647, "ts": "2026-09-06T03:30:44Z", "hours": 0.495, "text": "First devlog!! I got the basic structure up and deployed with github actions. Very basic rn but im working on it"}]...
|
Title: EonPulse by @nithish1201 | Stardance
Devlo Title: EonPulse by @nithish1201 | Stardance
Devlogs:
First devlog!! I got the basic structure up and deployed with github actions. Very basic rn but im working on it
Devlog #2 Yoooooo i got the actual fetch and formatting of the date up and running.
DEVLOG 3: things were pretty easy going as i just copied the design and js for the background from my personal portfolio project (which has been shipped on here btw) so mostly I only had to hook up APOD, refine the math of the mars sol calculation, and making some minor refinements here and there, next devlog will be me completeing widgets and refinement
DEVLOG 4: i think im gonna ship it after this! I think it turned out really nice. I made the background oled black, increased the brightness of the lines, made it unscrollable so its like an actual new tab, and made sure everything works.
Ships:
EonPulse is basically a new tab page that I made because the normal browser new tab pages are kinda boring. it has the normal stuff like the clock, search and shortcuts but i wanted to add some more interesting things to it too, so it has stuff like the age of the universe, Mars time, solar activity and NASA’s Astronomy Picture of the Day. the main idea was to make something that looks simple but has a lot of little things going on in the background....
|
1792831777.4257305
|
1793695777.4257305
|
|
58555
|
Beat It by @Altaaf | Stardance
|
Altaaf
|
1
|
16.0
|
124
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T13:00:00Z", "hours": 16.0, "multiplier": 12.42, "payout": 124, "blessing": "neutral", "text": "This is a rythm based Game that takes in MP3 Music files from your PC and turns it into a level through which you speed through on your bike. It stated when i was playing “Dancing line” - a mobile game that also turns a song into levels although they are pre made and that makes it unadaptable to a song that i want to play the game with. In order to fix it I made a full audio analysis and beat detection system with local energy based beat detection. It took a LOT of fine tuning to get the beats to be placed right for most songs but i feel it now does it reliably. This is just V1 of the project next will be a fast fourier transform algorithm that will dissect an audio file to its absolute origins and get the more than enough data to build a good level. Again this is the Demo for the project. Its still under development! I hope you have fun playing it, read the Readme File or the itch.io description to get an idea of the controls! Now go and BEAT IT", "repo": "https://github.com/MohdAltaaf/Beat-it", "demo": "https://ksfdev.itch.io/beat-it"}]...
|
[{"post_id": 62887, "ts": "202 [{"post_id": 62887, "ts": "2026-09-06T12:43:44Z", "hours": 16.3275, "text": "BEAT IT Your music is the level. A synthwave motorcycle runner where the road, the collectibles, and the traffic are all generated from a song you actually own. Drop in any MP3, and the game listens to it — beat by beat — to build a highway that only exists because that specific track does. What it actually does Import any MP3. The game reads it, finds the beats, and figures out roughly where the melody rises and falls. A road gets built to match: collectible beat blocks land exactly on the drum hits, and the path between them curves in the direction the melody moves. Traffic weaves through the level too — some of it sitting directly on your line, forcing an actual choice between chasing a streak and swerving to survive. Get clipped by a car and the screen reddens instead of ending the run outright. Get clipped enough times in a row without recovering, and it does. Survive the whole song, and the camera holds still while the bike rides off toward the horizon on its own. How to play Controls: A/D or Left/Right to weave across the road. Your music: On first launch, hit Play, then “Open Songs Folder” on the song select screen. Drop your MP3s in, back out to the main menu, hit Play again to refresh the list. The story behind it This started as a design doc for something I genuinely didn’t know how to build. I’d never touched audio analysis before — I knew Unity, I knew C#, and I had a pretty clear picture of the feeling I wanted (weaving through a highway that’s actually reacting to the song you picked), but the actual how of “read an MP3 and find the beat” was a total blank. So I built it the only way that made sense: one small, testable piece at a time. Load the file. Confirm you can actually read the raw samples back out — and immediately learn the hard way that array indices and seconds-into-the-song are not the same scale when your audio is stereo and interleaved. Get a single number (energy in a window) that’s louder on a kick drum than on silence. Watch it also light up on vocals and melody, because raw loudness doesn’t know the difference between a kick and a chorus — and go learn what a low-pass filter actually does about that. Watch beats land audibly late, and find out that’s because you’re timestamping the start of a window instead of hunting for the actual peak inside it. Rebuild the whole detector around change in energy instead of raw energy, because a sustained bassline was getting picked up as a wall of false beats a flat threshold could never tell apart from a real hit. The design itself changed shape more than once, too. The original plan kept the bike frozen in place with the whole world scrolling past it, specifically to dodge floating-point drift over a long run. Then a simple particle trail on the bike broke that illusion completely — a trail can’t read as “moving forward” if the thing it’s attached to never actually moves — so the bike started really driving, and the “drift” problem I’d been defending against turned out to not even apply once I did the math on how far a single song could actually carry it. A whole planned system (recycling road tiles forever) got deleted the moment I realized every level is scoped to one finite, fully-known-in-advance song — there’s no “forever” to build for. The traffic system is maybe my favorite piece of this, honestly. Cars aren’t just scattered around — they’re placed by solving backwards: given exactly where and when I want a near-miss to happen, and how fast the car should be going, what starting position makes that car arrive there right on cue? Same trick the beat blocks use for their own placement, just pointed at a different problem. Tech No third-party DSP libraries — the beat and melody detection are hand-rolled: single-pole low-pass/band-pass filtering, spectral-flux-style onset detection, and a lightweight spectral-centroid approximation for melody direction, all built directly on raw AudioClip sample data"}]...
|
Title: Beat It by @Altaaf | Stardance
Devlogs:
BE Title: Beat It by @Altaaf | Stardance
Devlogs:
BEAT IT Your music is the level. A synthwave motorcycle runner where the road, the collectibles, and the traffic are all generated from a song you actually own. Drop in any MP3, and the game listens to it — beat by beat — to build a highway that only exists because that specific track does. What it actually does Import any MP3. The game reads it, finds the beats, and figures out roughly where the melody rises and falls. A road gets built to match: collectible beat blocks land exactly on the drum hits, and the path between them curves in the direction the melody moves. Traffic weaves through the level too — some of it sitting directly on your line, forcing an actual choice between chasing a streak and swerving to survive. Get clipped by a car and the screen reddens instead of ending the run outright. Get clipped enough times in a row without recovering, and it does. Survive the whole song, and the camera holds still while the bike rides off toward the horizon on its own. How to play Controls: A/D or Left/Right to weave across the road. Your music: On first launch, hit Play, then “Open Songs Folder” on the song select screen. Drop your MP3s in, back out to the main menu, hit Play again to refresh the list. The story behind it This started as a design doc for something I genuinely didn’t know how to build. I’d never touched audio analysis before — I knew Unity, I knew C#, and I had a pretty clear picture of the feeling I wanted (weaving through a highway that’s actually reacting to the song you picked), but the actual how of “read an MP3 and find the beat” was a total blank. So I built it the only way that made sense: one small, testable piece at a time. Load the file. Confirm you can actually read the raw samples back out — and immediately learn the hard way that array indices and seconds-into-the-song are not the same scale when your audio is stereo and interleaved. Get a single number (energy in a window) that’s louder on a kick drum than on silence. Watch it also light up on vocals and melody, because raw loudness doesn’t know the difference between a kick and a chorus — and go learn what a low-pass filter actually does about that. Watch beats land audibly late, and find out that’s because you’re timestamping the start of a window instead of hunting for the actual peak inside it. Rebuild the whole detector around change in energy instead of raw energy, because a sustained bassline was getting picked up as a wall of false beats a flat threshold could never tell apart from a real hit. The design itself changed shape more than once, too. The original plan kept the bike frozen in place with the whole world scrolling past it, specifically to dodge floating-point drift over a long run. Then a simple particle trail on the bike broke that illusion completely — a trail can’t read as “moving forward” if the thing it’s attached to never actually moves — so the bike started really driving, and the “drift” problem I’d been defending against turned out to not even apply once I did the math on how far a single song could actually carry it. A whole planned system (recycling road tiles forever) got deleted the moment I realized every level is scoped to one finite, fully-known-in-advance song — there’s no “forever” to build for. The traffic system is maybe my favorite piece of this, honestly. Cars aren’t just scattered around — they’re placed by solving backwards: given exactly where and when I want a near-miss to happen, and how fast the car should be going, what starting position makes that car arrive there right on cue? Same trick the beat blocks use for their own placement, just pointed at a different problem. Tech No third-party DSP libraries — the beat and melody detection are hand-rolled: single-pole low-pass/band-pass filtering, spectral-flux-style onset detection, and a lightweight spectral-centroid approximation for melody direction, all built directly on raw AudioClip sample data
Ships:
This is a rythm based Game that takes in MP3 Music files from your PC and turns it into a level through which you speed through on your bike. It stated when i was playing “Dancing line” - a mobile game that also turns a song into levels although they are pre made and that makes it unadaptable to a song that i want to play the game with. In order to fix it I made a full audio analysis and beat detection system with local energy based beat detection. It took a LOT of fine tuning to get the beats to be placed right for most songs but i feel it now does it reliably. This is just V1 of the project next will be a fast fourier transform algorithm that will dissect an audio file to its absolute origins and get the more than enough data to build a good level. Again this is the Demo for the project. Its still under development! I hope you have fun playing it, read the Readme File or the itch.io description to get an idea of the controls! Now go and BEAT IT...
|
1793091149.5789216
|
1793177549.5789216
|
|
55151
|
ServerDeck by @justnorbert | Stardance
|
justnorbert
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T12:45:35Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So I did it! I wrote a program that will actually be useful to me (weird, right?). Below is a partial history of how the program was created. I tried to keep the details to a minimum, but it didn’t quite work out. Enjoy reading my short story! I was tired of installing all the packages I needed, and let’s be honest, every VM is different. So the idea came to me: what if I wrote a program that would actually help me manage VMs? And that’s how the concept of ServerDeck was born. A program that allows me to manage users in MariaDB databases, or even create such databases (I admit I hate the default way of creating users in databases via the terminal), so I decided, okay, I’ll add it to the system. And of course, the idea then comes: what next? I put the project on hold for a few days, then I had to install packages on my VM, such as Tailscale, Cloudflare Tunnel, Node.js, and Java. I’ll be honest, I immediately decided I wasn’t going to search for these installation links, so why not simplify it? And that’s how I added the package installation option. However, one day, while I was away from home, I noticed a problem with one of my VMs. One of my websites was lagging terribly. So what can I do? Unfortunately, I log into Termius using my phone, then I enter the btop command, and there I see that I forgot to connect an additional drive to the server! And as you can imagine, I would have avoided this sooner if checking the machine’s status were easier. And thanks to this problem, I added features related to the Discord bot and webhooks! When I reinstalled btop on one of the VMs, I thought, “Okay, but why am I installing this when I can have my own version, right?” And that’s how I added the rest of the program’s features. [The message was written in Polish and then translated into English using Google Translate.]", "repo": "https://github.com/Norbertkkl/ServerDeck", "demo": "https://www.npmjs.com/package/serverdeck"}]...
|
[{"post_id": 62882, "ts": "202 [{"post_id": 62882, "ts": "2026-09-06T12:34:19Z", "hours": 2.8186, "text": "[Devlog 4] So, it worked! The program is working correctly. I’ve added support for Discord bots and webhooks. I admit that AI has been heavily used to translate files (using Google Translate would have been a chore). All messages are sent to the user correctly, along with support for my native language – Polish. At the same time, I slightly rewrote the UFW firewall management system. For some reason, I forgot to scroll and select the element of interest, so I had to fix it. More important, I’ve made the following improvements for version (1.0.1): Window responsiveness has been improved Package installation (often, the user simply received errors from the program, even though the package was installed and launched correctly; a similar situation occurred with uninstallation) Fixed the installation script, which was not creating a user Many other minor fixes It’s worth noting that the program works 100%, but there may be minor bugs that I haven’t been able to resolve/notice. Currently, the program supports Ubuntu 24.04.04 LTS 🎉 [Written using Google Translate]"}, {"post_id": 57459, "ts": "2026-08-29T16:39:03Z", "hours": 2.2181, "text": "[Devlog 3] Hi! I managed to complete the Software Hub section of ServerDeck. I have currently finished working on the software installation module. (I cared about this module the most.) Currently, the tab works 100%, but I am wondering whether to add some services to the installation. If anyone has any ideas, please give me some suggestions. The current list of packages that can be installed is below: 1. OpenSSH Server 2. SFTP Server & VSFTPD 3. MariaDB / MySQL Database 4. Docker Engine (CE) 5. Docker Compose Plugin 6. Nginx Web Server 7. Apache2 Web Server 8. Certbot SSL Let's Encrypt 9. Samba SMB/CIFS Server 10. Cockpit Web GUI 11. Portainer CE Docker UI 12. WireGuard VPN Server 13. Tailscale VPN Mesh 14. Fail2ban Security 15. OpenJDK 8 (Java 8 Legacy) 16. OpenJDK 17 (Java 17 LTS) 17. OpenJDK 21 (Java 21 LTS) 18. OpenJDK 25 / Latest 19. Node.js LTS & NPM 20. PM2 Process Manager 21. Rclone Cloud Sync 22. BorgBackup & Restic 23. Prometheus Node Exporter 24. Pterodactyl Dependencies 25. Core Utilities & SMART 26. Configure UFW Firewall 27. PostgreSQL Database 28. Redis Cache Server 29. Caddy Web Server 30. Uptime Kuma Monitor 31. AdGuard Home DNS 32. Watchtower Auto-Updater 33. Cloudflare Tunnel 34. Go (Golang) Toolchain 35. Rust & Cargo Environment 36. Netdata Real-Time Monitor 37. MinIO S3 Object Storage 38. ServerDeck Ultimate (All-in-One) (The message was translated using Google Translate)"}, {"post_id": 56802, "ts": "2026-08-28T18:34:06Z", "hours": 0.7244, "text": "Hi! I’m currently working on the initial stages of implementing a webhook system for the Discord channel. There are a lot of placeholders to add, but the most important thing for me is enabling full user customization of notifications—we’ll see how it turns out. I’m also adding preliminary support for my native language, Polish. I have to admit, Antigravity is excellent for fully translating files into English; it seems to handle Polish-to-English translation better than English-to-Polish. (Written using Google Translate.)"}, {"post_id": 56514, "ts": "2026-08-28T09:47:46Z", "hours": 2.5364, "text": "Hi, I’m building a tool for the easy configuration and management of VMs running Ubuntu. The goal of the tool is to simplify the installation of essential components such as OpenSSH, Nginx (SFTP), Node.js, Java (versions 8, 18, 21, and 25), and VPNs (like Tailscale or WireGuard). It was also important for me to be able to check the device’s general status; after all, when managing a server with multiple VMs, this is a necessity. (Note: this isn’t the server actually running this test service.) At this stage of the project, I’m working on finishing the “blue” theme and then creating new themes (which can be configured via a data.json file). I drew inspiration from the btop tool as well as the look of my Discord server. Everything is managed via the console (personally, I use an SSH connection from VS Code). I am sending the preliminary layout of the tabs, as well as the ones that are already working correctly. (Written using Google Translate)"}]...
|
Title: ServerDeck by @justnorbert | Stardance
Dev Title: ServerDeck by @justnorbert | Stardance
Devlogs:
Hi, I’m building a tool for the easy configuration and management of VMs running Ubuntu. The goal of the tool is to simplify the installation of essential components such as OpenSSH, Nginx (SFTP), Node.js, Java (versions 8, 18, 21, and 25), and VPNs (like Tailscale or WireGuard). It was also important for me to be able to check the device’s general status; after all, when managing a server with multiple VMs, this is a necessity. (Note: this isn’t the server actually running this test service.) At this stage of the project, I’m working on finishing the “blue” theme and then creating new themes (which can be configured via a data.json file). I drew inspiration from the btop tool as well as the look of my Discord server. Everything is managed via the console (personally, I use an SSH connection from VS Code). I am sending the preliminary layout of the tabs, as well as the ones that are already working correctly. (Written using Google Translate)
Hi! I’m currently working on the initial stages of implementing a webhook system for the Discord channel. There are a lot of placeholders to add, but the most important thing for me is enabling full user customization of notifications—we’ll see how it turns out. I’m also adding preliminary support for my native language, Polish. I have to admit, Antigravity is excellent for fully translating files into English; it seems to handle Polish-to-English translation better than English-to-Polish. (Written using Google Translate.)
[Devlog 3] Hi! I managed to complete the Software Hub section of ServerDeck. I have currently finished working on the software installation module. (I cared about this module the most.) Currently, the tab works 100%, but I am wondering whether to add some services to the installation. If anyone has any ideas, please give me some suggestions. The current list of packages that can be installed is below: 1. OpenSSH Server 2. SFTP Server & VSFTPD 3. MariaDB / MySQL Database 4. Docker Engine (CE) 5. Docker Compose Plugin 6. Nginx Web Server 7. Apache2 Web Server 8. Certbot SSL Let's Encrypt 9. Samba SMB/CIFS Server 10. Cockpit Web GUI 11. Portainer CE Docker UI 12. WireGuard VPN Server 13. Tailscale VPN Mesh 14. Fail2ban Security 15. OpenJDK 8 (Java 8 Legacy) 16. OpenJDK 17 (Java 17 LTS) 17. OpenJDK 21 (Java 21 LTS) 18. OpenJDK 25 / Latest 19. Node.js LTS & NPM 20. PM2 Process Manager 21. Rclone Cloud Sync 22. BorgBackup & Restic 23. Prometheus Node Exporter 24. Pterodactyl Dependencies 25. Core Utilities & SMART 26. Configure UFW Firewall 27. PostgreSQL Database 28. Redis Cache Server 29. Caddy Web Server 30. Uptime Kuma Monitor 31. AdGuard Home DNS 32. Watchtower Auto-Updater 33. Cloudflare Tunnel 34. Go (Golang) Toolchain 35. Rust & Cargo Environment 36. Netdata Real-Time Monitor 37. MinIO S3 Object Storage 38. ServerDeck Ultimate (All-in-One) (The message was translated using Google Translate)
[Devlog 4] So, it worked! The program is working correctly. I’ve added support for Discord bots and webhooks. I admit that AI has been heavily used to translate files (using Google Translate would have been a chore). All messages are sent to the user correctly, along with support for my native language – Polish. At the same time, I slightly rewrote the UFW firewall management system. For some reason, I forgot to scroll and select the element of interest, so I had to fix it. More important, I’ve made the following improvements for version (1.0.1): Window responsiveness has been improved Package installation (often, the user simply received errors from the program, even though the package was installed and launched correctly; a similar situation occurred with uninstallation) Fixed the installation script, which was not creating a user Many other minor fixes It’s worth noting that the program works 100%, but there may be minor bugs that I haven’t been able to resolve/notice. Currently, the program supports Ubuntu 24.04.04 LTS 🎉 [Written using Google Translate]
Ships:
So I did it! I wrote a program that will actually be useful to me (weird, right?). Below is a partial history of how the program was created. I tried to keep the details to a minimum, but it didn’t quite work out. Enjoy reading my short story! I was tired of installing all the packages I needed, and let’s be honest, every VM is different. So the idea came to me: what if I wrote a program that would actually help me manage VMs? And that’s how the concept of ServerDeck was born. A program that allows me to manage users in MariaDB databases, or even create such databases (I admit I hate the default way of creating users in databases via the terminal), so I decided, okay, I’ll add it to the system. And of course, the idea then comes: what next? I put the project on hold for a few days, then I had to install packages on my VM, such as Tailscale, Cloudflare Tunnel, Node.js, and Java. I’ll be honest, I immediately decided I wasn’t going to search for these installation links, so why not simplify it? And that’s how I added the package installation option. However, one day, while I was away from home, I noticed a problem with one of my VMs. One of my websites was lagging terribly. So what can I do? Unfortunately, I log into Termius using my phone, then I enter the btop command, and there I see that I forgot to connect an additional drive to the server! And as you can imagine, I would have avoided this sooner if checking the machine’s status were easier. And thanks to this problem, I added features related to the Discord bot and webhooks! When I reinstalled btop on one of the VMs, I thought, “Okay, but why am I installing this when I can have my own version, right?” And that’s how I added the rest of the program’s features. [The message was written in Polish and then translated into English using Google Translate.]...
|
1793145103.9212654
|
1793231503.9212654
|
|
40838
|
torchbearer by @NosyMonty | Stardance
|
NosyMonty
|
1
|
29.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T11:34:30Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "its a short platformer that has three levels and much more see past devlogs for more details", "repo": "https://github.com/NosyMonty/torchbearer", "demo": "https://nosymonty.itch.io/the-torchbearer"}]...
|
[{"post_id": 62826, "ts": "202 [{"post_id": 62826, "ts": "2026-09-06T11:02:03Z", "hours": 7.2519, "text": "devlog #15 so i think the game is finally finished its not as long as i wanted nor was i able to get the twist to work (i can’t 3d design very well) and I have lost the passion to work on the game it is a finished version playable takes about 10 minutes for those who want to but id rather have a finished playable version for everyone who would wanna play it then just leave it but basically it has 3 levels tutorial and then 2 main levels they are short but they all have boss battles and some form of enemy there is music, SFX and all, and backgrounds, there is a title screen and a portal to transport you from level to level once you finish there is a you win screen with a button to return to main menu there is themes and everything"}, {"post_id": 58601, "ts": "2026-08-31T02:22:29Z", "hours": 5.5758, "text": "devlog #14 worked on the tutorial level with text on how to play movement etc, also added 4 new enemies 3 bosses and one normal enemy but will keep them a secret untill i utalise them"}, {"post_id": 50746, "ts": "2026-08-20T03:04:50Z", "hours": 3.23, "text": "Devlog #13 added multiple things like new enemy to a point haven’t actually made the script yet. fixed and added the themes for the home and game over screen with there being two cave and village, with music on the way. I also added new attacks for the player where it has air attacks where it freezes and then accelerates down to deal more damage that is basically it it was mostly the player script that was a pain"}, {"post_id": 46234, "ts": "2026-08-13T10:24:05Z", "hours": 1.8192, "text": "devlog #12 im going to be honest this devlog is like 4 days’ worth of 30-minute stuff i think i showed everything i added but i can’t remember (stupid me) what i do know is that i have started and failed at a moving background with like 6 layers and attempted to make themes which I’ll explain/ show why at a later date but i think that is it (let’s not make this mistake again)"}, {"post_id": 43939, "ts": "2026-08-09T12:06:54Z", "hours": 1.6208, "text": "Devlog #11 over the past three days I have worked little on torchbearer, and it is going well I have updated the level design a bit not fully completed, added a coin with an animation, and am working on a vase that can be broken and it will drop 1-3 coins, I also added a tile screen, game manager where it can track coins bosses and levels and stuff and a game over screen, now I just need to finish implementing then into the actual game so they come onto the screen at the correct time and the buttons work, I am also planning to add more sprites to the game and start working on the first boss"}, {"post_id": 41859, "ts": "2026-08-06T10:31:58Z", "hours": 1.1336, "text": "I’m going to try this devlog thing it seem like a cool way for me to keep track devlog #10 in today’s 1 hr coding session I actually got a lot done, I added some new animations for the player like slide which when activated it actually gives the player a speed boost, I enabled the player to attack and kill the bat and added its dying animation. I also added a new death screen where it fades to black still need to make a way to actually start again when you die, I fixed the spikes so the player just dies not fall through the ground it fades to black. Next session my goal is to add more enemies, start working on the tutorial level and expand on the cave level as well as start other levels and if im feeling nice i might give you a sneek peak at the twist at the end so follow along but take your time this might take a while with the little progress i have made in about 10 hours."}, {"post_id": 41269, "ts": "2026-08-05T11:45:34Z", "hours": 1.0392, "text": "worked on a spike where it will reset the character a.k.a the character will die and the scene will reset. I also went the complex route of making it with a collision polygon shape instead of a normal collision shape now I just need to work out how to get the killzone script working with the spikes on every scene so i can just add the spikes scene"}, {"post_id": 40018, "ts": "2026-08-03T11:21:10Z", "hours": 0.7431, "text": "added enemy attacks where the player can now die when health reaches zero and it also follows the player you can’t kill it yet still need to set up the zones and stuff but at least it took me 40 minutes to write some code"}, {"post_id": 39785, "ts": "2026-08-02T23:56:12Z", "hours": 0.4542, "text": "built an enemy follow feature which allows the bat to follow the player and attack but after one attack it freezes and does not follow or attack again next time, I need to fix that and also add player damage to allow the user to kill enemy’s"}, {"post_id": 39400, "ts": "2026-08-02T10:45:35Z", "hours": 0.78, "text": "added the foundation for the bat script and player damage but will need to continue on it with hitboxes and deal damage"}, {"post_id": 38879, "ts": "2026-08-01T13:22:10Z", "hours": 1.4586, "text": "started on an enemy attack system where the enemy will follow you and try to attack also started on the player attack and health system, aiming to finish by tomorrow"}, {"post_id": 37953, "ts": "2026-07-31T00:20:37Z", "hours": 1.0378, "text": "Added a new/first enemy with animations. My next goal is to make a tile set for one of my levels and get enemies attacking and dealing damage"}, {"post_id": 37487, "ts": "2026-07-30T08:22:14Z", "hours": 1.3272, "text": "added more attacks so they link up it will have a count and depending on the count it will play a different player animation"}, {"post_id": 36759, "ts": "2026-07-29T00:53:52Z", "hours": 1.2675, "text": "attack animation added"}, {"post_id": 36185, "ts": "2026-07-28T03:23:16Z", "hours": 0.4917, "text": "The player movement script is done and allows for movement in the 2d game with sprite animations and the vector flip, so it flips based on the direction the character is moving"}]...
|
Title: torchbearer by @NosyMonty | Stardance
Devl Title: torchbearer by @NosyMonty | Stardance
Devlogs:
The player movement script is done and allows for movement in the 2d game with sprite animations and the vector flip, so it flips based on the direction the character is moving
attack animation added
added more attacks so they link up it will have a count and depending on the count it will play a different player animation
Added a new/first enemy with animations. My next goal is to make a tile set for one of my levels and get enemies attacking and dealing damage
started on an enemy attack system where the enemy will follow you and try to attack also started on the player attack and health system, aiming to finish by tomorrow
added the foundation for the bat script and player damage but will need to continue on it with hitboxes and deal damage
built an enemy follow feature which allows the bat to follow the player and attack but after one attack it freezes and does not follow or attack again next time, I need to fix that and also add player damage to allow the user to kill enemy’s
added enemy attacks where the player can now die when health reaches zero and it also follows the player you can’t kill it yet still need to set up the zones and stuff but at least it took me 40 minutes to write some code
worked on a spike where it will reset the character a.k.a the character will die and the scene will reset. I also went the complex route of making it with a collision polygon shape instead of a normal collision shape now I just need to work out how to get the killzone script working with the spikes on every scene so i can just add the spikes scene
I’m going to try this devlog thing it seem like a cool way for me to keep track devlog #10 in today’s 1 hr coding session I actually got a lot done, I added some new animations for the player like slide which when activated it actually gives the player a speed boost, I enabled the player to attack and kill the bat and added its dying animation. I also added a new death screen where it fades to black still need to make a way to actually start again when you die, I fixed the spikes so the player just dies not fall through the ground it fades to black. Next session my goal is to add more enemies, start working on the tutorial level and expand on the cave level as well as start other levels and if im feeling nice i might give you a sneek peak at the twist at the end so follow along but take your time this might take a while with the little progress i have made in about 10 hours.
Devlog #11 over the past three days I have worked little on torchbearer, and it is going well I have updated the level design a bit not fully completed, added a coin with an animation, and am working on a vase that can be broken and it will drop 1-3 coins, I also added a tile screen, game manager where it can track coins bosses and levels and stuff and a game over screen, now I just need to finish implementing then into the actual game so they come onto the screen at the correct time and the buttons work, I am also planning to add more sprites to the game and start working on the first boss
devlog #12 im going to be honest this devlog is like 4 days’ worth of 30-minute stuff i think i showed everything i added but i can’t remember (stupid me) what i do know is that i have started and failed at a moving background with like 6 layers and attempted to make themes which I’ll explain/ show why at a later date but i think that is it (let’s not make this mistake again)
Devlog #13 added multiple things like new enemy to a point haven’t actually made the script yet. fixed and added the themes for the home and game over screen with there being two cave and village, with music on the way. I also added new attacks for the player where it has air attacks where it freezes and then accelerates down to deal more damage that is basically it it was mostly the player script that was a pain
devlog #14 worked on the tutorial level with text on how to play movement etc, also added 4 new enemies 3 bosses and one normal enemy but will keep them a secret untill i utalise them
devlog #15 so i think the game is finally finished its not as long as i wanted nor was i able to get the twist to work (i can’t 3d design very well) and I have lost the passion to work on the game it is a finished version playable takes about 10 minutes for those who want to but id rather have a finished playable version for everyone who would wanna play it then just leave it but basically it has 3 levels tutorial and then 2 main levels they are short but they all have boss battles and some form of enemy there is music, SFX and all, and backgrounds, there is a title screen and a portal to transport you from level to level once you finish there is a you win screen with a button to return to main menu there is themes and everything
Ships:
its a short platformer that has three levels and much more see past devlogs for more details...
|
1793112552.9947276
|
1793198952.9947276
|
|
58570
|
My first slack bot! by @RudraGoel | Stardance
|
RudraGoel
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T10:56:50Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Making one of my first slack bots. Not just the mission, it is infact my first slack bot.. I’m a bit late to the journey, but so far my first project in stardance has been great. And look forward to the next events. A little bit about myself: I’m a developer for the past 4-5 years, I’ve been programming since i was about 8 or 9. I’m now 14, and am building an app apart from also starting my hack club journey!", "repo": "https://github.com/rudraagoel/Slack-Bot_Stardance", "demo": "https://hackclub.enterprise.slack.com/archives/C0P5NE354"}]...
|
[{"post_id": 62820, "ts": "202 [{"post_id": 62820, "ts": "2026-09-06T10:47:47Z", "hours": 0.6703, "text": "Making one of my first slack bots. Not just the mission, it is infact my first slack bot.. I’m a bit late to the journey, but so far my first project in stardance has been great. And look forward to the next events. A little bit about myself: I’m a developer for the past 4-5 years, I’ve been programming since i was about 8 or 9. I’m now 14, and am building an app apart from also starting my hack club journey!"}]...
|
Title: My first slack bot! by @RudraGoel | Stardan Title: My first slack bot! by @RudraGoel | Stardance
Devlogs:
Making one of my first slack bots. Not just the mission, it is infact my first slack bot.. I’m a bit late to the journey, but so far my first project in stardance has been great. And look forward to the next events. A little bit about myself: I’m a developer for the past 4-5 years, I’ve been programming since i was about 8 or 9. I’m now 14, and am building an app apart from also starting my hack club journey!
Ships:
Making one of my first slack bots. Not just the mission, it is infact my first slack bot.. I’m a bit late to the journey, but so far my first project in stardance has been great. And look forward to the next events. A little bit about myself: I’m a developer for the past 4-5 years, I’ve been programming since i was about 8 or 9. I’m now 14, and am building an app apart from also starting my hack club journey!...
|
1793091153.362697
|
1793177553.362697
|
|
52563
|
PersonaOS by @myxs | Stardance
|
myxs
|
2
|
15.0
|
37
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T10:39:06Z", "hours": 3.0, "multiplier": 11.44, "payout": 37, "blessing": "neutral", "text": "PersonaOS just got some new updates! Features: There is now a splash screen when the webOS first boots up (aka when u open the website). Clicking on it initializes everything! The music app is now a music player! You can select and play from a selected list of music from the original persona game! All credits for all the music goes to the original artists and they’re really peak so make sure to go check them out! Name of artists and songs are mentioned in the music app itself. There is a new app! The dates app acts as a calendar plus a todo/tasks list. You can easily add and remove tasks from the app and all your tasks are saved in localstorage so you dont need to worry about losing them! There is now background music on the website Making this webOS has been really fun and a great learning experience for me personally. Along with teaching me web development it also taught me how to quickly navigate through documentation and tutorials and that will apply to more and more of the future projects i do. I didnt have any major issues this time as i was easily able to locate wtv i needed in the documentation. With greater experience comes greater reading-ability (trust fr fr).", "repo": "https://github.com/Aaryan-J/PersonaOS", "demo": "https://aaryan-j.github.io/PersonaOS/"}, {"ship_num": 2, "ts": "2026-08-31T11:05:59Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PersonaOS is a web-based OS inspired by Persona 3 Reload. It has tons of cool animations for all buttons and menus! Issues I had: Alot of mistakes were made and alot of time was spent behind the scenes just figuring out how to do something specific that I wanted to do. One of the hardest things in the making of the website was the triangle selection box that appears when you hover over the menu buttons. I couldn’t find the polygon property anywhere and when I did I had to spend alot of time seeing how exactly it works and how I can make the triangle fit the design I was going for. Next up, right before the ship i noticed that the font I chose wasn’t being displyed on the actual deployed website but was vibsible on my dev server. Though an easy fix (i switched to another font) it was still an issue I would’ve shipped if i hadn’t checked when I did. Overall I would say it was a pretty fun experience building this and I am very satisfied with the end result I got :). I hope to work on this more and make it an actual “OS” with multiple functionality and apps!", "repo": "https://github.com/Aaryan-J/PersonaOS", "demo": "https://aaryan-j.github.io/PersonaOS/"}]...
|
[{"post_id": 62813, "ts": "202 [{"post_id": 62813, "ts": "2026-09-06T10:29:49Z", "hours": 2.4283, "text": "ALRIGHTT IT HAS BEEN A WHILE! I have made a TON of progress tho :) Firstly new features! The website now has a dates tab which is basically a calendar that displays today’s date (MM/DD format) along with the day and it also works as a todo list/task manager! (as can be seen in the screenshot) You can add and remove tasks very easily and they’re saved in localstorage so even after you refresh the website (as long as u dont clear the data manually) your tasks will be safe and sound! Next up the music app has a huge change! its now a music player instead of just being a list. I have added persona 3 reload music (all credits to the original artists). the player lets u play any track from the track list in the side bar, pause, skip and go back to the last track! its like really cool and im proud of it fr fr. lastly there is now background music in the website that plays constantly (and u gotta listen to it cuz its peak). it only stops when u play another song in the music player lol. some issues i had were figuring out how the math would work for the seeker in the music player but when i figured it out it seemed so easy anw that was all! Thanks for reading the devlog!"}, {"post_id": 60175, "ts": "2026-09-02T12:05:01Z", "hours": 0.8456, "text": "Alright we’re finally onto web OS 2! Firstly i just wanna say that i wont be adding too many features to the website cuz ill suffer from scope creep. i have 2-3 small features planned out so look out for them! I’ve been busy these days due to exam prep so progress is slow but i have still added some new but simple things! Namely, a splash screen when u open the website (as seen in the screenshot below) and some hover and click sound effects on buttons. Thats all for today. Thanks for reading the devlog!"}, {"post_id": 58773, "ts": "2026-08-31T10:49:43Z", "hours": 1.9903, "text": "Final devlog for WebOS 1 misson! Okay so since last time a lot has changed. and by alot i mean ALOT. there are new animations for everything. I spent so so much time just figuring out what will work and what wouldnt and how to make the animations like i want them to be but i finally got it all figured out! The menu buttons have cool P3R style animations and so do the tab buttons inside the screens. I also fixed the window color themes and made them dark. Even the lists inside the windows have animations! (i think i overdid the animations a bit but who cares it looks so cool!). Animations aside you might be thinking why there isnt much content in the website (in terms of actual text) and the reason is “I feel lazy” This is the final devlog before the ship! As always thanks for reading the devlog!"}, {"post_id": 57295, "ts": "2026-08-29T12:21:51Z", "hours": 3.0339, "text": "alright chat new devlog time. i know you can only see 3 hour logged but trust me i spent like 6-7 hours (no pun intended) on this. most of the time went into learning web dev to a level where i could add animations and stuff to the website. as u can see from the pic i put, its all coming together quite well. development: i added tons of animations to almost everything. the menu buttons are animated, the buttons in the window sidebar are animated, the list is animated (when u hover over the items). i also added the background from the p3r pause menu. refactored alot of code so its kinda clean and manageable. had lots of fun learning all the new stuff that i did while making this but it also took a lot of time and energy Issues i encountered: i have completely left following the official guide they gave w the mission as of now. im doing everything on my own and learning through websites like w3schools etc to get the more advanced topics like animations which the guide for webos1 doesnt cover. secondly why is choosing colors so difficult . as u can see the windows are still not matching the actual background but that will be fixed soon. i wanted to devlog rn cuz i made alot of changes. next steps: next steps would be to make the application buttons more stylized according to the actual game menu (idk how but ill figure it out somehow). and also fixing the color scheme. i have some more ideas i wanna implement but only time will tell if i do actually get to it. along with all that i really need to add actual content in the website and stop fixating on the design itself. hopefully next time i will be shipping the website as most of the requirements for the webOS 1 mission are complete anw. lastly thanks for reading the devlog!"}, {"post_id": 54986, "ts": "2026-08-26T12:41:56Z", "hours": 2.8558, "text": "alr so some progress have been made. firstly, i have added multiple windows (finally). they can be dragged, closed, opened, they rise to the top when clicked, the content inside is scrollable and as u can see in the music window, there is now a sidebar. everything is still pretty barebones (it might be apparent from the image i attached) and im trying to finish up the basic structure and make the functions and classes more useful and dynamic so i can use them more easily and make my code cleaner. a huge(not really) refactor took place and now most of the code is cleaned up, has comments, and functions are more modular. after the basics of the webOS are done, ill move on to the eyecandy and pretty everything up. i plan on adding animations and persona style menu to the website (idk if itll be possible but we’ll be optimistic for now). the main issue im having right now is that the guide is not clear on some parts and i guess it has some bugs only a few of the images are even visible throughout the guide. ive spent more time reading the guide, articles, and posts to understand everything better than actual coding as im still relatively new to web dev. this is all for now, lets hope in the next devlog ill have something more attractive to see than just text on a blue background :P."}, {"post_id": 53702, "ts": "2026-08-24T11:39:02Z", "hours": 3.8581, "text": "Hey everyone! I’m currently working on my very own WebOS based on the game series Persona. PersonaOS is going to be themed around Persona 3 but will contain links to my favorite music, art, and media. Currently I’m working on building the basic website but progress is good and I’ll be finishing it soon. I’ve been experimenting with alot of colors and styles to go with for this website and that’s the thing taking the most time but making it personal and unique is the whole point of this so imma keep iterating until I get an acceptable result."}]...
|
Title: PersonaOS by @myxs | Stardance
Devlogs:
He Title: PersonaOS by @myxs | Stardance
Devlogs:
Hey everyone! I’m currently working on my very own WebOS based on the game series Persona. PersonaOS is going to be themed around Persona 3 but will contain links to my favorite music, art, and media. Currently I’m working on building the basic website but progress is good and I’ll be finishing it soon. I’ve been experimenting with alot of colors and styles to go with for this website and that’s the thing taking the most time but making it personal and unique is the whole point of this so imma keep iterating until I get an acceptable result.
alr so some progress have been made. firstly, i have added multiple windows (finally). they can be dragged, closed, opened, they rise to the top when clicked, the content inside is scrollable and as u can see in the music window, there is now a sidebar. everything is still pretty barebones (it might be apparent from the image i attached) and im trying to finish up the basic structure and make the functions and classes more useful and dynamic so i can use them more easily and make my code cleaner. a huge(not really) refactor took place and now most of the code is cleaned up, has comments, and functions are more modular. after the basics of the webOS are done, ill move on to the eyecandy and pretty everything up. i plan on adding animations and persona style menu to the website (idk if itll be possible but we’ll be optimistic for now). the main issue im having right now is that the guide is not clear on some parts and i guess it has some bugs only a few of the images are even visible throughout the guide. ive spent more time reading the guide, articles, and posts to understand everything better than actual coding as im still relatively new to web dev. this is all for now, lets hope in the next devlog ill have something more attractive to see than just text on a blue background :P.
alright chat new devlog time. i know you can only see 3 hour logged but trust me i spent like 6-7 hours (no pun intended) on this. most of the time went into learning web dev to a level where i could add animations and stuff to the website. as u can see from the pic i put, its all coming together quite well. development: i added tons of animations to almost everything. the menu buttons are animated, the buttons in the window sidebar are animated, the list is animated (when u hover over the items). i also added the background from the p3r pause menu. refactored alot of code so its kinda clean and manageable. had lots of fun learning all the new stuff that i did while making this but it also took a lot of time and energy Issues i encountered: i have completely left following the official guide they gave w the mission as of now. im doing everything on my own and learning through websites like w3schools etc to get the more advanced topics like animations which the guide for webos1 doesnt cover. secondly why is choosing colors so difficult . as u can see the windows are still not matching the actual background but that will be fixed soon. i wanted to devlog rn cuz i made alot of changes. next steps: next steps would be to make the application buttons more stylized according to the actual game menu (idk how but ill figure it out somehow). and also fixing the color scheme. i have some more ideas i wanna implement but only time will tell if i do actually get to it. along with all that i really need to add actual content in the website and stop fixating on the design itself. hopefully next time i will be shipping the website as most of the requirements for the webOS 1 mission are complete anw. lastly thanks for reading the devlog!
Final devlog for WebOS 1 misson! Okay so since last time a lot has changed. and by alot i mean ALOT. there are new animations for everything. I spent so so much time just figuring out what will work and what wouldnt and how to make the animations like i want them to be but i finally got it all figured out! The menu buttons have cool P3R style animations and so do the tab buttons inside the screens. I also fixed the window color themes and made them dark. Even the lists inside the windows have animations! (i think i overdid the animations a bit but who cares it looks so cool!). Animations aside you might be thinking why there isnt much content in the website (in terms of actual text) and the reason is “I feel lazy” This is the final devlog before the ship! As always thanks for reading the devlog!
Alright we’re finally onto web OS 2! Firstly i just wanna say that i wont be adding too many features to the website cuz ill suffer from scope creep. i have 2-3 small features planned out so look out for them! I’ve been busy these days due to exam prep so progress is slow but i have still added some new but simple things! Namely, a splash screen when u open the website (as seen in the screenshot below) and some hover and click sound effects on buttons. Thats all for today. Thanks for reading the devlog!
ALRIGHTT IT HAS BEEN A WHILE! I have made a TON of progress tho :) Firstly new features! The website now has a dates tab which is basically a calendar that displays today’s date (MM/DD format) along with the day and it also works as a todo list/task manager! (as can be seen in the screenshot) You can add and remove tasks very easily and they’re saved in localstorage so even after you refresh the website (as long as u dont clear the data manually) your tasks will be safe and sound! Next up the music app has a huge change! its now a music player instead of just being a list. I have added persona 3 reload music (all credits to the original artists). the player lets u play any track from the track list in the side bar, pause, skip and go back to the last track! its like really cool and im proud of it fr fr. lastly there is now background music in the website that plays constantly (and u gotta listen to it cuz its peak). it only stops when u play another song in the music player lol. some issues i had were figuring out how the math would work for the seeker in the music player but when i figured it out it seemed so easy anw that was all! Thanks for reading the devlog!
Ships:
PersonaOS is a web-based OS inspired by Persona 3 Reload. It has tons of cool animations for all buttons and menus! Issues I had: Alot of mistakes were made and alot of time was spent behind the scenes just figuring out how to do something specific that I wanted to do. One of the hardest things in the making of the website was the triangle selection box that appears when you hover over the menu buttons. I couldn’t find the polygon property anywhere and when I did I had to spend alot of time seeing how exactly it works and how I can make the triangle fit the design I was going for. Next up, right before the ship i noticed that the font I chose wasn’t being displyed on the actual deployed website but was vibsible on my dev server. Though an easy fix (i switched to another font) it was still an issue I would’ve shipped if i hadn’t checked when I did. Overall I would say it was a pretty fun experience building this and I am very satisfied with the end result I got :). I hope to work on this more and make it an actual “OS” with multiple functionality and apps!
PersonaOS just got some new updates! Features: There is now a splash screen when the webOS first boots up (aka when u open the website). Clicking on it initializes everything! The music app is now a music player! You can select and play from a selected list of music from the original persona game! All credits for all the music goes to the original artists and they’re really peak so make sure to go check them out! Name of artists and songs are mentioned in the music app itself. There is a new app! The dates app acts as a calendar plus a todo/tasks list. You can easily add and remove tasks from the app and all your tasks are saved in localstorage so you dont need to worry about losing them! There is now background music on the website Making this webOS has been really fun and a great learning experience for me personally. Along with teaching me web development it also taught me how to quickly navigate through documentation and tutorials and that will apply to more and more of the future projects i do. I didnt have any major issues this time as i was easily able to locate wtv i needed in the documentation. With greater experience comes greater reading-ability (trust fr fr)....
|
1793065981.1675406
|
1793152381.1675406
|
|
21502
|
Macro Microcontroller 2 by @nicholas1023 | Stardan Macro Microcontroller 2 by @nicholas1023 | Stardance...
|
nicholas1023
|
2
|
18.0
|
93
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T10:23:39Z", "hours": 8.0, "multiplier": 5.0, "payout": 41, "blessing": "neutral", "text": "This ship focuses more on the firmware and documentation of my project! For this ship, I made a PC-like system for my microcontroller, including a DOS-like firmware which boots from a BIOS I written myself. The effect of the BIOS made my device look really like an actual usable computer from the 80’s and the DOS allows it to be used as a PC! After this, I would try to implement a filesystem, so that it can actually be used to store files, as it has 15 MB of extra flash! Here is the DOS demo video: https://nicholas1023.github.io/macro-microcontroller-2/assets/dos-demo.mp4", "repo": "https://github.com/Nicholas1023/macro-microcontroller-2", "demo": ""}, {"ship_num": 2, "ts": "2026-07-11T08:49:47Z", "hours": 10.0, "multiplier": 5.0, "payout": 52, "blessing": "neutral", "text": "I’ve made Macro Microcontroller 2, a microcontroller development board and macropad with a custom BASIC interpreter firmware created in C from scratch! I’m proud of the PCB itself as I was surprised my board works well physically, as it was my first attempt creating one with a bare MCU chip on it! TO accompany the firmware and hardware, I created a documentation site to share more details as well! Documentation: https://nicholas1023.github.io/macro-microcontroller-2/", "repo": "https://github.com/Nicholas1023/macro-microcontroller-2", "demo": ""}]...
|
[{"post_id": 62803, "ts": "202 [{"post_id": 62803, "ts": "2026-09-06T10:10:03Z", "hours": 0.6367, "text": "Added new guide and modified the directory of the documentation site! In this devlog, I added a new page for the DOS setup and usage guide! As the pages in my documentation site are getting more and more, I decided to create a folder, and move the guides in, so the navbar would be less cluttered. One problem I faced though was the CSS and icons not loading in the guide, as the directories were getting a little complicated, given that I am using the /docs directory in my repo for the site, which makes URLs without the full path returning 404. After a few commits ( localhost was not using /docs as the root of the site), I finally found the right URL!"}, {"post_id": 62682, "ts": "2026-09-06T05:20:07Z", "hours": 0.5064, "text": "Organised the repo, README and docs! In this devlog, I updated the README.md contents as it was a little outdated due to the new firmware revision. I also just realised I didn’t link the datasheet for my board in the README, so that is also one of the changes I made. Additionally, I created a 404 page for my docs, and I will be making my second ship soon!"}, {"post_id": 62665, "ts": "2026-09-06T04:35:29Z", "hours": 2.4272, "text": "New Commands for DOS! In this devlog, I added new commands for my OS: CALCULATE : Performs basic operations on 2 numbers. Usage: CALCULATE [Number] [+ - * / ^ root] [Number] GPIO : Turns on a specified GPIO for 1 second. Usage: GPIO [LED# IO# BELL MOTOR] VERSION : Shows the release version. REBOOT : Reboots the system. Usage: REBOOT -m [BASIC BOOTSEL]* INFO : Displays device and memory information. UPTIME : Shows device uptime. I took quite a while to find out how to make the CALCULATE command work. Initially, 1/3 was returning 0. Turns out the problem was due to me using integers instead of doubles! Here’s a demo video of the OS!"}, {"post_id": 60124, "ts": "2026-09-02T09:20:15Z", "hours": 0.5058, "text": "Some updates to the documentation site! Since I added a new firmware, I have to update the downloads section of my site! It took me quite a while to organise my repo a little bit, as the firmware files were getting a little messier and releases getting more complicated as I have 2 firmware now! Next, I’ll be working on the DOS, adding more commands to the system!"}, {"post_id": 60113, "ts": "2026-09-02T08:41:25Z", "hours": 4.1128, "text": "New firmware update! Previously, I was asking myself: How can I make my device look more like an old PC? When I was turning on an old desktop I have at home, I saw the BIOS screen due to CMOS errors, and this was where I got an inspiration for a new firmware update. In this devlog, I redid the firmware, added a BIOS-like CLI, while still keeping the original BASIC interpreter as a fallback if no bootable “OS” was found. Here’s what it looks like: _ _ | \\/ | Macro Microcontroller BIOS Version 0.0.1. |_ \\/ _| Copyright (C) 2025-2026 Nicholas Lim. Device: Macro Microcontroller 2 (RP2040 @ 125MHz) Serial Number: ************ RAM Free: 254K OK Serial Status: Connected Press SW1 to enter Macro Microcontroller BASIC. Press SW2 to enter BOOTSEL mode. Booting system... The UI was inspired by the old BIOS POST screens from the 1980s. As I wanted a retro feel to my microcontroller, I thought that a BIOS-like system would look nice to it! Thanks for reading!"}, {"post_id": 26443, "ts": "2026-07-11T07:45:31Z", "hours": 3.6725, "text": "Finally received the board and soldered the parts on! In this devlog, I made some changes to the firmware and released v0.0.3 that adds support for comments: 10 REM This is a comment that will be ignored! 20 PRINT \"Hello world!\" I’ve also added a more detailed programming guide for my custom BASIC Interpreter. Difficulties I’ve faced I had some trouble soldering the keyboard switches on as it was moving everywhere. I’ve attempted applying tape, but it did not work as the temperature was too high. I’ll be tidying up the repo and get ready to finally ship🚢 my project!"}, {"post_id": 21378, "ts": "2026-07-03T08:54:28Z", "hours": 2.9286, "text": "Updated the firmware and ordered my PCB and parts! In this devlog, I’ve added a new function to my custom BASIC interpreter for my development board, and finally sent my PCB for manufacturing! It took me quite a while to write the random number function that the old BASIC interpreters used to have: RND . I did many rounds of trial and error to finally create a working code (the previous code was returning either nothing or throwing compiler errors due to data types): printf ( \"%f \\n \" , ( float ) rand () / ( float ) RAND_MAX ); Here’s a sample program you could run that generates a random number, stores it in a variable and prints it: 10 let x = rnd 20 lsvar 30 print x Now, I’ll be working on support for comments in my interpreter and wait for my parts to come. I can’t wait to assemble my macropad + dev board!"}, {"post_id": 14871, "ts": "2026-06-24T04:24:32Z", "hours": 1.2564, "text": "More updates to the documentation site! Today, I changed the layout and content of the documentation website and made it responsive for mobile devices! I initially wanted to add a 3D viewer to display the .glb file for rendering, but it did not output the result I wanted. (The silkscreen was not appearing!) I’ll read up on more about it, and hopefully, I would be able to add the 3D model into my documentation!"}, {"post_id": 14256, "ts": "2026-06-23T09:00:37Z", "hours": 2.5856, "text": "Created a documentation site for my microcontroller! In this devlog, I improved the documentation of my project by creating a simple website to share specifications, schematics, and provide a direct link to download firmware and 3D print files. You may view it at https://nicholas1023.github.io/macro-microcontroller-2 ! What I’ll be doing next Next, I will be ordering the PCB and electronic components and finally solder them together!"}, {"post_id": 12369, "ts": "2026-06-20T05:53:26Z", "hours": 3.0203, "text": "Finished the enclosure and organised the repository! Today, I have completed the 3D case for Macro Microcontroller 2 and did some minor bug fixes for the BASIC Interpreter. I needed to reassign the GPIO pins from the first revision of the board. Although the interpreter is currently still basic, it supports 4 BASIC statements and 4 custom statements for controls. What’s new in this devlog Text and key labels for enclosure with cover Organised repository New KEY statement for hardware GPIO control"}, {"post_id": 11924, "ts": "2026-06-19T13:17:05Z", "hours": 2.0706, "text": "Halfway through my PCB’s case! What I’ve done in this devlog For the first-half, I added silkscreen text to the PCB for the IO components (GPIO Pins, Keyboard switches, LEDs…). Next, I moved on to designing the enclosure. It took a while for me to get used to using a new app to design it. Modifications to the PCB Added screw mounting pads for easier mounting. LEDs moved closer to each other for space to add silkscreen designs. Problems I’ve faced The screw holes were not appearing during the first few attempts, but it worked in the end when I placed it manually, instead of using the move function. Creating the cutout for the USB connector took me about 15 mins as I needed to measure the length and clearance needed for a micro-USB plug and create another sketch before extruding it as a cutout. What I’ll be working on next Next, I’ll be continuing with the enclosure design, adding a cover with a keyboard plate, and finally moving on to the BASIC interpreter firmware for it!"}, {"post_id": 11799, "ts": "2026-06-19T06:16:24Z", "hours": 2.0275, "text": "Finished routing my microcontroller board! Did most of the routing for the MCU and macropad segment today, but I might need to do some rewiring for the flash memory as the trace length for SD0 and SD2 are very different (5.57 & 13.2 mm). What has been added since the last devlog Added power LED Added pin headers for GPIO and power Added barrel jack in case if the DC motor drains too much power What I’ll be doing next Next, I’ll be adding more silkscreen text, and maybe design an icon for my macropad + microcontroller board. I’ll also be creating a custom enclosure for my device!"}, {"post_id": 11210, "ts": "2026-06-18T10:54:15Z", "hours": 2.3825, "text": "Finished the schematics and a little of the BASIC Interpreter for my microcontroller board! What I did today Redid the old schematics by adding custom RP2040 circuit instead of a using a dev board. Added new GPIO devices such as DC motor and a buzzer. (for the BASIC interpreter) Started on PRINT , LET and INPUT for the interpreter. What I’ll be doing next Next, I will be focusing on the BASIC interpreter firmware, working on variable assignment and math operations and testing it on a real pico board! Also, I will be starting on the layout and BOM as I have completed the schematics!"}]...
|
Title: Macro Microcontroller 2 by @nicholas1023 | Title: Macro Microcontroller 2 by @nicholas1023 | Stardance
Devlogs:
Finished the schematics and a little of the BASIC Interpreter for my microcontroller board! What I did today Redid the old schematics by adding custom RP2040 circuit instead of a using a dev board. Added new GPIO devices such as DC motor and a buzzer. (for the BASIC interpreter) Started on PRINT , LET and INPUT for the interpreter. What I’ll be doing next Next, I will be focusing on the BASIC interpreter firmware, working on variable assignment and math operations and testing it on a real pico board! Also, I will be starting on the layout and BOM as I have completed the schematics!
Finished routing my microcontroller board! Did most of the routing for the MCU and macropad segment today, but I might need to do some rewiring for the flash memory as the trace length for SD0 and SD2 are very different (5.57 & 13.2 mm). What has been added since the last devlog Added power LED Added pin headers for GPIO and power Added barrel jack in case if the DC motor drains too much power What I’ll be doing next Next, I’ll be adding more silkscreen text, and maybe design an icon for my macropad + microcontroller board. I’ll also be creating a custom enclosure for my device!
Halfway through my PCB’s case! What I’ve done in this devlog For the first-half, I added silkscreen text to the PCB for the IO components (GPIO Pins, Keyboard switches, LEDs…). Next, I moved on to designing the enclosure. It took a while for me to get used to using a new app to design it. Modifications to the PCB Added screw mounting pads for easier mounting. LEDs moved closer to each other for space to add silkscreen designs. Problems I’ve faced The screw holes were not appearing during the first few attempts, but it worked in the end when I placed it manually, instead of using the move function. Creating the cutout for the USB connector took me about 15 mins as I needed to measure the length and clearance needed for a micro-USB plug and create another sketch before extruding it as a cutout. What I’ll be working on next Next, I’ll be continuing with the enclosure design, adding a cover with a keyboard plate, and finally moving on to the BASIC interpreter firmware for it!
Finished the enclosure and organised the repository! Today, I have completed the 3D case for Macro Microcontroller 2 and did some minor bug fixes for the BASIC Interpreter. I needed to reassign the GPIO pins from the first revision of the board. Although the interpreter is currently still basic, it supports 4 BASIC statements and 4 custom statements for controls. What’s new in this devlog Text and key labels for enclosure with cover Organised repository New KEY statement for hardware GPIO control
Created a documentation site for my microcontroller! In this devlog, I improved the documentation of my project by creating a simple website to share specifications, schematics, and provide a direct link to download firmware and 3D print files. You may view it at https://nicholas1023.github.io/macro-microcontroller-2 ! What I’ll be doing next Next, I will be ordering the PCB and electronic components and finally solder them together!
More updates to the documentation site! Today, I changed the layout and content of the documentation website and made it responsive for mobile devices! I initially wanted to add a 3D viewer to display the .glb file for rendering, but it did not output the result I wanted. (The silkscreen was not appearing!) I’ll read up on more about it, and hopefully, I would be able to add the 3D model into my documentation!
Updated the firmware and ordered my PCB and parts! In this devlog, I’ve added a new function to my custom BASIC interpreter for my development board, and finally sent my PCB for manufacturing! It took me quite a while to write the random number function that the old BASIC interpreters used to have: RND . I did many rounds of trial and error to finally create a working code (the previous code was returning either nothing or throwing compiler errors due to data types): printf ( "%f \n " , ( float ) rand () / ( float ) RAND_MAX ); Here’s a sample program you could run that generates a random number, stores it in a variable and prints it: 10 let x = rnd 20 lsvar 30 print x Now, I’ll be working on support for comments in my interpreter and wait for my parts to come. I can’t wait to assemble my macropad + dev board!
Finally received the board and soldered the parts on! In this devlog, I made some changes to the firmware and released v0.0.3 that adds support for comments: 10 REM This is a comment that will be ignored! 20 PRINT "Hello world!" I’ve also added a more detailed programming guide for my custom BASIC Interpreter. Difficulties I’ve faced I had some trouble soldering the keyboard switches on as it was moving everywhere. I’ve attempted applying tape, but it did not work as the temperature was too high. I’ll be tidying up the repo and get ready to finally ship🚢 my project!
New firmware update! Previously, I was asking myself: How can I make my device look more like an old PC? When I was turning on an old desktop I have at home, I saw the BIOS screen due to CMOS errors, and this was where I got an inspiration for a new firmware update. In this devlog, I redid the firmware, added a BIOS-like CLI, while still keeping the original BASIC interpreter as a fallback if no bootable “OS” was found. Here’s what it looks like: _ _ | \/ | Macro Microcontroller BIOS Version 0.0.1. |_ \/ _| Copyright (C) 2025-2026 Nicholas Lim. Device: Macro Microcontroller 2 (RP2040 @ 125MHz) Serial Number: ************ RAM Free: 254K OK Serial Status: Connected Press SW1 to enter Macro Microcontroller BASIC. Press SW2 to enter BOOTSEL mode. Booting system... The UI was inspired by the old BIOS POST screens from the 1980s. As I wanted a retro feel to my microcontroller, I thought that a BIOS-like system would look nice to it! Thanks for reading!
Some updates to the documentation site! Since I added a new firmware, I have to update the downloads section of my site! It took me quite a while to organise my repo a little bit, as the firmware files were getting a little messier and releases getting more complicated as I have 2 firmware now! Next, I’ll be working on the DOS, adding more commands to the system!
New Commands for DOS! In this devlog, I added new commands for my OS: CALCULATE : Performs basic operations on 2 numbers. Usage: CALCULATE [Number] [+ - * / ^ root] [Number] GPIO : Turns on a specified GPIO for 1 second. Usage: GPIO [LED# IO# BELL MOTOR] VERSION : Shows the release version. REBOOT : Reboots the system. Usage: REBOOT -m [BASIC BOOTSEL]* INFO : Displays device and memory information. UPTIME : Shows device uptime. I took quite a while to find out how to make the CALCULATE command work. Initially, 1/3 was returning 0. Turns out the problem was due to me using integers instead of doubles! Here’s a demo video of the OS!
Organised the repo, README and docs! In this devlog, I updated the README.md contents as it was a little outdated due to the new firmware revision. I also just realised I didn’t link the datasheet for my board in the README, so that is also one of the changes I made. Additionally, I created a 404 page for my docs, and I will be making my second ship soon!
Added new guide and modified the directory of the documentation site! In this devlog, I added a new page for the DOS setup and usage guide! As the pages in my documentation site are getting more and more, I decided to create a folder, and move the guides in, so the navbar would be less cluttered. One problem I faced though was the CSS and icons not loading in the guide, as the directories were getting a little complicated, given that I am using the /docs directory in my repo for the site, which makes URLs without the full path returning 404. After a few commits ( localhost was not using /docs as the root of the site), I finally found the right URL!
Ships:
I’ve made Macro Microcontroller 2, a microcontroller development board and macropad with a custom BASIC interpreter firmware created in C from scratch! I’m proud of the PCB itself as I was surprised my board works well physically, as it was my first attempt creating one with a bare MCU chip on it! TO accompany the firmware and hardware, I created a documentation site to share more details as well! Documentation: https://nicholas1023.github.io/macro-microcontroller-2/
This ship focuses more on the firmware and documentation of my project! For this ship, I made a PC-like system for my microcontroller, including a DOS-like firmware which boots from a BIOS I written myself. The effect of the BIOS made my device look really like an actual usable computer from the 80’s and the DOS allows it to be used as a PC! After this, I would try to implement a filesystem, so that it can actually be used to store files, as it has 15 MB of extra flash! Here is the DOS demo video: https://nicholas1023.github.io/macro-microcontroller-2/assets/dos-demo.mp4...
|
1793130649.0072033
|
1793217049.0072033
|
|
52248
|
City Sweep by @gungu | Stardance
|
gungu
|
1
|
43.0
|
838
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T10:11:00Z", "hours": 43.0, "multiplier": 19.27, "payout": 838, "blessing": "neutral", "text": "City Sweep is a game I made in about 2-3 weeks with the sole purpose to test out how well I can make a game in my freshly made 3D renderer and basically game engine. In this game you pick up trash in a small city. You earn money from the picked up trash, which you can spend on more storage, tools, or upgrades for your tools. That’s about it, this is just a tech demo I made for my engine, so it isn’t that ambitious.", "repo": "https://github.com/gungugugungu/City_Sweep", "demo": "https://github.com/gungugugungu/City_Sweep/releases/tag/1.0"}]...
|
[{"post_id": 62800, "ts": "202 [{"post_id": 62800, "ts": "2026-09-06T10:08:17Z", "hours": 0.7683, "text": "DEMO !! And that’s it, the demo is live. I’m going to ship the project and finally relax after a long summer. Unless there are bugs to fix of course, but I sure as hell hope there are none."}, {"post_id": 62502, "ts": "2026-09-05T22:02:26Z", "hours": 0.3247, "text": "SETTINGS and HELP MENU That’s it, I’m done. I made a game in my own renderer, and pretty well too. What I’ve made in the past couple of weeks simply amazes me, I never thought I would make a game in completely my own engine, and look at me now. Yes it’s just a simple tech demo, but it’s still a playable game."}, {"post_id": 62494, "ts": "2026-09-05T21:40:06Z", "hours": 0.6536, "text": "Sound effects Yeah there are sounds for everything now, the game is coming together, it’s sure as hell good for a tech demo."}, {"post_id": 62141, "ts": "2026-09-05T12:11:56Z", "hours": 0.3622, "text": "Music !! I spent the morning making a song that doesn’t feel to repetitive, as the game is like 15 minutes long, and I’m pretty sure this song is basic enough that it that it can be listened to for 15 minutes. I also had to implement SDL_mixer into my game so I can listen play sounds, but that was pretty easy. I wanted the song to have a vibe straight out of High On Life, and I think I’ve got it. I’ve attached a part of it so you can listen to it too."}, {"post_id": 61723, "ts": "2026-09-04T19:19:39Z", "hours": 1.3453, "text": "Everything finally has a proper price! I tried beating the entire game with this, and of course it’s a tech demo so it’s like a 10 minute experience at best, it’s still extremely cool. I’m almost there, just some polishing here and there and I’m done."}, {"post_id": 61586, "ts": "2026-09-04T15:58:33Z", "hours": 1.5619, "text": "I finished the upgrades for the broom and vacuum I did it for the storage too, it was only half done. It’s pretty cool. I also rearranged all the trash in the city, and nearly doubled it too. Now all I need is: Make everything cost money. All the prices are already calculated, I just need to make them work. I need to music, sound effects, and settings to make them work. I need to make a proper help menu, because I still use the placeholder. And then the last thing is some multi-platform playtesting, to make sure everything works as it’s supposed to."}, {"post_id": 60893, "ts": "2026-09-03T15:18:56Z", "hours": 1.7419, "text": "I filled the city with trash I doesn’t look too great yet, I’m definitely going to do something about how it looks, but as of right now I’m: A. Happy that it’s even working B. Surprised that my renderer can handle so many objects at once. This project was basically made so I can see how well my renderer can handle a full game, and it seems like it’s doing quite fine. Now all that remains is to: Finish all the upgrades for all the tools Give everything a price and display it Add some sfx and music Add a loading screen That’s not a bad list, I’m practically done already!😅"}, {"post_id": 60338, "ts": "2026-09-02T16:51:29Z", "hours": 1.1717, "text": "I finished the city!!! It’s neither the prettiest or the biggest, but I can’t commit to a map bigger than this for my first game in this renderer. So, for now, this is enough. It looks kinda cool tho, it might just be me. The point is: this is a basic map, but a great map for picking up trash in, all things considered I’m happy."}, {"post_id": 59635, "ts": "2026-09-01T15:36:29Z", "hours": 1.6458, "text": "Many changes, so here’s a list: I wrote an entire pixelation post-processing effect in the renderer so now the entire thing is cool and pixelated, I love how it looks. I worked a bit more on the map and re-lit the whole thing I drew a new skybox, I think it looks really cool."}, {"post_id": 58822, "ts": "2026-08-31T12:28:05Z", "hours": 2.0081, "text": "I started working on the world for the demo. It’s going to be quite small, I’ve already got 2 of 10 buildings down. I also need to make a new skybox too, but that’ll come later I suppose. I also want to make a pixelating effect that makes it look a bit more stylized, but that’ll come later."}, {"post_id": 58000, "ts": "2026-08-30T10:37:15Z", "hours": 1.9097, "text": "VACUUM TOOL I’m beginning to get to the end of the project. I still need to make the upgrades for the broom and vacuum, an actual map, sounds effects, music or ambience and make a build for windows too. I’m pretty sure that’s it."}, {"post_id": 57268, "ts": "2026-08-29T11:34:02Z", "hours": 4.8394, "text": "TOOL SYSTEM and BROOM I implemented an entire system for switching tools. I didn’t want to make a devlog without an example, so I drew, animated and programmed the broom tool as well. All of it’s settings are changeable, now all I need to do is spend a bit of time with the upgrades and it’s all done. I’m unsure if I talked about money in the last update, but if not then yeah, money exists too now, although it doesn’t have a use quite yet."}, {"post_id": 55742, "ts": "2026-08-27T18:34:04Z", "hours": 4.7506, "text": "BUYING TOOLS and TOOL ANIMATIONS Most my time spent in this update was actually with optimization. I freaked out the the game wasn’t performing well in a rendering situation that I won’t even come close to in the finished product, so I realized it was only a problem if I made it one. After that debacle I implemented buying tools and then I started working on animating the hands. All the other tools will be 2D and animated like this too."}, {"post_id": 54608, "ts": "2026-08-25T17:08:08Z", "hours": 1.1217, "text": "STORAGE UPGRADES minus the trashcan and wheelbarrow, I’m planning to make those actual physical objects you can move around and interact with which will come later on in development, I’ve still got a lot to do before that. But that does technically mean that most of the UI work is done (jippie !!!) , I only need to do the purchasing for other tools now, and the settings menu will come far later in development. I’m almost out of UI hell, almost there"}, {"post_id": 54491, "ts": "2026-08-25T14:45:23Z", "hours": 1.5553, "text": "It took a bit longer then I would have wanted, but I designed the storage upgrade menu. First image is nothing purchased, second image is everything bought."}, {"post_id": 53969, "ts": "2026-08-24T17:57:38Z", "hours": 1.5842, "text": "HAND UPGRADES Upgrade 1 : Pickup speed: shrinks the time between pickups Upgrade 2 : Palm size: the radius in which the player can pick up trash (basically just how much trash you can pick up at once) Upgrade 3 : Hold pick up: (one-time upgrade) allows holding the mouse button for picking up trash instead of having to click individually for each one"}, {"post_id": 53874, "ts": "2026-08-24T16:04:48Z", "hours": 2.2628, "text": "EXPANDABLE UPGRADE SYSTEM This is just the base for it, upgrades are not yet implemented, but thanks to all the work right now, implementing upgrades is easier than ever. The progress bars are how well the upgrades are progressing, and those are driven by a variable as well. Much of the time on this was just spent on figuring out how the UI should look, and to be honest I’m a bit disappointed because it’s not that good, but it’ll be better once it actually functions, because right now you can press the buttons but they don’t do anything that’s visible to the naked eye"}, {"post_id": 53158, "ts": "2026-08-23T16:30:23Z", "hours": 2.3658, "text": "this took way longer than it should have, but BASIC PAUSE MENU AND UI SYSTEM I made a simple button class and made sure they worked, I also had to do a bunch of debugging in the engine and in my raycasting function to iron out a bunch of bugs, I am finding why making your own engine is way more time consuming. I love it tho, it’s way more fun than making this in a big engine."}, {"post_id": 52969, "ts": "2026-08-23T10:50:30Z", "hours": 0.44, "text": "EMPTYING TRASH AND MAX TRASH AMOUNT Yeah pretty self explanatory. I capped the max amount you can hold and added bins on the map that you can empty trash into. Pretty cool."}, {"post_id": 52948, "ts": "2026-08-23T10:15:07Z", "hours": 1.0661, "text": "PHYSICS OPTIMIZATION Yeah the physics were really slow, I needed to work on optimizing it a little. Also, if you look closely you can see that the trash counter text is finally centered. That cool, right? Anyways, the point is that I won’t be having any trouble with performance anytime soon."}, {"post_id": 52630, "ts": "2026-08-22T21:05:36Z", "hours": 1.2803, "text": "TRASH COUNTER Yeah it’s not centered, I’ll fix that, I just want this feature out. I had to rewrite much of the 2D rendering in my renderer for this, so please appreciate it.😅"}, {"post_id": 52582, "ts": "2026-08-22T19:21:29Z", "hours": 0.8422, "text": "I added trash you can pick up It’s loaded from the map file you give it, and automatically identified based on the name. You can also kick it around, that’s it. Now that I finally built out all the necessary systems developing this game is a breeze, I so love the environment I built for myself. Totally worth the 60 hours I spent on it."}, {"post_id": 52538, "ts": "2026-08-22T18:16:57Z", "hours": 3.6858, "text": "I can’t believe I’m saying this, but FPS MOVEMENT AND PHYSICS SYSTEM If you saw any of my older devlogs (you didn’t tho) , you would point out that I already made a physics system and FPS movement. And that’s true, but those systems were copied from my last engine and slightly edited to fit my new renderer (except for PhysicsObject that was basically a full rewrite) , but I didn’t account for the fact that React Physics 3D may have been updated during this time. And of course they added breaking changes, which I had to annoyingly chase down with no information on why anything was happening. I’m not going to go into it because I don’t fully understand what it was freaking out so much about, but the point is that I had to rewrite most of the CharacterController and FPSController, or else the entire physics system would just collapse on itself. Anyways, here’s a video of me walking around on the dev environment."}, {"post_id": 51539, "ts": "2026-08-21T09:32:46Z", "hours": 0.3761, "text": "CHARACTERCONTROLLER AND FPSCONTROLLER CLASS I ported over an old CharacterController class from my old game engine along with the FPSController subclass. I had to do a little rewriting because this project uses a different math library and camera setup, but other than that it was really simple."}, {"post_id": 51521, "ts": "2026-08-21T09:02:32Z", "hours": 3.8094, "text": "RENDERER IMPLEMENTATION AND PHYSICS This project is a follow-up to my last project, which is a renderer using Vulkan. I spent some time figuring out how to use my own renderer as a library, but after a bunch of rewriting I managed to do it. After that I implemented ReactPhysics3D, which is a 3D physics library I used before, and I want to use it in this game too, so I spent some time writing a PhysicsObject class based on the PhysicsComponent from my game engine I built last year. I had to do a bunch of rewriting, and I also had to modify my GLTF loader in my renderer so it also returns vertex dat for convex shape generation, but it’s all done and working. The next step is a CharacterController class and an FPSController subclass, which I can hopefully just rip from my old game engine."}]...
|
Title: City Sweep by @gungu | Stardance
Devlogs:
Title: City Sweep by @gungu | Stardance
Devlogs:
RENDERER IMPLEMENTATION AND PHYSICS This project is a follow-up to my last project, which is a renderer using Vulkan. I spent some time figuring out how to use my own renderer as a library, but after a bunch of rewriting I managed to do it. After that I implemented ReactPhysics3D, which is a 3D physics library I used before, and I want to use it in this game too, so I spent some time writing a PhysicsObject class based on the PhysicsComponent from my game engine I built last year. I had to do a bunch of rewriting, and I also had to modify my GLTF loader in my renderer so it also returns vertex dat for convex shape generation, but it’s all done and working. The next step is a CharacterController class and an FPSController subclass, which I can hopefully just rip from my old game engine.
CHARACTERCONTROLLER AND FPSCONTROLLER CLASS I ported over an old CharacterController class from my old game engine along with the FPSController subclass. I had to do a little rewriting because this project uses a different math library and camera setup, but other than that it was really simple.
I can’t believe I’m saying this, but FPS MOVEMENT AND PHYSICS SYSTEM If you saw any of my older devlogs (you didn’t tho) , you would point out that I already made a physics system and FPS movement. And that’s true, but those systems were copied from my last engine and slightly edited to fit my new renderer (except for PhysicsObject that was basically a full rewrite) , but I didn’t account for the fact that React Physics 3D may have been updated during this time. And of course they added breaking changes, which I had to annoyingly chase down with no information on why anything was happening. I’m not going to go into it because I don’t fully understand what it was freaking out so much about, but the point is that I had to rewrite most of the CharacterController and FPSController, or else the entire physics system would just collapse on itself. Anyways, here’s a video of me walking around on the dev environment.
I added trash you can pick up It’s loaded from the map file you give it, and automatically identified based on the name. You can also kick it around, that’s it. Now that I finally built out all the necessary systems developing this game is a breeze, I so love the environment I built for myself. Totally worth the 60 hours I spent on it.
TRASH COUNTER Yeah it’s not centered, I’ll fix that, I just want this feature out. I had to rewrite much of the 2D rendering in my renderer for this, so please appreciate it.😅
PHYSICS OPTIMIZATION Yeah the physics were really slow, I needed to work on optimizing it a little. Also, if you look closely you can see that the trash counter text is finally centered. That cool, right? Anyways, the point is that I won’t be having any trouble with performance anytime soon.
EMPTYING TRASH AND MAX TRASH AMOUNT Yeah pretty self explanatory. I capped the max amount you can hold and added bins on the map that you can empty trash into. Pretty cool.
this took way longer than it should have, but BASIC PAUSE MENU AND UI SYSTEM I made a simple button class and made sure they worked, I also had to do a bunch of debugging in the engine and in my raycasting function to iron out a bunch of bugs, I am finding why making your own engine is way more time consuming. I love it tho, it’s way more fun than making this in a big engine.
EXPANDABLE UPGRADE SYSTEM This is just the base for it, upgrades are not yet implemented, but thanks to all the work right now, implementing upgrades is easier than ever. The progress bars are how well the upgrades are progressing, and those are driven by a variable as well. Much of the time on this was just spent on figuring out how the UI should look, and to be honest I’m a bit disappointed because it’s not that good, but it’ll be better once it actually functions, because right now you can press the buttons but they don’t do anything that’s visible to the naked eye
HAND UPGRADES Upgrade 1 : Pickup speed: shrinks the time between pickups Upgrade 2 : Palm size: the radius in which the player can pick up trash (basically just how much trash you can pick up at once) Upgrade 3 : Hold pick up: (one-time upgrade) allows holding the mouse button for picking up trash instead of having to click individually for each one
It took a bit longer then I would have wanted, but I designed the storage upgrade menu. First image is nothing purchased, second image is everything bought.
STORAGE UPGRADES minus the trashcan and wheelbarrow, I’m planning to make those actual physical objects you can move around and interact with which will come later on in development, I’ve still got a lot to do before that. But that does technically mean that most of the UI work is done (jippie !!!) , I only need to do the purchasing for other tools now, and the settings menu will come far later in development. I’m almost out of UI hell, almost there
BUYING TOOLS and TOOL ANIMATIONS Most my time spent in this update was actually with optimization. I freaked out the the game wasn’t performing well in a rendering situation that I won’t even come close to in the finished product, so I realized it was only a problem if I made it one. After that debacle I implemented buying tools and then I started working on animating the hands. All the other tools will be 2D and animated like this too.
TOOL SYSTEM and BROOM I implemented an entire system for switching tools. I didn’t want to make a devlog without an example, so I drew, animated and programmed the broom tool as well. All of it’s settings are changeable, now all I need to do is spend a bit of time with the upgrades and it’s all done. I’m unsure if I talked about money in the last update, but if not then yeah, money exists too now, although it doesn’t have a use quite yet.
VACUUM TOOL I’m beginning to get to the end of the project. I still need to make the upgrades for the broom and vacuum, an actual map, sounds effects, music or ambience and make a build for windows too. I’m pretty sure that’s it.
I started working on the world for the demo. It’s going to be quite small, I’ve already got 2 of 10 buildings down. I also need to make a new skybox too, but that’ll come later I suppose. I also want to make a pixelating effect that makes it look a bit more stylized, but that’ll come later.
Many changes, so here’s a list: I wrote an entire pixelation post-processing effect in the renderer so now the entire thing is cool and pixelated, I love how it looks. I worked a bit more on the map and re-lit the whole thing I drew a new skybox, I think it looks really cool.
I finished the city!!! It’s neither the prettiest or the biggest, but I can’t commit to a map bigger than this for my first game in this renderer. So, for now, this is enough. It looks kinda cool tho, it might just be me. The point is: this is a basic map, but a great map for picking up trash in, all things considered I’m happy.
I filled the city with trash I doesn’t look too great yet, I’m definitely going to do something about how it looks, but as of right now I’m: A. Happy that it’s even working B. Surprised that my renderer can handle so many objects at once. This project was basically made so I can see how well my renderer can handle a full game, and it seems like it’s doing quite fine. Now all that remains is to: Finish all the upgrades for all the tools Give everything a price and display it Add some sfx and music Add a loading screen That’s not a bad list, I’m practically done already!😅
I finished the upgrades for the broom and vacuum I did it for the storage too, it was only half done. It’s pretty cool. I also rearranged all the trash in the city, and nearly doubled it too. Now all I need is: Make everything cost money. All the prices are already calculated, I just need to make them work. I need to music, sound effects, and settings to make them work. I need to make a proper help menu, because I still use the placeholder. And then the last thing is some multi-platform playtesting, to make sure everything works as it’s supposed to.
Everything finally has a proper price! I tried beating the entire game with this, and of course it’s a tech demo so it’s like a 10 minute experience at best, it’s still extremely cool. I’m almost there, just some polishing here and there and I’m done.
Music !! I spent the morning making a song that doesn’t feel to repetitive, as the game is like 15 minutes long, and I’m pretty sure this song is basic enough that it that it can be listened to for 15 minutes. I also had to implement SDL_mixer into my game so I can listen play sounds, but that was pretty easy. I wanted the song to have a vibe straight out of High On Life, and I think I’ve got it. I’ve attached a part of it so you can listen to it too.
Sound effects Yeah there are sounds for everything now, the game is coming together, it’s sure as hell good for a tech demo.
SETTINGS and HELP MENU That’s it, I’m done. I made a game in my own renderer, and pretty well too. What I’ve made in the past couple of weeks simply amazes me, I never thought I would make a game in completely my own engine, and look at me now. Yes it’s just a simple tech demo, but it’s still a playable game.
DEMO !! And that’s it, the demo is live. I’m going to ship the project and finally relax after a long summer. Unless there are bugs to fix of course, but I sure as hell hope there are none.
Ships:
City Sweep is a game I made in about 2-3 weeks with the sole purpose to test out how well I can make a game in my freshly made 3D renderer and basically game engine. In this game you pick up trash in a small city. You earn money from the picked up trash, which you can spend on more storage, tools, or upgrades for your tools. That’s about it, this is just a tech demo I made for my engine, so it isn’t that ambitious....
|
1793101811.2852302
|
1793188211.2852302
|
|
58620
|
My Own Website by @Vasilakos | Stardance
|
Vasilakos
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T09:54:10Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Just deployed my own website and I got to say it was pretty fun! Had a little bit of a problem with the deployment because I am not awfully familiar with git and I messed up the repo a bit at the start but figured it out in the end. It’s definitely gonna get updated as time goes and not be just a static page but for now I think it’s a fun website with some APIs in the bottom as well so visit it and see some cute kitties or learn about the weather!", "repo": "https://github.com/Vasilakos1821/My-Website", "demo": "https://vasilakos1821.github.io/My-Website/"}]...
|
[{"post_id": 62779, "ts": "202 [{"post_id": 62779, "ts": "2026-09-06T09:25:14Z", "hours": 1.0278, "text": "Close to finishing my website, it’s a very simple static website right now but still it’s fun I am gonna update it as time passes so it’s more modern and professional looking!"}]...
|
Title: My Own Website by @Vasilakos | Stardance
D Title: My Own Website by @Vasilakos | Stardance
Devlogs:
Close to finishing my website, it’s a very simple static website right now but still it’s fun I am gonna update it as time passes so it’s more modern and professional looking!
Ships:
Just deployed my own website and I got to say it was pretty fun! Had a little bit of a problem with the deployment because I am not awfully familiar with git and I messed up the repo a bit at the start but figured it out in the end. It’s definitely gonna get updated as time goes and not be just a static page but for now I think it’s a fun website with some APIs in the bottom as well so visit it and see some cute kitties or learn about the weather!...
|
1793094581.1185358
|
1793180981.1185358
|
|
2718
|
Underwater Submarine Adventure by @NC | Stardance
|
NC
|
1
|
81.0
|
1715
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T09:00:20Z", "hours": 81.0, "multiplier": 17.91, "payout": 1715, "blessing": "neutral", "text": "I built Abysmal Echo. This is by far my most comprehensive project I have EVER made using the Godot Engine. I put a lot of effort into it and I hope you enjoy playing it This game is about recovering some nuclear warheads at the bottom of the sea while navigating fields of sea mines, cavernous tunnels and mutated sharks. Good Luck! P.S. Please read the controls on how to play the game. PLEEASE", "repo": "https://github.com/NCGameMaking/STEM-Video-Game-2026", "demo": "https://github.com/NCGameMaking/STEM-Video-Game-2026/releases/tag/V1.1"}]...
|
[{"post_id": 62767, "ts": "202 [{"post_id": 62767, "ts": "2026-09-06T08:57:09Z", "hours": 0.3867, "text": "Devlog 15: Exported Game & Ready for Submission! This is the last devlog until submissions, I was just getting the export templates and etc. I also finished with the README No actual progress…"}, {"post_id": 62603, "ts": "2026-09-06T02:18:32Z", "hours": 7.5394, "text": "Devlog 14: Received 2nd Round of Feedback and Implemented it. What have I accomplished: I went to my coding club and asked fellow Godot/Unity enthusiasts to test my game! Here’s basically what they said… They couldn’t find the tunnel entrances The Radio Messages don’t stand out enough Make the Flashlight brighter (again…) Add some sort of Sonar Scan circle thingy on the periscope - make it more useful rather than a wall of text Make the main menu brighter, can’t see the submarine Do not exactly know the initial objective of the game/where to go Make Arrows or hints to show player what to do in Finale sequence When the player escapes through the tunnel, add some decorations make it less boring. Additionally, I got a 2nd round of feedback from my Dad… He said the UI is much better, less cluttered and the flashlight is better as well as the other features, but he has some more feedback. He wants a minimap, so he can see where to go because he is lost and does not understand the compass heading. He wants a clearer font for the submarine UI as the current one is too blurry for him He wants me to put radioactive trifoils on the missiles So onto how I implemented their feedback I made some vines on blender, I did it fairly quicky i didn’t bother putting it on Lapse. So, I implemented the vines with a glowing green shader, so it is easily visible to the player. I placed them in paths leading to the entrance and tunnels, so player knows where to go. As for the radio messages I added a yellow flashing border around them to attract player attention. As for the flashlight, I just cranked the energy up to like 50+, did the job pretty well. I added a sonar scan because the testers believe that the beacon signal is too generic and not really helpful, thus making the periscope itself not useful. In order to improve this, I added a sonar scan, the circular map that actual submarines use. After looking at some tutorials, checking documentation and reddit posts, I realized that I just have to somehow convert my prior knowledge of polar coordinates and convert them into game code. After a while, I got the red dots (sea mines) to appear on the map when the player presses the scan button (x). Additionally, using groups, I got the warheads to come up as yellow dots on the sonar map. The main menu was an easy fix, just had to increase the energy of the light. As for the initial objective, I made an animation where the camera shows the player where the warheads are located and the journey they have to take, it like shows the whole path so the player has some knowledge of knowing if they are going on the right path. Also just added another hint telling the player of the direction (80-90° East.) As for the Finale sequence, I just added a spinning arrow that points to the warhead signalling that the player has to ram it with their hull. Additionally, there are radio messages telling the player what to do. When the player escapes, I added a tall, enclosed tunnel with hanging vines for the player to escape through. Makes the game design much more intentional and doesn’t confuse players into thinking they just broke through the map. For the minimap, I used a SubViewportContainer with a camera being referenced to the actual SubViewport Node. The camera is in Orthogonal mode, and just facing down on the player 30metres away. The input is being displayed on the SubViewport. For the submarine font, I changed some of the colors so the font stands out more and becomes more CRISP and changed the font so the player can easily understand what’s on the dashboard. Another quick and easy fix was the radioactive logos. Just got a MeshInstance3D and slapped the texture on there and stuck it on the side of the warhead. This is probably the last devlog until submission."}, {"post_id": 59511, "ts": "2026-09-01T11:47:53Z", "hours": 2.0072, "text": "Devlog 13 : Recieved Tester Feedback and implemented it What have I accomplished: I have asked a tester (Dad) to test my game. He started playing the game and gave me a sheet of feedback. Upon deciphering the handwriting I made a list of main list of what needs to be improved. Here is the list Give more screen-space for player to see ocean Do something about the radio messages being sent as they are very annoying when the player is exploring and they just appear and block the player’s screen Also the radio messages go away too quickly The flashlight isn’t crisp. It like bleeds into the ocean and doesn’t look nice The ocean environment is too dark, make it brigher What/How did I implement the feedback? As a result, I merged the top panel into the bottom panel while replacing the top section with the radio messages. This time the player has much more screen-space to play in while the radio messages just briefly appear on the screen, not blocking the player’s view. As for the flashlight, I used a MeshInstance3D equipped with an emission Material so the flashlight looks much “crisper”. I also increased the show time for the radio messages from 3 seconds to 5 seconds so player will realise that a message has popped and has sufficient time to read it. As for the ocean environment, I just boosted the emission of the volumetric fog while make the background color slightly lighter rather than leaving it pitch black (Made it like a really dark navy blue). Bonus bug patch! While testing the game, I also found a bug with the Restart button in the pause screen. The bug was that when the player pressed restart, the scene tree was still paused, so the intro animation wouldn’t start until you unpaused it. So in order to fix this I just added another single line of code. func _on_restart_button_pressed(): get_tree().paused = false#This was the line of code needed get_tree().reload_current_scene() That is it so far, definitely getting more people to test it (Family, friends etc…) and implementing more feedback!"}, {"post_id": 56260, "ts": "2026-08-27T23:09:35Z", "hours": 1.4308, "text": "Devlog 12 : Finished Death screen as well as added help features What have I accomplished: Added a death screen Added a ‘help’ feature and hints in the submarine Made a death screen The death screen was fairly easy, I just repurposed the pause screen to become the death screen when the player dies. Added a help feature Put a help option on the home screen. If you hover your mouse over the help button, the hints will appear on the side, similar to FNAF. Additionally, I added a scrolling bar that goes from right to left on the submarine UI. I didn’t want to add another button to the pause menu because it would look too cluttered. This new addition looks pretty neat. What’s Next? Making the README document Getting people to test my game Implement some of their feedback"}, {"post_id": 54076, "ts": "2026-08-24T20:58:15Z", "hours": 10.3475, "text": "Devlog 11: Working on UI as well as Prologue/Epilogue animations What have I accomplished: Made a main menu Made a mission de/briefing scene Made a pause menu Finished with the Prologue/Epilogue animations Added a bonus cutscene during the retrieval of the warheads Made a main menu I went for an extreme horror vibe, dark environment, low light, eerie background noises and single sonar ping. I also animated the camera so that it ‘floats’ around as well as a nearly invisible figure moving in the background to give that eerie feeling that you are not safe and something is watching you. This was done in response to my research on what makes a horror game so scary from the menu only. Mission de/briefing scene Using the visible characters setting in the Label node, I made this niche typewriter/coding briefing scene. With a single ‘ACCEPT’ button. Upon clicking it, player gets sent to the play scene. Pause screen I made a fairly simple pause screen. Nothing fancy, but vital at the same time. Press ‘Escape’, game paused. I am considering reusing the pause menu, change the text with code to use it as a death screen The intro/outro animations The animations are just the player being transported on the tugboat. The same one I modelled in the previous devlog. Intro takes the player to the site. Outro has 5/6 warheads on it and taking the player away from the site. This is to add cohesion so the player doesn’t get confused between scene transitions. However, I realised during the animations, the sky in the environment goes MAD. It starts rapidly flashing between white and blue, similar to lightning, but I am not a fan of it, must remove. BONUS scene! I decided to spice things up by adding a little bit of drama at the end. The player will collect the 6th warhead, uh-oh it’s jammed AND at the SAME time, the ceiling’s going to collapse! The player ram their hull with the warhead to trigger the ignition. The warhead will launch itself at the wall creating a huge hole for the player to escape through, they rise up to the surface and the epilogue cutscene plays. What’s Next? Making a death screen (Should be easy) Making a tutorial on the submarine functionality. Doing the README document"}, {"post_id": 51897, "ts": "2026-08-21T20:01:17Z", "hours": 10.3164, "text": "Devlog 10: Finished map layout and small tweaks to submarine started working on story and UI What have I accomplished: Finished making the environment Coded the sharks to move around the map Added clues for the player Started the story, the lore, the introduction Finished the environment: Making the environment definitely took the longest but it wasn’t the hardest task, just a lot of copy and paste of walls. However finding any gaps or holes in which the player can creep down into was annoying. After a few hours of looking around, banging into walls, I did find and patch up a few but am not sure if that is all of them. Hopefully, to discourage/guide the player away from the corners and edges, I put huge sharks guarding the walls as well as rows of sea mines to tell the player to look somewhere else, not here. Also, I added a couple of underwater ruins, like a wrecked ship and a submarine. The actual warhead retrieval process is working now, when the submarine touches it, a parachute will come up and lift the warhead to the surface, where hopefully the boat will collect. Coding the sharks! Coding the sharks was fairly easy (Literally 2 lines of code) as I used a Path3D and a PathFollow3D node to just map out the path in the inspector. func _process(delta): progress += 20*delta That is all the code, the progress, is how far the shark is along the track and the integer determines how fast the shark moves. I could’ve used an AnimationTree node but with my prior experience to that, just thinking of the whole coding part, setting the animations up, the chase player code made me cringe a lot, also there’s not enough time. Giving the player clues So in addition to the current features of the MMS scanner, it can also track the ‘SOS beacon’ of the abandoned target submarine by taking its position and comparing it to the player’s and using ranges of signal strength with distance to see how ‘strong’ the signal is. Additionally, it does the exact same for angle, so the scanner can tell player which direction the submarine was found. Started the introduction The plan in mind is like some cool visual graphics telling you, your objective, a brief map layout telling you of hazards, some lore, like ‘Secret weapon’s mission gone wrong, must retrieve warheads before enemies do so’ the submarine is on a tugboat sailing on the sea, the crane will pick it up and dump it in the water Full lapse of tugboat here : https://lapse.hackclub.com/timelapse/lsYzC1wA-xLH What’s next? Adding UI to the game, pause menu, main menu, death screen Finishing lore of game, animations, mission objective, win scene."}, {"post_id": 47824, "ts": "2026-08-16T01:16:04Z", "hours": 9.85, "text": "Devlog 9: Major Change of Plans and Coded Assets What have I accomplished: Started Making the environment Made a scanner for the periscope to detect objects Coded the sea mine Added explosion Particles The part that took the longest was the environment, taking in the lengths, finding hidden collision gaps, setting each zone up and placing obstacles. The sea mine code was fairly simple, I also added some explosion particles when it exploded. That was really fun. Additionally, I made a periscope scanner that can scan the ocean for any relics/mines/sharks in sight. The most aesthetic addition to the submarine and it gives the periscope a proper purpose rather than just a fun extra. I was heavily inspired by Call of Duty with their MMS (Milimeter scanner). This scanner can see through walls and highlight enemies! Major change in plans : Before we would have relics being the prized possession to retrieve. However, after realising how vast the map was and the extreme likelihood of players not being able to find all relics was too high to ignore. So instead of the player collecting relics, I have decided that they will go on an extremely difficult mission to retrieve some nuclear warheads/missiles on a U.S. nuclear submarine. The abandoned submarine will lie at the very bottom of 300m. The player must dodge sea mines, explore the other shipwrecks/submarines all before some rivals get their hands on it. Something like that for the briefing screen The player will deploy buoys/parachutes on the missiles, and they will float to the surface. A boat will come and collect them. Mission Complete! What’s Next? I will be using a similar layout but with a different set of decorations, more submarines/shipwrecks, signs of naval warfare, mines and the warhead finally."}, {"post_id": 45414, "ts": "2026-08-11T20:57:09Z", "hours": 10.4542, "text": "Devlog 8: Imported Environmental Assets and Hazards What I have accomplished: Using Blender 5.0 I hand modelled all the 3D assets. RUINS For some ruins where the relic might be, I have added some crumbled pillars, ruined archways, cracked stone slabs and an altar for the relic to rest on. I did some basic extruding to get the original shape down, then just pulled and twitched with the vertexes to give it the run down effect Sea mines! Additionally, the sea mine was fairly easy to make, a sphere, cylinders and a chain. Making the chain to the base was by far was the most satisfying part of the build as you just copy, paste, rotate and within seconds you get a neat, professional looking chain. Relics The relics were pretty easy, a glowing orb with unique patterns drawn across it and a shield. The plan is to just change the colour of the hues so the player has a common sense of what an orb looks like. Colours can be blue, violet, pink, red, yellow, gold, orange, and vice versa for the shield. Underwater Predator Now, the main event, the shark. I spent 6 hours and 32 minutes, modelling, texturing, rigging and animating this thing. This is by far the most complex project I have ever done (maybe even the most successful in terms of rigging!) Below is the link of all my lapses for the shark only https://lapse.hackclub.com/user/@NCGAMEMAKING I’ve set the basic environment up, just a big square with rocks as barriers. What’s next? Using all of these assets to make the environment. I have to layout the relics, ruins, sea mines, sharks. I have to code out the sea mine so it explodes with explosion graphics (not that hard) Code the shark so it like swims in its patrol area and so if the player’s flashlight is shining on the shark it will start chasing the player, hurt the player and move on with its basic patrol."}, {"post_id": 39279, "ts": "2026-08-02T04:45:38Z", "hours": 8.3853, "text": "Devlog 7: Finished Adding Submarine Polish and started working on building an environment Submarine Controls: Fixed and Polished During further testing of the submarine on new features, I felt like steering the submarine felt awkward as it was locked on a flat horizontal plane. Pitching up and down required extra key binds. So I decided to change/improve the physics and input methods of the submarine so driving it feels much more smoother. From Third person Camera to Periscope: I decided to change my third person camera into a periscope to give my game a more ‘claustrophobic’ feel hoping to get the element to show how small you are in such a big ocean. Well, the periscope has a open and shut animation and well as audio polish. The player can see through a small circle and see their surroundings. (Also for visual polish when the submarine is at low health the glass will even appear cracked!) Full Axis mouse control: Moving the mouse left and right handles the Yaw (left and right) but now I made it so that it can handle the pitch (up and down) so the player can point the sub’s nose up when ascending. Keyboard Axis controls: The player does have the direct keys for vertical changes like diving and climbing still giving players all the options when using the submarine. Full Audio Response: I have added dynamics pitch scaling so the background engine hum will go change when in different states. Quiet for idle. Loud for moving. I added hiss and bubble effects just like how real submarine use their ballasts to rise and fall, hull breach alarms, collision thuds, warning sounds as well deep pressure creaking of the hull. Death Animation and Warning Collision: When the player reaches 0(Zero) health, the sub will like spin out of control and ‘crash land’ in the water. The screens will show errors and soon fade away. The scene then reloads. Also using a Shapecast3D , I managed to make a collisions system. The bottom left text will say ‘COLLISION : FINE’ if there are no objects in the enlarged ShapeCast but if there are objects in that shape the text will go red and say ‘COLLISION : WARNING’ Responsive Steering Controls: I also added a script to the steering wheel so it would turn as the player is moving the mouse to give it more responsiveness. Much better than a static wheel in the front. Marine Particles: Additionally, to give that immersive feel I made simple marine particles. These are like your pieces of plankton or dust in the ocean. They just float around the screen and even rush by appropriate to the sub’s velocity. Upgrading the Ocean: Boujie Water Shader After the player features and movement was locked in. It was time for environmental visuals. I realised that my basic volumetric fog wasn’t quite cutting it for an immersive ocean. After some research, I stumbled upon the fantastic Boujie Water Shader created by Cory Petkovsek (GodotNite / Boujie) I love this addon. It really brings the ocean to life using Gerstner waves this is really good for optimization in the future! What’s Next? With Submarine movement, UI and audio out of the way, the focus is now entirely towards Level Design and Gameplay loops. Here is my todo list: Mapping out ocean zones: I will have 3 zones and each zone has 4 artifacts. Each zone will get darker, and more scarier. Relic Retrieval: Now that I am changing my placeholder of ‘RINGS : 0/12’ to Relics I am thinking of making 12 ancient, artifacts scattered across the map waiting for the player to collect them. Potential Underwater Hazards: By placing environmental obstacles, tight squeeze caverns, minefields or even patrolling enemies this will make the gameplay much more exciting! See you in the next devlog where we explore level design!"}, {"post_id": 31071, "ts": "2026-07-19T05:19:25Z", "hours": 6.3125, "text": "Devlog 6 Finished Making the Interactive UI Took a little while but in the end, totally worth it! What have I accomplished: Real-Time Telemetry Arrays: Dynamic Navigation Tools: Integrated a fully functional Compass Heading indicator, alongside precise Speed (m/s) and Depth trackers linked directly to the sub’s 3D transform and linear physics state. Not to mention there is also a compass, a progress tracker and a warning system Vital Resource Gauges: The console now cleanly maps out real-time Stamina and Exhaustion meters to handle high-speed maneuvering and sprint cooldowns smoothly. Smart Health & “Frame-Before” Velocity Systems: Implemented a custom predictive physics calculation that catches the sub’s exact velocity right before a collision occurs. This completely bypasses physics-engine quirks (like velocity instantly dropping to zero on impact frames), ensuring blunt collisions register perfectly every time. Dynamic Hull Integrity Status: The hull damage bar dynamically recalculates color states and screen readouts: Above 66%: Status reads STABLE with green theme aesthetics.25% to 66%: Automatically shifts to a warning state (DAMAGED) with an orange alert profile. Emergency Visual Alert System (Dynamic Warning Lights): When structural health drops below the 25% Critical Zone, a time-accumulating sine wave engine takes over the console mesh arrays. This triggers an aggressive, high-speed visual flashing sequence across the interior status plates to warn the player of if its gonna die. Terminal Polish & Hacking Decorations: To capture that retro, high-tech submarine atmosphere, the dashboard now features a multi-layered background Parallax Hacking Screen that slides continuously behind the telemetry values. Combined with sudden flickering screen effects, the terminal reacts heavily to impact forces, making the player feel every heavy rattle when diving too fast into rocky corridors. What’s next? I want to make my 3rd person camera a periscope with the cute little spyglass on top of the submarine and allow to have a 360 degree of motion Adding a death screen and animation, not so sure of seeing myself still being able to run Also doing something about this Collision Warning alert in the bottom left corner. Definitely add some visual juice (screen shake, glass crack) but that’s low priority Also some audio! See you guys later!"}, {"post_id": 27098, "ts": "2026-07-12T11:19:19Z", "hours": 2.7919, "text": "Devlog 5 : Actual progress coming in about UI! By carefully placing each and every word, section, icon and evaluating every single number… the top screen of the submarine is officially done! What’s on the screen right now: Hull Integrity: A functioning system variable. Custom Healthbar: A sick-looking visual health layout. Rings / Checkpoint tracking: Keeps tabs on your current objectives. Status Alarms: Two red dots on the wings (which will flash for critical signs or dangers once I code the triggers). I got so excited that I even found a cool hacking matrix background and threw a Parallax2D on it so it looks like the sub is constantly processing code in the background On top of that, I added a custom shader flicker effect so it feels like a real, raw electronic monitor. As you can see in the screenshot, I just slapped a ColorRect2D added some code (with the help of AI as shader code is way beyond my coding capabilities. The big game-changer: I just switched the viewport texture configuration from the default Albedo slot over to the Emission channel so the cockpit doesn’t look so dull. Because the display now literally emits its own light into the dark, I was able to delete the temporary OmniLight3D from the scene entirely. The cockpit lighting looks way more natural now. Next Up: Now that the formula is down, I’m moving on to complete the other two viewports: the primary speedometer display right on the steering wheel, and the auxiliary bottom viewport sitting behind it."}, {"post_id": 14954, "ts": "2026-06-24T09:13:03Z", "hours": 3.8142, "text": "Fixing the Submarine Screen Layout Spent some time wrestling with Godot’s SubViewport system today to get the submarine’s overhead display screen actually working. What went down: The Layout Battle: Setting up the UI scene with clean container nodes ( CenterContainer and VBoxContainer ) so the labels stay organized and readable. The UV Stretch Crisis: For a while, the text was completely giant and blown out across the entire 3D mesh. Turns out the mesh’s UV unwrapping stretched the texture out like crazy. After a lot of tweaking, setting a custom UV1 scale of -2.0 on the material ended up being the magic number to force everything to shrink down and fit right onto the screen arch. Viewport Quirks: Dealt with some classic Godot issues where the texture kept disappearing or turning bright purple when making edits, but finally got the paths reconnected and running. Next Steps: I have to now fix and test these screens and to make sure they display the text flawlessly. Next up is prettying it up to make the text layouts look nice and crisp and then getting the rest of the cockpit dashboard screens mapped out."}, {"post_id": 13059, "ts": "2026-06-21T11:14:31Z", "hours": 1.9336, "text": "Submarine Devlog Update: Polishing the Pilot Experience! What’s New? I have decided to shelf the torpedoes and missiles for a bit. The absolute priority right now is making the submarine movement feel completely seamless before adding combat mechanics! Here is what just went live: ** Dynamic Camera Sway:** Added procedural camera sway that reacts directly to the submarine’s velocity and turn angles, making the underwater physics feel incredibly weighty! ** Dual-Perspective Toggle:** Implemented a first-person cockpit view. Players can now seamlessly toggle between 3rd-person and 1st-person perspectives by tapping the V key! Current Roadblocks & Design Hurdles 1. Overwhelming Cockpit Screens I am starting to build out the internal monitors and pilot UI. However, in my opinion, the current setup of these screens covers the view a bit too much. The player can’t really see the outside environment! 2. Camera Clipping Through Walls Also, something I am discovering is that despite using a standard SpringArm3D node for my third-person view, the camera is still clipping into the walls. I have been banging my head for so long trying to stop it from clipping! What’s Next? Over the next few days, my primary focus will be making the cockpit interior more lively: ** Adding Submarine UI:** Actively building and designing the interface systems for the dashboard. Filling Empty Screens: Populating those blank monitors with live text, data feeds, and telemetry. Some questions I have been asking my friends regarding my issues. How should I handle the screen layout? What are your favorite tricks for keeping a cockpit UI highly functional without completely blocking the player’s view of the outside world? How can I fix the camera clipping? If you have experience with SpringArm3D or collision detection in this engine, what am I missing to keep the camera outside the cave walls? How can I make the screens look properly sci-fi? What kind of design elements, color palettes, or visual details should I add to give the terminal text that high-tech, futuristic submarine vibe?"}, {"post_id": 12471, "ts": "2026-06-20T11:15:19Z", "hours": 1.0014, "text": "Devlog 2 : Added some visual juice and added full direction movement logic What have I accomplished? Finished submarine movement as well as bubble particles Realistic Bubbles : I created a sphere and slapped on a realistic transparent bubble shader that I had spent hours looking over the internet on how to code in shader text and finally got something working. Dynamic Trails : I duplicated a few of the GPU particles and put them on all sides of the submarine. Full Directional Logic : Then with a few lines of code, I got them to dynamically emit bubbles wherever I go. It works for the strafing side-to-side as well as climbing and diving. Overall, a good start to the movement of the submarine. What’s next? I will start working on UI for the submarine, maybe add a few monitors inside it for the player to see"}, {"post_id": 12321, "ts": "2026-06-20T03:16:57Z", "hours": 4.3461, "text": "Making Movement for the Submarine"}]...
|
Title: Underwater Submarine Adventure by @NC | Sta Title: Underwater Submarine Adventure by @NC | Stardance
Devlogs:
Making Movement for the Submarine
Devlog 2 : Added some visual juice and added full direction movement logic What have I accomplished? Finished submarine movement as well as bubble particles Realistic Bubbles : I created a sphere and slapped on a realistic transparent bubble shader that I had spent hours looking over the internet on how to code in shader text and finally got something working. Dynamic Trails : I duplicated a few of the GPU particles and put them on all sides of the submarine. Full Directional Logic : Then with a few lines of code, I got them to dynamically emit bubbles wherever I go. It works for the strafing side-to-side as well as climbing and diving. Overall, a good start to the movement of the submarine. What’s next? I will start working on UI for the submarine, maybe add a few monitors inside it for the player to see
Submarine Devlog Update: Polishing the Pilot Experience! What’s New? I have decided to shelf the torpedoes and missiles for a bit. The absolute priority right now is making the submarine movement feel completely seamless before adding combat mechanics! Here is what just went live: ** Dynamic Camera Sway:** Added procedural camera sway that reacts directly to the submarine’s velocity and turn angles, making the underwater physics feel incredibly weighty! ** Dual-Perspective Toggle:** Implemented a first-person cockpit view. Players can now seamlessly toggle between 3rd-person and 1st-person perspectives by tapping the V key! Current Roadblocks & Design Hurdles 1. Overwhelming Cockpit Screens I am starting to build out the internal monitors and pilot UI. However, in my opinion, the current setup of these screens covers the view a bit too much. The player can’t really see the outside environment! 2. Camera Clipping Through Walls Also, something I am discovering is that despite using a standard SpringArm3D node for my third-person view, the camera is still clipping into the walls. I have been banging my head for so long trying to stop it from clipping! What’s Next? Over the next few days, my primary focus will be making the cockpit interior more lively: ** Adding Submarine UI:** Actively building and designing the interface systems for the dashboard. Filling Empty Screens: Populating those blank monitors with live text, data feeds, and telemetry. Some questions I have been asking my friends regarding my issues. How should I handle the screen layout? What are your favorite tricks for keeping a cockpit UI highly functional without completely blocking the player’s view of the outside world? How can I fix the camera clipping? If you have experience with SpringArm3D or collision detection in this engine, what am I missing to keep the camera outside the cave walls? How can I make the screens look properly sci-fi? What kind of design elements, color palettes, or visual details should I add to give the terminal text that high-tech, futuristic submarine vibe?
Fixing the Submarine Screen Layout Spent some time wrestling with Godot’s SubViewport system today to get the submarine’s overhead display screen actually working. What went down: The Layout Battle: Setting up the UI scene with clean container nodes ( CenterContainer and VBoxContainer ) so the labels stay organized and readable. The UV Stretch Crisis: For a while, the text was completely giant and blown out across the entire 3D mesh. Turns out the mesh’s UV unwrapping stretched the texture out like crazy. After a lot of tweaking, setting a custom UV1 scale of -2.0 on the material ended up being the magic number to force everything to shrink down and fit right onto the screen arch. Viewport Quirks: Dealt with some classic Godot issues where the texture kept disappearing or turning bright purple when making edits, but finally got the paths reconnected and running. Next Steps: I have to now fix and test these screens and to make sure they display the text flawlessly. Next up is prettying it up to make the text layouts look nice and crisp and then getting the rest of the cockpit dashboard screens mapped out.
Devlog 5 : Actual progress coming in about UI! By carefully placing each and every word, section, icon and evaluating every single number… the top screen of the submarine is officially done! What’s on the screen right now: Hull Integrity: A functioning system variable. Custom Healthbar: A sick-looking visual health layout. Rings / Checkpoint tracking: Keeps tabs on your current objectives. Status Alarms: Two red dots on the wings (which will flash for critical signs or dangers once I code the triggers). I got so excited that I even found a cool hacking matrix background and threw a Parallax2D on it so it looks like the sub is constantly processing code in the background On top of that, I added a custom shader flicker effect so it feels like a real, raw electronic monitor. As you can see in the screenshot, I just slapped a ColorRect2D added some code (with the help of AI as shader code is way beyond my coding capabilities. The big game-changer: I just switched the viewport texture configuration from the default Albedo slot over to the Emission channel so the cockpit doesn’t look so dull. Because the display now literally emits its own light into the dark, I was able to delete the temporary OmniLight3D from the scene entirely. The cockpit lighting looks way more natural now. Next Up: Now that the formula is down, I’m moving on to complete the other two viewports: the primary speedometer display right on the steering wheel, and the auxiliary bottom viewport sitting behind it.
Devlog 6 Finished Making the Interactive UI Took a little while but in the end, totally worth it! What have I accomplished: Real-Time Telemetry Arrays: Dynamic Navigation Tools: Integrated a fully functional Compass Heading indicator, alongside precise Speed (m/s) and Depth trackers linked directly to the sub’s 3D transform and linear physics state. Not to mention there is also a compass, a progress tracker and a warning system Vital Resource Gauges: The console now cleanly maps out real-time Stamina and Exhaustion meters to handle high-speed maneuvering and sprint cooldowns smoothly. Smart Health & “Frame-Before” Velocity Systems: Implemented a custom predictive physics calculation that catches the sub’s exact velocity right before a collision occurs. This completely bypasses physics-engine quirks (like velocity instantly dropping to zero on impact frames), ensuring blunt collisions register perfectly every time. Dynamic Hull Integrity Status: The hull damage bar dynamically recalculates color states and screen readouts: Above 66%: Status reads STABLE with green theme aesthetics.25% to 66%: Automatically shifts to a warning state (DAMAGED) with an orange alert profile. Emergency Visual Alert System (Dynamic Warning Lights): When structural health drops below the 25% Critical Zone, a time-accumulating sine wave engine takes over the console mesh arrays. This triggers an aggressive, high-speed visual flashing sequence across the interior status plates to warn the player of if its gonna die. Terminal Polish & Hacking Decorations: To capture that retro, high-tech submarine atmosphere, the dashboard now features a multi-layered background Parallax Hacking Screen that slides continuously behind the telemetry values. Combined with sudden flickering screen effects, the terminal reacts heavily to impact forces, making the player feel every heavy rattle when diving too fast into rocky corridors. What’s next? I want to make my 3rd person camera a periscope with the cute little spyglass on top of the submarine and allow to have a 360 degree of motion Adding a death screen and animation, not so sure of seeing myself still being able to run Also doing something about this Collision Warning alert in the bottom left corner. Definitely add some visual juice (screen shake, glass crack) but that’s low priority Also some audio! See you guys later!
Devlog 7: Finished Adding Submarine Polish and started working on building an environment Submarine Controls: Fixed and Polished During further testing of the submarine on new features, I felt like steering the submarine felt awkward as it was locked on a flat horizontal plane. Pitching up and down required extra key binds. So I decided to change/improve the physics and input methods of the submarine so driving it feels much more smoother. From Third person Camera to Periscope: I decided to change my third person camera into a periscope to give my game a more ‘claustrophobic’ feel hoping to get the element to show how small you are in such a big ocean. Well, the periscope has a open and shut animation and well as audio polish. The player can see through a small circle and see their surroundings. (Also for visual polish when the submarine is at low health the glass will even appear cracked!) Full Axis mouse control: Moving the mouse left and right handles the Yaw (left and right) but now I made it so that it can handle the pitch (up and down) so the player can point the sub’s nose up when ascending. Keyboard Axis controls: The player does have the direct keys for vertical changes like diving and climbing still giving players all the options when using the submarine. Full Audio Response: I have added dynamics pitch scaling so the background engine hum will go change when in different states. Quiet for idle. Loud for moving. I added hiss and bubble effects just like how real submarine use their ballasts to rise and fall, hull breach alarms, collision thuds, warning sounds as well deep pressure creaking of the hull. Death Animation and Warning Collision: When the player reaches 0(Zero) health, the sub will like spin out of control and ‘crash land’ in the water. The screens will show errors and soon fade away. The scene then reloads. Also using a Shapecast3D , I managed to make a collisions system. The bottom left text will say ‘COLLISION : FINE’ if there are no objects in the enlarged ShapeCast but if there are objects in that shape the text will go red and say ‘COLLISION : WARNING’ Responsive Steering Controls: I also added a script to the steering wheel so it would turn as the player is moving the mouse to give it more responsiveness. Much better than a static wheel in the front. Marine Particles: Additionally, to give that immersive feel I made simple marine particles. These are like your pieces of plankton or dust in the ocean. They just float around the screen and even rush by appropriate to the sub’s velocity. Upgrading the Ocean: Boujie Water Shader After the player features and movement was locked in. It was time for environmental visuals. I realised that my basic volumetric fog wasn’t quite cutting it for an immersive ocean. After some research, I stumbled upon the fantastic Boujie Water Shader created by Cory Petkovsek (GodotNite / Boujie) I love this addon. It really brings the ocean to life using Gerstner waves this is really good for optimization in the future! What’s Next? With Submarine movement, UI and audio out of the way, the focus is now entirely towards Level Design and Gameplay loops. Here is my todo list: Mapping out ocean zones: I will have 3 zones and each zone has 4 artifacts. Each zone will get darker, and more scarier. Relic Retrieval: Now that I am changing my placeholder of ‘RINGS : 0/12’ to Relics I am thinking of making 12 ancient, artifacts scattered across the map waiting for the player to collect them. Potential Underwater Hazards: By placing environmental obstacles, tight squeeze caverns, minefields or even patrolling enemies this will make the gameplay much more exciting! See you in the next devlog where we explore level design!
Devlog 8: Imported Environmental Assets and Hazards What I have accomplished: Using Blender 5.0 I hand modelled all the 3D assets. RUINS For some ruins where the relic might be, I have added some crumbled pillars, ruined archways, cracked stone slabs and an altar for the relic to rest on. I did some basic extruding to get the original shape down, then just pulled and twitched with the vertexes to give it the run down effect Sea mines! Additionally, the sea mine was fairly easy to make, a sphere, cylinders and a chain. Making the chain to the base was by far was the most satisfying part of the build as you just copy, paste, rotate and within seconds you get a neat, professional looking chain. Relics The relics were pretty easy, a glowing orb with unique patterns drawn across it and a shield. The plan is to just change the colour of the hues so the player has a common sense of what an orb looks like. Colours can be blue, violet, pink, red, yellow, gold, orange, and vice versa for the shield. Underwater Predator Now, the main event, the shark. I spent 6 hours and 32 minutes, modelling, texturing, rigging and animating this thing. This is by far the most complex project I have ever done (maybe even the most successful in terms of rigging!) Below is the link of all my lapses for the shark only https://lapse.hackclub.com/user/@NCGAMEMAKING I’ve set the basic environment up, just a big square with rocks as barriers. What’s next? Using all of these assets to make the environment. I have to layout the relics, ruins, sea mines, sharks. I have to code out the sea mine so it explodes with explosion graphics (not that hard) Code the shark so it like swims in its patrol area and so if the player’s flashlight is shining on the shark it will start chasing the player, hurt the player and move on with its basic patrol.
Devlog 9: Major Change of Plans and Coded Assets What have I accomplished: Started Making the environment Made a scanner for the periscope to detect objects Coded the sea mine Added explosion Particles The part that took the longest was the environment, taking in the lengths, finding hidden collision gaps, setting each zone up and placing obstacles. The sea mine code was fairly simple, I also added some explosion particles when it exploded. That was really fun. Additionally, I made a periscope scanner that can scan the ocean for any relics/mines/sharks in sight. The most aesthetic addition to the submarine and it gives the periscope a proper purpose rather than just a fun extra. I was heavily inspired by Call of Duty with their MMS (Milimeter scanner). This scanner can see through walls and highlight enemies! Major change in plans : Before we would have relics being the prized possession to retrieve. However, after realising how vast the map was and the extreme likelihood of players not being able to find all relics was too high to ignore. So instead of the player collecting relics, I have decided that they will go on an extremely difficult mission to retrieve some nuclear warheads/missiles on a U.S. nuclear submarine. The abandoned submarine will lie at the very bottom of 300m. The player must dodge sea mines, explore the other shipwrecks/submarines all before some rivals get their hands on it. Something like that for the briefing screen The player will deploy buoys/parachutes on the missiles, and they will float to the surface. A boat will come and collect them. Mission Complete! What’s Next? I will be using a similar layout but with a different set of decorations, more submarines/shipwrecks, signs of naval warfare, mines and the warhead finally.
Devlog 10: Finished map layout and small tweaks to submarine started working on story and UI What have I accomplished: Finished making the environment Coded the sharks to move around the map Added clues for the player Started the story, the lore, the introduction Finished the environment: Making the environment definitely took the longest but it wasn’t the hardest task, just a lot of copy and paste of walls. However finding any gaps or holes in which the player can creep down into was annoying. After a few hours of looking around, banging into walls, I did find and patch up a few but am not sure if that is all of them. Hopefully, to discourage/guide the player away from the corners and edges, I put huge sharks guarding the walls as well as rows of sea mines to tell the player to look somewhere else, not here. Also, I added a couple of underwater ruins, like a wrecked ship and a submarine. The actual warhead retrieval process is working now, when the submarine touches it, a parachute will come up and lift the warhead to the surface, where hopefully the boat will collect. Coding the sharks! Coding the sharks was fairly easy (Literally 2 lines of code) as I used a Path3D and a PathFollow3D node to just map out the path in the inspector. func _process(delta): progress += 20*delta That is all the code, the progress, is how far the shark is along the track and the integer determines how fast the shark moves. I could’ve used an AnimationTree node but with my prior experience to that, just thinking of the whole coding part, setting the animations up, the chase player code made me cringe a lot, also there’s not enough time. Giving the player clues So in addition to the current features of the MMS scanner, it can also track the ‘SOS beacon’ of the abandoned target submarine by taking its position and comparing it to the player’s and using ranges of signal strength with distance to see how ‘strong’ the signal is. Additionally, it does the exact same for angle, so the scanner can tell player which direction the submarine was found. Started the introduction The plan in mind is like some cool visual graphics telling you, your objective, a brief map layout telling you of hazards, some lore, like ‘Secret weapon’s mission gone wrong, must retrieve warheads before enemies do so’ the submarine is on a tugboat sailing on the sea, the crane will pick it up and dump it in the water Full lapse of tugboat here : https://lapse.hackclub.com/timelapse/lsYzC1wA-xLH What’s next? Adding UI to the game, pause menu, main menu, death screen Finishing lore of game, animations, mission objective, win scene.
Devlog 11: Working on UI as well as Prologue/Epilogue animations What have I accomplished: Made a main menu Made a mission de/briefing scene Made a pause menu Finished with the Prologue/Epilogue animations Added a bonus cutscene during the retrieval of the warheads Made a main menu I went for an extreme horror vibe, dark environment, low light, eerie background noises and single sonar ping. I also animated the camera so that it ‘floats’ around as well as a nearly invisible figure moving in the background to give that eerie feeling that you are not safe and something is watching you. This was done in response to my research on what makes a horror game so scary from the menu only. Mission de/briefing scene Using the visible characters setting in the Label node, I made this niche typewriter/coding briefing scene. With a single ‘ACCEPT’ button. Upon clicking it, player gets sent to the play scene. Pause screen I made a fairly simple pause screen. Nothing fancy, but vital at the same time. Press ‘Escape’, game paused. I am considering reusing the pause menu, change the text with code to use it as a death screen The intro/outro animations The animations are just the player being transported on the tugboat. The same one I modelled in the previous devlog. Intro takes the player to the site. Outro has 5/6 warheads on it and taking the player away from the site. This is to add cohesion so the player doesn’t get confused between scene transitions. However, I realised during the animations, the sky in the environment goes MAD. It starts rapidly flashing between white and blue, similar to lightning, but I am not a fan of it, must remove. BONUS scene! I decided to spice things up by adding a little bit of drama at the end. The player will collect the 6th warhead, uh-oh it’s jammed AND at the SAME time, the ceiling’s going to collapse! The player ram their hull with the warhead to trigger the ignition. The warhead will launch itself at the wall creating a huge hole for the player to escape through, they rise up to the surface and the epilogue cutscene plays. What’s Next? Making a death screen (Should be easy) Making a tutorial on the submarine functionality. Doing the README document
Devlog 12 : Finished Death screen as well as added help features What have I accomplished: Added a death screen Added a ‘help’ feature and hints in the submarine Made a death screen The death screen was fairly easy, I just repurposed the pause screen to become the death screen when the player dies. Added a help feature Put a help option on the home screen. If you hover your mouse over the help button, the hints will appear on the side, similar to FNAF. Additionally, I added a scrolling bar that goes from right to left on the submarine UI. I didn’t want to add another button to the pause menu because it would look too cluttered. This new addition looks pretty neat. What’s Next? Making the README document Getting people to test my game Implement some of their feedback
Devlog 13 : Recieved Tester Feedback and implemented it What have I accomplished: I have asked a tester (Dad) to test my game. He started playing the game and gave me a sheet of feedback. Upon deciphering the handwriting I made a list of main list of what needs to be improved. Here is the list Give more screen-space for player to see ocean Do something about the radio messages being sent as they are very annoying when the player is exploring and they just appear and block the player’s screen Also the radio messages go away too quickly The flashlight isn’t crisp. It like bleeds into the ocean and doesn’t look nice The ocean environment is too dark, make it brigher What/How did I implement the feedback? As a result, I merged the top panel into the bottom panel while replacing the top section with the radio messages. This time the player has much more screen-space to play in while the radio messages just briefly appear on the screen, not blocking the player’s view. As for the flashlight, I used a MeshInstance3D equipped with an emission Material so the flashlight looks much “crisper”. I also increased the show time for the radio messages from 3 seconds to 5 seconds so player will realise that a message has popped and has sufficient time to read it. As for the ocean environment, I just boosted the emission of the volumetric fog while make the background color slightly lighter rather than leaving it pitch black (Made it like a really dark navy blue). Bonus bug patch! While testing the game, I also found a bug with the Restart button in the pause screen. The bug was that when the player pressed restart, the scene tree was still paused, so the intro animation wouldn’t start until you unpaused it. So in order to fix this I just added another single line of code. func _on_restart_button_pressed(): get_tree().paused = false#This was the line of code needed get_tree().reload_current_scene() That is it so far, definitely getting more people to test it (Family, friends etc…) and implementing more feedback!
Devlog 14: Received 2nd Round of Feedback and Implemented it. What have I accomplished: I went to my coding club and asked fellow Godot/Unity enthusiasts to test my game! Here’s basically what they said… They couldn’t find the tunnel entrances The Radio Messages don’t stand out enough Make the Flashlight brighter (again…) Add some sort of Sonar Scan circle thingy on the periscope - make it more useful rather than a wall of text Make the main menu brighter, can’t see the submarine Do not exactly know the initial objective of the game/where to go Make Arrows or hints to show player what to do in Finale sequence When the player escapes through the tunnel, add some decorations make it less boring. Additionally, I got a 2nd round of feedback from my Dad… He said the UI is much better, less cluttered and the flashlight is better as well as the other features, but he has some more feedback. He wants a minimap, so he can see where to go because he is lost and does not understand the compass heading. He wants a clearer font for the submarine UI as the current one is too blurry for him He wants me to put radioactive trifoils on the missiles So onto how I implemented their feedback I made some vines on blender, I did it fairly quicky i didn’t bother putting it on Lapse. So, I implemented the vines with a glowing green shader, so it is easily visible to the player. I placed them in paths leading to the entrance and tunnels, so player knows where to go. As for the radio messages I added a yellow flashing border around them to attract player attention. As for the flashlight, I just cranked the energy up to like 50+, did the job pretty well. I added a sonar scan because the testers believe that the beacon signal is too generic and not really helpful, thus making the periscope itself not useful. In order to improve this, I added a sonar scan, the circular map that actual submarines use. After looking at some tutorials, checking documentation and reddit posts, I realized that I just have to somehow convert my prior knowledge of polar coordinates and convert them into game code. After a while, I got the red dots (sea mines) to appear on the map when the player presses the scan button (x). Additionally, using groups, I got the warheads to come up as yellow dots on the sonar map. The main menu was an easy fix, just had to increase the energy of the light. As for the initial objective, I made an animation where the camera shows the player where the warheads are located and the journey they have to take, it like shows the whole path so the player has some knowledge of knowing if they are going on the right path. Also just added another hint telling the player of the direction (80-90° East.) As for the Finale sequence, I just added a spinning arrow that points to the warhead signalling that the player has to ram it with their hull. Additionally, there are radio messages telling the player what to do. When the player escapes, I added a tall, enclosed tunnel with hanging vines for the player to escape through. Makes the game design much more intentional and doesn’t confuse players into thinking they just broke through the map. For the minimap, I used a SubViewportContainer with a camera being referenced to the actual SubViewport Node. The camera is in Orthogonal mode, and just facing down on the player 30metres away. The input is being displayed on the SubViewport. For the submarine font, I changed some of the colors so the font stands out more and becomes more CRISP and changed the font so the player can easily understand what’s on the dashboard. Another quick and easy fix was the radioactive logos. Just got a MeshInstance3D and slapped the texture on there and stuck it on the side of the warhead. This is probably the last devlog until submission.
Devlog 15: Exported Game & Ready for Submission! This is the last devlog until submissions, I was just getting the export templates and etc. I also finished with the README No actual progress…
Ships:
I built Abysmal Echo. This is by far my most comprehensive project I have EVER made using the Godot Engine. I put a lot of effort into it and I hope you enjoy playing it This game is about recovering some nuclear warheads at the bottom of the sea while navigating fields of sea mines, cavernous tunnels and mutated sharks. Good Luck! P.S. Please read the controls on how to play the game. PLEEASE...
|
1793145194.637632
|
1793231594.637632
|
|
29172
|
My own site! by @IshanWarrior2012 | Stardance
|
IshanWarrior2012
|
1
|
79.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T08:59:44Z", "hours": 79.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built my own portfolio site and its very personal to me. I took me 80 hrs of work to complete . The design of the website is inspired from dribble.", "repo": "https://github.com/kurkuregamerz/My-Personal-Site", "demo": "https://kurkuregamerz.github.io/My-Personal-Site/"}]...
|
[{"post_id": 62763, "ts": "202 [{"post_id": 62763, "ts": "2026-09-06T08:55:04Z", "hours": 9.45, "text": "i completed my project today shipping now"}, {"post_id": 60657, "ts": "2026-09-03T04:56:26Z", "hours": 15.9433, "text": "ok i did a lot of things i cant explain"}, {"post_id": 43917, "ts": "2026-08-09T11:20:31Z", "hours": 5.2208, "text": "added services projects and our development process to the home page and added credits in footer"}, {"post_id": 39846, "ts": "2026-08-03T03:18:01Z", "hours": 16.9303, "text": "added more single time scroll animations"}, {"post_id": 31375, "ts": "2026-07-19T18:18:12Z", "hours": 2.6469, "text": "Footer added"}, {"post_id": 31123, "ts": "2026-07-19T08:34:30Z", "hours": 11.9322, "text": "Added responsiveness"}, {"post_id": 26028, "ts": "2026-07-10T16:39:30Z", "hours": 8.4264, "text": "completed loader exit"}, {"post_id": 22972, "ts": "2026-07-05T17:28:22Z", "hours": 7.8617, "text": "Milestone Devlog Today I finished the hero section and here is a glance of it. I added animations in the hero section in the opening of the page"}, {"post_id": 19952, "ts": "2026-07-01T12:23:34Z", "hours": 0.4825, "text": "Designing layout and theme"}, {"post_id": 19776, "ts": "2026-07-01T05:06:54Z", "hours": 0.3875, "text": "Created the app structure and did some basic code by adding boilerplate in html and root styles in css"}]...
|
Title: My own site! by @IshanWarrior2012 | Stardan Title: My own site! by @IshanWarrior2012 | Stardance
Devlogs:
Created the app structure and did some basic code by adding boilerplate in html and root styles in css
Designing layout and theme
Milestone Devlog Today I finished the hero section and here is a glance of it. I added animations in the hero section in the opening of the page
completed loader exit
Added responsiveness
Footer added
added more single time scroll animations
added services projects and our development process to the home page and added credits in footer
ok i did a lot of things i cant explain
i completed my project today shipping now
Ships:
I built my own portfolio site and its very personal to me. I took me 80 hrs of work to complete . The design of the website is inspired from dribble....
|
1793054875.406016
|
1793141275.406016
|
|
56455
|
Slack Bot by @karoltoo11 | Stardance
|
karoltoo11
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T08:56:28Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a Slack bot that shares random, funny facts and jokes! Writing in a new language (JavaScript) was quite an enjoyable experience for me. I hope you like it.", "repo": "https://github.com/karoltoo11/slackbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 61813, "ts": "202 [{"post_id": 61813, "ts": "2026-09-04T21:57:43Z", "hours": 1.3033, "text": "Hey! I’m currently building a Slackbot, and it seems to be going really well! It has a few nice features. I never realized JavaScript could be such a cool programming language. I think I’ll try writing something else with it."}]...
|
Title: Slack Bot by @karoltoo11 | Stardance
Devlo Title: Slack Bot by @karoltoo11 | Stardance
Devlogs:
Hey! I’m currently building a Slackbot, and it seems to be going really well! It has a few nice features. I never realized JavaScript could be such a cool programming language. I think I’ll try writing something else with it.
Ships:
I created a Slack bot that shares random, funny facts and jokes! Writing in a new language (JavaScript) was quite an enjoyable experience for me. I hope you like it....
|
1793127046.060387
|
1793213446.060387
|
|
58833
|
Pixel RPG Personal Site! by @fardhan | Stardance
|
fardhan
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T08:54:44Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A personal site built as a small RPG game. Instead of scrolling a cv, you walk a character around a map where each room is a chapter of the cv", "repo": "https://github.com/dhansecond/personal-site-stardance/", "demo": "https://dhansecond.github.io/personal-site-stardance/"}]...
|
[{"post_id": 62727, "ts": "202 [{"post_id": 62727, "ts": "2026-09-06T07:04:55Z", "hours": 0.7567, "text": "built a web based game to explore my cv"}]...
|
Title: Pixel RPG Personal Site! by @fardhan | Star Title: Pixel RPG Personal Site! by @fardhan | Stardance
Devlogs:
built a web based game to explore my cv
Ships:
A personal site built as a small RPG game. Instead of scrolling a cv, you walk a character around a map where each room is a chapter of the cv...
|
1793102117.204651
|
1793188517.204651
|
|
57818
|
Poke-tabs by @Ansh904 | Stardance
|
Ansh904
|
1
|
6.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T08:17:46Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Poke-Tabs I made Poke-tabs, my very own custom new tabs layout with a pokemon theme :yay The Project was made in react js since the guidelines said that a framework is optional It has the following features: Search anything using Google Get your own random pokemon (inspired by rng from stardance) View the type, name, flavor text and pixel stlye animated gif which looks really cool!!! Play Guess the pokemon and identify a pokemon from the silouette!!! Go to your favourite sites using the middle section!!! See the current time using the Clock!!! The theme is completely custom and designed by me, I have used the same theme before in my pokedex project and I have used tailwind instead of plain css because I hate css!!! The info or the flavor text changes the border and font color based on the first type of your random pokemon!!!! Be sure to check out the project and especially those animated sprites, like dammnn do they look good", "repo": "https://github.com/Ansh9045/Poke-tabs", "demo": "https://poke-tabs.vercel.app/"}]...
|
[{"post_id": 62368, "ts": "202 [{"post_id": 62368, "ts": "2026-09-05T18:15:49Z", "hours": 5.9375, "text": "Poke-tabs Devlog Hey everyone!!! I made poke-tabs, my very own custom new tab layout with Pokemons!!! It has the following features: A large Clock showing the current time! A random pokemon roll that gives you your very own pokemon with a very cool animation, be sure to check that out, it looks really cool!!! A shortcut section that every new tab has A guess the pokemon game The flavor text of your pokemon The entire project was made in react and uses pokeapi to get pokemon data and animated + high quality sprites!!!"}]...
|
Title: Poke-tabs by @Ansh904 | Stardance
Devlogs: Title: Poke-tabs by @Ansh904 | Stardance
Devlogs:
Poke-tabs Devlog Hey everyone!!! I made poke-tabs, my very own custom new tab layout with Pokemons!!! It has the following features: A large Clock showing the current time! A random pokemon roll that gives you your very own pokemon with a very cool animation, be sure to check that out, it looks really cool!!! A shortcut section that every new tab has A guess the pokemon game The flavor text of your pokemon The entire project was made in react and uses pokeapi to get pokemon data and animated + high quality sprites!!!
Ships:
Poke-Tabs I made Poke-tabs, my very own custom new tabs layout with a pokemon theme :yay The Project was made in react js since the guidelines said that a framework is optional It has the following features: Search anything using Google Get your own random pokemon (inspired by rng from stardance) View the type, name, flavor text and pixel stlye animated gif which looks really cool!!! Play Guess the pokemon and identify a pokemon from the silouette!!! Go to your favourite sites using the middle section!!! See the current time using the Clock!!! The theme is completely custom and designed by me, I have used the same theme before in my pokedex project and I have used tailwind instead of plain css because I hate css!!! The info or the flavor text changes the border and font color based on the first type of your random pokemon!!!! Be sure to check out the project and especially those animated sprites, like dammnn do they look good...
|
1793126850.7890935
|
1793213250.7890935
|
|
58507
|
My personal site by @Mistix | Stardance
|
Mistix
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T07:59:29Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have created a portfolio website using HTML and CSS. CSS was little tricky since I’m not really familiar with coding in CSS. I you would like to check it out head over to https://project.urnotmistix.com", "repo": "https://github.com/AyaanplayszYT/personal-web", "demo": "https://project.urnotmistix.com/"}]...
|
[{"post_id": 62740, "ts": "202 [{"post_id": 62740, "ts": "2026-09-06T07:51:33Z", "hours": 1.4522, "text": "I’m working on my portfolio website for the stardance mission. I built it using HTML and CSS, also used some tutorials along the way."}]...
|
Title: My personal site by @Mistix | Stardance
De Title: My personal site by @Mistix | Stardance
Devlogs:
I’m working on my portfolio website for the stardance mission. I built it using HTML and CSS, also used some tutorials along the way.
Ships:
I have created a portfolio website using HTML and CSS. CSS was little tricky since I’m not really familiar with coding in CSS. I you would like to check it out head over to https://project.urnotmistix.com...
|
1792824646.4582217
|
1793688646.4582217
|