|
13013
|
Goofy-Goober by @LPcomix123 | Stardance
|
LPcomix123
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T21:42:52Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Over the past few days, I have been making a slack bot along with the stardance guide. I have learned how to code basic slack bots in node.js, and how to securely store and use bot and app tokens and api keys in a .env. Some commands include (but not limited to): /goofy-goober-ranfact which gives you a random fact, and: /goofy-goober-wotd which gives you the word of the day.", "repo": "https://github.com/LPcomix123/Goofy-Goober", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}]...
|
[{"post_id": 81647, "ts": "202 [{"post_id": 81647, "ts": "2026-10-21T21:28:23Z", "hours": 3.6494, "text": "Over the last few days, I have been developing a node.js slack bot by following the stardance mission and guide."}]...
|
Title: Goofy-Goober by @LPcomix123 | Stardance
De Title: Goofy-Goober by @LPcomix123 | Stardance
Devlogs:
Over the last few days, I have been developing a node.js slack bot by following the stardance mission and guide.
Ships:
Over the past few days, I have been making a slack bot along with the stardance guide. I have learned how to code basic slack bots in node.js, and how to securely store and use bot and app tokens and api keys in a .env. Some commands include (but not limited to): /goofy-goober-ranfact which gives you a random fact, and: /goofy-goober-wotd which gives you the word of the day....
|
1793206164.133457
|
1793292564.133457
|
|
51788
|
My own web OS by @Dragonfly | Stardance
|
Dragonfly
|
0
|
22.26
|
0
|
[]
|
[{"post_id": 81646, "ts": "202 [{"post_id": 81646, "ts": "2026-10-21T21:20:03Z", "hours": 1.0292, "text": "Yayy I finished my notes app (for now - idk if I want to add things like typing in bold, italics, etc… later) and I added a word and character count that shows the words and characters for text you highlight which is pretty neat."}, {"post_id": 80660, "ts": "2026-10-18T13:01:06Z", "hours": 8.3294, "text": "I think I should probably post a devlog before I reach 10 hrs so here it is. I really should have done another one recently but oh well. I’m almost finished with the first app I’m making. I have finished the ‘my notes’ section - it has a menu of entries of notes and for the ‘your notes’ section, you can write notes that are automatically saved, there are word and character counts and soon I will make it so that the text you highlight, the counts for that will show instead and I might add features like writing in bold, italics, different font, etc… I have also made windows resizeable and I think that’s about it."}, {"post_id": 76253, "ts": "2026-10-02T22:12:55Z", "hours": 3.4939, "text": "Oh my golly goodness why is the time I have ‘spent’ coding so damn high? I feel like this number most likely is inflated by at least a couple hours but I swear I’m not doing it on purpose. The number just keeps rising somehow! Anyway I haven’t finished my first app yet and I’m going pretty damn slow. I now have it so when I click a window it rises to the top and that’s the most of it I think. Nothing compared to what you would expect from allegedly 3.5 more hours coding time from my last dev log!"}, {"post_id": 73915, "ts": "2026-09-26T09:46:09Z", "hours": 3.6764, "text": "I can now drag around, close and open my windows and I’m about to make my first app and after that I’ll make my second, finish the jam and ship it and then start working on it more for WebOS 2."}, {"post_id": 71322, "ts": "2026-09-20T17:00:17Z", "hours": 2.2953, "text": "Devlog #4: I have finished the second part of making my WebOS and will start part 3 soon. I have also added an extra thing with the help of ChatGPT (i made a bottom bar with the time on it that stays in place no matter where you scroll :D). (I am new to this stuff and it’s taking a crap ton of time don’t judge or whatever)"}, {"post_id": 70313, "ts": "2026-09-18T22:34:52Z", "hours": 0.3325, "text": "Ok so the awesome Github AI did it for me and it looks pretty neat."}, {"post_id": 70297, "ts": "2026-09-18T21:54:51Z", "hours": 2.4781, "text": "Devlog 2: My Web OS is coming along better and honestly I probably should have more done for the time I have logged but I am completely new to HTML so I am learning at every step. I want to add a white background around the text next so I’ll do that maybe tommorow because it’s late for me rn. The background is animated which is pretty cool although you can’t see in the screenshot."}, {"post_id": 66781, "ts": "2026-09-12T17:45:58Z", "hours": 0.6264, "text": "I’ve just started my first project and I’m struggling lol. The first part of this thing was meant to only take 30 mins but its been more time than that so far and I’m not even halfway through :(. This devlog won’t be visible to most people yet lol because I’m having trouble doing the identity verification thing because it says I used all my attempts or whatever even though I don’t think I did XD."}]...
|
Title: My own web OS by @Dragonfly | Stardance
De Title: My own web OS by @Dragonfly | Stardance
Devlogs:
I’ve just started my first project and I’m struggling lol. The first part of this thing was meant to only take 30 mins but its been more time than that so far and I’m not even halfway through :(. This devlog won’t be visible to most people yet lol because I’m having trouble doing the identity verification thing because it says I used all my attempts or whatever even though I don’t think I did XD.
Devlog 2: My Web OS is coming along better and honestly I probably should have more done for the time I have logged but I am completely new to HTML so I am learning at every step. I want to add a white background around the text next so I’ll do that maybe tommorow because it’s late for me rn. The background is animated which is pretty cool although you can’t see in the screenshot.
Ok so the awesome Github AI did it for me and it looks pretty neat.
Devlog #4: I have finished the second part of making my WebOS and will start part 3 soon. I have also added an extra thing with the help of ChatGPT (i made a bottom bar with the time on it that stays in place no matter where you scroll :D). (I am new to this stuff and it’s taking a crap ton of time don’t judge or whatever)
I can now drag around, close and open my windows and I’m about to make my first app and after that I’ll make my second, finish the jam and ship it and then start working on it more for WebOS 2.
Oh my golly goodness why is the time I have ‘spent’ coding so damn high? I feel like this number most likely is inflated by at least a couple hours but I swear I’m not doing it on purpose. The number just keeps rising somehow! Anyway I haven’t finished my first app yet and I’m going pretty damn slow. I now have it so when I click a window it rises to the top and that’s the most of it I think. Nothing compared to what you would expect from allegedly 3.5 more hours coding time from my last dev log!
I think I should probably post a devlog before I reach 10 hrs so here it is. I really should have done another one recently but oh well. I’m almost finished with the first app I’m making. I have finished the ‘my notes’ section - it has a menu of entries of notes and for the ‘your notes’ section, you can write notes that are automatically saved, there are word and character counts and soon I will make it so that the text you highlight, the counts for that will show instead and I might add features like writing in bold, italics, different font, etc… I have also made windows resizeable and I think that’s about it.
Yayy I finished my notes app (for now - idk if I want to add things like typing in bold, italics, etc… later) and I added a word and character count that shows the words and characters for text you highlight which is pretty neat....
|
1792684251.4057527
|
1793289051.4057527
|
|
68486
|
space-escape (OMEGA-7) by @torren | Stardance
|
torren
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T21:20:01Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "omega-7 is an escape room that runs entirely inside a figma prototype, you wake up on a dying space station with the oxygen draining and work through five puzzles to reach the escape pod, from a keycard to a cipher to the airlock pin to a reactor restart to rewiring the pod. the hard part is that figma has no code, no variables, no logic, and no sound, so faking “state” means building a separate frame for every single thing the player could be looking at (the keypad alone is five frames to fake a two digit pin), and i ended up generating all 48 frames and ~160 hotspots. i’m proud that it actually feels like a game and not a slideshow - smart-animate makes the keycard fly into your inventory and the reactor levers flip and glow as you solve it. to test it, play in present mode and click anything interactive: the pin is crew x deck from the whiteboard and roster, and the reactor order is hidden in the captain’s log in nato phonetic, so don’t rush past the clues.", "repo": "https://github.com/nadellasripad11/space-escape", "demo": "https://www.figma.com/proto/KacEHBOZqWUMXmCe6sAqhL/OMEGA-7-%E2%80%94-Figma-Escape-Room?page-id=79%3A2&node-id=79-3&starting-point-node-id=79%3A3&scaling=min-zoom"}]...
|
[{"post_id": 81643, "ts": "202 [{"post_id": 81643, "ts": "2026-10-21T21:15:39Z", "hours": 0.375, "text": "figma can’t play sound, so i leaned all the way into motion instead. added a shared smart-animate transition across every puzzle so the states actually morph into each other: clicking the keycard now flies it off the shelf and shrinks it right into your inventory slot, the pin dots fill in as you type, the reactor levers physically flip and the lights go green as you nail the sequence, and the wires snap into their ports on each correct connection. then i jumped over to the 3d web version and fixed the keycard being annoying to click - the mesh is tiny and the camera sway makes it drift, so i wrapped it in an invisible hit box about 2.5x the size that catches your click anywhere near it without changing how anything looks."}, {"post_id": 80273, "ts": "2026-10-17T02:18:13Z", "hours": 4.2958, "text": "playtested omega-7 and realized you could beat it in like a minute, so i doubled the puzzles from 3 to 5. added a captain’s log cipher that spells out a reactor code in nato phonetic (bravo, alpha, charlie) that you have to decode, and a reactor switch panel where you flip three switches in that exact order, and one wrong flip resets the whole thing. figma has no variables or logic so the switch puzzle is really just 5 separate frames wired together, one per state, same hacky trick i used for the keypad. also squashed a bug in the three.js web version where the crate and fuse box puzzles were wired into the game logic but the 3d scenes never actually had the objects, so clicking them did nothing. added the missing meshes and checked every interactive object is clickable now. full flow is live now: quarters, cipher, airlock pin, reactor, pod wiring, launch. shipping it."}, {"post_id": 77679, "ts": "2026-10-07T20:23:31Z", "hours": 3.4492, "text": "I built OMEGA-7, a space escape room that turns Figma into a playable game. Players explore a dying station and solve puzzles before their oxygen runs out. The escape sequence involves finding a keycard, decoding an airlock PIN, and rewiring a pod. I added 3D-rendered rooms, clickable objects, camera push-ins, and hint screens. I tested the puzzle paths from start to finish to check the full escape sequence. I also launched a browser version with real-time 3D, swinging doors, and sound effects. It adds a seven-minute oxygen timer and a wire-dragging puzzle, linking back to the Figma prototype."}]...
|
Title: space-escape (OMEGA-7) by @torren | Stardan Title: space-escape (OMEGA-7) by @torren | Stardance
Devlogs:
I built OMEGA-7, a space escape room that turns Figma into a playable game. Players explore a dying station and solve puzzles before their oxygen runs out. The escape sequence involves finding a keycard, decoding an airlock PIN, and rewiring a pod. I added 3D-rendered rooms, clickable objects, camera push-ins, and hint screens. I tested the puzzle paths from start to finish to check the full escape sequence. I also launched a browser version with real-time 3D, swinging doors, and sound effects. It adds a seven-minute oxygen timer and a wire-dragging puzzle, linking back to the Figma prototype.
playtested omega-7 and realized you could beat it in like a minute, so i doubled the puzzles from 3 to 5. added a captain’s log cipher that spells out a reactor code in nato phonetic (bravo, alpha, charlie) that you have to decode, and a reactor switch panel where you flip three switches in that exact order, and one wrong flip resets the whole thing. figma has no variables or logic so the switch puzzle is really just 5 separate frames wired together, one per state, same hacky trick i used for the keypad. also squashed a bug in the three.js web version where the crate and fuse box puzzles were wired into the game logic but the 3d scenes never actually had the objects, so clicking them did nothing. added the missing meshes and checked every interactive object is clickable now. full flow is live now: quarters, cipher, airlock pin, reactor, pod wiring, launch. shipping it.
figma can’t play sound, so i leaned all the way into motion instead. added a shared smart-animate transition across every puzzle so the states actually morph into each other: clicking the keycard now flies it off the shelf and shrinks it right into your inventory slot, the pin dots fill in as you type, the reactor levers physically flip and the lights go green as you nail the sequence, and the wires snap into their ports on each correct connection. then i jumped over to the 3d web version and fixed the keycard being annoying to click - the mesh is tiny and the camera sway makes it drift, so i wrapped it in an invisible hit box about 2.5x the size that catches your click anywhere near it without changing how anything looks.
Ships:
omega-7 is an escape room that runs entirely inside a figma prototype, you wake up on a dying space station with the oxygen draining and work through five puzzles to reach the escape pod, from a keycard to a cipher to the airlock pin to a reactor restart to rewiring the pod. the hard part is that figma has no code, no variables, no logic, and no sound, so faking “state” means building a separate frame for every single thing the player could be looking at (the keypad alone is five frames to fake a two digit pin), and i ended up generating all 48 frames and ~160 hotspots. i’m proud that it actually feels like a game and not a slideshow - smart-animate makes the keycard fly into your inventory and the reactor levers flip and glow as you solve it. to test it, play in present mode and click anything interactive: the pin is crew x deck from the whiteboard and roster, and the reactor order is hidden in the captain’s log in nato phonetic, so don’t rush past the clues....
|
1793123295.3591373
|
1793209695.3591373
|
|
30987
|
Dewen by @jaxonpenka127 | Stardance
|
jaxonpenka127
|
4
|
55.0
|
532
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T21:07:25Z", "hours": 14.0, "multiplier": 9.65, "payout": 133, "blessing": "neutral", "text": "Last major ship for Dewen: agents with a Bring Your Own Key structure a desktop app for macOS multilingual support and a new logo (credit to @Jcleo2 for the logo geometry) Feel free to try out the new stuff if you’d like. https://dewen.netlify.app", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 2, "ts": "2026-09-12T21:44:40Z", "hours": 21.0, "multiplier": 12.55, "payout": 262, "blessing": "neutral", "text": "Features Added IndexedDB integration Avatars and more customization options More command bar commands SEO improvements so Dewen can appear in Google search results Two new mini analytics: Upcoming Tasks and Stale Tasks Better responsiveness across devices What was challenging? Probably the IndexedDB integration. It meant moving from a simple storage method to a full database. I had to learn how to create object stores, save data to them, and load that data when the app starts. What am I proud of? The IndexedDB integration and the increased customization. Adding IndexedDB makes Dewen feel much more like a real application than just a project, while features like avatars and theme presets make it much easier for users to personalize their experience. What’s next? Now that the Stardance Challenge is about to wrap up, I’m going to pivot some of my time toward other things, including the Congressional App Challenge and my other projects: AuditionLM, LIAB, and Pocket Lab, while also continue development on Dewen. Thank you for supporting me throughout this challenge and following along as Dewen grew.", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 3, "ts": "2026-07-31T16:18:38Z", "hours": 20.0, "multiplier": 4.19, "payout": 132, "blessing": "neutral", "text": "New Dewen version! Includes: removed topbar and updated sidebar accent color customization animation for collapsing and expanding mini analytics made what to focus on an analytic necessary bug fixes There will be more to come. Thanks for supporting me on this journey!", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}, {"ship_num": 4, "ts": "2026-07-05T13:56:28Z", "hours": 0.0, "multiplier": 3.16, "payout": 5, "blessing": "neutral", "text": "This is my task and project management web app called Dewen, which is meant to be completely subscription-free, AI-optional, and local-first while delivering useful productivity tools. What was definitely challenging was the search and command bar, where I had to rely on AI tools to help me build it. What I’m proud of is how the tools sync with each other. When you add a task, it renders on the calendar, and when you start a focus session, the activity panel logs the action. Finally, users should know that it takes barely any steps to get started, since there are no accounts.", "repo": "https://github.com/JaxTheDevG008/Dewen", "demo": "https://dewen.netlify.app"}]...
|
[{"post_id": 81641, "ts": "202 [{"post_id": 81641, "ts": "2026-10-21T21:04:51Z", "hours": 3.1267, "text": "Last devlog: I decided to add multilingual support to make Dewen more accessible to people around the world. It supports languages like Spanish, French, German, Chinese, Japanese, Korean, and more. Feel free to try it out if you’d like 🙂"}, {"post_id": 74981, "ts": "2026-09-28T19:28:56Z", "hours": 1.0144, "text": "This isn’t really a devlog, but I thought I might just post about it. My app, after not having an identity for so long, finally has its own logo. I feel extremely glad about the logo being over and done with and the colors in the logo as well. I want to give credit to @Jcleo2 for creating the geometry for the logo, which I then refined and added my own colors. So thank you @Jcleo2 . Thanks for reading, and have a great day!"}, {"post_id": 72853, "ts": "2026-09-23T21:26:55Z", "hours": 2.2408, "text": "Now that Stardance is happening for another month, I’m able to do more devlogs, so kudos to everyone for making it happen. Another big milestone for Dewen: It officially has a desktop application now! Now you don’t have to use the website often and instead you can use the desktop application. It uses Tauri to help with wrapping the app in a desktop layer to help make it a legitimate desktop app. A quick heads up for macOS users: because this is an independent, open-source application bundle, macOS may display a warning stating the app is “damaged” on your first launch. You can learn how to do it correctly in the README on the GitHub repo page. Dewen is currently available for macOS, but I hope to expand it to Windows and Linux as well. Thanks for reading, and I hope you have a great day!"}, {"post_id": 70832, "ts": "2026-09-19T20:49:14Z", "hours": 1.7767, "text": "I have added a second agent: the Researcher Agent! To make it work, you need to have a Tavily API key and insert it into the settings. Then you can type what you want and it creates a quick note containing what it researched. Alongside that, I also added agent selection where you can choose which agent you want to use. This prevents weird things from happening if you instruct the wrong agent. I hope you have a great rest of your day! Try out the Researcher Agent now! (if you want to 😁)"}, {"post_id": 70616, "ts": "2026-09-19T13:47:33Z", "hours": 5.6486, "text": "I know I’m contradicting what I said before, that I was done with Stardance, but I thought this was something cool to talk about. Well, I have agents in Dewen now! Integrating AI into Dewen has been one of my top goals since the start. Now it’s actually a reality, and I feel absolute pride in accomplishing this. How it works is you toggle AI in the settings if you want it on or off, then it uses Bring Your Own Key (BYOK) meaning you can insert your API key into the app. Then there’s a button in the sidebar with shapes. Click on that, type in your prompt, and Dewen will do the rest. This is powered by my Python backend, hosted on Render and UptimeRobot opens it every five minutes to prevent it from taking 50 seconds to load the AI. I hope you enjoy using AI in Dewen, and have a great rest of your day!"}, {"post_id": 66915, "ts": "2026-09-12T21:34:55Z", "hours": 4.5225, "text": "Well, this is probably going to be my last devlog for the Stardance Challenge, so let’s make it count. First off, I finally managed to convert Dewen to IndexedDB, one of my long-term goals for the app. LocalStorage was starting to become limiting, and I wanted something more scalable while still keeping Dewen local-first. That’s why I went with IndexedDB. I set up DewenDB in storage.ts, added helper functions in main.ts to save tasks, notes, and activities, and made sure everything loads when the app starts. Now, I want to take a moment to look at how far we’ve come. Dewen started back in December 2025 as a simple to-do list. From there, it evolved into a productivity hub, then a productivity workspace, and now an actual application. The task list, focus timer, quick notes, calendar, activity panel, command bar, and everything else have come a long way from that original task list. Building Dewen, and participating in the Stardance Challenge, has taught me much more than just how to code. It has taught me how to take an idea and turn it into a real application that people can actually use. Now that the Stardance Challenge is wrapping up, I’m going to be shifting some of my time toward other projects while continuing to work on Dewen. First, Dewen is my submission for the 2026 Congressional App Challenge, representing Pennsylvania’s 15th District, so that’s something I’m excited to focus on. I also have several other projects I want to work on alongside Dewen: AuditionLM, an AI benchmark ranking and evaluation app; Local In A Box, or LIAB, a CLI tool for integrating and managing local-first architecture in applications; and Pocket Lab, a portable experimentation device for conducting experiments and exploring science. Stardance may be coming to an end, but Dewen never will. Thank you for following along, supporting the project, and watching it grow."}, {"post_id": 53471, "ts": "2026-08-24T01:15:39Z", "hours": 1.5208, "text": "To improve the customization of Dewen, I thought it would be nice to add theme presets to make choosing a theme faster and more approachable. Themes include default, ocean, forest, sunset, rose, midnight, terminal, and slate. Another thing I added was localStoraging the focus timer state. For example, the focus timer reads 21:57, and you accidentally reload the site. It’ll still have 21:57 and continue going from there! I hope these new features improve the user experience of Dewen, and I want to continue improving them and the core experience of the app. Thanks for reading, and have a great day!"}, {"post_id": 53244, "ts": "2026-08-23T18:05:59Z", "hours": 8.0639, "text": "This week I continued to update Dewen with more polish and power to make it easier for people to use my app. These updates focus on overall experience, faster workflows, and turning Dewen into a more complete workspace. Features include: better responsiveness: To make the experience better for mobile and tablet users, I decided to improve the responsiveness of the app to transition to different layouts easily. more commands: To help keyboard users control their workflow more efficiently, I added new commands like editing tasks and notes, controlling the timer, prioritizing tasks, and more. To learn more about them, type :h in the command bar. new mini analytics: I changed two of the empty cards to contain Upcoming Tasks that are getting close to their due date, and Stale Tasks that haven’t been touched in a while. I hope that these new changes improve the user experience for Dewen, as this is turning into much more than a simple task list. Thank you for reading, and have a great day!"}, {"post_id": 44541, "ts": "2026-08-10T11:36:24Z", "hours": 0.9275, "text": "I wanted to make it so that Dewen could be more discoverable rather than just requiring people to “click a direct link”, so I utilized the Netlify Sitemap plugin and Google Search Console to make that happen! This is a pretty cool milestone for Dewen, as it shows that it isn’t just another website project. Now I want to continue improving its SEO and discoverability so that eventaully, you can type in “dewen app” and it’ll show up. Thank you for reading!"}, {"post_id": 42991, "ts": "2026-08-08T00:31:00Z", "hours": 2.5153, "text": "Before this devlog, the search/command bar used to only do :a <task description> . To make it easier to use Dewen with the keyboard without navigating the app so much, I decided to add more commands to the command bar. New commands include: :n <note content> | creates a note :c <task> | completes a task :d <task> | deletes a task :f <duration> <task> | starts a focus session (e.g. :f 25, take out the trash ) I hope these types of commands make it easier to use my app, especially for keyboard-native users. I’m also planning to implement more command bar commands as I continue improving the app. Thank you!"}, {"post_id": 39635, "ts": "2026-08-02T19:13:55Z", "hours": 3.3336, "text": "Added avatars and profile picture customization. Add your own image to serve as your avatar, look at presets for avatars based on hobbies and careers, and toggle if you want the accent on it on or off! 😁"}, {"post_id": 38276, "ts": "2026-07-31T16:16:14Z", "hours": 1.8494, "text": "Removed two mini analytics and added an animation for expanding and collapsing them"}, {"post_id": 37355, "ts": "2026-07-30T00:36:01Z", "hours": 3.1358, "text": "Added another customization option where you can customize the accent color 😁 (also updated mini analytics a little)"}, {"post_id": 36786, "ts": "2026-07-29T01:54:50Z", "hours": 3.9203, "text": "Added offline support to my website, so no matter where you are, you’re able to access my web app! 😁"}, {"post_id": 35534, "ts": "2026-07-27T01:06:01Z", "hours": 2.7853, "text": "Man, after using a single Vanilla JS file to develop Dewen, I realized I needed a better structure to help scale the project further. But I really underestimated how challenging it was going to be, especially since I don’t know React, meaning I have to learn it. So wish me luck, I guess."}, {"post_id": 34866, "ts": "2026-07-25T22:37:06Z", "hours": 2.5794, "text": "I have officially converted from main.js to main.ts, meaning everything is in TypeScript. Now to make everything modular…🤞"}, {"post_id": 34384, "ts": "2026-07-25T01:51:35Z", "hours": 2.8206, "text": "Currently trying to convert from Vanilla JS to TypeScript and eventually a framework like React. Fingers crossed! 🤞"}, {"post_id": 30471, "ts": "2026-07-18T02:05:51Z", "hours": 2.4369, "text": "Part 1 of redesigning mini analytics: making a risk report featuring overdue tasks, tasks due today, and blocked tasks"}, {"post_id": 29247, "ts": "2026-07-16T01:10:25Z", "hours": 0.0, "text": "New UI changes so far (removed topbar and updated sidebar a little)"}, {"post_id": 26315, "ts": "2026-07-11T01:24:46Z", "hours": 0.0, "text": "This isn’t really a devlog, but rather a heads up about something: Hackatime and Stardance are saying that I’ve worked on this for a few hours. That’s incorrect. I’ve been working on this project since December and January. I’ve used AI to help me with some of the project, but this is in no way a “vibe coded” app. I’ve included a screenshot of my oldest Git commit history for the project to set the record straight. Thanks for the feedback, and I will continue working on improving this web app!"}, {"post_id": 23543, "ts": "2026-07-06T15:56:44Z", "hours": 0.0, "text": "Have any feature ideas for Dewen? Would be happy to help develop them!"}, {"post_id": 22976, "ts": "2026-07-05T17:37:45Z", "hours": 0.0, "text": "Currently working on leveling up the mini analytics (the cards you see under the “Good morning” message) to display useful information. Stay tuned!"}, {"post_id": 22874, "ts": "2026-07-05T14:32:54Z", "hours": 0.0, "text": "Fixed a calendar and decrastinator bug"}, {"post_id": 22831, "ts": "2026-07-05T13:06:36Z", "hours": 0.0, "text": "Energy Gauge"}]...
|
Title: Dewen by @jaxonpenka127 | Stardance
Devlog Title: Dewen by @jaxonpenka127 | Stardance
Devlogs:
Energy Gauge
Fixed a calendar and decrastinator bug
Currently working on leveling up the mini analytics (the cards you see under the “Good morning” message) to display useful information. Stay tuned!
Have any feature ideas for Dewen? Would be happy to help develop them!
This isn’t really a devlog, but rather a heads up about something: Hackatime and Stardance are saying that I’ve worked on this for a few hours. That’s incorrect. I’ve been working on this project since December and January. I’ve used AI to help me with some of the project, but this is in no way a “vibe coded” app. I’ve included a screenshot of my oldest Git commit history for the project to set the record straight. Thanks for the feedback, and I will continue working on improving this web app!
New UI changes so far (removed topbar and updated sidebar a little)
Part 1 of redesigning mini analytics: making a risk report featuring overdue tasks, tasks due today, and blocked tasks
Currently trying to convert from Vanilla JS to TypeScript and eventually a framework like React. Fingers crossed! 🤞
I have officially converted from main.js to main.ts, meaning everything is in TypeScript. Now to make everything modular…🤞
Man, after using a single Vanilla JS file to develop Dewen, I realized I needed a better structure to help scale the project further. But I really underestimated how challenging it was going to be, especially since I don’t know React, meaning I have to learn it. So wish me luck, I guess.
Added offline support to my website, so no matter where you are, you’re able to access my web app! 😁
Added another customization option where you can customize the accent color 😁 (also updated mini analytics a little)
Removed two mini analytics and added an animation for expanding and collapsing them
Added avatars and profile picture customization. Add your own image to serve as your avatar, look at presets for avatars based on hobbies and careers, and toggle if you want the accent on it on or off! 😁
Before this devlog, the search/command bar used to only do :a <task description> . To make it easier to use Dewen with the keyboard without navigating the app so much, I decided to add more commands to the command bar. New commands include: :n <note content> | creates a note :c <task> | completes a task :d <task> | deletes a task :f <duration> <task> | starts a focus session (e.g. :f 25, take out the trash ) I hope these types of commands make it easier to use my app, especially for keyboard-native users. I’m also planning to implement more command bar commands as I continue improving the app. Thank you!
I wanted to make it so that Dewen could be more discoverable rather than just requiring people to “click a direct link”, so I utilized the Netlify Sitemap plugin and Google Search Console to make that happen! This is a pretty cool milestone for Dewen, as it shows that it isn’t just another website project. Now I want to continue improving its SEO and discoverability so that eventaully, you can type in “dewen app” and it’ll show up. Thank you for reading!
This week I continued to update Dewen with more polish and power to make it easier for people to use my app. These updates focus on overall experience, faster workflows, and turning Dewen into a more complete workspace. Features include: better responsiveness: To make the experience better for mobile and tablet users, I decided to improve the responsiveness of the app to transition to different layouts easily. more commands: To help keyboard users control their workflow more efficiently, I added new commands like editing tasks and notes, controlling the timer, prioritizing tasks, and more. To learn more about them, type :h in the command bar. new mini analytics: I changed two of the empty cards to contain Upcoming Tasks that are getting close to their due date, and Stale Tasks that haven’t been touched in a while. I hope that these new changes improve the user experience for Dewen, as this is turning into much more than a simple task list. Thank you for reading, and have a great day!
To improve the customization of Dewen, I thought it would be nice to add theme presets to make choosing a theme faster and more approachable. Themes include default, ocean, forest, sunset, rose, midnight, terminal, and slate. Another thing I added was localStoraging the focus timer state. For example, the focus timer reads 21:57, and you accidentally reload the site. It’ll still have 21:57 and continue going from there! I hope these new features improve the user experience of Dewen, and I want to continue improving them and the core experience of the app. Thanks for reading, and have a great day!
Well, this is probably going to be my last devlog for the Stardance Challenge, so let’s make it count. First off, I finally managed to convert Dewen to IndexedDB, one of my long-term goals for the app. LocalStorage was starting to become limiting, and I wanted something more scalable while still keeping Dewen local-first. That’s why I went with IndexedDB. I set up DewenDB in storage.ts, added helper functions in main.ts to save tasks, notes, and activities, and made sure everything loads when the app starts. Now, I want to take a moment to look at how far we’ve come. Dewen started back in December 2025 as a simple to-do list. From there, it evolved into a productivity hub, then a productivity workspace, and now an actual application. The task list, focus timer, quick notes, calendar, activity panel, command bar, and everything else have come a long way from that original task list. Building Dewen, and participating in the Stardance Challenge, has taught me much more than just how to code. It has taught me how to take an idea and turn it into a real application that people can actually use. Now that the Stardance Challenge is wrapping up, I’m going to be shifting some of my time toward other projects while continuing to work on Dewen. First, Dewen is my submission for the 2026 Congressional App Challenge, representing Pennsylvania’s 15th District, so that’s something I’m excited to focus on. I also have several other projects I want to work on alongside Dewen: AuditionLM, an AI benchmark ranking and evaluation app; Local In A Box, or LIAB, a CLI tool for integrating and managing local-first architecture in applications; and Pocket Lab, a portable experimentation device for conducting experiments and exploring science. Stardance may be coming to an end, but Dewen never will. Thank you for following along, supporting the project, and watching it grow.
I know I’m contradicting what I said before, that I was done with Stardance, but I thought this was something cool to talk about. Well, I have agents in Dewen now! Integrating AI into Dewen has been one of my top goals since the start. Now it’s actually a reality, and I feel absolute pride in accomplishing this. How it works is you toggle AI in the settings if you want it on or off, then it uses Bring Your Own Key (BYOK) meaning you can insert your API key into the app. Then there’s a button in the sidebar with shapes. Click on that, type in your prompt, and Dewen will do the rest. This is powered by my Python backend, hosted on Render and UptimeRobot opens it every five minutes to prevent it from taking 50 seconds to load the AI. I hope you enjoy using AI in Dewen, and have a great rest of your day!
I have added a second agent: the Researcher Agent! To make it work, you need to have a Tavily API key and insert it into the settings. Then you can type what you want and it creates a quick note containing what it researched. Alongside that, I also added agent selection where you can choose which agent you want to use. This prevents weird things from happening if you instruct the wrong agent. I hope you have a great rest of your day! Try out the Researcher Agent now! (if you want to 😁)
Now that Stardance is happening for another month, I’m able to do more devlogs, so kudos to everyone for making it happen. Another big milestone for Dewen: It officially has a desktop application now! Now you don’t have to use the website often and instead you can use the desktop application. It uses Tauri to help with wrapping the app in a desktop layer to help make it a legitimate desktop app. A quick heads up for macOS users: because this is an independent, open-source application bundle, macOS may display a warning stating the app is “damaged” on your first launch. You can learn how to do it correctly in the README on the GitHub repo page. Dewen is currently available for macOS, but I hope to expand it to Windows and Linux as well. Thanks for reading, and I hope you have a great day!
This isn’t really a devlog, but I thought I might just post about it. My app, after not having an identity for so long, finally has its own logo. I feel extremely glad about the logo being over and done with and the colors in the logo as well. I want to give credit to @Jcleo2 for creating the geometry for the logo, which I then refined and added my own colors. So thank you @Jcleo2 . Thanks for reading, and have a great day!
Last devlog: I decided to add multilingual support to make Dewen more accessible to people around the world. It supports languages like Spanish, French, German, Chinese, Japanese, Korean, and more. Feel free to try it out if you’d like 🙂
Ships:
This is my task and project management web app called Dewen, which is meant to be completely subscription-free, AI-optional, and local-first while delivering useful productivity tools. What was definitely challenging was the search and command bar, where I had to rely on AI tools to help me build it. What I’m proud of is how the tools sync with each other. When you add a task, it renders on the calendar, and when you start a focus session, the activity panel logs the action. Finally, users should know that it takes barely any steps to get started, since there are no accounts.
New Dewen version! Includes: removed topbar and updated sidebar accent color customization animation for collapsing and expanding mini analytics made what to focus on an analytic necessary bug fixes There will be more to come. Thanks for supporting me on this journey!
Features Added IndexedDB integration Avatars and more customization options More command bar commands SEO improvements so Dewen can appear in Google search results Two new mini analytics: Upcoming Tasks and Stale Tasks Better responsiveness across devices What was challenging? Probably the IndexedDB integration. It meant moving from a simple storage method to a full database. I had to learn how to create object stores, save data to them, and load that data when the app starts. What am I proud of? The IndexedDB integration and the increased customization. Adding IndexedDB makes Dewen feel much more like a real application than just a project, while features like avatars and theme presets make it much easier for users to personalize their experience. What’s next? Now that the Stardance Challenge is about to wrap up, I’m going to pivot some of my time toward other things, including the Congressional App Challenge and my other projects: AuditionLM, LIAB, and Pocket Lab, while also continue development on Dewen. Thank you for supporting me throughout this challenge and following along as Dewen grew.
Last major ship for Dewen: agents with a Bring Your Own Key structure a desktop app for macOS multilingual support and a new logo (credit to @Jcleo2 for the logo geometry) Feel free to try out the new stuff if you’d like. https://dewen.netlify.app...
|
1793087737.0869799
|
1793174137.0869799
|
|
70353
|
cool site by @kingkev | Stardance
|
kingkev
|
0
|
3.08
|
0
|
[]
|
[{"post_id": 81640, "ts": "202 [{"post_id": 81640, "ts": "2026-10-21T21:04:20Z", "hours": 0.9808, "text": "now you can draw smt as wellll!!!!!!!!!!!!!! yeyyyyyyy and ofc PURPLE 🐞"}, {"post_id": 81337, "ts": "2026-10-20T21:41:23Z", "hours": 0.3936, "text": "yeyyy. now the music actually playss! click on the blinkie and a song from the artist will start playing!!!!!!!!!!!!!! (gotta work on the design tho) :P"}, {"post_id": 81095, "ts": "2026-10-19T20:58:14Z", "hours": 0.6506, "text": "heyyyy!!!!!!!!! OFC music is ESSENTIAL. so here we are. im making an audioplayer for this new site thingy here :D yey!!!"}, {"post_id": 80814, "ts": "2026-10-18T21:24:33Z", "hours": 1.0525, "text": "new siteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"}]...
|
Title: cool site by @kingkev | Stardance
Devlogs: Title: cool site by @kingkev | Stardance
Devlogs:
new siteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
heyyyy!!!!!!!!! OFC music is ESSENTIAL. so here we are. im making an audioplayer for this new site thingy here :D yey!!!
yeyyy. now the music actually playss! click on the blinkie and a song from the artist will start playing!!!!!!!!!!!!!! (gotta work on the design tho) :P
now you can draw smt as wellll!!!!!!!!!!!!!! yeyyyyyyy and ofc PURPLE 🐞...
|
1793005033.6189246
|
1793609833.6189246
|
|
70863
|
DayMap by @srinivasa07 | Stardance
|
srinivasa07
|
0
|
50.77
|
0
|
[]
|
[{"post_id": 81638, "ts": "202 [{"post_id": 81638, "ts": "2026-10-21T20:57:15Z", "hours": 50.765, "text": "I actually created this project for future, so I didn’t do devlogs but anyways here is how I Used it. I spent my time working on flask router and sql db, I had to create a SQLite tables to make sure nothing gets lost if you change a browser, I had to do task management about separating (overcome, today and upcoming ) and react interface with inputs, fetching flask and state handling. Connecting every button to the flask api. Future room using several things and a timer and I hade to do all this while fixing several bugs and with less than 10% ai usage"}]...
|
Title: DayMap by @srinivasa07 | Stardance
Devlogs Title: DayMap by @srinivasa07 | Stardance
Devlogs:
I actually created this project for future, so I didn’t do devlogs but anyways here is how I Used it. I spent my time working on flask router and sql db, I had to create a SQLite tables to make sure nothing gets lost if you change a browser, I had to do task management about separating (overcome, today and upcoming ) and react interface with inputs, fetching flask and state handling. Connecting every button to the flask api. Future room using several things and a timer and I hade to do all this while fixing several bugs and with less than 10% ai usage...
|
1792619235.4223676
|
1793224035.4223676
|
|
65862
|
LED Pen Holder by @Vihaan2355 | Stardance
|
Vihaan2355
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T20:34:04Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a LED Pen Holder for this pen i had laying around with a led on the back.", "repo": "https://github.com/Vihaan2355/LED-Holder-for-electronics-focus", "demo": ""}]...
|
[{"post_id": 81632, "ts": "202 [{"post_id": 81632, "ts": "2026-10-21T20:31:46Z", "hours": 0.2833, "text": "PROJECT BUILT, My led pen holder parts have been recieved and I finished building it and its ready to be shipped!"}, {"post_id": 73813, "ts": "2026-09-26T02:29:38Z", "hours": 1.2092, "text": "Im working on this LED Light holder which basically adds a little spot of light on my electronics table in which I can see more detail in the parts and be more precise."}]...
|
Title: LED Pen Holder by @Vihaan2355 | Stardance
Title: LED Pen Holder by @Vihaan2355 | Stardance
Devlogs:
Im working on this LED Light holder which basically adds a little spot of light on my electronics table in which I can see more detail in the parts and be more precise.
PROJECT BUILT, My led pen holder parts have been recieved and I finished building it and its ready to be shipped!
Ships:
I made a LED Pen Holder for this pen i had laying around with a led on the back....
|
1793091214.6517797
|
1793177614.6517797
|
|
70858
|
Personal website by @catlover125r | Stardance
|
catlover125r
|
1
|
29.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T20:32:05Z", "hours": 29.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my personal site, built from scratch with plain HTML and CSS and hosted on Vercel. It covers my classes, projects, and what I do at Sequoia. I also featured the papers I made for data science projects (RunScore and RecovHR). A recent addition was a heatmap for my running. If you click “Cross Country & Track” it opens a heatmap of every run I’ve recorded on my COROS watch. Hidden pages: /momrecipe brings you to a collection of my mom’s 345 recipes that I have digitized for her. /reciptpolaroid was built for a party where you can take a photo on your phone and it will print it on a receipt printer for a makeshift polaroid. /CalcPlot3D is a self hosted copy of CalcPlot3D because I like it so much I don’t want to lose it.", "repo": "https://github.com/catlover125r/lukepopler.me", "demo": "https://lukepopler.me"}]...
|
[{"post_id": 81630, "ts": "202 [{"post_id": 81630, "ts": "2026-10-21T20:29:29Z", "hours": 29.4625, "text": "My personal site, built from scratch with plain HTML and CSS and hosted on Vercel. It covers my classes, projects, and what I do at Sequoia. I also featured the papers I made for data science projects (RunScore and RecovHR). A recent addition was a heatmap for my running. If you click “Cross Country & Track” it opens a heatmap of every run I’ve recorded on my COROS watch. Hidden pages: /momrecipe brings you to a collection of my mom’s 345 recipes that I have digitized for her. /reciptpolaroid was built for a party where you can take a photo on your phone and it will print it on a receipt printer for a makeshift polaroid. /CalcPlot3D is a self hosted copy of CalcPlot3D because I like it so much I don’t want to lose it."}]...
|
Title: Personal website by @catlover125r | Stardan Title: Personal website by @catlover125r | Stardance
Devlogs:
My personal site, built from scratch with plain HTML and CSS and hosted on Vercel. It covers my classes, projects, and what I do at Sequoia. I also featured the papers I made for data science projects (RunScore and RecovHR). A recent addition was a heatmap for my running. If you click “Cross Country & Track” it opens a heatmap of every run I’ve recorded on my COROS watch. Hidden pages: /momrecipe brings you to a collection of my mom’s 345 recipes that I have digitized for her. /reciptpolaroid was built for a party where you can take a photo on your phone and it will print it on a receipt printer for a makeshift polaroid. /CalcPlot3D is a self hosted copy of CalcPlot3D because I like it so much I don’t want to lose it.
Ships:
This is my personal site, built from scratch with plain HTML and CSS and hosted on Vercel. It covers my classes, projects, and what I do at Sequoia. I also featured the papers I made for data science projects (RunScore and RecovHR). A recent addition was a heatmap for my running. If you click “Cross Country & Track” it opens a heatmap of every run I’ve recorded on my COROS watch. Hidden pages: /momrecipe brings you to a collection of my mom’s 345 recipes that I have digitized for her. /reciptpolaroid was built for a party where you can take a photo on your phone and it will print it on a receipt printer for a makeshift polaroid. /CalcPlot3D is a self hosted copy of CalcPlot3D because I like it so much I don’t want to lose it....
|
1793195674.6866908
|
1793282074.6866908
|
|
67309
|
PyFi InstroPad(1) by @Choc0latesauce | Stardance
|
Choc0latesauce
|
0
|
15.79
|
0
|
[]
|
[{"post_id": 81627, "ts": "202 [{"post_id": 81627, "ts": "2026-10-21T20:05:23Z", "hours": 0.9725, "text": "Here we are! The design stage is now complete! I’ve done the final case touch ups, added some Easter eggs, uploaded the files to GitHub and am now ready to ship! I can’t wait to assemble InstroPad(1) and make the software synth for it! See yall soon! <3"}, {"post_id": 81552, "ts": "2026-10-21T17:45:39Z", "hours": 2.1414, "text": "After 2hrs of pulling my hair out the firmware is finally done!! Just gotta bundle everything and it’ll be ready for the GitHub release. I had lots of fun making InstroPad(1) digitally and I can’t wait to build it for real!"}, {"post_id": 81486, "ts": "2026-10-21T13:42:36Z", "hours": 1.0672, "text": "Finished the final case design and renders! I’m very happy with how it came out! Final step is to make the firmware, though I may make that after the fact if possible as it would be easier."}, {"post_id": 80799, "ts": "2026-10-18T20:24:26Z", "hours": 1.16, "text": "Finished the final version of the PCB, moved the diodes so they don’t interfere with the keycaps as well as changing the PCB colour and learning how to make silkscreen art (A picture of Robyn, a link to my github and the Hack Club logo). Time to finish the case and do the final renders next!"}, {"post_id": 80192, "ts": "2026-10-16T17:15:50Z", "hours": 2.8672, "text": "After finishing the basic design for the PCB I have moved onto designing the case, this is my first time going solo when using CAD software, so I had to teach myself a lot of the tools. So far, the features of the case are: dual part design allowing for easy disassembly but easy manufacturing, a floating PCB mount that holds the pcb above the base of the case in order to give a springy feel as well as, easy assembly and adjustability for manufacturing tolerances as well as, providing the facilities to under mount components. Finally, I have introduced cutouts for the switches, display, rotary encoder and USB port, allowing the user to actually use InstroPad(1). Moving onto final case and pcb refinements next, looking forward to making this for real!"}, {"post_id": 78768, "ts": "2026-10-11T15:28:17Z", "hours": 5.4086, "text": "Finished the PCB design for InstroPad(1), as I’m working with hardware limitations due to the approved parts I had to learn interesting techniques in order to maximize InstroPad(1)’s capabilities, including learning switch matrixing. I’ve made the PCB deliberately too wide as this will assist with mounting using the M3 screw holes in such a way that the position of the PCB can be adjusted to accommodate for manufacturing tolerances. I’ve already started on the case design and can’t wait to share that next! P.S. The seeduino isn’t set that back now, this is an old screenshot lol."}, {"post_id": 76430, "ts": "2026-10-03T14:31:50Z", "hours": 2.175, "text": "Been following the hackpad tutorial and I think it’s given me a basic understanding of how to use the tools at my disposal, moving onto the proper design stage now!"}]...
|
Title: PyFi InstroPad(1) by @Choc0latesauce | Star Title: PyFi InstroPad(1) by @Choc0latesauce | Stardance
Devlogs:
Been following the hackpad tutorial and I think it’s given me a basic understanding of how to use the tools at my disposal, moving onto the proper design stage now!
Finished the PCB design for InstroPad(1), as I’m working with hardware limitations due to the approved parts I had to learn interesting techniques in order to maximize InstroPad(1)’s capabilities, including learning switch matrixing. I’ve made the PCB deliberately too wide as this will assist with mounting using the M3 screw holes in such a way that the position of the PCB can be adjusted to accommodate for manufacturing tolerances. I’ve already started on the case design and can’t wait to share that next! P.S. The seeduino isn’t set that back now, this is an old screenshot lol.
After finishing the basic design for the PCB I have moved onto designing the case, this is my first time going solo when using CAD software, so I had to teach myself a lot of the tools. So far, the features of the case are: dual part design allowing for easy disassembly but easy manufacturing, a floating PCB mount that holds the pcb above the base of the case in order to give a springy feel as well as, easy assembly and adjustability for manufacturing tolerances as well as, providing the facilities to under mount components. Finally, I have introduced cutouts for the switches, display, rotary encoder and USB port, allowing the user to actually use InstroPad(1). Moving onto final case and pcb refinements next, looking forward to making this for real!
Finished the final version of the PCB, moved the diodes so they don’t interfere with the keycaps as well as changing the PCB colour and learning how to make silkscreen art (A picture of Robyn, a link to my github and the Hack Club logo). Time to finish the case and do the final renders next!
Finished the final case design and renders! I’m very happy with how it came out! Final step is to make the firmware, though I may make that after the fact if possible as it would be easier.
After 2hrs of pulling my hair out the firmware is finally done!! Just gotta bundle everything and it’ll be ready for the GitHub release. I had lots of fun making InstroPad(1) digitally and I can’t wait to build it for real!
Here we are! The design stage is now complete! I’ve done the final case touch ups, added some Easter eggs, uploaded the files to GitHub and am now ready to ship! I can’t wait to assemble InstroPad(1) and make the software synth for it! See yall soon! <3...
|
1793109055.7621946
|
1793713855.7621946
|
|
70855
|
JP Pad by @Jhenil | Stardance
|
Jhenil
|
0
|
1.42
|
0
|
[]
|
[{"post_id": 81624, "ts": "202 [{"post_id": 81624, "ts": "2026-10-21T20:00:32Z", "hours": 1.4203, "text": "Devlog - 1 Ok so I have started on this hardware project which is JP Pad. Why I chose that name? Because JP are my initials and this is a macropad so pad comes from there. I have designed the schematic for the pcb and have routed the pcb. This was my first time making it but it was fairly quick. I am attaching the images of it down below. Let me know what you think about it. NOTE: IT TOOK ME 39 MINUTES TO MAKE IT BUT THERE IS A SYNC ISSUE WITH LOOKOUT AND HACKATIME FOR ME. I AM REQUESTING THE REVIEWER TO DEFLATE 46 MINUTES OF MY TIME TO ACCOUNT FOR THAT INCREASE DUE TO A SYNC PROBLEM."}]...
|
Title: JP Pad by @Jhenil | Stardance
Devlogs:
Dev Title: JP Pad by @Jhenil | Stardance
Devlogs:
Devlog - 1 Ok so I have started on this hardware project which is JP Pad. Why I chose that name? Because JP are my initials and this is a macropad so pad comes from there. I have designed the schematic for the pcb and have routed the pcb. This was my first time making it but it was fairly quick. I am attaching the images of it down below. Let me know what you think about it. NOTE: IT TOOK ME 39 MINUTES TO MAKE IT BUT THERE IS A SYNC ISSUE WITH LOOKOUT AND HACKATIME FOR ME. I AM REQUESTING THE REVIEWER TO DEFLATE 46 MINUTES OF MY TIME TO ACCOUNT FOR THAT INCREASE DUE TO A SYNC PROBLEM....
|
1792615627.2587628
|
1793220427.2587628
|
|
69752
|
Smart inspection helmet by @Tejas | Stardance
|
Tejas
|
0
|
8.89
|
0
|
[]
|
[{"post_id": 81618, "ts": "202 [{"post_id": 81618, "ts": "2026-10-21T19:39:38Z", "hours": 6.4294, "text": "Oct 21 Devlog 2 detecting the circle in the gauge i have fixed the fps issue previously and getting stable fps to perform my task through a webcam its mentioned in first devlog so i moved on to next part so after that i started working on detecting gauge and its main pin first i started with detecting the circle and middle point of the gauge so i used gauge image for that for now and then i apply same algorithm in video input so i understanded the geometry of circle to detect circle in the gauge then i get to know that we have prepare the image first for the detection in which we apply grayscale filter and blur to image , blur to reduce the noise after that preparing i used the “cv2.HoughCircles()” library of open cv this library search the circular shapes in images it have multiple parameter we can tweak to get desirable outcome after using that library to detect circle i draw the circle in the image and displayed the output in terminal after detecting the main circle in gauge finding the pin mid point is easy just put an dot on middle of circle(repented by red) Long Part Detecting the needle to detect the main gauge needle we have to mask the dial gray scale the region and using edge detection to highlight the boundaries and line (photos added) then identify the candidate line around the gauge so they all not mix-up (only detects straight lines ) then i visualized the lines i faced like problem in unpacking this detected line coordinates because it is structed as a single integer so i lookup for solution and come accross it we have to use “fatten()” it coverts arrays into one-dimensional array i didnt get it that much but its like assigning multiple coordinate at single point and i got lines on the images but all are not filtered too many line the out put is usable so we have to use filters like in the sence a set rules which line can pass through which are not i mused midpoint formula to calculate the closest line to the mid point to detect the needle after that i used angle calculation too after that i used all of this filtration and all that and combine it together and got the output in last now its detecting the needle and dial of the gauge given in input (some time is inflated due to some error in hackatime i hope it solve asap it tracked my unrelated grokbot session time in this project )"}, {"post_id": 80464, "ts": "2026-10-17T18:37:58Z", "hours": 2.4633, "text": "Oct 18 Devlog 1 Starting up Project Testing all things setting up Making a inspection helmet for industry use where they use it for gauge reading and storing that data and its used for live monitoring What did i do today i checked the new webcam i choose this cam because its best for my use , got its feed on window using python decided using open cv library of python to track the gauge data live learned you to add images in opencv window and add filters to them learned how to apply different types of filters Problems - i faced from in getting stable fps in video feed using web cam so i tried multiple technique then i figured out by lowering the resolution and changing the video format give me output that i want so set the resolution to 640X480 and format to MJPG in future now i am testing in my pc then i shift to my rdk x5 board and use it as computation board and use its npu to render output and attach this to a helmet so works can use this"}]...
|
Title: Smart inspection helmet by @Tejas | Stardan Title: Smart inspection helmet by @Tejas | Stardance
Devlogs:
Oct 18 Devlog 1 Starting up Project Testing all things setting up Making a inspection helmet for industry use where they use it for gauge reading and storing that data and its used for live monitoring What did i do today i checked the new webcam i choose this cam because its best for my use , got its feed on window using python decided using open cv library of python to track the gauge data live learned you to add images in opencv window and add filters to them learned how to apply different types of filters Problems - i faced from in getting stable fps in video feed using web cam so i tried multiple technique then i figured out by lowering the resolution and changing the video format give me output that i want so set the resolution to 640X480 and format to MJPG in future now i am testing in my pc then i shift to my rdk x5 board and use it as computation board and use its npu to render output and attach this to a helmet so works can use this
Oct 21 Devlog 2 detecting the circle in the gauge i have fixed the fps issue previously and getting stable fps to perform my task through a webcam its mentioned in first devlog so i moved on to next part so after that i started working on detecting gauge and its main pin first i started with detecting the circle and middle point of the gauge so i used gauge image for that for now and then i apply same algorithm in video input so i understanded the geometry of circle to detect circle in the gauge then i get to know that we have prepare the image first for the detection in which we apply grayscale filter and blur to image , blur to reduce the noise after that preparing i used the “cv2.HoughCircles()” library of open cv this library search the circular shapes in images it have multiple parameter we can tweak to get desirable outcome after using that library to detect circle i draw the circle in the image and displayed the output in terminal after detecting the main circle in gauge finding the pin mid point is easy just put an dot on middle of circle(repented by red) Long Part Detecting the needle to detect the main gauge needle we have to mask the dial gray scale the region and using edge detection to highlight the boundaries and line (photos added) then identify the candidate line around the gauge so they all not mix-up (only detects straight lines ) then i visualized the lines i faced like problem in unpacking this detected line coordinates because it is structed as a single integer so i lookup for solution and come accross it we have to use “fatten()” it coverts arrays into one-dimensional array i didnt get it that much but its like assigning multiple coordinate at single point and i got lines on the images but all are not filtered too many line the out put is usable so we have to use filters like in the sence a set rules which line can pass through which are not i mused midpoint formula to calculate the closest line to the mid point to detect the needle after that i used angle calculation too after that i used all of this filtration and all that and combine it together and got the output in last now its detecting the needle and dial of the gauge given in input (some time is inflated due to some error in hackatime i hope it solve asap it tracked my unrelated grokbot session time in this project )...
|
1792857352.9158788
|
1793462152.9158788
|
|
70225
|
Gangwal's blogpost by @arhamgangwal | Stardanc Gangwal's blogpost by @arhamgangwal | Stardance...
|
arhamgangwal
|
1
|
4.29
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T10:55:05Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal blog website where I can share my thoughts, projects, and things I’m interested in. One of the biggest challenges was getting everything to work properly, especially the login system and deploying the website online. I’m proud that I was able to build the website, fix the errors, and make it live on my own. You can test my project here: https://gangwalsblog-sand.vercel.app/", "repo": "https://github.com/arhamgangwal/gangwalsblog", "demo": "https://gangwalsblog-sand.vercel.app/"}]...
|
[{"post_id": 81611, "ts": "202 [{"post_id": 81611, "ts": "2026-10-21T19:18:20Z", "hours": 0.2903, "text": "Removed the useless and weird elements that the AI agent had added, that I did not notice initially, now the website is much more refined, I also changed the font"}, {"post_id": 81459, "ts": "2026-10-21T10:53:33Z", "hours": 0.71, "text": "The project is complete, I deployed the website to vercel and created a github repository for it"}, {"post_id": 81308, "ts": "2026-10-20T19:25:02Z", "hours": 1.2625, "text": "Added the functionality to like, comment and share, also fixed some errors in mongodb where the posts were not syncing with the database correctly"}, {"post_id": 81230, "ts": "2026-10-20T11:38:14Z", "hours": 1.0022, "text": "In the older versions when the user was signed in, it would still show the sign in button on the navigation bar, now it shows a profile picture and a option to logout. In the previous versions it would also require a login everytime you clicked on a blog now it only does that once, also in previous versions it would require a login everytime the page refreshed i also fixed that so now you stay signed in."}, {"post_id": 80637, "ts": "2026-10-18T11:16:19Z", "hours": 0.4936, "text": "Just created the ui of the homepage, using reference from the design language of another website."}, {"post_id": 80615, "ts": "2026-10-18T09:52:49Z", "hours": 0.8197, "text": "Just completed the backend, I completed the setup of mongodb databse, and betterauth authentication, i still need to work on the front end."}]...
|
Title: Gangwal's blogpost by @arhamgangwal | S Title: Gangwal's blogpost by @arhamgangwal | Stardance
Devlogs:
Just completed the backend, I completed the setup of mongodb databse, and betterauth authentication, i still need to work on the front end.
Just created the ui of the homepage, using reference from the design language of another website.
In the older versions when the user was signed in, it would still show the sign in button on the navigation bar, now it shows a profile picture and a option to logout. In the previous versions it would also require a login everytime you clicked on a blog now it only does that once, also in previous versions it would require a login everytime the page refreshed i also fixed that so now you stay signed in.
Added the functionality to like, comment and share, also fixed some errors in mongodb where the posts were not syncing with the database correctly
The project is complete, I deployed the website to vercel and created a github repository for it
Removed the useless and weird elements that the AI agent had added, that I did not notice initially, now the website is much more refined, I also changed the font
Ships:
I made a personal blog website where I can share my thoughts, projects, and things I’m interested in. One of the biggest challenges was getting everything to work properly, especially the login system and deploying the website online. I’m proud that I was able to build the website, fix the errors, and make it live on my own. You can test my project here: https://gangwalsblog-sand.vercel.app/...
|
1793199298.0647957
|
1793285698.0647957
|
|
69642
|
My macropad! by @0blongPistachi0 | Stardance
|
0blongPistachi0
|
0
|
18.81
|
0
|
[]
|
[{"post_id": 81610, "ts": "202 [{"post_id": 81610, "ts": "2026-10-21T19:11:47Z", "hours": 3.2964, "text": "4 New iterations of my macropad case , I still don’t like the look of them yet (Im very picky) , currently on V10"}, {"post_id": 81129, "ts": "2026-10-20T00:18:54Z", "hours": 6.7769, "text": "Made a handful of sketches for my Macropad case , made 3 new iterations in cad , Redesigned the PCB 3 times , made sure it complies with JLCLONE, ACTUALLY Finalised the PCB!!! ,and organised Gerber , STL and Firmware files like the guide wants , Tomorrow ill start working on firmware , and continue working on designs for the case,"}, {"post_id": 80858, "ts": "2026-10-19T01:29:54Z", "hours": 6.4656, "text": "Made a couple mockups for what i want my Macropad to look like , realised that i dont like the look of it , completely remodeled it , finalised the pcb design and worked on v3 of the case design. Ill start ordering the parts tomorrow and work on optimising the case"}, {"post_id": 80501, "ts": "2026-10-17T21:45:59Z", "hours": 2.2739, "text": "Figuring out how a macropod works , what i want mine to do , what parts i want to use and started on a model , But i completely forgot that Hack pad has a tutorial for this , so ill be using that tomorrow"}]...
|
Title: My macropad! by @0blongPistachi0 | Stardanc Title: My macropad! by @0blongPistachi0 | Stardance
Devlogs:
Figuring out how a macropod works , what i want mine to do , what parts i want to use and started on a model , But i completely forgot that Hack pad has a tutorial for this , so ill be using that tomorrow
Made a couple mockups for what i want my Macropad to look like , realised that i dont like the look of it , completely remodeled it , finalised the pcb design and worked on v3 of the case design. Ill start ordering the parts tomorrow and work on optimising the case
Made a handful of sketches for my Macropad case , made 3 new iterations in cad , Redesigned the PCB 3 times , made sure it complies with JLCLONE, ACTUALLY Finalised the PCB!!! ,and organised Gerber , STL and Firmware files like the guide wants , Tomorrow ill start working on firmware , and continue working on designs for the case,
4 New iterations of my macropad case , I still don’t like the look of them yet (Im very picky) , currently on V10...
|
1792857276.85239
|
1793462076.85239
|
|
68971
|
web based jumper game by @danielkosar | Stardance
|
danielkosar
|
0
|
9.62
|
0
|
[]
|
[{"post_id": 81587, "ts": "202 [{"post_id": 81587, "ts": "2026-10-21T18:51:37Z", "hours": 2.0975, "text": "So today i worked on apples, which give you points (in the future there will be more fruits) and levels tab in main menu, now you can choose different level (only 2 levels for now) so that means different layouts of the traps, apples, platforms."}, {"post_id": 81237, "ts": "2026-10-20T12:37:19Z", "hours": 3.3825, "text": "The end screen and health system"}, {"post_id": 78844, "ts": "2026-10-11T19:07:56Z", "hours": 2.9903, "text": "worked on gravity, model, collisions, and damage, the character is kinda buggy, but that is because i cant draw."}, {"post_id": 78323, "ts": "2026-10-10T12:57:12Z", "hours": 1.1461, "text": "working on player (cube for now) movement in all 4 directions and loading the player, however it is glitching. For some reason when i press up or down the player continues to go into that direction. Might use that as challenge."}]...
|
Title: web based jumper game by @danielkosar | Sta Title: web based jumper game by @danielkosar | Stardance
Devlogs:
working on player (cube for now) movement in all 4 directions and loading the player, however it is glitching. For some reason when i press up or down the player continues to go into that direction. Might use that as challenge.
worked on gravity, model, collisions, and damage, the character is kinda buggy, but that is because i cant draw.
The end screen and health system
So today i worked on apples, which give you points (in the future there will be more fruits) and levels tab in main menu, now you can choose different level (only 2 levels for now) so that means different layouts of the traps, apples, platforms....
|
1793127275.4763248
|
1793732075.4763248
|
|
21477
|
The KB by @Kartik_B | Stardance
|
Kartik_B
|
2
|
18.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-22T17:07:24Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "THE KB I made my personal website with the personal website mission. This website is space themed, it has planets for different thing like Introduction, Projects etc. You have a ship and you explore the planets. The website is made to scroll horizontally. Mobile version isn’t available right now. The website will continue to go on as i make more projects do more stuff in my life.", "repo": "https://github.com/K-BIDDOLIYA/The-KB", "demo": "https://the-kb.vercel.app"}, {"ship_num": 2, "ts": "2026-09-06T18:43:07Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The-KB i my personal website under the mission personal site. This site is based on space theme. This is my first ship. I will add the designs and some more info later as i go. Right now it has 7 circle (they’re supposed to be planets actually)", "repo": "https://github.com/K-BIDDOLIYA/The-KB", "demo": "https://the-kb.vercel.app"}]...
|
[{"post_id": 81577, "ts": "202 [{"post_id": 81577, "ts": "2026-10-21T18:46:30Z", "hours": 3.3928, "text": "I changed Achievements to Specials. Made some design changes. Added more projects. Added some Specials. Changed the planets and now they play an animation."}, {"post_id": 80549, "ts": "2026-10-18T04:13:35Z", "hours": 4.4444, "text": "I love my project more than anything. That’s why i made a separate projects.html for them with a timeline. All of the projects not included till now. And will not be cause the no. of projects is still increasing day by day. They are mostly on the june to october side cause before that, i used to delete failed projects and also heavy AI usage was there. Here’s a screenshot."}, {"post_id": 68537, "ts": "2026-09-15T08:48:16Z", "hours": 1.6364, "text": "Yoo, i just added some designs that i learned from a tutorial type video. The panel looks cool. But now, i’ll work on another thing inside of it. The Timeline. It will be revealed soon. What do you think about this project."}, {"post_id": 66134, "ts": "2026-09-11T19:11:31Z", "hours": 1.4808, "text": "Just tryna spit some words from the soul here No design work done yet, just plain code. Also, should i add a timeline to show everything i did online. I can use it for scheduling projects also."}, {"post_id": 63104, "ts": "2026-09-06T18:38:30Z", "hours": 1.3342, "text": "Ok, i have completed all the requirements. I’ll do the design stuff later. I’m making the first ship now."}, {"post_id": 62068, "ts": "2026-09-05T09:36:39Z", "hours": 2.0969, "text": "The project is going good. I am planning to ship the version 1 without the info in there, cause i just came to know that the first ship won’t be rated. So, i’ll just have the requirements completed and the project will be get its first ship right away. I have added 7 circles here, what could be the plan for the design? can you guess? Edit: I just left claude and i’m tryna do it alone."}, {"post_id": 60776, "ts": "2026-09-03T11:26:57Z", "hours": 2.7822, "text": "I have made a new plan and design for the website. I am also trying to learn HTML, CSS and JS while building this project that’s why its taking too long. i am learning the thing first before i implement it in the codes. Claude is helping me in the learning part, but i swear i didn’t used it to generate a single line of code. It is just instructing me on what to do next. I will not reveal the plan right now. Try to guess it Here’s a screenshot."}, {"post_id": 58017, "ts": "2026-08-30T11:08:54Z", "hours": 1.0689, "text": "TheKB Devlog - #1 Just started off with learning some HTML and CSS for the first time. I am planning to include soo many stuff about me in this personal website. I don’t really have any design ideas right now, please give me some ideas for how can i make the website look more impressive and crazy. This i the first look btw."}]...
|
Title: The KB by @Kartik_B | Stardance
Devlogs:
T Title: The KB by @Kartik_B | Stardance
Devlogs:
TheKB Devlog - #1 Just started off with learning some HTML and CSS for the first time. I am planning to include soo many stuff about me in this personal website. I don’t really have any design ideas right now, please give me some ideas for how can i make the website look more impressive and crazy. This i the first look btw.
I have made a new plan and design for the website. I am also trying to learn HTML, CSS and JS while building this project that’s why its taking too long. i am learning the thing first before i implement it in the codes. Claude is helping me in the learning part, but i swear i didn’t used it to generate a single line of code. It is just instructing me on what to do next. I will not reveal the plan right now. Try to guess it Here’s a screenshot.
The project is going good. I am planning to ship the version 1 without the info in there, cause i just came to know that the first ship won’t be rated. So, i’ll just have the requirements completed and the project will be get its first ship right away. I have added 7 circles here, what could be the plan for the design? can you guess? Edit: I just left claude and i’m tryna do it alone.
Ok, i have completed all the requirements. I’ll do the design stuff later. I’m making the first ship now.
Just tryna spit some words from the soul here No design work done yet, just plain code. Also, should i add a timeline to show everything i did online. I can use it for scheduling projects also.
Yoo, i just added some designs that i learned from a tutorial type video. The panel looks cool. But now, i’ll work on another thing inside of it. The Timeline. It will be revealed soon. What do you think about this project.
I love my project more than anything. That’s why i made a separate projects.html for them with a timeline. All of the projects not included till now. And will not be cause the no. of projects is still increasing day by day. They are mostly on the june to october side cause before that, i used to delete failed projects and also heavy AI usage was there. Here’s a screenshot.
I changed Achievements to Specials. Made some design changes. Added more projects. Added some Specials. Changed the planets and now they play an animation.
Ships:
The-KB i my personal website under the mission personal site. This site is based on space theme. This is my first ship. I will add the designs and some more info later as i go. Right now it has 7 circle (they’re supposed to be planets actually)
THE KB I made my personal website with the personal website mission. This website is space themed, it has planets for different thing like Introduction, Projects etc. You have a ship and you explore the planets. The website is made to scroll horizontally. Mobile version isn’t available right now. The website will continue to go on as i make more projects do more stuff in my life....
|
1793105263.0467744
|
1793191663.0467744
|
|
19993
|
DOSEFIELD by @Zhanik | Stardance
|
Zhanik
|
1
|
18.36
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-20T06:48:20Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Today was all about making the site tell the truth about itself instead of just describing itself. I added a Methods and Limitations page that pulls directly from METHODS.md and the README instead of being rewritten into friendly marketing copy. If the documentation and the code ever disagree, the documentation loses immediately because they are now the exact same file. Every page also got an automated footer showing the commit hash, the test count, and the exact verification date. It would have taken five minutes to hardcode a string like “111 tests passing” and move on. Instead, the build script runs the actual test suite first, and if anything fails, the entire build stops cold. This ensures the footer can never claim a passing state that is not true at that exact moment. Wiring a build to gate on its own test results took most of the afternoon because it required thinking through what happens during a failure, not just when everything goes smoothly, but the absolute transparency is worth it. What I like most is that the limitations table on the public site is word-for-word what is in the repository. There is no filtered summary for visitors. The 0.67x gap between my modeled absorbed dose and NASA’s measured RAD numbers reads just as blunt on the public page as it does in the source code. Transparency matters more than hype. Additionally, charts now export at 3200px, and the configuration that produced them gets baked directly into the image itself, meaning a PNG cannot wander off from the settings that generated it. If you want to test it yourself, you can check the live app at DOSEFIELD. Look at the footer for a real commit hash and test count, open the Methods and Limitations page to count the 12 rows in the limitations table, or export a chart to verify the resolution against what is rendered on your screen. The complete source code is also available on GitHub.", "repo": "https://github.com/izbanovj3-prog/DOSEFIELD", "demo": "https://izbanovj3-prog.github.io/DOSEFIELD/"}]...
|
[{"post_id": 81574, "ts": "202 [{"post_id": 81574, "ts": "2026-10-21T18:39:31Z", "hours": 6.3597, "text": "Hey Stardance crew! Three months since my last devlog, so grab a snack and let me catch you up. DOSEFIELD estimates how much radiation an astronaut gets behind shielding on a trip to Mars, then checks itself against real data from NASA’s Curiosity cruise (MSL/RAD). The big news: I found a mistake in my own results. In my first public version, the solar modulation value (W = 30) could not be reproduced from the derivation I had written down. So I went back to the Oulu neutron-monitor data, matched the exact time window RAD used, skipped the solar-storm days, and got W = 47.50. The new numbers look worse, and I kept them: absorbed dose: 0.264 vs 0.458 mGy/day measured (0.58x) dose equivalent: 1.318 vs 1.75 mSv/day (0.75x) mean quality factor: 4.995 vs 3.82 (1.31x) My model skips secondary particles and neutrons, so it under-predicts the dose. I report the gap and leave it alone. Also shipped: a check against the full NIST PSTAR table (max deviation 1.55% from 10 to 1000 MeV), 190 passing tests, a code archive on Zenodo (DOI 10.5281/zenodo.23433384), a revised paper on SSRN, and a website that links to all of it."}, {"post_id": 30550, "ts": "2026-07-18T06:51:49Z", "hours": 2.6992, "text": "DEVLOG #6 Hey everyone!This is probably the last devlog for DOSEFIELD, at least for a while. It’s been an incredible journey—from the first rough prototype to something I’m genuinely proud to share. Thank you to everyone who followed along, tested the project, gave feedback, or simply read these updates. It really meant a lot.v2.3 is the “show your work” release. Nothing changed in the physics—and that’s exactly the point.The biggest addition is a new Methods page that renders the repository’s own METHODS.md and limitations table directly. That means anyone reading the website sees the exact same equations, assumptions, and all 12 limitations that exist in the source code. If the website and the repository ever disagree, the repository is the source of truth.Every page now also includes a provenance footer that’s generated automatically during the build. Instead of typing in a version number by hand, the site runs git rev-parse and the full test suite, then stamps something like:commit e22ef18 · 111/111 tests · verified 2026-07-18The build will actually fail if the tests don’t pass, so it’s impossible to accidentally display a “green” verification badge on a broken build.I also improved chart exports. Figures now render at 3200 px, and each exported chart includes its full configuration in the caption. That makes it much easier to trace a plot back to the exact settings that produced it, whether it’s used in a poster, report, or presentation.One thing I want to be completely clear about: this verification is about the software, not the physics. Passing 111 tests means the implementation behaves as expected according to those tests—it doesn’t prove the scientific model is perfect. The current validation remains the same: about 2× agreement with MSL/RAD, and the 0.67× absorbed-dose gap is still there, clearly documented.That’s exactly what this release is about: transparency over hype, reproducibility over screenshots, and being honest about what the model can—and can’t—do.Thanks for following this project. ❤️"}, {"post_id": 24869, "ts": "2026-07-08T18:38:22Z", "hours": 2.4278, "text": "DEVLOG #5 (might be the last devlog) Hey! It’s been 11 days since the last devlog. DOSEFIELD wasn’t abandoned—I was just busy building instead of writing.This update was really about two things: making the code cleaner and making the site feel like it belongs in a space mission.The first issue was hidden in the background. The NASA validation numbers on the website were calculated separately from the ones used in my research. The math was identical, but it existed in multiple places. That meant one future change could easily make the numbers disagree.So I refactored everything to use a single source of truth. Now every result comes from the same function, making the site much easier to maintain and much harder to break.Then I focused on the design. The old version worked, but it didn’t feel like DOSEFIELD. I redesigned the interface with a mission-control style, added a cleaner layout, and simplified the visuals. I also removed a lot of unnecessary effects—less glow, fewer gradients, and a more purposeful look.After all those changes, I reran every test. All 107 tests still pass, and the stopping-power calculations remain within 1.55% of NIST reference data, exactly as before.There’s still one limitation: my model predicts about 67% of the radiation dose measured by NASA during the trip to Mars. That’s because it doesn’t yet simulate secondary particle production inside spacecraft shielding. It’s an important limitation, and it’s clearly explained on the website rather than hidden.The biggest lesson from this update wasn’t about physics—it was about revisiting old work. Good code doesn’t duplicate logic, and good design doesn’t rely on effects to look impressive. Sometimes the best improvement is simply cleaning up what you already built."}, {"post_id": 16881, "ts": "2026-06-27T12:17:57Z", "hours": 1.2136, "text": "Devlog #4 — Heavy Elements Cut, Liquid Hydrogen Locked In Lead and titanium were off by 50%. I didn’t hide it. My model tracks how particles slow down inside matter. For heavy elements like lead and titanium, you need a correction for the atom’s electron shells — skip it, and your numbers drift by half the actual value. I haven’t built that correction yet. Faking the results to look clean would gut the whole point of the model. So heavy elements are out for now. Liquid hydrogen sits at the opposite extreme. One electron, no shell complexity — the model handles it without shortcuts. I checked against NIST’s official proton data: 0.14% deviation across the full energy range. In physics terms, that’s a bullseye. Five Materials, One Hierarchy I ran five materials together — liquid hydrogen, methane, polyethylene, water, and aluminum — and tested them as a chain. Two things had to hold: thicker shielding means lower dose, and going from hydrogen to aluminum, dose has to climb, because light elements stop protons better. Both held, with no exceptions. Polyethylene and water differ by just 3% in electrons per gram — the model caught even that gap correctly. The sharpest result: at 40 g/cm², liquid hydrogen cuts dose by 44% compared to aluminum. That’s why some spacecraft designs wrap the crew compartment in hydrogen tanks — fuel and radiation shield in one. All five materials are now locked into regression tests. Total: 103 green tests in CI. One Function, One Truth The dashboard and the generated reports used to calculate their numbers separately. Two parallel code paths mean two places for drift to appear. Now both pull from a single shared function. The number on screen and the number in the report are physically incapable of disagreeing."}, {"post_id": 14174, "ts": "2026-06-23T05:11:04Z", "hours": 2.5839, "text": "Devlog #3 — DOSEFIELD Is Live 🚀Hi! Long time no see.DOSEFIELD is now live: https://izbanovj3-prog.github.io/DOSEFIELD/ The entire dosimeter now runs directly in your browser — no installation required. That includes the controls, dose-vs-thickness chart, particle fragmentation toggle, and validation panel.Under the hood, the project is built with Vite and automatically deployed to GitHub Pages through a GitHub Actions workflow. Every push to the main branch triggers a fresh build and deployment. The setup is intentionally simple: deployment uses GitHub’s built-in Actions token, with no external services and no additional secrets.The only challenge in this release wasn’t physics — it was infrastructure. The first deployment failed because GitHub Actions cannot automatically enable GitHub Pages for a repository. The workflow reached that permission boundary and stopped. After enabling Pages in the repository settings and rerunning the workflow, everything deployed successfully.Once the site was live, I verified that all critical assets were being served correctly. The page, stylesheets, and, most importantly, the Web Worker bundle all return HTTP 200 responses with the correct content types.That Web Worker is particularly important because it handles the species-by-species dose integration calculations off the main UI thread. In practice, this means the interface remains responsive while the physics calculations run in the background.No physics models changed in this release, and the known limitations remain the same. This phase was focused entirely on one goal: shipping a fully accessible browser version of DOSEFIELD.The live demo link is now featured at the top of the README."}, {"post_id": 11802, "ts": "2026-06-19T06:41:00Z", "hours": 1.3047, "text": "DOSEFIELD DAY #2:Fragmentation is now in the live app. Until today the web dosimeter only ran the primary-only transport — the most interesting result, that breaking up heavy ions is why hydrogen-rich shielding wins, was buried in a console script. Now there’s a “Primaries only ⇄ + Fragmentation” toggle, and flipping it visibly bends the curves: polyethylene pulls away from aluminium and the mean quality factor drops. Concretely, at solar minimum behind 20 g/cm², polyethylene’s edge over aluminium jumps from 12% to 34% the moment fragmentation turns on — the same figure the validation script prints, read from the same function, not hardcoded. Mean ⟨Q⟩ behind 16 g/cm² of aluminium falls 4.47 → 4.14. Nothing was tuned; the toggle just calls the existing Bradt–Peters model. And the honest ceiling stays put: still no secondary neutrons, so the absorbed-dose gap vs the real MSL/RAD measurement (~0.31 vs 0.46 mGy/day) remains — and the UI footnote says so out loud. 76/76 tests green, build clean. Next: surface the NIST + RAD validation inside the app itself."}, {"post_id": 10579, "ts": "2026-06-17T11:53:38Z", "hours": 1.5142, "text": "Day #1: the hard part is in, now I find out if it’s right I’m building DOSEFIELD, a 1D model that estimates how much radiation an astronaut absorbs on a deep-space mission — and how much shielding actually helps. Cosmic rays in, dose-equivalent out. What’s already solid: the stopping-power core matches NIST PSTAR reference data to within 1.6%, and behind 10 g/cm² of aluminium at solar minimum the model gives 1.96 mSv/day — about 0.70 Sv over a 360-day Mars cruise. That’s 17% past NASA’s 600 mSv career limit. A round trip to Mars quietly blows through the radiation an astronaut is allowed for their entire career. That’s the reason this project exists. But the first version only tracked primary particles, and it showed: my aluminium, polyethylene and water curves were sitting almost on top of each other. That’s physically wrong — polyethylene should shield noticeably better, because hydrogen is good at breaking up heavy ions. The missing piece is nuclear fragmentation. So this week I implemented it — real fragmentation cross sections (Bradt–Peters), not a fudge factor tuned to match NASA’s measured value. The material difference has to come out of the physics: hydrogen has the shortest nuclear interaction length per g/cm², so it should win on its own. No parameter is fit to the answer. Now I’m validating it, and I’m writing the test down BEFORE the result so I can’t quietly move the goalposts. If the physics is right, I should see four things: the curves separate (polyethylene below aluminium), aluminium flatten out at depth, the mean quality factor drop from 4.82 toward ~3.5–4, and the dose move closer to the real MSL/RAD cruise measurement. If they don’t, the model is wrong and I’ll say so. Numbers in the next entry. Either it works or it doesn’t — that’s the whole point of logging the test first. What it still isn’t: 1D, simplified fragmentation, not a replacement for NASA’s HZETRN. Every value traces to a cited source, and the validation suite re-runs on every change."}]...
|
Title: DOSEFIELD by @Zhanik | Stardance
Devlogs:
Title: DOSEFIELD by @Zhanik | Stardance
Devlogs:
Day #1: the hard part is in, now I find out if it’s right I’m building DOSEFIELD, a 1D model that estimates how much radiation an astronaut absorbs on a deep-space mission — and how much shielding actually helps. Cosmic rays in, dose-equivalent out. What’s already solid: the stopping-power core matches NIST PSTAR reference data to within 1.6%, and behind 10 g/cm² of aluminium at solar minimum the model gives 1.96 mSv/day — about 0.70 Sv over a 360-day Mars cruise. That’s 17% past NASA’s 600 mSv career limit. A round trip to Mars quietly blows through the radiation an astronaut is allowed for their entire career. That’s the reason this project exists. But the first version only tracked primary particles, and it showed: my aluminium, polyethylene and water curves were sitting almost on top of each other. That’s physically wrong — polyethylene should shield noticeably better, because hydrogen is good at breaking up heavy ions. The missing piece is nuclear fragmentation. So this week I implemented it — real fragmentation cross sections (Bradt–Peters), not a fudge factor tuned to match NASA’s measured value. The material difference has to come out of the physics: hydrogen has the shortest nuclear interaction length per g/cm², so it should win on its own. No parameter is fit to the answer. Now I’m validating it, and I’m writing the test down BEFORE the result so I can’t quietly move the goalposts. If the physics is right, I should see four things: the curves separate (polyethylene below aluminium), aluminium flatten out at depth, the mean quality factor drop from 4.82 toward ~3.5–4, and the dose move closer to the real MSL/RAD cruise measurement. If they don’t, the model is wrong and I’ll say so. Numbers in the next entry. Either it works or it doesn’t — that’s the whole point of logging the test first. What it still isn’t: 1D, simplified fragmentation, not a replacement for NASA’s HZETRN. Every value traces to a cited source, and the validation suite re-runs on every change.
DOSEFIELD DAY #2:Fragmentation is now in the live app. Until today the web dosimeter only ran the primary-only transport — the most interesting result, that breaking up heavy ions is why hydrogen-rich shielding wins, was buried in a console script. Now there’s a “Primaries only ⇄ + Fragmentation” toggle, and flipping it visibly bends the curves: polyethylene pulls away from aluminium and the mean quality factor drops. Concretely, at solar minimum behind 20 g/cm², polyethylene’s edge over aluminium jumps from 12% to 34% the moment fragmentation turns on — the same figure the validation script prints, read from the same function, not hardcoded. Mean ⟨Q⟩ behind 16 g/cm² of aluminium falls 4.47 → 4.14. Nothing was tuned; the toggle just calls the existing Bradt–Peters model. And the honest ceiling stays put: still no secondary neutrons, so the absorbed-dose gap vs the real MSL/RAD measurement (~0.31 vs 0.46 mGy/day) remains — and the UI footnote says so out loud. 76/76 tests green, build clean. Next: surface the NIST + RAD validation inside the app itself.
Devlog #3 — DOSEFIELD Is Live 🚀Hi! Long time no see.DOSEFIELD is now live: https://izbanovj3-prog.github.io/DOSEFIELD/ The entire dosimeter now runs directly in your browser — no installation required. That includes the controls, dose-vs-thickness chart, particle fragmentation toggle, and validation panel.Under the hood, the project is built with Vite and automatically deployed to GitHub Pages through a GitHub Actions workflow. Every push to the main branch triggers a fresh build and deployment. The setup is intentionally simple: deployment uses GitHub’s built-in Actions token, with no external services and no additional secrets.The only challenge in this release wasn’t physics — it was infrastructure. The first deployment failed because GitHub Actions cannot automatically enable GitHub Pages for a repository. The workflow reached that permission boundary and stopped. After enabling Pages in the repository settings and rerunning the workflow, everything deployed successfully.Once the site was live, I verified that all critical assets were being served correctly. The page, stylesheets, and, most importantly, the Web Worker bundle all return HTTP 200 responses with the correct content types.That Web Worker is particularly important because it handles the species-by-species dose integration calculations off the main UI thread. In practice, this means the interface remains responsive while the physics calculations run in the background.No physics models changed in this release, and the known limitations remain the same. This phase was focused entirely on one goal: shipping a fully accessible browser version of DOSEFIELD.The live demo link is now featured at the top of the README.
Devlog #4 — Heavy Elements Cut, Liquid Hydrogen Locked In Lead and titanium were off by 50%. I didn’t hide it. My model tracks how particles slow down inside matter. For heavy elements like lead and titanium, you need a correction for the atom’s electron shells — skip it, and your numbers drift by half the actual value. I haven’t built that correction yet. Faking the results to look clean would gut the whole point of the model. So heavy elements are out for now. Liquid hydrogen sits at the opposite extreme. One electron, no shell complexity — the model handles it without shortcuts. I checked against NIST’s official proton data: 0.14% deviation across the full energy range. In physics terms, that’s a bullseye. Five Materials, One Hierarchy I ran five materials together — liquid hydrogen, methane, polyethylene, water, and aluminum — and tested them as a chain. Two things had to hold: thicker shielding means lower dose, and going from hydrogen to aluminum, dose has to climb, because light elements stop protons better. Both held, with no exceptions. Polyethylene and water differ by just 3% in electrons per gram — the model caught even that gap correctly. The sharpest result: at 40 g/cm², liquid hydrogen cuts dose by 44% compared to aluminum. That’s why some spacecraft designs wrap the crew compartment in hydrogen tanks — fuel and radiation shield in one. All five materials are now locked into regression tests. Total: 103 green tests in CI. One Function, One Truth The dashboard and the generated reports used to calculate their numbers separately. Two parallel code paths mean two places for drift to appear. Now both pull from a single shared function. The number on screen and the number in the report are physically incapable of disagreeing.
DEVLOG #5 (might be the last devlog) Hey! It’s been 11 days since the last devlog. DOSEFIELD wasn’t abandoned—I was just busy building instead of writing.This update was really about two things: making the code cleaner and making the site feel like it belongs in a space mission.The first issue was hidden in the background. The NASA validation numbers on the website were calculated separately from the ones used in my research. The math was identical, but it existed in multiple places. That meant one future change could easily make the numbers disagree.So I refactored everything to use a single source of truth. Now every result comes from the same function, making the site much easier to maintain and much harder to break.Then I focused on the design. The old version worked, but it didn’t feel like DOSEFIELD. I redesigned the interface with a mission-control style, added a cleaner layout, and simplified the visuals. I also removed a lot of unnecessary effects—less glow, fewer gradients, and a more purposeful look.After all those changes, I reran every test. All 107 tests still pass, and the stopping-power calculations remain within 1.55% of NIST reference data, exactly as before.There’s still one limitation: my model predicts about 67% of the radiation dose measured by NASA during the trip to Mars. That’s because it doesn’t yet simulate secondary particle production inside spacecraft shielding. It’s an important limitation, and it’s clearly explained on the website rather than hidden.The biggest lesson from this update wasn’t about physics—it was about revisiting old work. Good code doesn’t duplicate logic, and good design doesn’t rely on effects to look impressive. Sometimes the best improvement is simply cleaning up what you already built.
DEVLOG #6 Hey everyone!This is probably the last devlog for DOSEFIELD, at least for a while. It’s been an incredible journey—from the first rough prototype to something I’m genuinely proud to share. Thank you to everyone who followed along, tested the project, gave feedback, or simply read these updates. It really meant a lot.v2.3 is the “show your work” release. Nothing changed in the physics—and that’s exactly the point.The biggest addition is a new Methods page that renders the repository’s own METHODS.md and limitations table directly. That means anyone reading the website sees the exact same equations, assumptions, and all 12 limitations that exist in the source code. If the website and the repository ever disagree, the repository is the source of truth.Every page now also includes a provenance footer that’s generated automatically during the build. Instead of typing in a version number by hand, the site runs git rev-parse and the full test suite, then stamps something like:commit e22ef18 · 111/111 tests · verified 2026-07-18The build will actually fail if the tests don’t pass, so it’s impossible to accidentally display a “green” verification badge on a broken build.I also improved chart exports. Figures now render at 3200 px, and each exported chart includes its full configuration in the caption. That makes it much easier to trace a plot back to the exact settings that produced it, whether it’s used in a poster, report, or presentation.One thing I want to be completely clear about: this verification is about the software, not the physics. Passing 111 tests means the implementation behaves as expected according to those tests—it doesn’t prove the scientific model is perfect. The current validation remains the same: about 2× agreement with MSL/RAD, and the 0.67× absorbed-dose gap is still there, clearly documented.That’s exactly what this release is about: transparency over hype, reproducibility over screenshots, and being honest about what the model can—and can’t—do.Thanks for following this project. ❤️
Hey Stardance crew! Three months since my last devlog, so grab a snack and let me catch you up. DOSEFIELD estimates how much radiation an astronaut gets behind shielding on a trip to Mars, then checks itself against real data from NASA’s Curiosity cruise (MSL/RAD). The big news: I found a mistake in my own results. In my first public version, the solar modulation value (W = 30) could not be reproduced from the derivation I had written down. So I went back to the Oulu neutron-monitor data, matched the exact time window RAD used, skipped the solar-storm days, and got W = 47.50. The new numbers look worse, and I kept them: absorbed dose: 0.264 vs 0.458 mGy/day measured (0.58x) dose equivalent: 1.318 vs 1.75 mSv/day (0.75x) mean quality factor: 4.995 vs 3.82 (1.31x) My model skips secondary particles and neutrons, so it under-predicts the dose. I report the gap and leave it alone. Also shipped: a check against the full NIST PSTAR table (max deviation 1.55% from 10 to 1000 MeV), 190 passing tests, a code archive on Zenodo (DOI 10.5281/zenodo.23433384), a revised paper on SSRN, and a website that links to all of it.
Ships:
Today was all about making the site tell the truth about itself instead of just describing itself. I added a Methods and Limitations page that pulls directly from METHODS.md and the README instead of being rewritten into friendly marketing copy. If the documentation and the code ever disagree, the documentation loses immediately because they are now the exact same file. Every page also got an automated footer showing the commit hash, the test count, and the exact verification date. It would have taken five minutes to hardcode a string like “111 tests passing” and move on. Instead, the build script runs the actual test suite first, and if anything fails, the entire build stops cold. This ensures the footer can never claim a passing state that is not true at that exact moment. Wiring a build to gate on its own test results took most of the afternoon because it required thinking through what happens during a failure, not just when everything goes smoothly, but the absolute transparency is worth it. What I like most is that the limitations table on the public site is word-for-word what is in the repository. There is no filtered summary for visitors. The 0.67x gap between my modeled absorbed dose and NASA’s measured RAD numbers reads just as blunt on the public page as it does in the source code. Transparency matters more than hype. Additionally, charts now export at 3200px, and the configuration that produced them gets baked directly into the image itself, meaning a PNG cannot wander off from the settings that generated it. If you want to test it yourself, you can check the live app at DOSEFIELD. Look at the footer for a real commit hash and test count, open the Methods and Limitations page to count the 12 rows in the limitations table, or export a chart to verify the resolution against what is rendered on your screen. The complete source code is also available on GitHub....
|
1793112652.0565698
|
1793199052.0565698
|
|
70841
|
escape room python text story!! by @tika_K | Stard escape room python text story!! by @tika_K | Stardance...
|
tika_K
|
0
|
2.55
|
0
|
[]
|
[{"post_id": 81570, "ts": "202 [{"post_id": 81570, "ts": "2026-10-21T18:28:29Z", "hours": 2.5494, "text": "So i typed the text i wrote on a paper at school but there’s a problem: when you finish room red button blue or red i typed in the program room == “red” thinking it would go on and say the text again from room red but it doesn’t ill fix it next time i work on it"}]...
|
Title: escape room python text story!! by @tika_K Title: escape room python text story!! by @tika_K | Stardance
Devlogs:
So i typed the text i wrote on a paper at school but there’s a problem: when you finish room red button blue or red i typed in the program room == “red” thinking it would go on and say the text again from room red but it doesn’t ill fix it next time i work on it...
|
1792608428.1090043
|
1793213228.1090043
|
|
59501
|
Minimalistic MediaPlayer by @Tensor | Stardance
|
Tensor
|
0
|
48.39
|
0
|
[]
|
[{"post_id": 81568, "ts": "202 [{"post_id": 81568, "ts": "2026-10-21T18:22:13Z", "hours": 9.9503, "text": "Devlog 12: -Finished the schematic (for the most part) -Did more research and changed some more parts Extra: I’m finally done with the schematic (almost) . I still need to wire the switches after I have decided on what I need. There isn’t much time left to make this so I need to hurry up and finish this so that I can request funding before Stardance ends. Wish me luck"}, {"post_id": 78415, "ts": "2026-10-10T18:39:56Z", "hours": 9.3289, "text": "Devlog 11: -Changed even more components since some were out of stock. -Added the buttons, switches, etc to the schematic. -Started over with the Labels on the schematic. -Did a bunch of research on components and some other things. Extra: I have said it once, and I will say it twice. I HATE MAKING THE SCHEMATIC!!! So much so that my head hurts. … Well. I had to change a lot of the components since they were either out of stock (only Pre-order), or not compatible with the other components. I already did this mistake before. And now I did it again. Kinda dumb of me but that’s just how it is. I also added new components for the controls and some other things . Like buttons, magnetic encoders, and a sliding switch. Here is the battery charger. I think it should work (hopefully) . If you see any issues, pls tell me."}, {"post_id": 75317, "ts": "2026-09-29T18:55:02Z", "hours": 2.7011, "text": "Devlog 10: -Did most of the schematic wiring. -Did a bit more research on the motor and the “motor driver”. Extra: First of all. Making the schematic isn’t fun AT ALL. When I was making my Hackpad I enjoyed it a little bit. But THIS. … It’s just painful. And the other thing is that I did some more research on the motor and it’s driver (not as in a chauffeur, but kinda like that) . Since I don’t want it to disturb the other components with it’s electric fields. Anyway. There isn’t much else to report on, so I guess we are done for today. And I’m tired. Gn"}, {"post_id": 74555, "ts": "2026-09-27T16:52:10Z", "hours": 1.05, "text": "Devlog 9: -Added all of the symbols to the schematic. That’s basically it for today"}, {"post_id": 73992, "ts": "2026-09-26T14:14:06Z", "hours": 4.0489, "text": "Devlog 8: -Did a bunch of research on different components, PCB design/production, and more. -Switched to only SMD components (excluding the Pico2) Extra: I’m back after, like, 5 days, I think… I’m not sure. There are a few reasons to why I haven’t worked these past days, and one of them were that Stardance was nearing it’s end. Buuuuuuut. It got extended by 1 month! 🎉 Anyway I decided on dropping the modules and going for only SMD components instead. I think that the reason I didn’t go for SMD components to begin with is because I was scared of messing everything up since I have never used them before. The footprints and symbols I spent some time on are now useless which is a bit depressing. But it’s still better that way so no problem really. (The Image below is just a placeholder. I’ll switch it too something else soon)"}, {"post_id": 71252, "ts": "2026-09-20T15:05:56Z", "hours": 7.3836, "text": "Devlog 7: -Decided on some changes to the design because I can’t source my own components. -Researched “metal laser cutting” for accent pieces on the finished design. Checked component compatibility with different types of audio devices (headphones, IEMs & speakers). -Learnt (kinda) how to convert and how to make my own symbols and footprints in KiCAD. (Hated it. Never want to do it again ) Extra: It’s been a while since my last devlog. I’m still a bit sick since the last devlog so I’ll keep it a bit shorter than usual. The “rocker thingy” on the side of the TP-7 requires a bit of work and testing for it to work properly, so I will skip it for now. And if I don’t have time or decide to skip it, I’ll just make a version of it that’s integrated into the side of the case. Kinda like the volume button on most phones and tablets. I don’t want the device to just look like a 3d-printed slab. I want it to look like a well polished device that could be mistaken for a real product. So I will do some more research on “cheap” materials that I can use for the overall case. And to make it look even better, I think I’ll add metal accent pieces for the buttons and symbols. I don’t mind using my own money for this since I’m not sure if the fund will cover that. Just let me say that making the symbols and footprints has been the worst and most boring thing about any project that I’ve made. 1st image: Here is a quick sketch I made during class. The 2 black rectangles on the front face are screens. 2nd image: I found a powerbank with (almost) the perfect dimensions. The pink post-it notes have the real dimensions."}, {"post_id": 69255, "ts": "2026-09-16T17:59:13Z", "hours": 4.0922, "text": "Devlog 6: -Researched case materials and production methods -Checked component compatibility -Switched to a Li-Ion battery and some other components too -Checked JLCPCB’s parts library to see if they could mount some components on the PCB for me -Started on a GitHub repo for this project Extra: Haven’t made a devlog in a few days and I’m super tired so I’ll just leave it like this (this time)."}, {"post_id": 67510, "ts": "2026-09-13T17:06:47Z", "hours": 2.5333, "text": "Devlog 5: -Found a better screen for the device -Decided on various types of switches for the device -Checked possible layouts for the electronics -Found another battery with better overall dimensions -Checked some printing materials & options on JLC3DP -Found a few other components for QoL features Extra: I have done quite a lot of research on everything today. The switches: The final layout for the device is not completely decided yet. But I think I’ll keep 2 of the front-facing buttons for “pause/play” and “skip-/previous track”. I’ll also add one “3-position sliding switch” (for motor on/auto/off options) and one “2-position sliding switch” (for device on/off) on the side of the case. The Quality of Life features: Too be able to get that seamless screen look on the TP-7, I can use a processed Acrylic piece. It makes it so that the pixels seem to be floating inside the acrylic window, which looks awesome. I will maybe add a light sensor so it know when it is in a pocket. The sensor will be active/used when the “motor on/auto/off switch” is set to “auto”. The texture & material: I’m not completely sure what material to use yet, but I want the same texture/feel that’s on the LAMY Safari pens (matte Umbra version). There is 1 material on JLC3DP that looks promising. If you are interested and want to see how it turns out. Press follow."}, {"post_id": 66616, "ts": "2026-09-12T13:50:06Z", "hours": 1.45, "text": "Devlog 4: -Think I have figured out what to do with the motor -Searched for a new low-power BLDC motor driver board (what gives power and controls the motor, “kinda” ). Extra: I think I know how to prevent the electric field caused by the motor and the inconsistent power-draw from interfering with the audio components. -Since the motor uses very low power, the fields shouldn’t be as strong as normal. And because of that, some copper-tape wrapped around the motor (with some space between) and then connected to ground should be enough to absorb the electric fields (maybe not the right term but who cares). And to neutralize the inconsistent power-draw, I can just use some resistors (hopefully) between the motor and power-module, and then between the motor and ground. I’ll do a bit more research to be sure. The old motor driver I found apparently needed 8-30V. Which is quite a lot for what I’m making. So after roughly 30 min of searching I finally found the “SparkFun Brushless Motor Driver - 3-Phase (TMC6300)” on their own website. It’s ~18$ + shipping (not that bad), but I really can’t find another one that would work for this specific use case. Searched though AliExpress but just found ones that requiered 5-30V and something else that’s slightly inappropriate (and completely unrelated) instead Here is the module I found:"}, {"post_id": 66068, "ts": "2026-09-11T17:14:56Z", "hours": 1.3978, "text": "Devlog 3: -Finally found good screens -Making sure that the motor won’t theoretically interfere with the other components Extra: I have both good and bad news. The good news is that I finally decided on which screens to use (I’ll probably use 2). And the bad news are that when I did some research yesterday before going to bed. I found out that almost no one else has made their own version of the TP-7 by Teenage Engineering. And that’s because of 2 reasons. First, the complexity. Teenage Engineering made all of the components in-house so that everything would fit together. Which is why their device is so compact. While us on the other hand can only (for the most part) get off-the-shelf components. The second reason is that the motor has a magnetic and an electric field (the magnetic field isn’t as bad as the electric one). Which can interfere with the other electronics, which is very bad for sound focused devices. Guess that’s another problem to solve then. I will not give up until the very end (i think)"}, {"post_id": 65514, "ts": "2026-09-10T18:25:05Z", "hours": 1.5667, "text": "Devlog 2.1: -Still looking for a compatible screen Extra: I’m not sure if I should get a display module or just a display and a connector for it. If I choose the connector option, then I would have to solder like 20-30 pins + add resistors or something like that. If I choose the display module it will take a lot of unnecessary space between it and the nearest edge. If I go for the bare display, then I will probably choose this one:"}, {"post_id": 64978, "ts": "2026-09-09T18:56:52Z", "hours": 1.6786, "text": "Devlog 2: -Made a quick model and drawing of the layout i want. -Searched for components (only the screen…) Extra: Ok guys. Does, ANYONE, know. Where I can get an OLED bar display, that is a single color and not the 0.91 inch model. I have literally been searching for over an hour after a screen that would fit. The whole module needs to be smaller than 60x20mm. Please let me know if you have any recommendations."}, {"post_id": 64375, "ts": "2026-09-08T18:09:48Z", "hours": 1.2069, "text": "Devlog 1: -Researching parts/components. Extra: This is the first devlog of my “Teenage Engineering TP-7” inspired mediaplayer. Ever since I first saw the TP-7 for the first time, I thought it was the coolest “MP3” player ever (kinda correct), and have wanted one myself for a long time. The problem with it is that it is 1500$. … You read that right. 1500$!!! Which is why I want to make my own “TP-7” inspired high-res mediaplayer. It won’t be a straight copy-paste tho. I will add my own gimmicks and features too. I got ~20 days to finish this. And I probably won’t be able to ship this before then (if not for a miracle). I will try my best to make this project a reality. Oh btw, it’s my birthday today. If anyone at HackClub sees this, pls bless me with a 150$ grant"}]...
|
Title: Minimalistic MediaPlayer by @Tensor | Stard Title: Minimalistic MediaPlayer by @Tensor | Stardance
Devlogs:
Devlog 1: -Researching parts/components. Extra: This is the first devlog of my “Teenage Engineering TP-7” inspired mediaplayer. Ever since I first saw the TP-7 for the first time, I thought it was the coolest “MP3” player ever (kinda correct), and have wanted one myself for a long time. The problem with it is that it is 1500$. … You read that right. 1500$!!! Which is why I want to make my own “TP-7” inspired high-res mediaplayer. It won’t be a straight copy-paste tho. I will add my own gimmicks and features too. I got ~20 days to finish this. And I probably won’t be able to ship this before then (if not for a miracle). I will try my best to make this project a reality. Oh btw, it’s my birthday today. If anyone at HackClub sees this, pls bless me with a 150$ grant
Devlog 2: -Made a quick model and drawing of the layout i want. -Searched for components (only the screen…) Extra: Ok guys. Does, ANYONE, know. Where I can get an OLED bar display, that is a single color and not the 0.91 inch model. I have literally been searching for over an hour after a screen that would fit. The whole module needs to be smaller than 60x20mm. Please let me know if you have any recommendations.
Devlog 2.1: -Still looking for a compatible screen Extra: I’m not sure if I should get a display module or just a display and a connector for it. If I choose the connector option, then I would have to solder like 20-30 pins + add resistors or something like that. If I choose the display module it will take a lot of unnecessary space between it and the nearest edge. If I go for the bare display, then I will probably choose this one:
Devlog 3: -Finally found good screens -Making sure that the motor won’t theoretically interfere with the other components Extra: I have both good and bad news. The good news is that I finally decided on which screens to use (I’ll probably use 2). And the bad news are that when I did some research yesterday before going to bed. I found out that almost no one else has made their own version of the TP-7 by Teenage Engineering. And that’s because of 2 reasons. First, the complexity. Teenage Engineering made all of the components in-house so that everything would fit together. Which is why their device is so compact. While us on the other hand can only (for the most part) get off-the-shelf components. The second reason is that the motor has a magnetic and an electric field (the magnetic field isn’t as bad as the electric one). Which can interfere with the other electronics, which is very bad for sound focused devices. Guess that’s another problem to solve then. I will not give up until the very end (i think)
Devlog 4: -Think I have figured out what to do with the motor -Searched for a new low-power BLDC motor driver board (what gives power and controls the motor, “kinda” ). Extra: I think I know how to prevent the electric field caused by the motor and the inconsistent power-draw from interfering with the audio components. -Since the motor uses very low power, the fields shouldn’t be as strong as normal. And because of that, some copper-tape wrapped around the motor (with some space between) and then connected to ground should be enough to absorb the electric fields (maybe not the right term but who cares). And to neutralize the inconsistent power-draw, I can just use some resistors (hopefully) between the motor and power-module, and then between the motor and ground. I’ll do a bit more research to be sure. The old motor driver I found apparently needed 8-30V. Which is quite a lot for what I’m making. So after roughly 30 min of searching I finally found the “SparkFun Brushless Motor Driver - 3-Phase (TMC6300)” on their own website. It’s ~18$ + shipping (not that bad), but I really can’t find another one that would work for this specific use case. Searched though AliExpress but just found ones that requiered 5-30V and something else that’s slightly inappropriate (and completely unrelated) instead Here is the module I found:
Devlog 5: -Found a better screen for the device -Decided on various types of switches for the device -Checked possible layouts for the electronics -Found another battery with better overall dimensions -Checked some printing materials & options on JLC3DP -Found a few other components for QoL features Extra: I have done quite a lot of research on everything today. The switches: The final layout for the device is not completely decided yet. But I think I’ll keep 2 of the front-facing buttons for “pause/play” and “skip-/previous track”. I’ll also add one “3-position sliding switch” (for motor on/auto/off options) and one “2-position sliding switch” (for device on/off) on the side of the case. The Quality of Life features: Too be able to get that seamless screen look on the TP-7, I can use a processed Acrylic piece. It makes it so that the pixels seem to be floating inside the acrylic window, which looks awesome. I will maybe add a light sensor so it know when it is in a pocket. The sensor will be active/used when the “motor on/auto/off switch” is set to “auto”. The texture & material: I’m not completely sure what material to use yet, but I want the same texture/feel that’s on the LAMY Safari pens (matte Umbra version). There is 1 material on JLC3DP that looks promising. If you are interested and want to see how it turns out. Press follow.
Devlog 6: -Researched case materials and production methods -Checked component compatibility -Switched to a Li-Ion battery and some other components too -Checked JLCPCB’s parts library to see if they could mount some components on the PCB for me -Started on a GitHub repo for this project Extra: Haven’t made a devlog in a few days and I’m super tired so I’ll just leave it like this (this time).
Devlog 7: -Decided on some changes to the design because I can’t source my own components. -Researched “metal laser cutting” for accent pieces on the finished design. Checked component compatibility with different types of audio devices (headphones, IEMs & speakers). -Learnt (kinda) how to convert and how to make my own symbols and footprints in KiCAD. (Hated it. Never want to do it again ) Extra: It’s been a while since my last devlog. I’m still a bit sick since the last devlog so I’ll keep it a bit shorter than usual. The “rocker thingy” on the side of the TP-7 requires a bit of work and testing for it to work properly, so I will skip it for now. And if I don’t have time or decide to skip it, I’ll just make a version of it that’s integrated into the side of the case. Kinda like the volume button on most phones and tablets. I don’t want the device to just look like a 3d-printed slab. I want it to look like a well polished device that could be mistaken for a real product. So I will do some more research on “cheap” materials that I can use for the overall case. And to make it look even better, I think I’ll add metal accent pieces for the buttons and symbols. I don’t mind using my own money for this since I’m not sure if the fund will cover that. Just let me say that making the symbols and footprints has been the worst and most boring thing about any project that I’ve made. 1st image: Here is a quick sketch I made during class. The 2 black rectangles on the front face are screens. 2nd image: I found a powerbank with (almost) the perfect dimensions. The pink post-it notes have the real dimensions.
Devlog 8: -Did a bunch of research on different components, PCB design/production, and more. -Switched to only SMD components (excluding the Pico2) Extra: I’m back after, like, 5 days, I think… I’m not sure. There are a few reasons to why I haven’t worked these past days, and one of them were that Stardance was nearing it’s end. Buuuuuuut. It got extended by 1 month! 🎉 Anyway I decided on dropping the modules and going for only SMD components instead. I think that the reason I didn’t go for SMD components to begin with is because I was scared of messing everything up since I have never used them before. The footprints and symbols I spent some time on are now useless which is a bit depressing. But it’s still better that way so no problem really. (The Image below is just a placeholder. I’ll switch it too something else soon)
Devlog 9: -Added all of the symbols to the schematic. That’s basically it for today
Devlog 10: -Did most of the schematic wiring. -Did a bit more research on the motor and the “motor driver”. Extra: First of all. Making the schematic isn’t fun AT ALL. When I was making my Hackpad I enjoyed it a little bit. But THIS. … It’s just painful. And the other thing is that I did some more research on the motor and it’s driver (not as in a chauffeur, but kinda like that) . Since I don’t want it to disturb the other components with it’s electric fields. Anyway. There isn’t much else to report on, so I guess we are done for today. And I’m tired. Gn
Devlog 11: -Changed even more components since some were out of stock. -Added the buttons, switches, etc to the schematic. -Started over with the Labels on the schematic. -Did a bunch of research on components and some other things. Extra: I have said it once, and I will say it twice. I HATE MAKING THE SCHEMATIC!!! So much so that my head hurts. … Well. I had to change a lot of the components since they were either out of stock (only Pre-order), or not compatible with the other components. I already did this mistake before. And now I did it again. Kinda dumb of me but that’s just how it is. I also added new components for the controls and some other things . Like buttons, magnetic encoders, and a sliding switch. Here is the battery charger. I think it should work (hopefully) . If you see any issues, pls tell me.
Devlog 12: -Finished the schematic (for the most part) -Did more research and changed some more parts Extra: I’m finally done with the schematic (almost) . I still need to wire the switches after I have decided on what I need. There isn’t much time left to make this so I need to hurry up and finish this so that I can request funding before Stardance ends. Wish me luck...
|
1792803076.1355245
|
1793407876.1355245
|
|
54393
|
orezOS by @hamarisun | Stardance
|
hamarisun
|
0
|
14.87
|
0
|
[]
|
[{"post_id": 81567, "ts": "202 [{"post_id": 81567, "ts": "2026-10-21T18:20:06Z", "hours": 5.5361, "text": "##H2 Another app previously i had made the notes app following the guide. this time i have made photo gallery. Scroll able window!!! Things left to do -login screen -super app(calculator probably"}, {"post_id": 78432, "ts": "2026-10-10T19:54:00Z", "hours": 8.2719, "text": "apps! im trying to make apps. As usually i m not successful. This time at least i know that i just dont get how Java works due to lenguage barrier. Too bad :|"}, {"post_id": 59858, "ts": "2026-09-01T20:39:58Z", "hours": 1.0608, "text": "starting the os"}]...
|
Title: orezOS by @hamarisun | Stardance
Devlogs:
Title: orezOS by @hamarisun | Stardance
Devlogs:
starting the os
apps! im trying to make apps. As usually i m not successful. This time at least i know that i just dont get how Java works due to lenguage barrier. Too bad :|
##H2 Another app previously i had made the notes app following the guide. this time i have made photo gallery. Scroll able window!!! Things left to do -login screen -super app(calculator probably...
|
1792788527.145387
|
1793393327.145387
|
|
70844
|
Termaus by @dahmaus | Stardance
|
dahmaus
|
0
|
0.77
|
0
|
[]
|
[{"post_id": 81562, "ts": "202 [{"post_id": 81562, "ts": "2026-10-21T18:08:51Z", "hours": 0.7678, "text": "TerMaus A terminal which runs in your browser added the first command"}]...
|
Title: Termaus by @dahmaus | Stardance
Devlogs:
T Title: Termaus by @dahmaus | Stardance
Devlogs:
TerMaus A terminal which runs in your browser added the first command...
|
1792608430.6363683
|
1793213230.6363683
|
|
57852
|
-4Y: Frustrations by @birbuh | Stardance
|
birbuh
|
0
|
21.83
|
0
|
[]
|
[{"post_id": 81555, "ts": "202 [{"post_id": 81555, "ts": "2026-10-21T17:51:54Z", "hours": 1.8128, "text": "Alpha Devlog 9: note: don’t let me do textures again I added a better representation of what’s going on (I think) Now you know when the engines/weapons are broken! Also: Added adding ships; Fixed ship just flying in circles after defeating an enemy; Fixed some bugs, deleted unused code and fixed linter warnings. Ship time is approaching very rapidly… Stay hydrated"}, {"post_id": 81013, "ts": "2026-10-19T16:16:33Z", "hours": 3.3297, "text": "Alpha Devlog 8: WERE FRICKIN BACK 🔥 🗣️ 🔥 🗣️ 🔥 I finally got some motivation to work and remade the attack logic! now it’s peak! …at least I think so, correct me if I’m wrong The rotations now don’t take a ducking hour, the ship immediately starts, and it rotates during a slow movement. When it rotates, it starts to actually accelerate. Also, I think I’ll just make a battle sim for now, school gets harder and harder, Shattered Atlas is finally starting to be made… So yeah, I’ll probably make a battle sim and finish it in a year or so. Stay hydrated!"}, {"post_id": 67114, "ts": "2026-09-13T05:32:46Z", "hours": 3.1569, "text": "Alpha Devlog 7: insert scream idk This was pure pain in the beginning, I had no ideas how to accomplish the fighting mechanic. It still isn’t done 100%, I need to make a simple algorithm for the NPCs and clear signalization which module is getting hit (and if it’s getting hit at all…), but yeah… I’ve made it so there are three parts: core , weapons and engines . And shields . shields are getting destroyed first. I’m injuring them based of what’s the current position of an attacker in relation to the target. Then, I basically blast X of damage (13 in this case) on the specific part. So, regardless of the position, shields wear out first. Then, if standing “behind” the ship, engines are attacked. If the attack is happening from either left or right, the weapons are going to leave this world. If weapons are destroyed, you can’t attack other ships. If engines are destroyed, you can’t move. If either of them is already destroyed, it’s uncovering the core part, which, if destroyed, the ship finally despawns. You can also attack the core when you’re in front of the target. Now I need to make an algorithm for the NPCs, which will SUCK, cuz I don’t have a single idea on how to do it… That’s all for now, stay hydrated"}, {"post_id": 65489, "ts": "2026-09-10T17:37:28Z", "hours": 2.3242, "text": "Alpha Devlog 6: I did it… I basically made an error (don’t ask me why) in my code: I entered a FHD RESOLUTION’S RATIO instead of FHD RESOLUTION itself… I think I needed some sleep back then lmao Anyways, I made this: now the ships are assignable (all of them, until I add actual NPCs to the game (idk how am I going to do that tbh)) you can’t order a ship to fly somewhere if it’s already flying you can’t select more than one ship at once That’s all for now ig, health bars and attacking next! Or maybe stations I’m not sure. You can comment to suggest one! Stay hydrated"}, {"post_id": 64024, "ts": "2026-09-08T04:18:33Z", "hours": 1.4928, "text": "Alpha Devlog 5: I’ve wasted around an hour on trying to get the rotations to work smoothly (earlier it just snapped in place)… Nevertheless, I fixed everything I destroyed (accidentally or not) and managed to make everything in around 20 minutes… the rest is just debugging my error-prone code lmao I also added a new triangle ship! Next step: Add giving orders manually. This will be hard… Stay hydrated"}, {"post_id": 63370, "ts": "2026-09-07T04:44:19Z", "hours": 0.6242, "text": "Alpha Devlog 4: Ok so I managed to do what is shown in the video ig, it was quite easy tbh. Have some code: if distance_to_finish < 1. { linvel = Vec2 :: ZERO ; } else if distance_to_finish <= current_speed as f64 * 42. { vel .brake ( acceleration , & time ); } else { vel .add_from_endpoint ( pos , * endpoint , max_vel , acceleration , & time ); } Here’s what I did ealier (I was sooo tired, okay? dont even ask about it ): if distance_to_finish < 1. { vel .linvel = Vec2 :: ZERO ; } else if target_speed == max_vel { vel .add_from_endpoint ( pos , * endpoint , max_vel , acceleration , & time ); } else { vel .brake ( acceleration , & time ); } Stay hydrated (and don’t hate on me)"}, {"post_id": 62860, "ts": "2026-09-06T12:04:14Z", "hours": 2.9356, "text": "Alpha Devlog 3 So I made basic A -> B travel. It works, but only on one example (and not every time)… The next step is to fix it and add rotation at the beginning. Then I’ll experiment with more ships, and add manual orders (that means YOU decide, where the ship goes). TODO: (DONE) universalize this a bit more add rotations experiment with more ships! add actual orders given by the player Stay hydrated"}, {"post_id": 62683, "ts": "2026-09-06T05:27:31Z", "hours": 1.4525, "text": "Alpha Devlog 2 I made so that the “ship” has an order assigned. I also made a sector, and the game is now fullscreen. Nothing more ig. On the next devlog, I hope I’ll show you how it’s moving by itself! Stay hydrated"}, {"post_id": 61670, "ts": "2026-09-04T18:17:46Z", "hours": 4.6992, "text": "Alpha Devlog 1: ”-4Y: Frustrations” (the name can change as the project goes on) is starting as somewhat of a X4: Foundations parody. The base gameplay concepts would be similiar: You manage a fleet of your own faction; You trade (or fight) with NPC factions; and grow your empire. The only downside? I can’t into 3D for now, Stardance is slowly ending and school is getting intense, so if I’m gonna ever make a proper X-like strategy, with 3D mode and everything, it’s not soon. For this month I’ve planned basically a 2D economy/grand strategy. Nothing more I guess. This project is unofficial, I don’t own anything that’s Egosoft’s. Basically a fan parody that can turn into a playable, open-source alternative. Anyways, here’s what I did: In Bevy v0.19.1, I made a few helper functions, few structs which I don’t use yet and automated drawing. Also a basic fighter icon texture. Stay hydrated"}]...
|
Title: -4Y: Frustrations by @birbuh | Stardance
D Title: -4Y: Frustrations by @birbuh | Stardance
Devlogs:
Alpha Devlog 1: ”-4Y: Frustrations” (the name can change as the project goes on) is starting as somewhat of a X4: Foundations parody. The base gameplay concepts would be similiar: You manage a fleet of your own faction; You trade (or fight) with NPC factions; and grow your empire. The only downside? I can’t into 3D for now, Stardance is slowly ending and school is getting intense, so if I’m gonna ever make a proper X-like strategy, with 3D mode and everything, it’s not soon. For this month I’ve planned basically a 2D economy/grand strategy. Nothing more I guess. This project is unofficial, I don’t own anything that’s Egosoft’s. Basically a fan parody that can turn into a playable, open-source alternative. Anyways, here’s what I did: In Bevy v0.19.1, I made a few helper functions, few structs which I don’t use yet and automated drawing. Also a basic fighter icon texture. Stay hydrated
Alpha Devlog 2 I made so that the “ship” has an order assigned. I also made a sector, and the game is now fullscreen. Nothing more ig. On the next devlog, I hope I’ll show you how it’s moving by itself! Stay hydrated
Alpha Devlog 3 So I made basic A -> B travel. It works, but only on one example (and not every time)… The next step is to fix it and add rotation at the beginning. Then I’ll experiment with more ships, and add manual orders (that means YOU decide, where the ship goes). TODO: (DONE) universalize this a bit more add rotations experiment with more ships! add actual orders given by the player Stay hydrated
Alpha Devlog 4: Ok so I managed to do what is shown in the video ig, it was quite easy tbh. Have some code: if distance_to_finish < 1. { linvel = Vec2 :: ZERO ; } else if distance_to_finish <= current_speed as f64 * 42. { vel .brake ( acceleration , & time ); } else { vel .add_from_endpoint ( pos , * endpoint , max_vel , acceleration , & time ); } Here’s what I did ealier (I was sooo tired, okay? dont even ask about it ): if distance_to_finish < 1. { vel .linvel = Vec2 :: ZERO ; } else if target_speed == max_vel { vel .add_from_endpoint ( pos , * endpoint , max_vel , acceleration , & time ); } else { vel .brake ( acceleration , & time ); } Stay hydrated (and don’t hate on me)
Alpha Devlog 5: I’ve wasted around an hour on trying to get the rotations to work smoothly (earlier it just snapped in place)… Nevertheless, I fixed everything I destroyed (accidentally or not) and managed to make everything in around 20 minutes… the rest is just debugging my error-prone code lmao I also added a new triangle ship! Next step: Add giving orders manually. This will be hard… Stay hydrated
Alpha Devlog 6: I did it… I basically made an error (don’t ask me why) in my code: I entered a FHD RESOLUTION’S RATIO instead of FHD RESOLUTION itself… I think I needed some sleep back then lmao Anyways, I made this: now the ships are assignable (all of them, until I add actual NPCs to the game (idk how am I going to do that tbh)) you can’t order a ship to fly somewhere if it’s already flying you can’t select more than one ship at once That’s all for now ig, health bars and attacking next! Or maybe stations I’m not sure. You can comment to suggest one! Stay hydrated
Alpha Devlog 7: insert scream idk This was pure pain in the beginning, I had no ideas how to accomplish the fighting mechanic. It still isn’t done 100%, I need to make a simple algorithm for the NPCs and clear signalization which module is getting hit (and if it’s getting hit at all…), but yeah… I’ve made it so there are three parts: core , weapons and engines . And shields . shields are getting destroyed first. I’m injuring them based of what’s the current position of an attacker in relation to the target. Then, I basically blast X of damage (13 in this case) on the specific part. So, regardless of the position, shields wear out first. Then, if standing “behind” the ship, engines are attacked. If the attack is happening from either left or right, the weapons are going to leave this world. If weapons are destroyed, you can’t attack other ships. If engines are destroyed, you can’t move. If either of them is already destroyed, it’s uncovering the core part, which, if destroyed, the ship finally despawns. You can also attack the core when you’re in front of the target. Now I need to make an algorithm for the NPCs, which will SUCK, cuz I don’t have a single idea on how to do it… That’s all for now, stay hydrated
Alpha Devlog 8: WERE FRICKIN BACK 🔥 🗣️ 🔥 🗣️ 🔥 I finally got some motivation to work and remade the attack logic! now it’s peak! …at least I think so, correct me if I’m wrong The rotations now don’t take a ducking hour, the ship immediately starts, and it rotates during a slow movement. When it rotates, it starts to actually accelerate. Also, I think I’ll just make a battle sim for now, school gets harder and harder, Shattered Atlas is finally starting to be made… So yeah, I’ll probably make a battle sim and finish it in a year or so. Stay hydrated!
Alpha Devlog 9: note: don’t let me do textures again I added a better representation of what’s going on (I think) Now you know when the engines/weapons are broken! Also: Added adding ships; Fixed ship just flying in circles after defeating an enemy; Fixed some bugs, deleted unused code and fixed linter warnings. Ship time is approaching very rapidly… Stay hydrated...
|
1792727547.4855971
|
1793332347.4855971
|
|
36002
|
Shelf-fish by @Ansh904 | Stardance
|
Ansh904
|
0
|
67.69
|
0
|
[]
|
[{"post_id": 81554, "ts": "202 [{"post_id": 81554, "ts": "2026-10-21T17:48:39Z", "hours": 9.8519, "text": "5 days plan ready Self-fish devlog #11 (Very Important) So in the last devlog I had completed the add item screen, since then I have been making plans for the future of this app, and i think I am finally ready to reveal it. What have I done? Added tiers and a ration norm to the item and detection table, I will explain later in this devlog, what they do Made the whole backend more secure from wrong answers generated by gemini: since I am using gemini, there is a possiblity that it does not follow the schema I gave it, if that happens, the backend would crash, but now have added field validators for all crucial columns where the the model is most likely to generate wrong answers. While testing I also found out that at sometimes, the model would face a lot of traffic and it would return a 503 and the server crashed, but now the backend has 2 models, gemini-3.1-flash-lite and gemini-2.5-flash-lite, each with 5 retries. So if gemini-3.1-flash-lite, which was getting a lot of traffic, fails, the backend fallsback to 2.5, which I believe should have less traffic Also in the last devlog I had forgot the add tag button which I have added, I already had the function to add but I think the 25 day gap made me forgot that, I also added tiers to page but I still haven’t added ration_norm cuz I have to devlog first What’s the plan? A lot of people don’t actually know what communism is, so I will explain it first, communism is a stateless, moneyless and classless society where the people own the methods of production, It is a type of socialism that came into existence through Karl Marx So in true communist state, there is no money, therefore I dropped the price column from my items table. Instead I have divided everything into 3 categories: **1. Essentials - These items are basic necessities that are needed to surve, example: food, water, soap, clothes, etc. These would be distributed equally to everyone who uses the app, ie the people of the state. **2. Useful Items - These items are not necessary but they improve your quality of life, these include things like a normal mouse, a laptop, etc. These are not distributed equally, instead you have to write 2 lines, just 2 cuz I know when others would review my project, they wouldn’t want to write a whole para to check the working of my app, so those 2 lines would go to gemini once again and it would check if the person gets the item or not. 3. Wants - These items are not necessary and do not improve the quality of life, but they are important to satisfy the personal wishes of the user. These include top tier laptops, high end gaming mouses etc. For this I want to connect to hackatime, I had seen some project on stardance that connected to hackatime, so the plan would be to connect to hackatime and get the no. of hours coded by the user. These hours would be used as labor hours. Whenever the user wants to get these items with the want tier, they would give some of their labor hours to get their item along 2 lines to satisfy the model. So that’s how the app would work, I have just finished the first part of the app, this probably is the 2nd hardest part of the project, the next step would be to create a page where all the items are listed, this would be very easy but after that would be the hardest part of the project, it would be the form where the user can request the item. The images: Well they are both the same, As you can see I have Tiers and add button to this page, everything else is the same, there are 3 buttons (pressables) with the tiers, the default tier is selected by gemini, the user can change them, The ‘+’ button would be present next to the last tag, It can toggle adding, the user can then enter the tag name and press the + button next to the input field. The section below the tag selector displays the description of the tags."}, {"post_id": 81000, "ts": "2026-10-19T15:36:48Z", "hours": 9.7072, "text": "I spent 10 hrs on single page (screen) Shelf-fish Devlog # 10 I didn’t knew it would take that long So the add item page took around 10 hours to make, more than 10 hours if we include the time I spent 25 days ago to make it work, so here is what I have done: Completely change the design of the page, the previous design really sucked, It was there just so to make everything work, my previous self, for some reason, didn’t care about the design The new design uses something similar to drop-shadow except there is no box or drop/box shadow in native-wind, so i had to come up with a way to make my own, i used a self-closing View tag with absolute positioning, no inset and translated to some ammount with a background color… This offset View works as a drop shadow or box, it really doesn’t make difference here as I am working with rectangles. The Offset component worked when I using with a static color and size but for some parts of the design I needed different colors of shadow like the item image which uses red shadow or the tags which require small shadows as they themselves are pretty small. I made it dynamic by using inline css cuz native-wind calculates colors statically Though for some parts I didn’t used the component but used another View in the same way as the component cuz I was frustated and wanted flexibility which the component lacked at that time. The whole app now has a communist theme as explained in the previous devlog I have switched from using native-wind colors to using my own, these are the same i used for my earlier project I have also changed how inputs look, they really sucked previously as they didn’t had titles and the design was low effort too, now the title sits above the main input field and the input field has a sharp look with borders and drop-shadow The tags took the most amount of time, I tried so many designs, but all looked very repetitive with the inputs and I wanted them to fit in too. Also I needed to have 2 designs for the tags, as i have a button to toggle removing, when not removing the tags are small and cute but when you toggle removing, they become big so that it is easier to touch them. The final add button also took a lot of time, the same issue as the tags, since it is the main call-to-action, it needs to be unique, so I had to make it different, It incorporates all the three colors in the design, black, gold and black along with the communist logo. It also has 2 states, the normal state is what is in the attached screenshot, but when it is submitting the add request to the backend, it sticks to its shadow by translating to its shadow, i mean it just animation That’s it for this devlog, since the last devlog was very short, I had to compensate for that and I over-explained in this one The next steps would probably be to connect the detecting code to route to this page with the item object, and also work on the main distribution part which i think would be the hardest."}, {"post_id": 80296, "ts": "2026-10-17T05:20:55Z", "hours": 6.8294, "text": "Where I’ve been Soooooo It’s been 25 days since my last devlog, that means I haven’t coded for 25 days, the culprit for this is my exams, I literally have forgotten where I was in the project, also the hours associated with this devlog are also 25 days old, soo this devlog won’t tell you much, the only thing i remember is that I was making the add item page and it was working, i just had to do the ui for it. My next steps would be to figure out where I was and create some kind of plan to complete the project also since an inventory management app would not be unique, I want to give it my touch and make it communist, I would try to incorporate accuratee communist economy make this the inventory of the people."}, {"post_id": 72221, "ts": "2026-09-22T14:09:34Z", "hours": 5.5131, "text": "Ooopppss I exposed jwt tokens in github Shelf-fish Devlog #8 Yepp I exposed my jwt tokens in my github, but trust me I knew what I was doing, those tokens are long expired, my backend isn’t published yet and i will change the exposed passwords, which was 12345678, cuz why not Anyways I have done a lot things, in the last devlog, i had connected the frontend with the backend and made the detection endpoint work with the frontend. i had to manually type the authentication tokens cuz i had not set up auth in the frontend, but I have now fixed this Here’s what I have done: Created tokenStorage.js - it handles getting the tokens, saving them and clearing them using expo-secure-store, i used expo-secure-store cuz it saves tokens in keychains rather than files that makes them much less likely to leak or read by anyone/app/malwares Created authService.js - this one handles send the get and post requests for registering, logging in and getting current user data Added interceptors to Api, i am using a single api instance using axios.create() across the app, so i have added interceptors to attach auth tokens and check if they are valid or expired Created the login and register screens, they don’t look good now but will work on the ui after i get everything set up, I will make everything exist first, the designs can be taken care of afterwards I also created a new api route at ‘/users’, this one is responsible for getting user data, right now it just gets the user info but I think i would also make it update it… I also added navigation using react-navigation What’s next ? I haven’t finished the home screen yet, well nothing is finished yet, but the home screen just greets the user, i will add buttons to navigate to camera and upload components I will also create the item related pages, that will show all items and let the user create items after detecting the product The images: They look soo bad but as I said I will make everything exist first and then make the ui good The register page The login page, it’s not even filled yet, cuz i want to add text and a logo, i will create a logo too lol i forgot about that The home page, empty page with a greeting and a sign out button, it was made to check if everything is working or not"}, {"post_id": 71725, "ts": "2026-09-21T11:55:08Z", "hours": 6.1961, "text": "Frontend Connected Shelf-fish devlog # 7 In the last devlog, I had finished creating the detection logic using gemini api, after that I have done a lot of things and suffered a lot of headaches too What have I done?? Created api endpoints for detections at /detections and added it to the fastapi app. Added authentication dependency to the detection api so that only authenticated users can upload images and we can know who detects which item. Created the Camera and Upload image logic, I have used expo-camera and expo-imagepicker for that, it was pretty easy, expo’s docs are straight forward and I have used them before Created the uploading function that will send a post request containing the image to the backend. I also added storage fn to upload the captured/picked image to cloud using cloudinary. What’s next? Now I will work on the ui and create login and register screens cuz manually typing the authentication token to the uploading fn is really frustrating I also have an idea for this project which would make it very unique cuz at this point it just looks like just any other inventory management systems. The images- console log of the item after it was detected by gemini and saved to database, the image being displayed after clicking the url, the images in cloudinary, the other one is stock image and was there automatically."}, {"post_id": 70482, "ts": "2026-09-19T08:27:30Z", "hours": 5.4297, "text": "Detection Working!!! Shelf-fish Devlog #6 TL;DR What have done? Created a basic jwt auth Used Gemini Api and Gemini 3.1 Flash Lite to create the product detection logic What’s next? I will now make api routes for detection that would output the brand, item name and category of the item Got lots of time? Sooo the auth and detection logic is complete, we are now close to ending the backend, earlier after dropping the plan of using a classification model, I had decided to use an ocr to detect text from the input photo and then use that text as an input for openai api and ask it to identify the brand name, item name and category from the image, but since I am broke , I couldn’t use openai api as it costs money and then learned that gemini has free api plans that include multi-modal inputs like images and give out text, so I swited to that and it works flawlessly, the rate limits are also generous, at 500 requests per day and 15 per minute. I tested it with 6 text images and it gave 100% acc but the sample size is pretty small to say that it is 100% accurate, but it does work. The detection logic, at this point, is just a function, i need to make api routes for that and add a detection log table, the log table would be useful at providing data about rate limits and is also nice to have if the project get bigger, I also have to make a list of categories out of which gemini would choose the category of the product cuz at this point, it outputs anything it likes as a category"}, {"post_id": 69694, "ts": "2026-09-17T16:22:17Z", "hours": 3.2419, "text": "Backend is Up Shelf-fish Devlog #5 What have I done?? Set up FastAPI and SQLModel - I have successfully connected and set up the backend with the database, I am using neon’s postgres db Created Item table - I also created the first table of item, it has the following columns- Name, id, quantity, category and price Set up CRUD - set up basic crud end points for the item table What’s next?? I will now create auth using pyjwt and passlib Next I will work on the core mechanism for extracting name from the product image using ocr"}, {"post_id": 69500, "ts": "2026-09-17T06:01:39Z", "hours": 1.8783, "text": "Dropping the plan Shelf-fish Devlog #4 Heyy gng, since the past few days I have been just editing and reviewing images and they don’t seem to finish any time soon but stardance is finishing soon and I want to finish this project before that so I am dropping the workplan of using a classification model for identifying items That approach was flawed, I had not thought about that earlier instead I was biased by my previous successful project using the classification approach to identify pokemon I think a better approach would be to use an ocr and then ask an llm to parse that into brand name, item name and weight and other things Despite the my orignal plan failing, I want to highlight that engineering, in all forms, is itterative, no one finds the solution to the problem in their first try and the things I have made before, ie- my scraper, is not obselete at all, it works so good, like it scraped 150k images in 6 hours, that’s really insane and very useful too, I will make it as another seperate project in the future cuz I think it deserves some more recognition and will improve it too first 3 images- images of clean dataset, products are cropped and all noises are deleted last image - for comparison, an unclean dataset, a lot of noises in it like people and some images dont even have the product"}, {"post_id": 67508, "ts": "2026-09-13T17:04:56Z", "hours": 4.1303, "text": "Who is Who - Shelf-Fish devlog #3 There were so many duplicate images So in the last devlog, I told my scraper scraped nearly 150k images, but when I began cleaning them I noticed a lot of images were exact duplicates, I thought it was just for a class or two but It was for every single one of them , except Oreo After manually cleaning 14 classes with duplicates, I gave up, and decided to use python to delete duplicates, I used hashlib and md5 hash to detect exact duplicate images inside all folders of my root train images folder which each represent one class, and I used os.remove to delete those duplicates. I ended up deleting around 34k images which brings my dataset from 150k to 100k images, but this would change too cuz the 100k maybe unique but they still have a lot of discrepencies, like random products and all. I also used matplotlib to plot a graph of the images remaining, and the results dont look good for a few classes which have now less than 300 images, others are in range 500 - 800, remember they were around 1100 images earlier, so around 800 images were duplicates of the remaining 300. I know what’s causing this, multiple search queries, since google images only displays a fixed 400 images per search, I made my scraper in a way that it searches for the same product multiple times but with a different query which causes popular images to be duplicates One more thing, the dataset would not only decrease in number, but after cleaning the images, I would augment them which would drastically increase the number of images and also make the model less likely to overfit. Also the graph is really ugly cuz there are like 130 classes on the x axis and they dont really fit well and I am not an expert in pyplot so I dont know how to make it look good"}, {"post_id": 64891, "ts": "2026-09-09T16:30:10Z", "hours": 5.8064, "text": "Shelf-Fish Devlog #2 My Scraper is on steroids !!! I scraped 150,000 images Yooooo guys the scraper worked too good now, it scraped roughly 150,000 images in just 6 hours , that is insane, the speed was around 7 images per second or 420 images per minute, that is really crazy, my old scraper took a full day for 75k images, this is like a million times faster!!! In the last devlog, I acheived a speed of around 1079 images in 10 minutes or around 100 images per hour, so since then I have made it 4x times faster. Here’s what I did: Added premature scrolling - earlier the scraper would miss a lot of images or would wait for a long period of time for the images to load and then scroll, but now as soon as the main div appears on the screen, the scraper scrolls down a bit triggering lazy load instantly and then scrolls down to the bottom triggering te lazy load 2 times in a cycle, this made the whole scrolling thing so much quicker. Fixed downloads not cancelling - I am storing some extra urls so that if one or more of the urls failed to download, I have backup for completing the target, but I am using a ThreadPoolExecutor to download images concurrently, when it reaches the target the executor used to just break but this didnt prevent it from downloading all other images stored in my array even tho they aren’t saved on the disc, this caused the scraper to wait indefinitely for a long time, since it now has to fetch double or sometimes more the amount, but I have now fixed that Next steps? I will now clean the dataset, and since by cleaning the dataset I am actively contributing to the completion of the project, I have got permission to use lapse to record that time"}, {"post_id": 57888, "ts": "2026-08-30T06:43:01Z", "hours": 9.1103, "text": "Shelf-Fish Devlog #1 What is Shelf-Fish? It is a computer vision based cross platform inventory management and billing system that I am making with react native as frontend and probably a fastapi backend. How will the project work? The project would be made in several phases that are listed below: Phase 01 - Scraper In this phase I will make a fast scraper with selenium that would scrape 1000-1500 images for over 130 grocery items that I have listed. Phase 02 - Training In this phase I would clean the dataset and train the model!! Phase 03 - Backend I would build a basic cors backend in fastapi and add some user relations Phase 04 - Frontend This phase involves building a cross platform fronend with react native. Phase 05 - ESP 32 This one is not confirmed yet, but if i get the time, instead of using a phone, I would use the esp 32 and esp32 cam to register objects and create bills, or perhaps I should make this the main focus of the project and make this a hardware project, I am still not sure. What have I done till now? I am modifying my old scraper that I used for my previous pokedex project, which was very very slow, I have changed it completely, It now directly goes to the image search url instead of going to google.images.com and then manually typing the words. It now also downloads images concurrently using the ThreadPoolExecutor , earlier this part was the slowest but in just 2 seconds, it downloads 125 images, But it is still pretty slow, It took over 10 min to scrape 1079 images, and it was a bit short of the 1125 target images which is due to slow network that caused the images to not load. For the next devlog I will try to make it sub 8 min or faster"}]...
|
Title: Shelf-fish by @Ansh904 | Stardance
Devlogs Title: Shelf-fish by @Ansh904 | Stardance
Devlogs:
Shelf-Fish Devlog #1 What is Shelf-Fish? It is a computer vision based cross platform inventory management and billing system that I am making with react native as frontend and probably a fastapi backend. How will the project work? The project would be made in several phases that are listed below: Phase 01 - Scraper In this phase I will make a fast scraper with selenium that would scrape 1000-1500 images for over 130 grocery items that I have listed. Phase 02 - Training In this phase I would clean the dataset and train the model!! Phase 03 - Backend I would build a basic cors backend in fastapi and add some user relations Phase 04 - Frontend This phase involves building a cross platform fronend with react native. Phase 05 - ESP 32 This one is not confirmed yet, but if i get the time, instead of using a phone, I would use the esp 32 and esp32 cam to register objects and create bills, or perhaps I should make this the main focus of the project and make this a hardware project, I am still not sure. What have I done till now? I am modifying my old scraper that I used for my previous pokedex project, which was very very slow, I have changed it completely, It now directly goes to the image search url instead of going to google.images.com and then manually typing the words. It now also downloads images concurrently using the ThreadPoolExecutor , earlier this part was the slowest but in just 2 seconds, it downloads 125 images, But it is still pretty slow, It took over 10 min to scrape 1079 images, and it was a bit short of the 1125 target images which is due to slow network that caused the images to not load. For the next devlog I will try to make it sub 8 min or faster
Shelf-Fish Devlog #2 My Scraper is on steroids !!! I scraped 150,000 images Yooooo guys the scraper worked too good now, it scraped roughly 150,000 images in just 6 hours , that is insane, the speed was around 7 images per second or 420 images per minute, that is really crazy, my old scraper took a full day for 75k images, this is like a million times faster!!! In the last devlog, I acheived a speed of around 1079 images in 10 minutes or around 100 images per hour, so since then I have made it 4x times faster. Here’s what I did: Added premature scrolling - earlier the scraper would miss a lot of images or would wait for a long period of time for the images to load and then scroll, but now as soon as the main div appears on the screen, the scraper scrolls down a bit triggering lazy load instantly and then scrolls down to the bottom triggering te lazy load 2 times in a cycle, this made the whole scrolling thing so much quicker. Fixed downloads not cancelling - I am storing some extra urls so that if one or more of the urls failed to download, I have backup for completing the target, but I am using a ThreadPoolExecutor to download images concurrently, when it reaches the target the executor used to just break but this didnt prevent it from downloading all other images stored in my array even tho they aren’t saved on the disc, this caused the scraper to wait indefinitely for a long time, since it now has to fetch double or sometimes more the amount, but I have now fixed that Next steps? I will now clean the dataset, and since by cleaning the dataset I am actively contributing to the completion of the project, I have got permission to use lapse to record that time
Who is Who - Shelf-Fish devlog #3 There were so many duplicate images So in the last devlog, I told my scraper scraped nearly 150k images, but when I began cleaning them I noticed a lot of images were exact duplicates, I thought it was just for a class or two but It was for every single one of them , except Oreo After manually cleaning 14 classes with duplicates, I gave up, and decided to use python to delete duplicates, I used hashlib and md5 hash to detect exact duplicate images inside all folders of my root train images folder which each represent one class, and I used os.remove to delete those duplicates. I ended up deleting around 34k images which brings my dataset from 150k to 100k images, but this would change too cuz the 100k maybe unique but they still have a lot of discrepencies, like random products and all. I also used matplotlib to plot a graph of the images remaining, and the results dont look good for a few classes which have now less than 300 images, others are in range 500 - 800, remember they were around 1100 images earlier, so around 800 images were duplicates of the remaining 300. I know what’s causing this, multiple search queries, since google images only displays a fixed 400 images per search, I made my scraper in a way that it searches for the same product multiple times but with a different query which causes popular images to be duplicates One more thing, the dataset would not only decrease in number, but after cleaning the images, I would augment them which would drastically increase the number of images and also make the model less likely to overfit. Also the graph is really ugly cuz there are like 130 classes on the x axis and they dont really fit well and I am not an expert in pyplot so I dont know how to make it look good
Dropping the plan Shelf-fish Devlog #4 Heyy gng, since the past few days I have been just editing and reviewing images and they don’t seem to finish any time soon but stardance is finishing soon and I want to finish this project before that so I am dropping the workplan of using a classification model for identifying items That approach was flawed, I had not thought about that earlier instead I was biased by my previous successful project using the classification approach to identify pokemon I think a better approach would be to use an ocr and then ask an llm to parse that into brand name, item name and weight and other things Despite the my orignal plan failing, I want to highlight that engineering, in all forms, is itterative, no one finds the solution to the problem in their first try and the things I have made before, ie- my scraper, is not obselete at all, it works so good, like it scraped 150k images in 6 hours, that’s really insane and very useful too, I will make it as another seperate project in the future cuz I think it deserves some more recognition and will improve it too first 3 images- images of clean dataset, products are cropped and all noises are deleted last image - for comparison, an unclean dataset, a lot of noises in it like people and some images dont even have the product
Backend is Up Shelf-fish Devlog #5 What have I done?? Set up FastAPI and SQLModel - I have successfully connected and set up the backend with the database, I am using neon’s postgres db Created Item table - I also created the first table of item, it has the following columns- Name, id, quantity, category and price Set up CRUD - set up basic crud end points for the item table What’s next?? I will now create auth using pyjwt and passlib Next I will work on the core mechanism for extracting name from the product image using ocr
Detection Working!!! Shelf-fish Devlog #6 TL;DR What have done? Created a basic jwt auth Used Gemini Api and Gemini 3.1 Flash Lite to create the product detection logic What’s next? I will now make api routes for detection that would output the brand, item name and category of the item Got lots of time? Sooo the auth and detection logic is complete, we are now close to ending the backend, earlier after dropping the plan of using a classification model, I had decided to use an ocr to detect text from the input photo and then use that text as an input for openai api and ask it to identify the brand name, item name and category from the image, but since I am broke , I couldn’t use openai api as it costs money and then learned that gemini has free api plans that include multi-modal inputs like images and give out text, so I swited to that and it works flawlessly, the rate limits are also generous, at 500 requests per day and 15 per minute. I tested it with 6 text images and it gave 100% acc but the sample size is pretty small to say that it is 100% accurate, but it does work. The detection logic, at this point, is just a function, i need to make api routes for that and add a detection log table, the log table would be useful at providing data about rate limits and is also nice to have if the project get bigger, I also have to make a list of categories out of which gemini would choose the category of the product cuz at this point, it outputs anything it likes as a category
Frontend Connected Shelf-fish devlog # 7 In the last devlog, I had finished creating the detection logic using gemini api, after that I have done a lot of things and suffered a lot of headaches too What have I done?? Created api endpoints for detections at /detections and added it to the fastapi app. Added authentication dependency to the detection api so that only authenticated users can upload images and we can know who detects which item. Created the Camera and Upload image logic, I have used expo-camera and expo-imagepicker for that, it was pretty easy, expo’s docs are straight forward and I have used them before Created the uploading function that will send a post request containing the image to the backend. I also added storage fn to upload the captured/picked image to cloud using cloudinary. What’s next? Now I will work on the ui and create login and register screens cuz manually typing the authentication token to the uploading fn is really frustrating I also have an idea for this project which would make it very unique cuz at this point it just looks like just any other inventory management systems. The images- console log of the item after it was detected by gemini and saved to database, the image being displayed after clicking the url, the images in cloudinary, the other one is stock image and was there automatically.
Ooopppss I exposed jwt tokens in github Shelf-fish Devlog #8 Yepp I exposed my jwt tokens in my github, but trust me I knew what I was doing, those tokens are long expired, my backend isn’t published yet and i will change the exposed passwords, which was 12345678, cuz why not Anyways I have done a lot things, in the last devlog, i had connected the frontend with the backend and made the detection endpoint work with the frontend. i had to manually type the authentication tokens cuz i had not set up auth in the frontend, but I have now fixed this Here’s what I have done: Created tokenStorage.js - it handles getting the tokens, saving them and clearing them using expo-secure-store, i used expo-secure-store cuz it saves tokens in keychains rather than files that makes them much less likely to leak or read by anyone/app/malwares Created authService.js - this one handles send the get and post requests for registering, logging in and getting current user data Added interceptors to Api, i am using a single api instance using axios.create() across the app, so i have added interceptors to attach auth tokens and check if they are valid or expired Created the login and register screens, they don’t look good now but will work on the ui after i get everything set up, I will make everything exist first, the designs can be taken care of afterwards I also created a new api route at ‘/users’, this one is responsible for getting user data, right now it just gets the user info but I think i would also make it update it… I also added navigation using react-navigation What’s next ? I haven’t finished the home screen yet, well nothing is finished yet, but the home screen just greets the user, i will add buttons to navigate to camera and upload components I will also create the item related pages, that will show all items and let the user create items after detecting the product The images: They look soo bad but as I said I will make everything exist first and then make the ui good The register page The login page, it’s not even filled yet, cuz i want to add text and a logo, i will create a logo too lol i forgot about that The home page, empty page with a greeting and a sign out button, it was made to check if everything is working or not
Where I’ve been Soooooo It’s been 25 days since my last devlog, that means I haven’t coded for 25 days, the culprit for this is my exams, I literally have forgotten where I was in the project, also the hours associated with this devlog are also 25 days old, soo this devlog won’t tell you much, the only thing i remember is that I was making the add item page and it was working, i just had to do the ui for it. My next steps would be to figure out where I was and create some kind of plan to complete the project also since an inventory management app would not be unique, I want to give it my touch and make it communist, I would try to incorporate accuratee communist economy make this the inventory of the people.
I spent 10 hrs on single page (screen) Shelf-fish Devlog # 10 I didn’t knew it would take that long So the add item page took around 10 hours to make, more than 10 hours if we include the time I spent 25 days ago to make it work, so here is what I have done: Completely change the design of the page, the previous design really sucked, It was there just so to make everything work, my previous self, for some reason, didn’t care about the design The new design uses something similar to drop-shadow except there is no box or drop/box shadow in native-wind, so i had to come up with a way to make my own, i used a self-closing View tag with absolute positioning, no inset and translated to some ammount with a background color… This offset View works as a drop shadow or box, it really doesn’t make difference here as I am working with rectangles. The Offset component worked when I using with a static color and size but for some parts of the design I needed different colors of shadow like the item image which uses red shadow or the tags which require small shadows as they themselves are pretty small. I made it dynamic by using inline css cuz native-wind calculates colors statically Though for some parts I didn’t used the component but used another View in the same way as the component cuz I was frustated and wanted flexibility which the component lacked at that time. The whole app now has a communist theme as explained in the previous devlog I have switched from using native-wind colors to using my own, these are the same i used for my earlier project I have also changed how inputs look, they really sucked previously as they didn’t had titles and the design was low effort too, now the title sits above the main input field and the input field has a sharp look with borders and drop-shadow The tags took the most amount of time, I tried so many designs, but all looked very repetitive with the inputs and I wanted them to fit in too. Also I needed to have 2 designs for the tags, as i have a button to toggle removing, when not removing the tags are small and cute but when you toggle removing, they become big so that it is easier to touch them. The final add button also took a lot of time, the same issue as the tags, since it is the main call-to-action, it needs to be unique, so I had to make it different, It incorporates all the three colors in the design, black, gold and black along with the communist logo. It also has 2 states, the normal state is what is in the attached screenshot, but when it is submitting the add request to the backend, it sticks to its shadow by translating to its shadow, i mean it just animation That’s it for this devlog, since the last devlog was very short, I had to compensate for that and I over-explained in this one The next steps would probably be to connect the detecting code to route to this page with the item object, and also work on the main distribution part which i think would be the hardest.
5 days plan ready Self-fish devlog #11 (Very Important) So in the last devlog I had completed the add item screen, since then I have been making plans for the future of this app, and i think I am finally ready to reveal it. What have I done? Added tiers and a ration norm to the item and detection table, I will explain later in this devlog, what they do Made the whole backend more secure from wrong answers generated by gemini: since I am using gemini, there is a possiblity that it does not follow the schema I gave it, if that happens, the backend would crash, but now have added field validators for all crucial columns where the the model is most likely to generate wrong answers. While testing I also found out that at sometimes, the model would face a lot of traffic and it would return a 503 and the server crashed, but now the backend has 2 models, gemini-3.1-flash-lite and gemini-2.5-flash-lite, each with 5 retries. So if gemini-3.1-flash-lite, which was getting a lot of traffic, fails, the backend fallsback to 2.5, which I believe should have less traffic Also in the last devlog I had forgot the add tag button which I have added, I already had the function to add but I think the 25 day gap made me forgot that, I also added tiers to page but I still haven’t added ration_norm cuz I have to devlog first What’s the plan? A lot of people don’t actually know what communism is, so I will explain it first, communism is a stateless, moneyless and classless society where the people own the methods of production, It is a type of socialism that came into existence through Karl Marx So in true communist state, there is no money, therefore I dropped the price column from my items table. Instead I have divided everything into 3 categories: **1. Essentials - These items are basic necessities that are needed to surve, example: food, water, soap, clothes, etc. These would be distributed equally to everyone who uses the app, ie the people of the state. **2. Useful Items - These items are not necessary but they improve your quality of life, these include things like a normal mouse, a laptop, etc. These are not distributed equally, instead you have to write 2 lines, just 2 cuz I know when others would review my project, they wouldn’t want to write a whole para to check the working of my app, so those 2 lines would go to gemini once again and it would check if the person gets the item or not. 3. Wants - These items are not necessary and do not improve the quality of life, but they are important to satisfy the personal wishes of the user. These include top tier laptops, high end gaming mouses etc. For this I want to connect to hackatime, I had seen some project on stardance that connected to hackatime, so the plan would be to connect to hackatime and get the no. of hours coded by the user. These hours would be used as labor hours. Whenever the user wants to get these items with the want tier, they would give some of their labor hours to get their item along 2 lines to satisfy the model. So that’s how the app would work, I have just finished the first part of the app, this probably is the 2nd hardest part of the project, the next step would be to create a page where all the items are listed, this would be very easy but after that would be the hardest part of the project, it would be the form where the user can request the item. The images: Well they are both the same, As you can see I have Tiers and add button to this page, everything else is the same, there are 3 buttons (pressables) with the tiers, the default tier is selected by gemini, the user can change them, The ‘+’ button would be present next to the last tag, It can toggle adding, the user can then enter the tag name and press the + button next to the input field. The section below the tag selector displays the description of the tags....
|
1792659126.2009447
|
1793263926.2009447
|
|
68094
|
Opentop Macropad by @sarthak_jnj | Stardance
|
sarthak_jnj
|
0
|
9.5
|
0
|
[]
|
[{"post_id": 81550, "ts": "202 [{"post_id": 81550, "ts": "2026-10-21T17:36:03Z", "hours": 3.4997, "text": "Devlog 4: Made the CAD housing , fixed the PCB layout (hope it works, I’ll recheck tho) and started a bit on the firmware."}, {"post_id": 80437, "ts": "2026-10-17T16:49:23Z", "hours": 3.9817, "text": "Devlog 3: Used Arduino setup to test my wiring logic. Completed the schematics and fought with KiCAD to build the actual PCB design"}, {"post_id": 78140, "ts": "2026-10-09T18:39:37Z", "hours": 0.9011, "text": "Devlog 2: Pretty much no progress today, just got stuck in the loop due to my first experience in dealing with such microelectronics and fried my brain. only added a few things to the schematics"}, {"post_id": 77824, "ts": "2026-10-08T12:48:57Z", "hours": 1.1169, "text": "Devlog 1: Just made a basic schematic for my Macropad. Spent most of the time learning to navigate KiCAD, so not too much progress. Rotatory encoder and LEDs still not mapped in schematics."}]...
|
Title: Opentop Macropad by @sarthak_jnj | Stardanc Title: Opentop Macropad by @sarthak_jnj | Stardance
Devlogs:
Devlog 1: Just made a basic schematic for my Macropad. Spent most of the time learning to navigate KiCAD, so not too much progress. Rotatory encoder and LEDs still not mapped in schematics.
Devlog 2: Pretty much no progress today, just got stuck in the loop due to my first experience in dealing with such microelectronics and fried my brain. only added a few things to the schematics
Devlog 3: Used Arduino setup to test my wiring logic. Completed the schematics and fought with KiCAD to build the actual PCB design
Devlog 4: Made the CAD housing , fixed the PCB layout (hope it works, I’ll recheck tho) and started a bit on the firmware....
|
1793116453.0164812
|
1793721253.0164812
|
|
63863
|
Antelope-Hackclub Website by @inatlusnamor | Stard Antelope-Hackclub Website by @inatlusnamor | Stardance...
|
inatlusnamor
|
2
|
17.0
|
123
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T17:23:05Z", "hours": 7.0, "multiplier": 14.42, "payout": 108, "blessing": "neutral", "text": "I made a club website where my club members can find resources and learn about our website. A cool feature that I added is that my discord bot is integrated into my website. I can add things to the gallery and to the guides via our discord server. I am really proud of that!", "repo": "https://github.com/Romanhery/Antelope-Hackclub-Website", "demo": "https://antelope-hackclub.vercel.app/"}, {"ship_num": 2, "ts": "2026-09-20T17:15:15Z", "hours": 10.0, "multiplier": 2.84, "payout": 15, "blessing": "neutral", "text": "We made our own website for our Hackclub Chapter . The parts that were challenging were the merge conflicts and the commits. Another thing that was challenging was integrating our discord bot into the gallery because it was my first time using a discord bot and other 3rd party libraries in python so I actually learned alot. If you want to try the project you have to join the discord server and go the gallery text channel and type in /add-gallery and type in your paramenters and then it will add it to the gallery section in our website!", "repo": "https://github.com/Romanhery/Antelope-Hackclub-Website", "demo": "https://antelope-hackclub.vercel.app/"}]...
|
[{"post_id": 81548, "ts": "202 [{"post_id": 81548, "ts": "2026-10-21T17:19:47Z", "hours": 4.4219, "text": "I reworked the whole entire website Features I added were the ui I made it look better I also added the current programs we are running and thats it"}, {"post_id": 74770, "ts": "2026-09-28T06:30:59Z", "hours": 1.7292, "text": "Devlog #4 I added some features that people in my last ship said I should do and some that I wanted to do. Additions Added navbar across all pages I made the gallery and guide images on the cards actually fill their container instead of the old one cropped I also changed the join community link to the discord because that is where everyone is I also added a styles.css for each page because one styles.css was very hard to navigate and was tangled a lot Challenges I faced It was hard to code the css all over again and I had major setbacks, the things that were hard were the sizing and the layout if you touch one thing another thing moves so PHEW I finished that. Future Plans Fixing up the events page and integrating my discord bot to add and remove events there also to ping everyone! Add more things to the home page Add more starter guides because that is a huge hassle I also wanna add a faq because some questions are already answered A members page Contact Page Some more I hope!"}, {"post_id": 73484, "ts": "2026-09-25T07:00:12Z", "hours": 1.3222, "text": "I am loggin my hours for today! I added a feature that moves the nav link up !"}, {"post_id": 70761, "ts": "2026-09-19T18:34:46Z", "hours": 9.6464, "text": "I added a function to my website where I can recieve json from a discord bot that can update my gallery and add cards to it ! Its now easier to add cards to my gallery easier than ever!"}]...
|
Title: Antelope-Hackclub Website by @inatlusnamor Title: Antelope-Hackclub Website by @inatlusnamor | Stardance
Devlogs:
I added a function to my website where I can recieve json from a discord bot that can update my gallery and add cards to it ! Its now easier to add cards to my gallery easier than ever!
I am loggin my hours for today! I added a feature that moves the nav link up !
Devlog #4 I added some features that people in my last ship said I should do and some that I wanted to do. Additions Added navbar across all pages I made the gallery and guide images on the cards actually fill their container instead of the old one cropped I also changed the join community link to the discord because that is where everyone is I also added a styles.css for each page because one styles.css was very hard to navigate and was tangled a lot Challenges I faced It was hard to code the css all over again and I had major setbacks, the things that were hard were the sizing and the layout if you touch one thing another thing moves so PHEW I finished that. Future Plans Fixing up the events page and integrating my discord bot to add and remove events there also to ping everyone! Add more things to the home page Add more starter guides because that is a huge hassle I also wanna add a faq because some questions are already answered A members page Contact Page Some more I hope!
I reworked the whole entire website Features I added were the ui I made it look better I also added the current programs we are running and thats it
Ships:
We made our own website for our Hackclub Chapter . The parts that were challenging were the merge conflicts and the commits. Another thing that was challenging was integrating our discord bot into the gallery because it was my first time using a discord bot and other 3rd party libraries in python so I actually learned alot. If you want to try the project you have to join the discord server and go the gallery text channel and type in /add-gallery and type in your paramenters and then it will add it to the gallery section in our website!
I made a club website where my club members can find resources and learn about our website. A cool feature that I added is that my discord bot is integrated into my website. I can add things to the gallery and to the guides via our discord server. I am really proud of that!...
|
1793213428.9489143
|
1793299828.9489143
|
|
59545
|
lexi OS by @IcedThrower_95 | Stardance
|
IcedThrower_95
|
0
|
3.14
|
0
|
[]
|
[{"post_id": 81545, "ts": "202 [{"post_id": 81545, "ts": "2026-10-21T17:08:54Z", "hours": 3.1431, "text": "In the 3 hours I worked, I built four apps A very simple wallpaper storage app Next, I made a notes app - I first built simple notes in the notes app, then I realised, why don’t we add relationships between each node like in an artificial neural network, so I did, for which I took help from AI I built a translator app which converts select languages for now. The final one is a currency converter, which as of now has 5 currencies. Tomorrow I will be working on improving these apps, this is just the first iteration hehehe"}, {"post_id": 71816, "ts": "2026-09-21T16:30:34Z", "hours": 0.0, "text": "#devlog 3 , I just fiddled around with the music player adding more features to it making it a unique player out there in a webos"}, {"post_id": 71327, "ts": "2026-09-20T17:08:03Z", "hours": 0.0, "text": "last two days, i spent my time building the apps calculator and the music player and fiddling with the styling of the apps, still a little confused in my head. any suggestion on what amount of blur is ideal is much appreciated"}, {"post_id": 70179, "ts": "2026-09-18T17:04:03Z", "hours": 0.0, "text": "#devlog1 today i spent time working and learning to implement the dock and the mouse movements for the draggable windows, for now i am using the the mac os style, after developing my own UI in figma I hope to change it. The style i am is a blend of GlassMorphism and Neumorphism. And also i develop the icon is figma but i wasn’t quite able to fit them properly, will look into it tomorrow. For now thats it guys"}]...
|
Title: lexi OS by @IcedThrower_95 | Stardance
Dev Title: lexi OS by @IcedThrower_95 | Stardance
Devlogs:
#devlog1 today i spent time working and learning to implement the dock and the mouse movements for the draggable windows, for now i am using the the mac os style, after developing my own UI in figma I hope to change it. The style i am is a blend of GlassMorphism and Neumorphism. And also i develop the icon is figma but i wasn’t quite able to fit them properly, will look into it tomorrow. For now thats it guys
last two days, i spent my time building the apps calculator and the music player and fiddling with the styling of the apps, still a little confused in my head. any suggestion on what amount of blur is ideal is much appreciated
#devlog 3 , I just fiddled around with the music player adding more features to it making it a unique player out there in a webos
In the 3 hours I worked, I built four apps A very simple wallpaper storage app Next, I made a notes app - I first built simple notes in the notes app, then I realised, why don’t we add relationships between each node like in an artificial neural network, so I did, for which I took help from AI I built a translator app which converts select languages for now. The final one is a currency converter, which as of now has 5 currencies. Tomorrow I will be working on improving these apps, this is just the first iteration hehehe...
|
1792803119.8894753
|
1793407919.8894753
|
|
8880
|
Where the Meteor at by @adwitya | Stardance
|
adwitya
|
1
|
3.34
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T21:02:17Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a meteor predictor to innovate i ask user for location and they can have the list meteor and best viewing time and angle i used other parameter such as pollution light in surrounding and aqi to improve output Using flask for the first time was challenging ai eased the pain a bit but surely there were times where i regretted the project but at the end i loved it as any Hollywood film would say i am proud that i was able to move outside my comfort zone and make a project with real parameters and make a io project that may actually help a niche amount of people i tested most of the edge cases using ai for debugging but if occurs please do a pr or publish an issue would love to look into it the code is clean readable and was mentored by me as the v0 and v1 code was mainly written by me", "repo": "https://github.com/AdwityaIO/WhereTheMeteorAt", "demo": "https://where-the-meteor-at.vercel.app/"}]...
|
[{"post_id": 81543, "ts": "202 [{"post_id": 81543, "ts": "2026-10-21T17:02:52Z", "hours": 0.2731, "text": "made a new wiki type page where people can find more about the type of comet they want to know about and also learned how to handle multiple pages at once in a vercel site"}, {"post_id": 80478, "ts": "2026-10-17T19:49:34Z", "hours": 2.0719, "text": "when i started Where the Meteor at , the idea was pretty straightforward : ask for someone’s location , account for the condition in their sky ,and tell them how many meteors they could realistically see instead of just throwing the theoretical ZHR at them. The first couple of sessions were mostly about figuring out the logic and getting the Flask backend to work . I was learning as i went , breaking things , debugging them , and occasionally wondering why did i even pick this project because of the back and forth but i finally gave the UI the project Deserved. The redesign I took a lot of inspiration from Teenage Engineering’s Industrial design language . I wanted the interface to feel like a scientific instrument rather than another generic AI dashboard as it looked before . SO i went with a warm off-white background ,near-black text and a sharp orange accent .Syne handles the big heading while jetbrains mono gives the measurement and data a technical , instrument-panel feel. I also re-worked the layout around how someone would actually use the tool . Location search and sky condition sit in their sidebar , while the meteor shower gets the main stage . The estimated meteor count is the first thing you notice and the more detailed information stays tucked inside expandable rows until you need it . those rows contain things like radiant altitude , viewing direction air quality and the best viewing window .I also kept the hourly chart so you can get a better idea of how the condition change instead of relying on one number . The goal was to make the interface feel engineered not just decorated. No unnecessary elements ; just a strong grid , deliberate typography , and i especially love the orange accents Conclusion This project has been a bit out of my comfort zone i started out learning and experimenting with Flask , and ended up with a project that combines astronomy environmental data , calculation and interface design. The direction the UI took was amazing .It finally feels like a coherent product instead of a collection of features i managed to get working. The next step is to finish the final check , update the documentation , and ship it If you spot a bug or have an idea for improving the prediction ; feel free to open an issue or submit a PR. I’d genuinely love to see what people do with it"}, {"post_id": 18628, "ts": "2026-06-29T20:28:58Z", "hours": 0.7372, "text": "man i love vibe coding was just learning here and there how to vibe code trying get along it and seeing ,did a bit of ammature practice"}, {"post_id": 14142, "ts": "2026-06-23T03:58:58Z", "hours": 0.4519, "text": "first devlog this is going to be about how this project is gonna be traced firstly i would scrap the comets and hardcode them into my dataset then i would make a engine that would calculate showers and predict them I’m using flask as I’m proficient in python to connect it to a html and then i would calculate how much meteor is visible ,viable angle using parameter like aqi sky clarity and latitude longitude i would later add dynamic location picker using map (in v0 u need to log latitude and longitude manually)"}]...
|
Title: Where the Meteor at by @adwitya | Stardance Title: Where the Meteor at by @adwitya | Stardance
Devlogs:
first devlog this is going to be about how this project is gonna be traced firstly i would scrap the comets and hardcode them into my dataset then i would make a engine that would calculate showers and predict them I’m using flask as I’m proficient in python to connect it to a html and then i would calculate how much meteor is visible ,viable angle using parameter like aqi sky clarity and latitude longitude i would later add dynamic location picker using map (in v0 u need to log latitude and longitude manually)
man i love vibe coding was just learning here and there how to vibe code trying get along it and seeing ,did a bit of ammature practice
when i started Where the Meteor at , the idea was pretty straightforward : ask for someone’s location , account for the condition in their sky ,and tell them how many meteors they could realistically see instead of just throwing the theoretical ZHR at them. The first couple of sessions were mostly about figuring out the logic and getting the Flask backend to work . I was learning as i went , breaking things , debugging them , and occasionally wondering why did i even pick this project because of the back and forth but i finally gave the UI the project Deserved. The redesign I took a lot of inspiration from Teenage Engineering’s Industrial design language . I wanted the interface to feel like a scientific instrument rather than another generic AI dashboard as it looked before . SO i went with a warm off-white background ,near-black text and a sharp orange accent .Syne handles the big heading while jetbrains mono gives the measurement and data a technical , instrument-panel feel. I also re-worked the layout around how someone would actually use the tool . Location search and sky condition sit in their sidebar , while the meteor shower gets the main stage . The estimated meteor count is the first thing you notice and the more detailed information stays tucked inside expandable rows until you need it . those rows contain things like radiant altitude , viewing direction air quality and the best viewing window .I also kept the hourly chart so you can get a better idea of how the condition change instead of relying on one number . The goal was to make the interface feel engineered not just decorated. No unnecessary elements ; just a strong grid , deliberate typography , and i especially love the orange accents Conclusion This project has been a bit out of my comfort zone i started out learning and experimenting with Flask , and ended up with a project that combines astronomy environmental data , calculation and interface design. The direction the UI took was amazing .It finally feels like a coherent product instead of a collection of features i managed to get working. The next step is to finish the final check , update the documentation , and ship it If you spot a bug or have an idea for improving the prediction ; feel free to open an issue or submit a PR. I’d genuinely love to see what people do with it
made a new wiki type page where people can find more about the type of comet they want to know about and also learned how to handle multiple pages at once in a vercel site
Ships:
i made a meteor predictor to innovate i ask user for location and they can have the list meteor and best viewing time and angle i used other parameter such as pollution light in surrounding and aqi to improve output Using flask for the first time was challenging ai eased the pain a bit but surely there were times where i regretted the project but at the end i loved it as any Hollywood film would say i am proud that i was able to move outside my comfort zone and make a project with real parameters and make a io project that may actually help a niche amount of people i tested most of the edge cases using ai for debugging but if occurs please do a pr or publish an issue would love to look into it the code is clean readable and was mentored by me as the v0 and v1 code was mainly written by me...
|
1793202711.9277925
|
1793289111.9277925
|
|
19459
|
BLarm by @mygulash | Stardance
|
mygulash
|
0
|
7.78
|
0
|
[]
|
[{"post_id": 81537, "ts": "202 [{"post_id": 81537, "ts": "2026-10-21T16:44:43Z", "hours": 7.7839, "text": "Blarm aka Bee alarm 🐝🐝🐝 I have built the schematic and the case now my goal is to ship it to receive the parts so i can actually build it irl!"}]...
|
Title: BLarm by @mygulash | Stardance
Devlogs:
Bl Title: BLarm by @mygulash | Stardance
Devlogs:
Blarm aka Bee alarm 🐝🐝🐝 I have built the schematic and the case now my goal is to ship it to receive the parts so i can actually build it irl!...
|
1792691232.0812912
|
1793296032.0812912
|
|
57689
|
very cool personal website by @estevao | Stardance
|
estevao
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T16:18:14Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "a website for me to put my thoughts and stuff :) it has topics and tabs, like a personal forum just for me", "repo": "https://github.com/EAlbqrq/personal-website", "demo": "https://ealbqrq.github.io/personal-website/"}]...
|
[{"post_id": 81530, "ts": "202 [{"post_id": 81530, "ts": "2026-10-21T16:17:00Z", "hours": 1.1897, "text": "finalized layout"}, {"post_id": 61862, "ts": "2026-09-05T00:04:19Z", "hours": 1.3972, "text": "It’s been quite the work but it’s fun to learn html and css :) (spent 2 hours to learn how to center the whole thing)"}]...
|
Title: very cool personal website by @estevao | St Title: very cool personal website by @estevao | Stardance
Devlogs:
It’s been quite the work but it’s fun to learn html and css :) (spent 2 hours to learn how to center the whole thing)
finalized layout
Ships:
a website for me to put my thoughts and stuff :) it has topics and tabs, like a personal forum just for me...
|
1793199079.6361525
|
1793285479.6361525
|
|
70823
|
fort.desktop by @ryni | Stardance
|
ryni
|
1
|
32.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T16:15:51Z", "hours": 32.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this is fort.desktop! a tiny little client for fort.ind (my own game archive/sharkey instance) its made in universal windows platform and C# it has a couple features like browsing the fort.ind game archive, logging in with a fort.social account and browsing the instance and making posts! (that was tha hardest thing to get working) and live tiles. so like.. how do you use this since uwp apps are a core part of windows, all you need is ti extract the zip install the cert and click the .msix file and install from there (i also made a tiny script to speed up install if you dont wanna do that)", "repo": "https://github.com/fort-ind/uwp", "demo": "https://github.com/fort-ind/uwp/releases"}]...
|
[{"post_id": 81526, "ts": "202 [{"post_id": 81526, "ts": "2026-10-21T16:05:51Z", "hours": 32.2781, "text": "honestly been a while since i worked on this project.. but i bulit a lot (and learned how to not break a sharkey instance) these past few months ive been learning how to push content to a live tile :) i did also try out getting the windows share and ink apis to work.. a bunch of trial and error but now i can see i have inking support i got a lot more ideas to work on soon."}]...
|
Title: fort.desktop by @ryni | Stardance
Devlogs: Title: fort.desktop by @ryni | Stardance
Devlogs:
honestly been a while since i worked on this project.. but i bulit a lot (and learned how to not break a sharkey instance) these past few months ive been learning how to push content to a live tile :) i did also try out getting the windows share and ink apis to work.. a bunch of trial and error but now i can see i have inking support i got a lot more ideas to work on soon.
Ships:
this is fort.desktop! a tiny little client for fort.ind (my own game archive/sharkey instance) its made in universal windows platform and C# it has a couple features like browsing the fort.ind game archive, logging in with a fort.social account and browsing the instance and making posts! (that was tha hardest thing to get working) and live tiles. so like.. how do you use this since uwp apps are a core part of windows, all you need is ti extract the zip install the cert and click the .msix file and install from there (i also made a tiny script to speed up install if you dont wanna do that)...
|
1793166467.1783614
|
1793252867.1783614
|
|
57652
|
AgendaHub by @cesarmoal11 | Stardance
|
cesarmoal11
|
0
|
45.9
|
0
|
[]
|
[{"post_id": 81524, "ts": "202 [{"post_id": 81524, "ts": "2026-10-21T15:56:27Z", "hours": 1.0136, "text": "I’ve done a timer for AgendaHub. I think it’s a useful tool for this website, because it will be used mainly by students. A timer is useful for dividing your time, studying, and school stuff. It maintains the time while you change between sections. Also it’s draggable, I have learned how to do that right now."}, {"post_id": 76690, "ts": "2026-10-04T10:57:37Z", "hours": 2.115, "text": "I have been doing a few things to the web, Improving the responsive the design for phones and also improving the AgendaHub guide for beginners, in which you can find all the instructions of how to use this web."}, {"post_id": 75237, "ts": "2026-09-29T15:36:23Z", "hours": 3.7958, "text": "I have done a very cool sub-section I’m really proud of. I’ve always wanted in AgendaHub something to track your habits and see your progress. This is perfect, because you can create your own customizable habits and see all the statistics. Also you can see a calendar with all the feeling you have been having through the year. I used AI for learning some new things (like making the chart). I hope you’ll like it."}, {"post_id": 74435, "ts": "2026-09-27T11:35:03Z", "hours": 1.1172, "text": "I created another functionality for events. Now, if you have an event which is repeating, you can choose to edit all the repetitions of that event or only an individual event of those."}, {"post_id": 73750, "ts": "2026-09-25T21:03:08Z", "hours": 1.2989, "text": "I fixed som errors with the event repetition."}, {"post_id": 72764, "ts": "2026-09-23T18:08:21Z", "hours": 3.8686, "text": "I have done a very significant part of my project. I decided to combine the two different main databases I had to create only one called “events”. These events are shown by 2 different ways: on the calendar section (calendar, week or day view) and on the new schedule section. Both sections are connected so all the changes you make are update in both sections. A new functionality for events is you can repeat them the times you want, choosing the days and all that stuff."}, {"post_id": 71800, "ts": "2026-09-21T16:00:53Z", "hours": 1.6764, "text": "I did a new section for my webb. I have created a new way to organize yourself in agendahub. It’s a regular schedule, in which you can create the different tasks you usually have on your daily life. However, if you have something which happens once you can not repeat it. The duration is also a good way to organize your day. The main purpose of the section is to see quickly all the ordinary tasks of your week."}, {"post_id": 71162, "ts": "2026-09-20T11:44:11Z", "hours": 2.9183, "text": "I have almost done the responsive design for mobile phones."}, {"post_id": 70216, "ts": "2026-09-18T18:35:58Z", "hours": 0.5508, "text": "I have started with the responsive design for mobiles."}, {"post_id": 69701, "ts": "2026-09-17T16:38:28Z", "hours": 0.8422, "text": "I have done a few more changes. NOw you can change the password in case you forget it. Also you can create events and tasks without selecting a subject."}, {"post_id": 69236, "ts": "2026-09-16T17:03:59Z", "hours": 1.0986, "text": "I added a few changes in the user section. Now you can change the profile picture by choosing a picture from your computer. Also you can select the dates of beginning and end of your course to visualize the progress bar. I also added the count of the days to the end of the course. Finally I added the log out button."}, {"post_id": 68722, "ts": "2026-09-15T16:48:16Z", "hours": 0.9089, "text": "I have finished the connection between my web and supabase. Right now, people who wants to use the web must create an account using an email. By this way AgendaHub is gonna be so much efficient and customizable. All the events, tasks, subjects and more that you create using your account are stored on the database, to save them forever. The next thing I wanna do is the user-settings part."}, {"post_id": 68215, "ts": "2026-09-14T18:24:53Z", "hours": 0.5758, "text": "I have continued doing the necessary changes to connect AgendaHub to supabase instead of localStorage. I have changed the user system, the subjects and the calendars-events. Now I have to do the same with tasks and marks."}, {"post_id": 67566, "ts": "2026-09-13T18:24:30Z", "hours": 2.9464, "text": "I am trying to get AgendaHub to the next level. My idea is to use a database for creating an user system, allowing people to create accounts and that stuff. By that way everything is gonna be more organized and also I’m gonna be able to create more personalize stuff to improve the web."}, {"post_id": 66483, "ts": "2026-09-12T10:09:35Z", "hours": 0.6811, "text": "I have finished the version 1.0 of Agendahub. All the sections and its functionalities which I first made up are already working. I also added different messages when the web is clean so the user is able to know the function of each section and what can he do in there. I’ll be adding more stuff, but the web I made up is officialy done. I’m so proud of it because I really think it is sooo helpul for students to organise everything (also for me) and I have practised and learn lots of things. :)"}, {"post_id": 66139, "ts": "2026-09-11T19:22:34Z", "hours": 1.2033, "text": "I have done the initial dashboard. Now, when the user enters on the website there’s a summary of his tasks, events and marks. Any idea to add to the website?"}, {"post_id": 65468, "ts": "2026-09-10T16:47:44Z", "hours": 1.2425, "text": "I have done the marks section, which is very similar to the subjects section. It has subject cards too, but here is shown the average mark of each subject. Also there is a general average mark and a lot of progress bars which I really like."}, {"post_id": 64940, "ts": "2026-09-09T17:51:03Z", "hours": 1.7594, "text": "I have continued with the subject content. Now, apart from having the main info at the top of the subject section, you can visualize all the events, tasks and marks from that subject. Also by clicking you can see all the info of each one."}, {"post_id": 64305, "ts": "2026-09-08T16:22:55Z", "hours": 1.8203, "text": "I did the subject settings, so now when the user creates a subject he can change later its info and settings. Also you can upload an image to be the subject front page."}, {"post_id": 63887, "ts": "2026-09-07T21:57:48Z", "hours": 1.7894, "text": "Hii. I have started the marks section, however, I decided to set aside it to do another section which is more important: Subjects. The idea of this section is quite simple: the user can create a subject depending on his needs, and all his own personalize subjects will appear on the menus of the calendar, tasks and marks to create all those stuff. You can create infinite subjects and choose their color, which will appear too in the events and tasks. The next step is doing individual windows for each subject, so the user can enter into it by clicking on the subjects."}, {"post_id": 63031, "ts": "2026-09-06T16:30:05Z", "hours": 2.6111, "text": "I have finished the tasks sectiooon!! It is divided into several parts: the header which contains the title and the button to create new tasks, the counters which each one counts different aspects of the tasks (completed, for tomorrow…), the “tomorrow” part which contains a list with the tasks for the next day, the “state” part which contains 3 blocks that contain the tasks depending on its state (to-do, in progress or done) and finally the all part which contains a list with all the tasks."}, {"post_id": 62532, "ts": "2026-09-05T23:18:23Z", "hours": 0.9003, "text": "I have done the “sketch” for the new section of my web, the tasks section. In here, the user will be able to create tasks and see them on different places. There will be an account of the tasks made, the tasks which have been made and that stuff. Also there will be a list with the most urgent tasks for the next day. Each task will have a title, a subject, a date… There will be another section in which the tasks will be ordered by their state."}, {"post_id": 62360, "ts": "2026-09-05T18:06:58Z", "hours": 2.0114, "text": "I have create a very functional and extended functionality. In all the calendars you can create different calendars to separate your events and tasks. I did that. Now you can create your own calendar which the name you prefer and create in it all the events you want. Using the side menu you can hide each calendar by clicking on them and also delete them."}, {"post_id": 62113, "ts": "2026-09-05T11:22:55Z", "hours": 0.6206, "text": "I did a few new functionalities on the calendar section. Now, if there are more than 3 events in the same day, the rest are hidden in the calendar view. However, the user can see the whole events in the other views. Another functionality I have made is the button “Hoy” (today). If the user do click on it, it shows the actual day on the selected view. Also the number in the current day is highlighted."}, {"post_id": 61826, "ts": "2026-09-04T22:35:45Z", "hours": 3.1517, "text": "Hii I’m so excited about the progress of AgendaHub. After creating the template for the calendar which calculate automatically the days and all the stuff I did the other views. The user can use the button on the top of the section for moving along them. The template changes depending on the view the user has chosen. Also, the user can create events (exams usually) using the + button OOOR by clicking on the day the prefer. After doing one of those things, the user has to fill a form to create the event (title, date, subject, time and a description). If these gaps are empty when the user clicks the save button, an error alert will warn the user to fill them. Besides, the user can see all the information of the events by clicking on them. Also they are editable (if the user has to change the date or something else). I’m really proud of this because I think it looks great and also is SOO USEFUL (specially for students and productive people). I have used chat gpt to learn how to do the java script stuff (the calculations of the days, months…)."}, {"post_id": 61418, "ts": "2026-09-04T10:09:12Z", "hours": 0.8514, "text": "I’m so proud of this new section which I have created. It consists on a calendar, which is formed depending on the date of the user. Also you can explore and see the previews and next months by using the buttons. It’s made with javascript. Honestly, this is my first time creating a calendar like this and I have use AI for learning and understanding how to do it. I’m sooo happy with the final result."}, {"post_id": 60914, "ts": "2026-09-03T15:58:54Z", "hours": 1.0492, "text": "I have done a new button in the calendar section, which allows the user (in the future) to change the view of the events. I also made the event-creator title and date compulsory, showing an error if the user doesn’t fill those gaps. The next step is creating the different views."}, {"post_id": 60777, "ts": "2026-09-03T11:28:29Z", "hours": 0.375, "text": "I start doing the calendar section. Now theres only the place where I’m gonna create it. I did the modal which allows the user to create en event. I still follow the design of the web, I really like it. The next step is to make this modal work and create some events, then I will create the calendar and fill it with the events."}, {"post_id": 60761, "ts": "2026-09-03T10:53:45Z", "hours": 0.3872, "text": "I improved the sidebar and header design. From now on the web design is gonna be like this, using this color palette, basic shadows, floating elements… Now I’m gonna start with the sections"}, {"post_id": 60496, "ts": "2026-09-02T21:23:58Z", "hours": 0.7217, "text": "I just started this exicitn project. The idea is to build a functional agenda to organise my work (tasks, exams, marks…). I want to add these: a calendar (monthly and weekly) to see what I have to do, an interactive list with my tasks (and organize them by categories), a section to have the marks from my exams, a section with the different subjects I have and all the information of each one and finally a section with objectives. Right now there’s only the header, the next step is to make it functional. I also have decided the color palette to my project."}]...
|
Title: AgendaHub by @cesarmoal11 | Stardance
Devl Title: AgendaHub by @cesarmoal11 | Stardance
Devlogs:
I just started this exicitn project. The idea is to build a functional agenda to organise my work (tasks, exams, marks…). I want to add these: a calendar (monthly and weekly) to see what I have to do, an interactive list with my tasks (and organize them by categories), a section to have the marks from my exams, a section with the different subjects I have and all the information of each one and finally a section with objectives. Right now there’s only the header, the next step is to make it functional. I also have decided the color palette to my project.
I improved the sidebar and header design. From now on the web design is gonna be like this, using this color palette, basic shadows, floating elements… Now I’m gonna start with the sections
I start doing the calendar section. Now theres only the place where I’m gonna create it. I did the modal which allows the user to create en event. I still follow the design of the web, I really like it. The next step is to make this modal work and create some events, then I will create the calendar and fill it with the events.
I have done a new button in the calendar section, which allows the user (in the future) to change the view of the events. I also made the event-creator title and date compulsory, showing an error if the user doesn’t fill those gaps. The next step is creating the different views.
I’m so proud of this new section which I have created. It consists on a calendar, which is formed depending on the date of the user. Also you can explore and see the previews and next months by using the buttons. It’s made with javascript. Honestly, this is my first time creating a calendar like this and I have use AI for learning and understanding how to do it. I’m sooo happy with the final result.
Hii I’m so excited about the progress of AgendaHub. After creating the template for the calendar which calculate automatically the days and all the stuff I did the other views. The user can use the button on the top of the section for moving along them. The template changes depending on the view the user has chosen. Also, the user can create events (exams usually) using the + button OOOR by clicking on the day the prefer. After doing one of those things, the user has to fill a form to create the event (title, date, subject, time and a description). If these gaps are empty when the user clicks the save button, an error alert will warn the user to fill them. Besides, the user can see all the information of the events by clicking on them. Also they are editable (if the user has to change the date or something else). I’m really proud of this because I think it looks great and also is SOO USEFUL (specially for students and productive people). I have used chat gpt to learn how to do the java script stuff (the calculations of the days, months…).
I did a few new functionalities on the calendar section. Now, if there are more than 3 events in the same day, the rest are hidden in the calendar view. However, the user can see the whole events in the other views. Another functionality I have made is the button “Hoy” (today). If the user do click on it, it shows the actual day on the selected view. Also the number in the current day is highlighted.
I have create a very functional and extended functionality. In all the calendars you can create different calendars to separate your events and tasks. I did that. Now you can create your own calendar which the name you prefer and create in it all the events you want. Using the side menu you can hide each calendar by clicking on them and also delete them.
I have done the “sketch” for the new section of my web, the tasks section. In here, the user will be able to create tasks and see them on different places. There will be an account of the tasks made, the tasks which have been made and that stuff. Also there will be a list with the most urgent tasks for the next day. Each task will have a title, a subject, a date… There will be another section in which the tasks will be ordered by their state.
I have finished the tasks sectiooon!! It is divided into several parts: the header which contains the title and the button to create new tasks, the counters which each one counts different aspects of the tasks (completed, for tomorrow…), the “tomorrow” part which contains a list with the tasks for the next day, the “state” part which contains 3 blocks that contain the tasks depending on its state (to-do, in progress or done) and finally the all part which contains a list with all the tasks.
Hii. I have started the marks section, however, I decided to set aside it to do another section which is more important: Subjects. The idea of this section is quite simple: the user can create a subject depending on his needs, and all his own personalize subjects will appear on the menus of the calendar, tasks and marks to create all those stuff. You can create infinite subjects and choose their color, which will appear too in the events and tasks. The next step is doing individual windows for each subject, so the user can enter into it by clicking on the subjects.
I did the subject settings, so now when the user creates a subject he can change later its info and settings. Also you can upload an image to be the subject front page.
I have continued with the subject content. Now, apart from having the main info at the top of the subject section, you can visualize all the events, tasks and marks from that subject. Also by clicking you can see all the info of each one.
I have done the marks section, which is very similar to the subjects section. It has subject cards too, but here is shown the average mark of each subject. Also there is a general average mark and a lot of progress bars which I really like.
I have done the initial dashboard. Now, when the user enters on the website there’s a summary of his tasks, events and marks. Any idea to add to the website?
I have finished the version 1.0 of Agendahub. All the sections and its functionalities which I first made up are already working. I also added different messages when the web is clean so the user is able to know the function of each section and what can he do in there. I’ll be adding more stuff, but the web I made up is officialy done. I’m so proud of it because I really think it is sooo helpul for students to organise everything (also for me) and I have practised and learn lots of things. :)
I am trying to get AgendaHub to the next level. My idea is to use a database for creating an user system, allowing people to create accounts and that stuff. By that way everything is gonna be more organized and also I’m gonna be able to create more personalize stuff to improve the web.
I have continued doing the necessary changes to connect AgendaHub to supabase instead of localStorage. I have changed the user system, the subjects and the calendars-events. Now I have to do the same with tasks and marks.
I have finished the connection between my web and supabase. Right now, people who wants to use the web must create an account using an email. By this way AgendaHub is gonna be so much efficient and customizable. All the events, tasks, subjects and more that you create using your account are stored on the database, to save them forever. The next thing I wanna do is the user-settings part.
I added a few changes in the user section. Now you can change the profile picture by choosing a picture from your computer. Also you can select the dates of beginning and end of your course to visualize the progress bar. I also added the count of the days to the end of the course. Finally I added the log out button.
I have done a few more changes. NOw you can change the password in case you forget it. Also you can create events and tasks without selecting a subject.
I have started with the responsive design for mobiles.
I have almost done the responsive design for mobile phones.
I did a new section for my webb. I have created a new way to organize yourself in agendahub. It’s a regular schedule, in which you can create the different tasks you usually have on your daily life. However, if you have something which happens once you can not repeat it. The duration is also a good way to organize your day. The main purpose of the section is to see quickly all the ordinary tasks of your week.
I have done a very significant part of my project. I decided to combine the two different main databases I had to create only one called “events”. These events are shown by 2 different ways: on the calendar section (calendar, week or day view) and on the new schedule section. Both sections are connected so all the changes you make are update in both sections. A new functionality for events is you can repeat them the times you want, choosing the days and all that stuff.
I fixed som errors with the event repetition.
I created another functionality for events. Now, if you have an event which is repeating, you can choose to edit all the repetitions of that event or only an individual event of those.
I have done a very cool sub-section I’m really proud of. I’ve always wanted in AgendaHub something to track your habits and see your progress. This is perfect, because you can create your own customizable habits and see all the statistics. Also you can see a calendar with all the feeling you have been having through the year. I used AI for learning some new things (like making the chart). I hope you’ll like it.
I have been doing a few things to the web, Improving the responsive the design for phones and also improving the AgendaHub guide for beginners, in which you can find all the instructions of how to use this web.
I’ve done a timer for AgendaHub. I think it’s a useful tool for this website, because it will be used mainly by students. A timer is useful for dividing your time, studying, and school stuff. It maintains the time while you change between sections. Also it’s draggable, I have learned how to do that right now....
|
1792716651.6562145
|
1793321451.6562145
|
|
45078
|
streaming-tools by @Pikacnu | Stardance
|
Pikacnu
|
0
|
87.59
|
0
|
[]
|
[{"post_id": 81520, "ts": "202 [{"post_id": 81520, "ts": "2026-10-21T15:44:55Z", "hours": 8.1031, "text": "Not planned, but… AI found lots of bugs and issues. They aren’t fixed or implemented yet (I didn’t even know that). So… still fixing them and building the Graph System."}, {"post_id": 79739, "ts": "2026-10-15T08:17:11Z", "hours": 11.6878, "text": "Still finishing graph layer to gst. Frontend not start yet."}, {"post_id": 77492, "ts": "2026-10-07T07:13:59Z", "hours": 11.975, "text": "Finished implementing the basic function for parseNode. Still need to update the graph to add more capabilities directly to the node system (such as removing pads from nodes, which is not yet implemented)."}, {"post_id": 73084, "ts": "2026-09-24T10:46:11Z", "hours": 9.0183, "text": "The node rewrite is almost complete, with only a few nodes left to migrate to the new type. Once all tests pass and the migrations are finished, I can start working on the stream (making sure it can push and verify first using the test pipeline built on top of the node system). After that, I’ll move on to building the frontend."}, {"post_id": 70152, "ts": "2026-09-18T15:57:35Z", "hours": 10.1275, "text": "I am rewriting the node system(which allows frontend nodes to be transformed into backend nodes,and then builds a gst.pipeline to process them), Which is still incomplete. My goal is to let you create a pipeline with minimal media processing knowledge, while still being able to control most things and understand the process (just simpler)."}, {"post_id": 65455, "ts": "2026-09-10T16:26:09Z", "hours": 9.1967, "text": "Designing Nodes (GStreamer) Wrap GStreamer components into nodes (like a box) and sync with the frontend. But with the features GStreamer has, I need to check the differences between the frontend and backend graphs and apply them to the GStreamer pipeline. Which is difficult, and I haven’t come up with a good idea yet. If anyone can give me some advice, that would be great."}, {"post_id": 51369, "ts": "2026-08-21T00:32:15Z", "hours": 8.7414, "text": "Add a simple frontend using SvelteFlow (This is my first time using Svelte) Wrap GStreamer into node-like abstractions (This will sync with the frontend) Note: This workflow is just to get started with SvelteFlow; it’s not the final result. Note: The GStreamer component is still a work in progress (WIP)."}, {"post_id": 47875, "ts": "2026-08-16T04:14:56Z", "hours": 8.3892, "text": "Figuring out how to parse video and mux it into the target format (FLV). Asked AI to understand how GStreamer works and how to build a proper pipeline. Also tried to start SRT and WHIP listeners. *WHIP doesn’t work for this use case because it can’t handle multiple audio tracks."}, {"post_id": 45894, "ts": "2026-08-12T17:15:12Z", "hours": 10.3536, "text": "Try to use gst to encode / decode video (from file now) Use 2 mpv to play video and audio(autoaudio/video won’t work and i have no idea.) Also platfrom’s chat room fetcher (not complete yet) There is it’s pipeline: filesrc → matroskademux ──(video/x-av1)→ av1parse → av1dec → videoconvert → x264enc → queue → appsink ─→ mpv #1 (H.264) └──(audio/x-opus)→ opusdec → queue → audioconvert → wavenc → appsink ─→ mpv #2 (WAV)"}]...
|
Title: streaming-tools by @Pikacnu | Stardance
De Title: streaming-tools by @Pikacnu | Stardance
Devlogs:
Try to use gst to encode / decode video (from file now) Use 2 mpv to play video and audio(autoaudio/video won’t work and i have no idea.) Also platfrom’s chat room fetcher (not complete yet) There is it’s pipeline: filesrc → matroskademux ──(video/x-av1)→ av1parse → av1dec → videoconvert → x264enc → queue → appsink ─→ mpv #1 (H.264) └──(audio/x-opus)→ opusdec → queue → audioconvert → wavenc → appsink ─→ mpv #2 (WAV)
Figuring out how to parse video and mux it into the target format (FLV). Asked AI to understand how GStreamer works and how to build a proper pipeline. Also tried to start SRT and WHIP listeners. *WHIP doesn’t work for this use case because it can’t handle multiple audio tracks.
Add a simple frontend using SvelteFlow (This is my first time using Svelte) Wrap GStreamer into node-like abstractions (This will sync with the frontend) Note: This workflow is just to get started with SvelteFlow; it’s not the final result. Note: The GStreamer component is still a work in progress (WIP).
Designing Nodes (GStreamer) Wrap GStreamer components into nodes (like a box) and sync with the frontend. But with the features GStreamer has, I need to check the differences between the frontend and backend graphs and apply them to the GStreamer pipeline. Which is difficult, and I haven’t come up with a good idea yet. If anyone can give me some advice, that would be great.
I am rewriting the node system(which allows frontend nodes to be transformed into backend nodes,and then builds a gst.pipeline to process them), Which is still incomplete. My goal is to let you create a pipeline with minimal media processing knowledge, while still being able to control most things and understand the process (just simpler).
The node rewrite is almost complete, with only a few nodes left to migrate to the new type. Once all tests pass and the migrations are finished, I can start working on the stream (making sure it can push and verify first using the test pipeline built on top of the node system). After that, I’ll move on to building the frontend.
Finished implementing the basic function for parseNode. Still need to update the graph to add more capabilities directly to the node system (such as removing pads from nodes, which is not yet implemented).
Still finishing graph layer to gst. Frontend not start yet.
Not planned, but… AI found lots of bugs and issues. They aren’t fixed or implemented yet (I didn’t even know that). So… still fixing them and building the Graph System....
|
1792612063.787812
|
1793216863.787812
|
|
62931
|
GitWrapped by @NEBULA_X | Stardance
|
NEBULA_X
|
1
|
20.56
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T17:44:02Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a project called GitWrapped. It can turn any GitHub profile into a Spotify wrapped style story. The most challenging things in this project for me were the CSS page CSS errors, positioning was also acting up, I think I had a sort of variable conflict or something, almost pushing my tokens to github which was automatically blocked, but that presented another pushing general issue, I eventually had to create a New repo since trying to fix the old one was too much unnecessary work. Im proud of the fact that I was able to think up an idea and build and deploy a working model all from scratch, thats pretty awesome to me. The software requires a VALID github username (obviously), any other information check out the README! It would be great if i could get feedback on the project itself from other people, so if you guys dont mind, drop what you think of it.", "repo": "https://github.com/IsraelAdedeji/GIT-WRAPPED-V2", "demo": "https://git-wrapped-v2.vercel.app/"}]...
|
[{"post_id": 81512, "ts": "202 [{"post_id": 81512, "ts": "2026-10-21T15:24:31Z", "hours": 3.5833, "text": "UHHHHHH, Finally almost done with the restyling (almost, I think), made a lot of changes, especially to the downloadable card, there were A LOTTT of errors EVERYWHERE!, and a small mistake will make you scratch your head for hours, I literally forgot to comment out ONE line of code, and it almost ruined everything, anyways, I should be making the finally touches soon (There genuinely is an github account for any name haha)"}, {"post_id": 79783, "ts": "2026-10-15T12:06:33Z", "hours": 2.8828, "text": "Added a dialogue box to the input screen inspired by the orpheus overlay Ive seen, although i want to use it for every screen, lets see how it goes. I almost broke the entire thing trying to make the dialogue box a global variable that can be used on every screen, so I quickly reversed all the changes, will try to do it again later I also used a default smiley face emoji as a placeholder, im still deciding whether to use pixel art or trying drawing a character myself (even though I cant really draw 0…0)"}, {"post_id": 78455, "ts": "2026-10-10T20:37:08Z", "hours": 1.8867, "text": "I created a simple welcome screen, with an animation as well too, and also a sort of dropping curtain overlay for when the button is clicked that comes down from the top, switches to the next screen then goes back up again. At first I encountered an issue where the overlay started from the middle of the screen to the top and bottom, but i was able to fix that after a few tweaks. I used the pixel font from google fonts because… well thats what I wanted to see when i open the software so…"}, {"post_id": 71850, "ts": "2026-09-21T17:26:59Z", "hours": 1.2119, "text": "#UPDATE I did a little retouch to the UI because it apparently looked like I used AI heavily for it (I used it to do some code correction and implementation issues mainly), but I have redone it with my own personal touch (based on what ive learned while building the first version). I changed the background to a simple color gradient instead of the characteristic glossy AI looking background and adjusted the color code a little. The overall layout is still pretty much the same."}, {"post_id": 71337, "ts": "2026-09-20T17:31:41Z", "hours": 2.7936, "text": "Final devloggggg!!! Im finally done with version one of GitWrapped!!! Honestly this has been one of the most exciting but frustrating projects ive ever done. I spruced up the UI a bit to make it feel more appealing. I added a work history heatmap, downloadable summary card that can be shared with friends, link to the github account the summary is referencing, and a bunch of other tiny fixes/updates. Deploying was a bit problematic too cause of the GitHub PAT I used, so I had to find a better secure work around. Learning stuff for the first time can be crazy, cause the tiniest of mistakes can cause an error and lead you on wild goose chases lasting hours, my final bug for this project was literally just a single “.”, thats it, I started wondering whats wrong but after a while i was able to discover it. So thats pretty much it for GitWrapped, Hope you guys like it!"}, {"post_id": 70858, "ts": "2026-09-19T21:39:44Z", "hours": 5.5714, "text": "Javascriptttttttt!!! It was a battle getting everything to work like i intended, when you try fixing something, something else breaks. Well… Ive made the software interactive, it can fetch and display live data from github over the github API. I also designed an activity heatmap, similar to the one in github to show work. I spent soooooooo much time on debugging, i discovered bugs that i didnt notice during the html and css phase. Visibility toggling, incorrect id syntax in HTML css caching as well too, (although i learned i could disable it later on so…) and screens stacking on each other were some of my major problems. I feel im almost done done, ill just do one last polish and readme as well."}, {"post_id": 70571, "ts": "2026-09-19T11:47:00Z", "hours": 1.7011, "text": "Finally done with the CSS for this project (I think) I learned about a bunch of new css elements and using the :root tag too, which makes it quite a lot easier to make changes. Colour gradients make it look even nicer too. Well, uhmmm… Thats it I guess, dont know what to write anymore, gonna work on the interactivity next"}, {"post_id": 69330, "ts": "2026-09-16T20:29:24Z", "hours": 0.5092, "text": "And im back again after a long break, this time im working on GitWrapped, spotify wrapped inspired interface. For now ive only built the html code for the frontend. Its supposed to take the username of the github account and pull information about it to be displayed in an interesting format. I actually decided to build this cause a similar situation happened recently where people were trying to show off their accounts, so i thought making a fun in piece of software for doing that would be nice. The fetching your story… part isnt supposed to be visible btw, its supposed to display after the user has entered A VALID username, ill work on those functionalities next (after the styling obviously)"}]...
|
Title: GitWrapped by @NEBULA_X | Stardance
Devlog Title: GitWrapped by @NEBULA_X | Stardance
Devlogs:
And im back again after a long break, this time im working on GitWrapped, spotify wrapped inspired interface. For now ive only built the html code for the frontend. Its supposed to take the username of the github account and pull information about it to be displayed in an interesting format. I actually decided to build this cause a similar situation happened recently where people were trying to show off their accounts, so i thought making a fun in piece of software for doing that would be nice. The fetching your story… part isnt supposed to be visible btw, its supposed to display after the user has entered A VALID username, ill work on those functionalities next (after the styling obviously)
Finally done with the CSS for this project (I think) I learned about a bunch of new css elements and using the :root tag too, which makes it quite a lot easier to make changes. Colour gradients make it look even nicer too. Well, uhmmm… Thats it I guess, dont know what to write anymore, gonna work on the interactivity next
Javascriptttttttt!!! It was a battle getting everything to work like i intended, when you try fixing something, something else breaks. Well… Ive made the software interactive, it can fetch and display live data from github over the github API. I also designed an activity heatmap, similar to the one in github to show work. I spent soooooooo much time on debugging, i discovered bugs that i didnt notice during the html and css phase. Visibility toggling, incorrect id syntax in HTML css caching as well too, (although i learned i could disable it later on so…) and screens stacking on each other were some of my major problems. I feel im almost done done, ill just do one last polish and readme as well.
Final devloggggg!!! Im finally done with version one of GitWrapped!!! Honestly this has been one of the most exciting but frustrating projects ive ever done. I spruced up the UI a bit to make it feel more appealing. I added a work history heatmap, downloadable summary card that can be shared with friends, link to the github account the summary is referencing, and a bunch of other tiny fixes/updates. Deploying was a bit problematic too cause of the GitHub PAT I used, so I had to find a better secure work around. Learning stuff for the first time can be crazy, cause the tiniest of mistakes can cause an error and lead you on wild goose chases lasting hours, my final bug for this project was literally just a single “.”, thats it, I started wondering whats wrong but after a while i was able to discover it. So thats pretty much it for GitWrapped, Hope you guys like it!
#UPDATE I did a little retouch to the UI because it apparently looked like I used AI heavily for it (I used it to do some code correction and implementation issues mainly), but I have redone it with my own personal touch (based on what ive learned while building the first version). I changed the background to a simple color gradient instead of the characteristic glossy AI looking background and adjusted the color code a little. The overall layout is still pretty much the same.
I created a simple welcome screen, with an animation as well too, and also a sort of dropping curtain overlay for when the button is clicked that comes down from the top, switches to the next screen then goes back up again. At first I encountered an issue where the overlay started from the middle of the screen to the top and bottom, but i was able to fix that after a few tweaks. I used the pixel font from google fonts because… well thats what I wanted to see when i open the software so…
Added a dialogue box to the input screen inspired by the orpheus overlay Ive seen, although i want to use it for every screen, lets see how it goes. I almost broke the entire thing trying to make the dialogue box a global variable that can be used on every screen, so I quickly reversed all the changes, will try to do it again later I also used a default smiley face emoji as a placeholder, im still deciding whether to use pixel art or trying drawing a character myself (even though I cant really draw 0…0)
UHHHHHH, Finally almost done with the restyling (almost, I think), made a lot of changes, especially to the downloadable card, there were A LOTTT of errors EVERYWHERE!, and a small mistake will make you scratch your head for hours, I literally forgot to comment out ONE line of code, and it almost ruined everything, anyways, I should be making the finally touches soon (There genuinely is an github account for any name haha)
Ships:
This is a project called GitWrapped. It can turn any GitHub profile into a Spotify wrapped style story. The most challenging things in this project for me were the CSS page CSS errors, positioning was also acting up, I think I had a sort of variable conflict or something, almost pushing my tokens to github which was automatically blocked, but that presented another pushing general issue, I eventually had to create a New repo since trying to fix the old one was too much unnecessary work. Im proud of the fact that I was able to think up an idea and build and deploy a working model all from scratch, thats pretty awesome to me. The software requires a VALID github username (obviously), any other information check out the README! It would be great if i could get feedback on the project itself from other people, so if you guys dont mind, drop what you think of it....
|
1793210146.7762616
|
1793296546.7762616
|
|
69958
|
Small 99 Nights in the Forest Fan-game by @Synrimo Small 99 Nights in the Forest Fan-game by @Synrimon | Stardance...
|
Synrimon
|
0
|
1.74
|
0
|
[]
|
[{"post_id": 81511, "ts": "202 [{"post_id": 81511, "ts": "2026-10-21T15:20:10Z", "hours": 1.7411, "text": "Recently, I’ve been condensing some of my old code from when I first started learning Python (last yr) and adding new functions to make coding more smoother. I’m thinking of adding a way to color dialog and clear the screen with something my friend introduced me to: ANSI escape sequences. However, for now, I just have the functions they’ll be going in set up cause I could not figure out how to clear the screen last night…"}]...
|
Title: Small 99 Nights in the Forest Fan-game by @ Title: Small 99 Nights in the Forest Fan-game by @Synrimon | Stardance
Devlogs:
Recently, I’ve been condensing some of my old code from when I first started learning Python (last yr) and adding new functions to make coding more smoother. I’m thinking of adding a way to color dialog and clear the screen with something my friend introduced me to: ANSI escape sequences. However, for now, I just have the functions they’ll be going in set up cause I could not figure out how to clear the screen last night…...
|
1792957877.6903794
|
1793562677.6903794
|
|
16345
|
Slackbot by @Zizik | Stardance
|
Zizik
|
1
|
4.0
|
29
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T16:45:15Z", "hours": 4.0, "multiplier": 5.98, "payout": 29, "blessing": "neutral", "text": "Ship checkout the version 1.0 devlog definitely because I got through everything inside it so here will be some shorter version of the devlog here are all the commands that my bot does: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location Well I had a lot of struggeles along the way like for example not copying the tokens right inside the nest or that I could not copy inside nest and I still can not or that I had problems with even getting the code right for the first time and everything else just spiraled out of my way really that is amybe why this bot is okay but like I think has some cool features so yeah it was very okay i would definitely say but i thought that it will be faster but it was not at all so I will see how everyone will like it! Yeah and i had a giant problem with me naming things differently because it wa the first time I was actually doing something a little harder and I hope that I at least did something that soemone might enjoy! AI was used for troubleshooting images in readme and soem terminal problems!", "repo": "https://github.com/UltraZizik/slackbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BAELQSNJV"}]...
|
[{"post_id": 8151, "ts": "2026 [{"post_id": 8151, "ts": "2026-06-13T16:24:27Z", "hours": 0.3042, "text": "Version 1.0 Well this was a journey from learning how to set this bot up or how to set him on the Nest so it runs 24/7 and learning so much more in the process. The bot has 4 of the commands from the tutorial and 3 mine : [5:59 PM]:robot_face: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location This is the final devlog for this bot or maybe I will return to this and add new things but who knows! Now I will tell you what I been through becasue I ran into many problems through this journey: I didn’t know where to communicate with the bot so i found it online and connected after that I had some problems with the tokens because yeah iInamed them tokens.env not .env so I figured it out with AI because Github had memory of me uploading this code that has things that shouldn’t be shared but overall I found the issue and resolved it. My second problem was that I couldn’t paste anything when I was in ssh to my nest so I badly copied the tokens-YEAH- and I figured it out after like half an hour and the second I used AI even though it was absolutely useless. Third problem was that I don’t really know how to code in javascript even though I did something(minecraft related) it was not the same at all only what iknew were const and console.log() and some other little things so I used a little bit of AI and other projects for brainstorming on how to ´make user specify the language in the translator and rewrited the code better for me so I understand what I typed and made thats why in the translation you have so much comments because I had to tell myself what it does so I don’t forget it anytime in the near future! That are overall my problems because I really enjoyed this somehow and it was great my bot does a lot and means a lot to me. I stated everywhere my AI usage and in readme.md there was some too but not much and I tried to rewrite most of it so it sound like me more and so it speaks to my experience from it more! Now if everything will be allright i will move onto other project maybe the hadkpad or something on my own!"}, {"post_id": 8110, "ts": "2026-06-13T15:17:46Z", "hours": 2.2261, "text": "So today was very productive Firstly I made a transalator that translates to Czech That was very great easy and fast. Only thing that like I didnt know how was what api to use for translator and well I used Google translate Same goes for the second command that translates everything into anything and I found it really hard to make the logic on how to see the first command that specifies the language and well I found it in other project and well I modified it a little and typed what everything does so I can use something or undesrstand something like this better in the future The third just tells you where ISS satellites are which is kind of insane that I thought about this and yeah I got inspired by others that put mars pictures and etc so I put satelite commands in there! Overall this was the most productive day but the most stressfull to and I will ship it after I make some solid README. I knew absolutely nothing about this from the start and well my ssh and knowledge in this was really bad I was always mainly making modpacks or etc. It was absolutely different and overall I would say even thought it took me soo long than some other people it was still great experince and i learned so much from this which is absolutely insane!"}, {"post_id": 7601, "ts": "2026-06-12T18:25:30Z", "hours": 1.1717, "text": "Slackbot update! So it begings with me badly copying the token from the original code! For some reason ctrl+v does not work when in ssh… I still dont know why? It is how it is so I had to type all of the tokens and commands with my hand and got bored of it so I imported the .env file because why the hell not and it copied badly :) after that I got myself into big troubles with that I made the folders and everything in different spots so i had to learn how to move file and etc. the time I got into this… I somehow misread the thing and yeah my commands were not unique so it colided with others and after some time I figured it out! I still dont know how? Now the next time I will do this I will make something new and maybe more fun for me than learning something from linux, some dumb mistakes because I didnt understand some things or thought that it is easy and yeah I used lots of AI for troubleshooting but im not ashamed to say so because troubleshooting is so boring and i dont want to sit here for hours more trying to figure it out! Overall I enjoyed todays run more than yesterday it was fun, good and it made sense so next time I will make it do something maybe more fun or more useful but after that I will be moving onto some different project! :)"}, {"post_id": 7027, "ts": "2026-06-11T19:47:17Z", "hours": 0.3869, "text": "Slackbot Well this was some kind of experience I didn’t knew I needed but I worked on this and got into some troubles like big ones! First one was that fucking Tokens didn’t work for me! I had to put path inside the config of dotenv because I don’t fucking know why but I had to do it… Second was git or more of a GitHub issue so I literally named the .env file differently as an absolute idiot and brought me pain😓 because the file was not hidden from GitHub and it remembered so I had to use ai and ask it on how to erase the memory of that thing.😕 Third was the same as first but on nest and I didn’t figure out how to fix this one somehow? But I made to work: /dsb-ping /dsb-catfact /dsb-joke And tried to make one myself Overall I had a good time with this but I was struggling a lot and I think this is not my cup of tea really like I think I will try something different next time but I want to make this work and get this mission done! As everyone says you always need to learn something you don’t like or you don’t understand so yeah I made that today👍 Sometimes in the future my devlog will maybe improve and I will improve with it as well"}]...
|
Title: Slackbot by @Zizik | Stardance
Devlogs:
Sl Title: Slackbot by @Zizik | Stardance
Devlogs:
Slackbot Well this was some kind of experience I didn’t knew I needed but I worked on this and got into some troubles like big ones! First one was that fucking Tokens didn’t work for me! I had to put path inside the config of dotenv because I don’t fucking know why but I had to do it… Second was git or more of a GitHub issue so I literally named the .env file differently as an absolute idiot and brought me pain😓 because the file was not hidden from GitHub and it remembered so I had to use ai and ask it on how to erase the memory of that thing.😕 Third was the same as first but on nest and I didn’t figure out how to fix this one somehow? But I made to work: /dsb-ping /dsb-catfact /dsb-joke And tried to make one myself Overall I had a good time with this but I was struggling a lot and I think this is not my cup of tea really like I think I will try something different next time but I want to make this work and get this mission done! As everyone says you always need to learn something you don’t like or you don’t understand so yeah I made that today👍 Sometimes in the future my devlog will maybe improve and I will improve with it as well
Slackbot update! So it begings with me badly copying the token from the original code! For some reason ctrl+v does not work when in ssh… I still dont know why? It is how it is so I had to type all of the tokens and commands with my hand and got bored of it so I imported the .env file because why the hell not and it copied badly :) after that I got myself into big troubles with that I made the folders and everything in different spots so i had to learn how to move file and etc. the time I got into this… I somehow misread the thing and yeah my commands were not unique so it colided with others and after some time I figured it out! I still dont know how? Now the next time I will do this I will make something new and maybe more fun for me than learning something from linux, some dumb mistakes because I didnt understand some things or thought that it is easy and yeah I used lots of AI for troubleshooting but im not ashamed to say so because troubleshooting is so boring and i dont want to sit here for hours more trying to figure it out! Overall I enjoyed todays run more than yesterday it was fun, good and it made sense so next time I will make it do something maybe more fun or more useful but after that I will be moving onto some different project! :)
So today was very productive Firstly I made a transalator that translates to Czech That was very great easy and fast. Only thing that like I didnt know how was what api to use for translator and well I used Google translate Same goes for the second command that translates everything into anything and I found it really hard to make the logic on how to see the first command that specifies the language and well I found it in other project and well I modified it a little and typed what everything does so I can use something or undesrstand something like this better in the future The third just tells you where ISS satellites are which is kind of insane that I thought about this and yeah I got inspired by others that put mars pictures and etc so I put satelite commands in there! Overall this was the most productive day but the most stressfull to and I will ship it after I make some solid README. I knew absolutely nothing about this from the start and well my ssh and knowledge in this was really bad I was always mainly making modpacks or etc. It was absolutely different and overall I would say even thought it took me soo long than some other people it was still great experince and i learned so much from this which is absolutely insane!
Version 1.0 Well this was a journey from learning how to set this bot up or how to set him on the Nest so it runs 24/7 and learning so much more in the process. The bot has 4 of the commands from the tutorial and 3 mine : [5:59 PM]:robot_face: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location This is the final devlog for this bot or maybe I will return to this and add new things but who knows! Now I will tell you what I been through becasue I ran into many problems through this journey: I didn’t know where to communicate with the bot so i found it online and connected after that I had some problems with the tokens because yeah iInamed them tokens.env not .env so I figured it out with AI because Github had memory of me uploading this code that has things that shouldn’t be shared but overall I found the issue and resolved it. My second problem was that I couldn’t paste anything when I was in ssh to my nest so I badly copied the tokens-YEAH- and I figured it out after like half an hour and the second I used AI even though it was absolutely useless. Third problem was that I don’t really know how to code in javascript even though I did something(minecraft related) it was not the same at all only what iknew were const and console.log() and some other little things so I used a little bit of AI and other projects for brainstorming on how to ´make user specify the language in the translator and rewrited the code better for me so I understand what I typed and made thats why in the translation you have so much comments because I had to tell myself what it does so I don’t forget it anytime in the near future! That are overall my problems because I really enjoyed this somehow and it was great my bot does a lot and means a lot to me. I stated everywhere my AI usage and in readme.md there was some too but not much and I tried to rewrite most of it so it sound like me more and so it speaks to my experience from it more! Now if everything will be allright i will move onto other project maybe the hadkpad or something on my own!
Ships:
Ship checkout the version 1.0 devlog definitely because I got through everything inside it so here will be some shorter version of the devlog here are all the commands that my bot does: Available Commands: /zizik-ping - Check bot latency /zizik-catfact - Get a cat fact /zizik-joke - Get a random joke /zizik-translatetomylanguage - Translate text to my language /zizik-translator - First specify your language and then type the text after a space. /zizik-isssatellites - Get the current ISS location Well I had a lot of struggeles along the way like for example not copying the tokens right inside the nest or that I could not copy inside nest and I still can not or that I had problems with even getting the code right for the first time and everything else just spiraled out of my way really that is amybe why this bot is okay but like I think has some cool features so yeah it was very okay i would definitely say but i thought that it will be faster but it was not at all so I will see how everyone will like it! Yeah and i had a giant problem with me naming things differently because it wa the first time I was actually doing something a little harder and I hope that I at least did something that soemone might enjoy! AI was used for troubleshooting images in readme and soem terminal problems!...
|
1793119958.4588552
|
1793206358.4588552
|
|
70818
|
Bearnie by @pd541664 | Stardance
|
pd541664
|
0
|
10.08
|
0
|
[]
|
[{"post_id": 81509, "ts": "202 [{"post_id": 81509, "ts": "2026-10-21T15:12:21Z", "hours": 10.0844, "text": "Js ported beanie here since I haven’t submitted it else, will spend like a hour or so and then submit it"}]...
|
Title: Bearnie by @pd541664 | Stardance
Devlogs:
Title: Bearnie by @pd541664 | Stardance
Devlogs:
Js ported beanie here since I haven’t submitted it else, will spend like a hour or so and then submit it...
|
1792597629.0228157
|
1793202429.0228157
|
|
68288
|
My first slack bot! by @lim_jing_yew | Stardance
|
lim_jing_yew
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T14:57:36Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "first project, just getting started! i made a beginner slack bot that replies to basic commands, live 24/7. havent coded in over 3 years, so this was a big refresher for me. its nothing much, but surpisingly a lot of work was put into this. respect to all engineers and software coders! also provided cool insights on how bots on platforms like discord are made lol.", "repo": "https://github.com/ivelobreadjy/jy-junior-slack-bot", "demo": "https://ivelobreadjy.github.io/jy-junior-slack-bot/"}]...
|
[{"post_id": 81505, "ts": "202 [{"post_id": 81505, "ts": "2026-10-21T14:54:29Z", "hours": 0.2525, "text": "so much troubleshooting, had to change many codes and add new insertions. finally after ~40 mins it worked"}, {"post_id": 81265, "ts": "2026-10-20T15:04:28Z", "hours": 0.4317, "text": "made a index.html for the demo url, hopefully i can ship and complete this project"}, {"post_id": 80985, "ts": "2026-10-19T14:47:01Z", "hours": 0.4033, "text": "added some new quote thing (im just trying to make the bot do more things, i might have some plans to integrate the bot into other platforms, hopefully more advanced stuff)"}, {"post_id": 80407, "ts": "2026-10-17T15:35:38Z", "hours": 0.5083, "text": "i had a wonderful idea inspired by claude ai, to create a command such that the bot would display and elaborate on NASA’s daily astronomy picture of the day (apod). having some minor issues right now, like the picture not loading and only displaying the nasa icon. gonna continue tommorrow"}, {"post_id": 80308, "ts": "2026-10-17T07:06:05Z", "hours": 0.4928, "text": "added some new, simple commands 8ball, random advice and dice roll"}]...
|
Title: My first slack bot! by @lim_jing_yew | Star Title: My first slack bot! by @lim_jing_yew | Stardance
Devlogs:
added some new, simple commands 8ball, random advice and dice roll
i had a wonderful idea inspired by claude ai, to create a command such that the bot would display and elaborate on NASA’s daily astronomy picture of the day (apod). having some minor issues right now, like the picture not loading and only displaying the nasa icon. gonna continue tommorrow
added some new quote thing (im just trying to make the bot do more things, i might have some plans to integrate the bot into other platforms, hopefully more advanced stuff)
made a index.html for the demo url, hopefully i can ship and complete this project
so much troubleshooting, had to change many codes and add new insertions. finally after ~40 mins it worked
Ships:
first project, just getting started! i made a beginner slack bot that replies to basic commands, live 24/7. havent coded in over 3 years, so this was a big refresher for me. its nothing much, but surpisingly a lot of work was put into this. respect to all engineers and software coders! also provided cool insights on how bots on platforms like discord are made lol....
|
1793119909.7933686
|
1793206309.7933686
|
|
6029
|
Lucrose-C by @learningppcb | Stardance
|
learningppcb
|
1
|
14.0
|
126
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T06:25:14Z", "hours": 14.0, "multiplier": 8.89, "payout": 126, "blessing": "neutral", "text": "I create a domain specific language, in this the hard part was not to create the lexer or parser but was on deciding what to create, I guess I can say that it was a pretty fun experience… I learned a lot from this. I finally understood what lexer and parser was. To tell the truth I did not actually want to do this, i wanted to make a general purpose language, and the first version was something like that… But after some trial and error i could not make it proper. So we are here. Now the language itself, is a pretty small language, with small usability, this is aimed to be like a database system. Why was this created? It was created to make lists better. To tell the truth i felt the prices were constantly changing on flavortown shop, and it made me annoyed. So I wanted to make a language in which u can easily save the prices, and then make lists, make programs around it… but then i thought while trying to build it, Why? who would even use it? so i planned on creating a general domain specific language. also i forgot to mention that in the GitHub i might have added the wrong test.lcr i think the one attached is the one with error… so ya change it. The syntax is easy and self explained so ya i hope u understand it", "repo": "https://github.com/CrowCrow611/Lucrose-C", "demo": "https://github.com/CrowCrow611/Lucrose-C/releases"}]...
|
[{"post_id": 8150, "ts": "2026 [{"post_id": 8150, "ts": "2026-06-13T16:23:30Z", "hours": 2.1833, "text": "added errors… In this mega update, i finally added errors, and warnings, for stuff like leaving colons(error), repeating numbers in {} and for price and count being 0"}, {"post_id": 4790, "ts": "2026-06-08T08:54:51Z", "hours": 3.4528, "text": "after some incredible works, after working my bines out… And screaming at myself, trying to debug using AI… We present you this… Yes i haven’t fixed a problem, instead added a fancier windoww!!!!!!!!!"}, {"post_id": 2095, "ts": "2026-06-04T12:53:10Z", "hours": 1.46, "text": "Debugged, and added automatic size!!1 in code type let width x (the x is a number, if none specified automatic) it looks amazing right? RIGHT!!!"}, {"post_id": 2043, "ts": "2026-06-04T10:21:55Z", "hours": 0.5056, "text": "after some insane debugging"}, {"post_id": 2017, "ts": "2026-06-04T09:19:38Z", "hours": 1.7186, "text": "um created the format, the display… it works, but still has a small problem"}, {"post_id": 1666, "ts": "2026-06-03T20:06:19Z", "hours": 2.4431, "text": "Is this tears of happniess? The parser has some mistakes, which needs to be corrected, but still it works, and is not crasing!!"}, {"post_id": 1451, "ts": "2026-06-03T14:27:34Z", "hours": 2.4042, "text": "Umm this is a small project, hence it took a little less time then other projects… I have done the Lexer… This reads the .lcr files and breaks them down"}]...
|
Title: Lucrose-C by @learningppcb | Stardance
Dev Title: Lucrose-C by @learningppcb | Stardance
Devlogs:
Umm this is a small project, hence it took a little less time then other projects… I have done the Lexer… This reads the .lcr files and breaks them down
Is this tears of happniess? The parser has some mistakes, which needs to be corrected, but still it works, and is not crasing!!
um created the format, the display… it works, but still has a small problem
after some insane debugging
Debugged, and added automatic size!!1 in code type let width x (the x is a number, if none specified automatic) it looks amazing right? RIGHT!!!
after some incredible works, after working my bines out… And screaming at myself, trying to debug using AI… We present you this… Yes i haven’t fixed a problem, instead added a fancier windoww!!!!!!!!!
added errors… In this mega update, i finally added errors, and warnings, for stuff like leaving colons(error), repeating numbers in {} and for price and count being 0
Ships:
I create a domain specific language, in this the hard part was not to create the lexer or parser but was on deciding what to create, I guess I can say that it was a pretty fun experience… I learned a lot from this. I finally understood what lexer and parser was. To tell the truth I did not actually want to do this, i wanted to make a general purpose language, and the first version was something like that… But after some trial and error i could not make it proper. So we are here. Now the language itself, is a pretty small language, with small usability, this is aimed to be like a database system. Why was this created? It was created to make lists better. To tell the truth i felt the prices were constantly changing on flavortown shop, and it made me annoyed. So I wanted to make a language in which u can easily save the prices, and then make lists, make programs around it… but then i thought while trying to build it, Why? who would even use it? so i planned on creating a general domain specific language. also i forgot to mention that in the GitHub i might have added the wrong test.lcr i think the one attached is the one with error… so ya change it. The syntax is easy and self explained so ya i hope u understand it...
|
1793066125.5896702
|
1793152525.5896702
|
|
45298
|
City Defenders TD by @nautrw | Stardance
|
nautrw
|
0
|
120.8
|
0
|
[]
|
[{"post_id": 81498, "ts": "202 [{"post_id": 81498, "ts": "2026-10-21T14:31:28Z", "hours": 6.4322, "text": "There’s been a lot of progress, I think. The game is pretty much done at this point. What’s left is just to balance the game. Renamed Ground Zero to Magic Forest : Magic Forest sounds like a much cooler name that fits the theme of the game, so I just renamed it. Data Saving : I finally got around to saving the data when closing. I just made a function that closed the game and then saved the data, and then any pathway that exits the game just calls that function. Save and quit : I added a save and quit feature to the pause menu. I am now tracking a state inside the pause menu GUI manager. There is first a save and quit option, and then that leads to a second menu that warns the player and asks them to confirm their choice. There is also an X button in the main menu that straight up quotes the game, too. Archipelago : I made a new map, the Archipelago. This follows a thin strip of land on which the enemies walk. I actually had to rework how the map system worked, adding an option to draw the ground on top or below the blocked layer. I also had to add an extra check on the logic for determining if a player can place a tower. Flamethrower : I added a new flamethrower tower. As of right now, it has the same stats as the cannon. I am going to be balancing the whole thing soon. This is going to be the final tower I think."}, {"post_id": 80831, "ts": "2026-10-18T22:49:30Z", "hours": 6.415, "text": "I’ve been kind of behind again, but I think I’ve made some cool stuff. Tower shop is now an official mechanic. I just remembered I need to set the default shards back to 0, but it’s fully working now. Main menu : I ended up setting the background of it to a stone wall, which to be honest is just taken from the tower shop background. I was wasting too much time on drawing. Map selector music : I finally got some music for the map selector. It’s some public domain guitar music like the tower shop, but different. I think it sounds pretty nice. Victory & defeat scene revamp : I revamped the victory and defeat scenes. Now, they show a banner in the center of the screen and the amount of shards the player receives. A defeat will get 1/2 of the shards reward, to allow them to actually improve. 3x speed setting : While waiting for the enemies to get to the end so I could test the defeated scene, I got tired and decided to add a new 3x speed button. I ended up refactoring the whole thing but now the code is much cleaner."}, {"post_id": 78524, "ts": "2026-10-11T03:01:21Z", "hours": 7.6825, "text": "I’ve been working on 2 major things that look small but are actually pretty big: Currency buttons : I’ve had to do some major revamps to several parts of the GUI system, but now I have buttons that show the currency. I am now using these for the upgrades, buy towers, and the new tower shop with the shards. I am now allowing for icon elements to be passed into the Button class. This allows for custom positioning, and thus this new way of buttons. Then I had to change the way that elements refreshed in the GUI managers. It took a while to figure out, but now they will be red if there isn’t enough currency. Main menu background : Art is incredibly time-consuming for me, and I keep scrapping designs but I think this one is the one and the one I’ll stick with for the finished thing."}, {"post_id": 77585, "ts": "2026-10-07T15:31:34Z", "hours": 6.0606, "text": "I’ve started work on a tower shop. I spent several hours drawing the background, but I think it came out looking really good. It only took so much time, which is why I’m making the log now. I also used a template human model for the merchant. I am going to show the different upgrades on the menu. I haven’t added the buy functionality yet, but that will probably be pretty easy. I got some chill guitar music from opengameart."}, {"post_id": 77288, "ts": "2026-10-06T13:27:04Z", "hours": 6.6089, "text": "A little bit faster progress now. Tower Shop : I have started work on a tower shop. I want it to be from the POV of the player looking into a medieval stall. As of right now, I’m still working on drawing it, and also it’s still hidden and non-functional. I edited all the towers to have a requirement of another tower, so as to make it a progression later on, Data Saving : I am going to start implementing a save system. For this, I just put some values into a data class and then implemented a way to save it to and load it from JSON. Molten Lands : There is a new map now, the molten lands. I also made a lava slime which is a bit stronger than the other enemies except for the bosses. It took a while to draw the sandy tiles for it, but I feel as though I’ve gotten much better at drawing than before. Logging : I added logging. This probably should’ve been added earlier, but this will help tremendously to fix any bugs in the code. For now, I am logging pretty much everything that doesn’t happen every frame, like when an enemy dies or the user clicks on a button."}, {"post_id": 76508, "ts": "2026-10-03T19:37:01Z", "hours": 7.5089, "text": "Progress has been (very) slow but there’s some more new content: Crabs & Bat : I added crab enemies. There is a normal crab that is like a slime and then an armored crab (not shown in video) that is bigger and meant to be a boss. There is also a bat enemy. Pause Menu : Theere is a pause menu now. It allows the user to retry the map or go back to the main menu. I am finally making use of the other features of the scene manager. It’s a different scene but it’s rendered on top of the main game scene. I had to modify the scene manager to draw each scene on top of the last one in the stack. Otherwise, this is just the same usage of my GUI system. Rebalances : I did some rebalancing of the game. Towers generally cost different amounts of coins now and do different amounts of damage. I’ll probably have to do it again by the end of the project but this will do for now. Music : I am in the process of adding music. I am getting them from https://opengameart.org and crediting all publishers. I have a system where it will queue music files from a playlist and play those in sequence. They are pretty long files, but just in case. I’m probably forgetting some stuff (last time I touched this was like a week ago), but those are the major things."}, {"post_id": 72935, "ts": "2026-09-24T02:19:28Z", "hours": 5.8756, "text": "I am very glad stardance got extended! This definitely eases the pressure A LOT . Bit of a shorter devlog so as to not accidentally pass the 10h deadline. Here are the updates: Venom shooter : The venom shooter is a plant that shoots venom. It will poison the enemy. I did this through another effect. The recording doesn’t show it’s full potential, because I kind of force pushed to the repository and now I lost the change, but I have it on another computer. Essentuially, the damage over time is going to increase with the update instead of staying static and linked to the effect. More tiles! : I added the stone path tiles. They still need a little bit of work, as some areas don’t fully connect. The nice thing about working with stone sprites is that the textures connect pretty well regardless, but it’s still something I need to fix. New Map : I added a new map, Frontier. This one is just a somewhat harder version of Ground Zero, mostly to test out if the map selector and the new tiles actually worked. The map selector just had to be tweaked to refresh the UI when a new button is clicked, which is only one line, but otherwise everything went smoothly. Ghost : I added a new enemy, the Ghost. The ghost looks like a tortured soul, and at the moment he hasn’t received proper stats, so he’s just a clone of the slime. I want to make it somewhere in between the slime and fast slime. It uses a lot more frames than the other enemies to make it somewhat smooth. Ok chat I think we got this in the bag im tryna get that bambu a1 3d printer frfr i think i can get it now that the deadline has been increased tysm stardance devs!!!!"}, {"post_id": 71575, "ts": "2026-09-21T02:32:58Z", "hours": 7.1853, "text": "Ok, so a lot of progress, though it has been slow because the school year has genuinely driven a train through my productivity: Upgrades : This is the most recent thing, but basically I added upgrades. This is handled by using a list of values instead of single values when creating a new subclass of a Tower class. I track an upgrade index and increase it to change the index and some other stuff. I made some icons and added it to the tower selected menu. I will show the coins cost of the upgrade next, because I forgot to do that. I also made new sprites for the upgrades, and a complete resprite for the cannon, which badly needed it. I also remade the tower base, which looks much better now. Speed setting : I added a speed setting. This was a matter of tracking a delta time multiplier, and then multiplying it with everything that uses delta time. Remember that delta time is the amount of time between frames. It lets the developer do things like move an enemy at a movement speed independent of the frame rate, because the movement is split between the delta time. Frostspire : I added a new Frostspire tower. This is a tower that shoots icicles at enemies and makes them slower. To do the slower part, I made an effect system that gets appended to an array in the enemy. Effects have an overlay color, and will have several attributes that are applied to the enemy if it has them. As of right now, there is just a movement speed multiplier. I want to add a final venom tower that damages enemies over time, and that should be pretty easy. Tank slime : I added a tank slime, which is supposed to be the final boss of the Ground Zero map. I’m not sure if I have the inspiration to make more enemies other than slimes, or the drawing skills. Essentially it’s just a much bigger slime (takes up the whole width of the path) and green, and slower, and has a lot of health. I have to take the time to balance everything though, because 2 of the basic crossbows can kill it as of right now."}, {"post_id": 68312, "ts": "2026-09-14T22:14:49Z", "hours": 6.0117, "text": "I did this devlog mostly because I wanted to get a screenshot of (hopefully) six seven hours , but there has been some progress, even if it’s slow because now I have other things to do . Map Selector : I implemented a map selector, which will come in useful later on when I add more maps. I also want to do a little thing where every map is its own globe that kind of shows the outline of the map. I think it’ll look cool. Wave Control : I changed the wave logic to make it be controlled by the player. I was inspired by Bloons TD 6, and I think this makes it much better. Now, the player has as much time as they need to prepare for the next wave, or if they are feeling good they can just call in multiple waves and get it over with. Game Icon : I made a game icon, a shield with a golden cross and ruby in the center. I made it be the icon for the window, and it will be the icon for the .exe file when it’s time to ship. Canon : I added a cannon turret. It’s still kind of buggy, but the idea is that it will leave an explosion and that will also be the AoE so it can shoot multiple enemies, kind of like for crowd control. Generally, I really need to spend some time balancing the game, but I think that will come at a later time."}, {"post_id": 65687, "ts": "2026-09-11T00:36:05Z", "hours": 7.2467, "text": "I’ve kind of gotten into a slump, mostly because of school, but I think I’m back on track to finish this by the 30th of this month. Though I gotta say, it’s genuinely been slog to work on this now. I think I’m burning out Anyway, for the updates: Turret anti-aliasing : To fix the issue of turrets looking terribly when rotating, I used a new function that zooms and rotates the sprite, but also applies anti-aliasing. I can set the zoom scale to 1 and it will rotate the sprite but also anti-alias it. The jaggedness seen in other demos was because the actual map is rended in very low resolution (360x240) and then scaled up. GUI Makeover : I have given another makeover to the GUI. Now, most of it in the main game is a sleek semi-transparent black surface. I did this mostly because I couldn’t settle on a particular theme, and I didn’t know how to go about drawing such large sprites while still looking good. Waves : I finally got around to adding waves. They are a little buggy, but I ended up making a dictionary structure for the maps and put them in one big dictionary. This way, I can define which enemies spawn in which order, the interval between waves, etc. Enemies and turrets are also in their own dictionaries. Health : I added the health mechanic! It will now check if the health is equal or below 0 and send the user to a game over screen. Those screens will eventually get improved. Menus : I added a main menu, mostly because I had people trying the game, and it had to happen at some point. As of right now I am working on a map selector that harnesses that maps dictionary from earlier. (I did the devlog now because I was afraid of getting to 10h ) More menus and turrets : I added a ballista tower, which is slower but has higher range. I still have to balance it some more, and make a bolt projectile, and also probably make the tower control the damage instead of the arrow. That way I can subtract health from the enemy directly, which would fix an annoying bug where the turret shoots but the bullet doesn’t collide with the enemy, so it just stays there until it collides with another enemy. There is also another slime (the red slime) which is faster. This is to force the player to have at least 2 turrets."}, {"post_id": 63381, "ts": "2026-09-07T05:26:00Z", "hours": 6.885, "text": "Quite a bit of progress! Pixel art revamp : The pixel art has generally improved massively. I actually took the time to get some inspiration from Google and worked on the tileset. It now includes a lake and also generally just looks better, with borders around the paths. It did take a lot of time, though. I also implemented animations for this, for the slime, and perhaps for the crossbow too. I also made a little card container for the top 2 stats. Waves : I added waves! It’s now technically a fully playable tower defense game, I guess. As of right now it’s going to crash as soon as it gets farther than Wave 3 because I don’t have anything to do after it, but soon I will add another scene for that."}, {"post_id": 61219, "ts": "2026-09-04T01:33:38Z", "hours": 7.2719, "text": "Lots of progress again! This one was slightly more in the background, as I started a little bit of housekeeping: Transition from Rects to FRects : FRects are the same thing as normal Rects, except that they allow for floats. This didn’t really have an impact on the game other than making it easier to work with vectors for positioning, as they also use floats. UI Changes : I changed the positioning aspect of the UI. I recreated the Rect placement system of pygame, where you can select a point (eg. top left, center, midbottom, etc.) to use to position the rect. This is very flexible, and I copied it. Now, I can do things like place text with much more ease. I also changed the colors of the UI to make it darker and overall nicer. I made it so that the user had to select a turret and then go to a menu to see the cost and other attributes of it, which will be better for the future. Coins : I added coins, which will be the temporary currency when inside the game. This will be used to buy towers and such. Outside the main game, I am planning to create another one that is used to buy skills and stuff, just to make it more realistic."}, {"post_id": 57916, "ts": "2026-08-30T07:51:39Z", "hours": 7.0772, "text": "It took a while, but there have been some pretty big improvements. Transition to 1440x960px : I eventually found that being limited to 360x240 was going to be very limiting, specially with text because at low resolutions it looked like a jumbled mess. Thus I embarked on a pretty hard journey (not hard in retrospect) to figure out how to change the resolution but also keep the pixelated style without having to draw sprites at 4 times the resolution. The solution I ended up finding was to store a scale factor of 4 (360x4=1440, 240x4=960), and then scaling a separate surface to that resolution. Now, a surface is created with the same dimensions as the map, and everything is drawn to that surface instead of the map (I used to draw enemies, turrets, bullets, etc. onto the map because they moved together), and then that surface gets scaled. This allows me to keep the pixelated graphics on the actual game, and have crisp text on the GUI. For the offsets, I just moved the function that translated the screen coordinates to map ones from the map to the scene, and then adjusted it to take in the scale factor. Everything else works pretty much the same, as its only the image and mouse clicks getting scaled instead of rectangles. I scaled the button sprites to 32x32 to make them easier to draw, and then I have it in the config to scale them to 64x64. I decided to do that mostly for ease, because most of the other sprites are around that resolution anyway. Turret placement : I added more buttons to the GUI and added turret placement. The GUI itself is always going to be kind of janky. I moved it into its own class so as to sort of clean up the code in the main scene, but now the GUI manager does weird things like self.scene.game.screen.width which isn’t very pretty. It’ll do, though. I track a variable storing the turret to be placed (None if it’s not in that state) and a variable that stores whether it can be placed. I check for collisions between the path tiles (I knew it would be useful!) and the sprite to check if it can be placed. I also modified the draw function of the turret to make it red or green depending on it. GUI : Generally, for the GUI, I keep a state from an Enum (basically a fancy way of storing a string for a state), and then change the UI according to that state. I designed it in a way where it only rebuilds it on command, so it won’t rebuild the whole thing every frame, in hopes to save some sort of performance. Overall, some very good progress, even if it’s not 100% visible!"}, {"post_id": 56469, "ts": "2026-08-28T07:48:03Z", "hours": 6.7975, "text": "I decided to just write the GUI from scratch. This is kind of uncharted territory for me. I tried using pygame_gui but it felt really restrictive and the use of a json file for customization is absurd to me. I made a basic element abstract class so that all elements must have an update and draw method. I then made a button class and a container class. All elements have an ID, and when a button is clicked it sends out a pygame event, which is a feature I did like from pygame_gui. I think I will end up eventually making an UI manager class, as handling the state within the scene is getting clunky and weird."}, {"post_id": 54261, "ts": "2026-08-25T04:49:22Z", "hours": 6.2936, "text": "I’ve probably progressed more in these ~6.25 hours than the rest of the project combined. Fixed the map dragging boundary checks. This was just a matter of separating the if statement into one for each axis. Now, even if the map won’t move on the y-axis, it can move on the x-axis, for example. I added an enemy. This was also pretty simple. They take in a path instead of a position, and their initial position is just the first index of the path (the path is a list of coordinates that they walk to). Vector math made this much easier, as I could just subtract the current position of the enemy from the target, and multiply it with movement speed to move it. The enemy is actually a parent class, and the specific slime in the video is a very simple subclass of it that just has some stats. Default enemy behavior is handled in that parent class. I made a customizable health bar class. The cool part about it is that it uses linear interpolation to change its color as the health changes relative to the maximum. I made a ballistic projectile parent class and an arrow subclass. It takes a position and a target, as well as other stats, and uses vector math to move to the target. When it hits an enemy it takes health from the enemy and then ceases to exist. There is a turret class and a crossbow. The turret takes a projectile class (the crossbow takes the arrow, for example). It will make a new instance of the projectile when shooting. It has a circle for a range of effect, and it will point to and shoot at enemies within the circle. The r key will toggle between drawing the areas and not. Quite a lot of progress!"}, {"post_id": 53480, "ts": "2026-08-24T01:35:31Z", "hours": 7.2239, "text": "I decided to give up on the isometry because I wasn’t really getting anything done. I have gone back to using a 2d map instead.| The map is made with the Tiled Map Editor ( https://thorbjorn.itch.io/tiled ) and saved as a JSON file. Tiled is good for visually building maps but a pain to work with. I’d much rather write a map editor from scratch, genuinely. I might do it at some point, honestly. The map is actually split up into 3 layers: the ground, where turrets can be placed; the path tiles, where enemies will walk; and the path polygon, which is a line that the enemies will follow. This allows me to have separate path and ground groups which will simplify turret-path collisions later. In theory, I will be able to make the enemies follow the polygon, too. I had to write a whole function just to parse the map JSON files. It organizes the layers into a dictionary of keys and 2-dimensional Numpy arrays. For the path polygon, it converts it from a list of dicts to tuples. It also removes any other inconsistencies with the original file and only keeps the important stuff. I made the map bigger than the screen itself so that it is draggable. The checks for boundaries are kind of buggy but it’ll do for now. This was just a matter of keeping a variable to track if the map is being dragged, keeping an offset, checking for boundaries, and checking for mouse movements. I know this was kind of a setback, but real progress can be made now!"}, {"post_id": 44368, "ts": "2026-08-10T02:37:52Z", "hours": 5.3789, "text": "Turns out, rendering isometric grids is pretty hard! I followed a tutorial by DaFluffyPotato on isometric rendering which let me understand the drawing part, but there are going to be some issues with the grid system in the future. I had an issue in which the grid wouldn’t draw half of itself, and it was because it was drawing everything to the right of the top tile outside it. I got it to work by multiplying the grid width by 2 and then adding an offset, but it’s kind of a band-aid and I want to research more into how to actually solve it. I did actually draw the sprites myself, though, and I have a grass block that looks really nice but that’ll be for later."}, {"post_id": 43389, "ts": "2026-08-08T16:28:30Z", "hours": 6.8456, "text": "I’ve been working for a while, mostly on backwards-facing stuff about the general project structure: A basic game class is used for the actual game instance, letting me manage variables and such and then pass them around. A scene manager class manages different screens in the game. Abstract methods are used to make sure scenes will always handle events, update, and render by making sure the methods are always implemented. Each scene is a class object with several methods. A config manager takes in a bunch of dataclasses and allows accessing the config like globals. Tests check to make sure that an error is raised if a wrong key is accessed, and other stuff. Player ships all inherit from one overall base ship class, and so do turret from their base turret class. Turrets have an attachment point and player ships have points to attach to. Both sprites are joined at the points so as to create a mounting system in which the same ship can use different turret configurations. The next thing to work on is to allow the turret to rotate as if it was on top of the ship, and to handle ship movement, having it rotate to face where it is moving. The following image is actually 2 different sprites: the turret (green) and the ship (below). It draws them by blitting the turret on top of the ship sprite. I have decided to change the theme of the project. The vast majority of the time in this devlog was the background, and luckily I didn’t have much progress on the actual game part. It will now be a tower defense game."}]...
|
Title: City Defenders TD by @nautrw | Stardance
D Title: City Defenders TD by @nautrw | Stardance
Devlogs:
I’ve been working for a while, mostly on backwards-facing stuff about the general project structure: A basic game class is used for the actual game instance, letting me manage variables and such and then pass them around. A scene manager class manages different screens in the game. Abstract methods are used to make sure scenes will always handle events, update, and render by making sure the methods are always implemented. Each scene is a class object with several methods. A config manager takes in a bunch of dataclasses and allows accessing the config like globals. Tests check to make sure that an error is raised if a wrong key is accessed, and other stuff. Player ships all inherit from one overall base ship class, and so do turret from their base turret class. Turrets have an attachment point and player ships have points to attach to. Both sprites are joined at the points so as to create a mounting system in which the same ship can use different turret configurations. The next thing to work on is to allow the turret to rotate as if it was on top of the ship, and to handle ship movement, having it rotate to face where it is moving. The following image is actually 2 different sprites: the turret (green) and the ship (below). It draws them by blitting the turret on top of the ship sprite. I have decided to change the theme of the project. The vast majority of the time in this devlog was the background, and luckily I didn’t have much progress on the actual game part. It will now be a tower defense game.
Turns out, rendering isometric grids is pretty hard! I followed a tutorial by DaFluffyPotato on isometric rendering which let me understand the drawing part, but there are going to be some issues with the grid system in the future. I had an issue in which the grid wouldn’t draw half of itself, and it was because it was drawing everything to the right of the top tile outside it. I got it to work by multiplying the grid width by 2 and then adding an offset, but it’s kind of a band-aid and I want to research more into how to actually solve it. I did actually draw the sprites myself, though, and I have a grass block that looks really nice but that’ll be for later.
I decided to give up on the isometry because I wasn’t really getting anything done. I have gone back to using a 2d map instead.| The map is made with the Tiled Map Editor ( https://thorbjorn.itch.io/tiled ) and saved as a JSON file. Tiled is good for visually building maps but a pain to work with. I’d much rather write a map editor from scratch, genuinely. I might do it at some point, honestly. The map is actually split up into 3 layers: the ground, where turrets can be placed; the path tiles, where enemies will walk; and the path polygon, which is a line that the enemies will follow. This allows me to have separate path and ground groups which will simplify turret-path collisions later. In theory, I will be able to make the enemies follow the polygon, too. I had to write a whole function just to parse the map JSON files. It organizes the layers into a dictionary of keys and 2-dimensional Numpy arrays. For the path polygon, it converts it from a list of dicts to tuples. It also removes any other inconsistencies with the original file and only keeps the important stuff. I made the map bigger than the screen itself so that it is draggable. The checks for boundaries are kind of buggy but it’ll do for now. This was just a matter of keeping a variable to track if the map is being dragged, keeping an offset, checking for boundaries, and checking for mouse movements. I know this was kind of a setback, but real progress can be made now!
I’ve probably progressed more in these ~6.25 hours than the rest of the project combined. Fixed the map dragging boundary checks. This was just a matter of separating the if statement into one for each axis. Now, even if the map won’t move on the y-axis, it can move on the x-axis, for example. I added an enemy. This was also pretty simple. They take in a path instead of a position, and their initial position is just the first index of the path (the path is a list of coordinates that they walk to). Vector math made this much easier, as I could just subtract the current position of the enemy from the target, and multiply it with movement speed to move it. The enemy is actually a parent class, and the specific slime in the video is a very simple subclass of it that just has some stats. Default enemy behavior is handled in that parent class. I made a customizable health bar class. The cool part about it is that it uses linear interpolation to change its color as the health changes relative to the maximum. I made a ballistic projectile parent class and an arrow subclass. It takes a position and a target, as well as other stats, and uses vector math to move to the target. When it hits an enemy it takes health from the enemy and then ceases to exist. There is a turret class and a crossbow. The turret takes a projectile class (the crossbow takes the arrow, for example). It will make a new instance of the projectile when shooting. It has a circle for a range of effect, and it will point to and shoot at enemies within the circle. The r key will toggle between drawing the areas and not. Quite a lot of progress!
I decided to just write the GUI from scratch. This is kind of uncharted territory for me. I tried using pygame_gui but it felt really restrictive and the use of a json file for customization is absurd to me. I made a basic element abstract class so that all elements must have an update and draw method. I then made a button class and a container class. All elements have an ID, and when a button is clicked it sends out a pygame event, which is a feature I did like from pygame_gui. I think I will end up eventually making an UI manager class, as handling the state within the scene is getting clunky and weird.
It took a while, but there have been some pretty big improvements. Transition to 1440x960px : I eventually found that being limited to 360x240 was going to be very limiting, specially with text because at low resolutions it looked like a jumbled mess. Thus I embarked on a pretty hard journey (not hard in retrospect) to figure out how to change the resolution but also keep the pixelated style without having to draw sprites at 4 times the resolution. The solution I ended up finding was to store a scale factor of 4 (360x4=1440, 240x4=960), and then scaling a separate surface to that resolution. Now, a surface is created with the same dimensions as the map, and everything is drawn to that surface instead of the map (I used to draw enemies, turrets, bullets, etc. onto the map because they moved together), and then that surface gets scaled. This allows me to keep the pixelated graphics on the actual game, and have crisp text on the GUI. For the offsets, I just moved the function that translated the screen coordinates to map ones from the map to the scene, and then adjusted it to take in the scale factor. Everything else works pretty much the same, as its only the image and mouse clicks getting scaled instead of rectangles. I scaled the button sprites to 32x32 to make them easier to draw, and then I have it in the config to scale them to 64x64. I decided to do that mostly for ease, because most of the other sprites are around that resolution anyway. Turret placement : I added more buttons to the GUI and added turret placement. The GUI itself is always going to be kind of janky. I moved it into its own class so as to sort of clean up the code in the main scene, but now the GUI manager does weird things like self.scene.game.screen.width which isn’t very pretty. It’ll do, though. I track a variable storing the turret to be placed (None if it’s not in that state) and a variable that stores whether it can be placed. I check for collisions between the path tiles (I knew it would be useful!) and the sprite to check if it can be placed. I also modified the draw function of the turret to make it red or green depending on it. GUI : Generally, for the GUI, I keep a state from an Enum (basically a fancy way of storing a string for a state), and then change the UI according to that state. I designed it in a way where it only rebuilds it on command, so it won’t rebuild the whole thing every frame, in hopes to save some sort of performance. Overall, some very good progress, even if it’s not 100% visible!
Lots of progress again! This one was slightly more in the background, as I started a little bit of housekeeping: Transition from Rects to FRects : FRects are the same thing as normal Rects, except that they allow for floats. This didn’t really have an impact on the game other than making it easier to work with vectors for positioning, as they also use floats. UI Changes : I changed the positioning aspect of the UI. I recreated the Rect placement system of pygame, where you can select a point (eg. top left, center, midbottom, etc.) to use to position the rect. This is very flexible, and I copied it. Now, I can do things like place text with much more ease. I also changed the colors of the UI to make it darker and overall nicer. I made it so that the user had to select a turret and then go to a menu to see the cost and other attributes of it, which will be better for the future. Coins : I added coins, which will be the temporary currency when inside the game. This will be used to buy towers and such. Outside the main game, I am planning to create another one that is used to buy skills and stuff, just to make it more realistic.
Quite a bit of progress! Pixel art revamp : The pixel art has generally improved massively. I actually took the time to get some inspiration from Google and worked on the tileset. It now includes a lake and also generally just looks better, with borders around the paths. It did take a lot of time, though. I also implemented animations for this, for the slime, and perhaps for the crossbow too. I also made a little card container for the top 2 stats. Waves : I added waves! It’s now technically a fully playable tower defense game, I guess. As of right now it’s going to crash as soon as it gets farther than Wave 3 because I don’t have anything to do after it, but soon I will add another scene for that.
I’ve kind of gotten into a slump, mostly because of school, but I think I’m back on track to finish this by the 30th of this month. Though I gotta say, it’s genuinely been slog to work on this now. I think I’m burning out Anyway, for the updates: Turret anti-aliasing : To fix the issue of turrets looking terribly when rotating, I used a new function that zooms and rotates the sprite, but also applies anti-aliasing. I can set the zoom scale to 1 and it will rotate the sprite but also anti-alias it. The jaggedness seen in other demos was because the actual map is rended in very low resolution (360x240) and then scaled up. GUI Makeover : I have given another makeover to the GUI. Now, most of it in the main game is a sleek semi-transparent black surface. I did this mostly because I couldn’t settle on a particular theme, and I didn’t know how to go about drawing such large sprites while still looking good. Waves : I finally got around to adding waves. They are a little buggy, but I ended up making a dictionary structure for the maps and put them in one big dictionary. This way, I can define which enemies spawn in which order, the interval between waves, etc. Enemies and turrets are also in their own dictionaries. Health : I added the health mechanic! It will now check if the health is equal or below 0 and send the user to a game over screen. Those screens will eventually get improved. Menus : I added a main menu, mostly because I had people trying the game, and it had to happen at some point. As of right now I am working on a map selector that harnesses that maps dictionary from earlier. (I did the devlog now because I was afraid of getting to 10h ) More menus and turrets : I added a ballista tower, which is slower but has higher range. I still have to balance it some more, and make a bolt projectile, and also probably make the tower control the damage instead of the arrow. That way I can subtract health from the enemy directly, which would fix an annoying bug where the turret shoots but the bullet doesn’t collide with the enemy, so it just stays there until it collides with another enemy. There is also another slime (the red slime) which is faster. This is to force the player to have at least 2 turrets.
I did this devlog mostly because I wanted to get a screenshot of (hopefully) six seven hours , but there has been some progress, even if it’s slow because now I have other things to do . Map Selector : I implemented a map selector, which will come in useful later on when I add more maps. I also want to do a little thing where every map is its own globe that kind of shows the outline of the map. I think it’ll look cool. Wave Control : I changed the wave logic to make it be controlled by the player. I was inspired by Bloons TD 6, and I think this makes it much better. Now, the player has as much time as they need to prepare for the next wave, or if they are feeling good they can just call in multiple waves and get it over with. Game Icon : I made a game icon, a shield with a golden cross and ruby in the center. I made it be the icon for the window, and it will be the icon for the .exe file when it’s time to ship. Canon : I added a cannon turret. It’s still kind of buggy, but the idea is that it will leave an explosion and that will also be the AoE so it can shoot multiple enemies, kind of like for crowd control. Generally, I really need to spend some time balancing the game, but I think that will come at a later time.
Ok, so a lot of progress, though it has been slow because the school year has genuinely driven a train through my productivity: Upgrades : This is the most recent thing, but basically I added upgrades. This is handled by using a list of values instead of single values when creating a new subclass of a Tower class. I track an upgrade index and increase it to change the index and some other stuff. I made some icons and added it to the tower selected menu. I will show the coins cost of the upgrade next, because I forgot to do that. I also made new sprites for the upgrades, and a complete resprite for the cannon, which badly needed it. I also remade the tower base, which looks much better now. Speed setting : I added a speed setting. This was a matter of tracking a delta time multiplier, and then multiplying it with everything that uses delta time. Remember that delta time is the amount of time between frames. It lets the developer do things like move an enemy at a movement speed independent of the frame rate, because the movement is split between the delta time. Frostspire : I added a new Frostspire tower. This is a tower that shoots icicles at enemies and makes them slower. To do the slower part, I made an effect system that gets appended to an array in the enemy. Effects have an overlay color, and will have several attributes that are applied to the enemy if it has them. As of right now, there is just a movement speed multiplier. I want to add a final venom tower that damages enemies over time, and that should be pretty easy. Tank slime : I added a tank slime, which is supposed to be the final boss of the Ground Zero map. I’m not sure if I have the inspiration to make more enemies other than slimes, or the drawing skills. Essentially it’s just a much bigger slime (takes up the whole width of the path) and green, and slower, and has a lot of health. I have to take the time to balance everything though, because 2 of the basic crossbows can kill it as of right now.
I am very glad stardance got extended! This definitely eases the pressure A LOT . Bit of a shorter devlog so as to not accidentally pass the 10h deadline. Here are the updates: Venom shooter : The venom shooter is a plant that shoots venom. It will poison the enemy. I did this through another effect. The recording doesn’t show it’s full potential, because I kind of force pushed to the repository and now I lost the change, but I have it on another computer. Essentuially, the damage over time is going to increase with the update instead of staying static and linked to the effect. More tiles! : I added the stone path tiles. They still need a little bit of work, as some areas don’t fully connect. The nice thing about working with stone sprites is that the textures connect pretty well regardless, but it’s still something I need to fix. New Map : I added a new map, Frontier. This one is just a somewhat harder version of Ground Zero, mostly to test out if the map selector and the new tiles actually worked. The map selector just had to be tweaked to refresh the UI when a new button is clicked, which is only one line, but otherwise everything went smoothly. Ghost : I added a new enemy, the Ghost. The ghost looks like a tortured soul, and at the moment he hasn’t received proper stats, so he’s just a clone of the slime. I want to make it somewhere in between the slime and fast slime. It uses a lot more frames than the other enemies to make it somewhat smooth. Ok chat I think we got this in the bag im tryna get that bambu a1 3d printer frfr i think i can get it now that the deadline has been increased tysm stardance devs!!!!
Progress has been (very) slow but there’s some more new content: Crabs & Bat : I added crab enemies. There is a normal crab that is like a slime and then an armored crab (not shown in video) that is bigger and meant to be a boss. There is also a bat enemy. Pause Menu : Theere is a pause menu now. It allows the user to retry the map or go back to the main menu. I am finally making use of the other features of the scene manager. It’s a different scene but it’s rendered on top of the main game scene. I had to modify the scene manager to draw each scene on top of the last one in the stack. Otherwise, this is just the same usage of my GUI system. Rebalances : I did some rebalancing of the game. Towers generally cost different amounts of coins now and do different amounts of damage. I’ll probably have to do it again by the end of the project but this will do for now. Music : I am in the process of adding music. I am getting them from https://opengameart.org and crediting all publishers. I have a system where it will queue music files from a playlist and play those in sequence. They are pretty long files, but just in case. I’m probably forgetting some stuff (last time I touched this was like a week ago), but those are the major things.
A little bit faster progress now. Tower Shop : I have started work on a tower shop. I want it to be from the POV of the player looking into a medieval stall. As of right now, I’m still working on drawing it, and also it’s still hidden and non-functional. I edited all the towers to have a requirement of another tower, so as to make it a progression later on, Data Saving : I am going to start implementing a save system. For this, I just put some values into a data class and then implemented a way to save it to and load it from JSON. Molten Lands : There is a new map now, the molten lands. I also made a lava slime which is a bit stronger than the other enemies except for the bosses. It took a while to draw the sandy tiles for it, but I feel as though I’ve gotten much better at drawing than before. Logging : I added logging. This probably should’ve been added earlier, but this will help tremendously to fix any bugs in the code. For now, I am logging pretty much everything that doesn’t happen every frame, like when an enemy dies or the user clicks on a button.
I’ve started work on a tower shop. I spent several hours drawing the background, but I think it came out looking really good. It only took so much time, which is why I’m making the log now. I also used a template human model for the merchant. I am going to show the different upgrades on the menu. I haven’t added the buy functionality yet, but that will probably be pretty easy. I got some chill guitar music from opengameart.
I’ve been working on 2 major things that look small but are actually pretty big: Currency buttons : I’ve had to do some major revamps to several parts of the GUI system, but now I have buttons that show the currency. I am now using these for the upgrades, buy towers, and the new tower shop with the shards. I am now allowing for icon elements to be passed into the Button class. This allows for custom positioning, and thus this new way of buttons. Then I had to change the way that elements refreshed in the GUI managers. It took a while to figure out, but now they will be red if there isn’t enough currency. Main menu background : Art is incredibly time-consuming for me, and I keep scrapping designs but I think this one is the one and the one I’ll stick with for the finished thing.
I’ve been kind of behind again, but I think I’ve made some cool stuff. Tower shop is now an official mechanic. I just remembered I need to set the default shards back to 0, but it’s fully working now. Main menu : I ended up setting the background of it to a stone wall, which to be honest is just taken from the tower shop background. I was wasting too much time on drawing. Map selector music : I finally got some music for the map selector. It’s some public domain guitar music like the tower shop, but different. I think it sounds pretty nice. Victory & defeat scene revamp : I revamped the victory and defeat scenes. Now, they show a banner in the center of the screen and the amount of shards the player receives. A defeat will get 1/2 of the shards reward, to allow them to actually improve. 3x speed setting : While waiting for the enemies to get to the end so I could test the defeated scene, I got tired and decided to add a new 3x speed button. I ended up refactoring the whole thing but now the code is much cleaner.
There’s been a lot of progress, I think. The game is pretty much done at this point. What’s left is just to balance the game. Renamed Ground Zero to Magic Forest : Magic Forest sounds like a much cooler name that fits the theme of the game, so I just renamed it. Data Saving : I finally got around to saving the data when closing. I just made a function that closed the game and then saved the data, and then any pathway that exits the game just calls that function. Save and quit : I added a save and quit feature to the pause menu. I am now tracking a state inside the pause menu GUI manager. There is first a save and quit option, and then that leads to a second menu that warns the player and asks them to confirm their choice. There is also an X button in the main menu that straight up quotes the game, too. Archipelago : I made a new map, the Archipelago. This follows a thin strip of land on which the enemies walk. I actually had to rework how the map system worked, adding an option to draw the ground on top or below the blocked layer. I also had to add an extra check on the logic for determining if a player can place a tower. Flamethrower : I added a new flamethrower tower. As of right now, it has the same stats as the cannon. I am going to be balancing the whole thing soon. This is going to be the final tower I think....
|
1792619351.3911572
|
1793224151.3911572
|
|
18864
|
Super Wifi Duck Pad by @gavhu10 | Stardance
|
gavhu10
|
0
|
36.14
|
0
|
[]
|
[{"post_id": 81490, "ts": "202 [{"post_id": 81490, "ts": "2026-10-21T14:05:33Z", "hours": 2.2736, "text": "I fixed another bug, learned a new thing about C, and wrote some docs. When there was a space on a line by itself the device performed as expected. But when something that was not a function or something on a line by itself, it typed the first two letters, then inserted a newline. After hitting my head against walls, I found out that I had been using the strcomp function (in C) wrong. It returns 0 when a string matches and I expected to return 1 instead. That caused all the lines to be handled like they were just a space. I also found out that I had not accounted for a newline character and had assumed it would be removed sometime in the parsing process. I managed to figure it out, though, and it works fine now. I also wrote some docs. I wrote them in markdown and made a converter that turns them into html and stores them in the device when the project is compiled. That way someone can read the docs online or from the access point."}, {"post_id": 78508, "ts": "2026-10-11T01:04:52Z", "hours": 0.5553, "text": "I added a bunch of QOL improvements. I made it so that Ctrl+S would save the file in the editor. I made it so that a profile is automatically selected when the web ui loads. I also added mDNS so that you do not have to remember an ip address but can just go to wifi-duck.local!"}, {"post_id": 78202, "ts": "2026-10-09T23:25:11Z", "hours": 1.6008, "text": "I fixed a tricky bug. If the script parser encountered a line with just a space, it would not delete the line like it would if the line was empty. Instead it would split the line on that space and return a NULL pointer. The reason this was hard to find was because it was deep in the internals of the parser and was written in C and I could not use print statements as the Serial Arduino is C++ only. When I could use print statements, I did, and with careless abandon! Then I spent a bunch of time making my commit message line up nicely."}, {"post_id": 78053, "ts": "2026-10-09T12:01:24Z", "hours": 2.1314, "text": "I made it so that the selected profile and selected script are highlighted. It took longer than it should have because I have not learned frontend and do not use AI. Another problem is the time it takes to upload changes to the device. However, I still managed to make it look okay."}, {"post_id": 77550, "ts": "2026-10-07T12:34:13Z", "hours": 2.7089, "text": "I added media keys! So far I have pause/play, next, previous, and volume. It turns out those types of keys are not regular keyboard keys. They actually are part of something called Consumer Control. The library that works with Consumer Control is very similar to the built-in esp-idf keyboard library but as I looked at the code, I noticed something wrong with it. I found out that the USBHIDKeyboard library was vendored and then modified. To make sure that Consumer Control did not mess with the keyboard I refactored the code so it just used the built in library. Here is a demo of the volume keys:"}, {"post_id": 76258, "ts": "2026-10-02T22:55:37Z", "hours": 4.1675, "text": "I rebuilt the case! It took ~20 iterations of export, slice, and print, not including failed prints. It now covers the whole top of the board but includes some vents so that you can press the reset and boot buttons. It took a lot of work and I changed the design multiple times. I ended up with hexagon holes in the case which in themselves were tricky. I used an OpenScad library I found on thingiverse and modified it, only to redesign the pattern so that those edits were not needed. Typical! The main picture is what I finished with. I also have pictures of the other designs."}, {"post_id": 74564, "ts": "2026-09-27T17:18:02Z", "hours": 0.6494, "text": "I made alternate keycaps with OpenScad for my keypad but in the end I chose to stick with what I had before. I wanted the buttons to have smaller profiles and be the same colour. At first I tried to make a complicated clip like the injection molded ones that came with the set, but that failed as 3d printed material is not suited for that purpose. Instead I made keycaps that held on with friction. That worked, but they were hard to take off again and they ended up being uglier than the injection molded ones."}, {"post_id": 73296, "ts": "2026-09-24T19:40:20Z", "hours": 2.3914, "text": "I made a case for my Keypad using OpenScad. It took eight iterations of export, slice, and print, but I like how it turned out. It makes it look a lot more finished. I tracked the time with Lapse because I could not track it with hackatime."}, {"post_id": 72003, "ts": "2026-09-21T23:46:56Z", "hours": 0.7506, "text": "I added a command (function?) called STRINGLN. This is just like the STRING function, which types out a string, but after typing out the string, it presses enter. This is not a big change, but to make it, I had to read all the code involved with parsing the script and pressing the buttons. STRINGLN is also a very handy function (command?) as it reduces verbosity and many existing duckyscripts use it. I created a pr to the upstream project which you can see here . Below is an example script from the Hak5 repo that uses STRINGLN."}, {"post_id": 60915, "ts": "2026-09-03T16:00:00Z", "hours": 2.2614, "text": "I integrated the NeoPixel LED with the firmware. My only problem was that the NeoPixel library was vendored in. I fixed that by adding a PlatformIO library in the config. Now you can show the status of your script through the LED! It also shows you if it managed to connect to WiFi. I tried to make the ip address of the device static while in station mode, but it turns out things like that vary between routers, so I just added a readout of the ip address to the settings. I made a demo video for the LED. The three flashes at the beginning confirm that it connected to a wifi network. I had to put tape over the LED to diffuse it."}, {"post_id": 52720, "ts": "2026-08-23T01:19:52Z", "hours": 3.7614, "text": "I made it so that you did not need to connect to the access point to configure the device. This is handy because otherwise you would have to disconnect from the internet to configure the device. I also fixed a stubborn bug with the profiles. The problem was that the get_profile command returned the current profile with a newline. This in turn broke the javascript that let you edit the scripts. Instead of editing 6 (for button six) it was editing \\n\\r6. This broke the quotes and made a big mess."}, {"post_id": 47412, "ts": "2026-08-15T10:29:24Z", "hours": 7.4258, "text": "This is a really long devlog because profiles are a big feature. They make it so that you do not have to overwrite your macros every time you switch contexts. They were tricky to make for a variety of reasons. I had to add multiple cli commands so that the web ui could do things, refactor lots of things so that they could be reused, and change how I compiled the project. I also had to write frontend code! shudder I learnt a lot of things about the project while debugging. For example, a cli command called from the websocket must return something or the ui will hang. Fun times! Here is the diff of what I did: link"}, {"post_id": 36769, "ts": "2026-07-29T01:14:15Z", "hours": 0.3378, "text": "I made so that the ordering made more sense. It used to start with zero which is fine but confusing for some people. I also made so that the pins are read in the right order, as the order used to be 1 4 7 2 5 8 3 6 9 to make it easier to route, but that also is confusing, so now it reflects the ui. The next step is shortcut profiles like the og duckyPad."}, {"post_id": 36149, "ts": "2026-07-28T01:40:43Z", "hours": 1.3208, "text": "I made it so that the script selector is like the buttons so that it is easier to use. It took a while because I am not very good at frontend things, but I like how it turned out. It was made especially tricky as on-device debugging involves compiling and uploading the new firmware, connecting to the access point network, and then reloading. I did get a debug setup going with python -m http.server but then the websockets did not work for obvious reasons."}, {"post_id": 23202, "ts": "2026-07-06T00:54:40Z", "hours": 3.41, "text": "This devlog is rather long, but a lot of things needed to happen before I wanted to make another devlog. I had a very difficult bug involving macros (written in DuckyScript) running at the same time. It wasn’t always a problem, but the buttons made it really easy to crash the system by overlapping scripts. When I added some code to keep track of that, it would crash when launching a script from the web-ui, but not when launching them from the terminal or buttons. After much (much much much) debugging and banging my head against walls, I figured that the problem was with a websocket status pulse. By delaying the pulse, I could avoid a crash. You can see the one line javascript patch below. I’m not sure why it was crashing the device, but it seems to be fixed now. I made a PR to upstream here Anyway, enjoy the demo!"}, {"post_id": 18051, "ts": "2026-06-29T00:58:38Z", "hours": 0.3911, "text": "I made a macropad with KiCad. It uses an esp32 s3, so it will have a web based config editor. This project is the firmware for it as I did not know that stardance could do hardware projects. Since I just worked on some button code and got set up, I will just have some pics of the macropad."}]...
|
Title: Super Wifi Duck Pad by @gavhu10 | Stardance Title: Super Wifi Duck Pad by @gavhu10 | Stardance
Devlogs:
I made a macropad with KiCad. It uses an esp32 s3, so it will have a web based config editor. This project is the firmware for it as I did not know that stardance could do hardware projects. Since I just worked on some button code and got set up, I will just have some pics of the macropad.
This devlog is rather long, but a lot of things needed to happen before I wanted to make another devlog. I had a very difficult bug involving macros (written in DuckyScript) running at the same time. It wasn’t always a problem, but the buttons made it really easy to crash the system by overlapping scripts. When I added some code to keep track of that, it would crash when launching a script from the web-ui, but not when launching them from the terminal or buttons. After much (much much much) debugging and banging my head against walls, I figured that the problem was with a websocket status pulse. By delaying the pulse, I could avoid a crash. You can see the one line javascript patch below. I’m not sure why it was crashing the device, but it seems to be fixed now. I made a PR to upstream here Anyway, enjoy the demo!
I made it so that the script selector is like the buttons so that it is easier to use. It took a while because I am not very good at frontend things, but I like how it turned out. It was made especially tricky as on-device debugging involves compiling and uploading the new firmware, connecting to the access point network, and then reloading. I did get a debug setup going with python -m http.server but then the websockets did not work for obvious reasons.
I made so that the ordering made more sense. It used to start with zero which is fine but confusing for some people. I also made so that the pins are read in the right order, as the order used to be 1 4 7 2 5 8 3 6 9 to make it easier to route, but that also is confusing, so now it reflects the ui. The next step is shortcut profiles like the og duckyPad.
This is a really long devlog because profiles are a big feature. They make it so that you do not have to overwrite your macros every time you switch contexts. They were tricky to make for a variety of reasons. I had to add multiple cli commands so that the web ui could do things, refactor lots of things so that they could be reused, and change how I compiled the project. I also had to write frontend code! shudder I learnt a lot of things about the project while debugging. For example, a cli command called from the websocket must return something or the ui will hang. Fun times! Here is the diff of what I did: link
I made it so that you did not need to connect to the access point to configure the device. This is handy because otherwise you would have to disconnect from the internet to configure the device. I also fixed a stubborn bug with the profiles. The problem was that the get_profile command returned the current profile with a newline. This in turn broke the javascript that let you edit the scripts. Instead of editing 6 (for button six) it was editing \n\r6. This broke the quotes and made a big mess.
I integrated the NeoPixel LED with the firmware. My only problem was that the NeoPixel library was vendored in. I fixed that by adding a PlatformIO library in the config. Now you can show the status of your script through the LED! It also shows you if it managed to connect to WiFi. I tried to make the ip address of the device static while in station mode, but it turns out things like that vary between routers, so I just added a readout of the ip address to the settings. I made a demo video for the LED. The three flashes at the beginning confirm that it connected to a wifi network. I had to put tape over the LED to diffuse it.
I added a command (function?) called STRINGLN. This is just like the STRING function, which types out a string, but after typing out the string, it presses enter. This is not a big change, but to make it, I had to read all the code involved with parsing the script and pressing the buttons. STRINGLN is also a very handy function (command?) as it reduces verbosity and many existing duckyscripts use it. I created a pr to the upstream project which you can see here . Below is an example script from the Hak5 repo that uses STRINGLN.
I made a case for my Keypad using OpenScad. It took eight iterations of export, slice, and print, but I like how it turned out. It makes it look a lot more finished. I tracked the time with Lapse because I could not track it with hackatime.
I made alternate keycaps with OpenScad for my keypad but in the end I chose to stick with what I had before. I wanted the buttons to have smaller profiles and be the same colour. At first I tried to make a complicated clip like the injection molded ones that came with the set, but that failed as 3d printed material is not suited for that purpose. Instead I made keycaps that held on with friction. That worked, but they were hard to take off again and they ended up being uglier than the injection molded ones.
I rebuilt the case! It took ~20 iterations of export, slice, and print, not including failed prints. It now covers the whole top of the board but includes some vents so that you can press the reset and boot buttons. It took a lot of work and I changed the design multiple times. I ended up with hexagon holes in the case which in themselves were tricky. I used an OpenScad library I found on thingiverse and modified it, only to redesign the pattern so that those edits were not needed. Typical! The main picture is what I finished with. I also have pictures of the other designs.
I added media keys! So far I have pause/play, next, previous, and volume. It turns out those types of keys are not regular keyboard keys. They actually are part of something called Consumer Control. The library that works with Consumer Control is very similar to the built-in esp-idf keyboard library but as I looked at the code, I noticed something wrong with it. I found out that the USBHIDKeyboard library was vendored and then modified. To make sure that Consumer Control did not mess with the keyboard I refactored the code so it just used the built in library. Here is a demo of the volume keys:
I made it so that the selected profile and selected script are highlighted. It took longer than it should have because I have not learned frontend and do not use AI. Another problem is the time it takes to upload changes to the device. However, I still managed to make it look okay.
I fixed a tricky bug. If the script parser encountered a line with just a space, it would not delete the line like it would if the line was empty. Instead it would split the line on that space and return a NULL pointer. The reason this was hard to find was because it was deep in the internals of the parser and was written in C and I could not use print statements as the Serial Arduino is C++ only. When I could use print statements, I did, and with careless abandon! Then I spent a bunch of time making my commit message line up nicely.
I added a bunch of QOL improvements. I made it so that Ctrl+S would save the file in the editor. I made it so that a profile is automatically selected when the web ui loads. I also added mDNS so that you do not have to remember an ip address but can just go to wifi-duck.local!
I fixed another bug, learned a new thing about C, and wrote some docs. When there was a space on a line by itself the device performed as expected. But when something that was not a function or something on a line by itself, it typed the first two letters, then inserted a newline. After hitting my head against walls, I found out that I had been using the strcomp function (in C) wrong. It returns 0 when a string matches and I expected to return 1 instead. That caused all the lines to be handled like they were just a space. I also found out that I had not accounted for a newline character and had assumed it would be removed sometime in the parsing process. I managed to figure it out, though, and it works fine now. I also wrote some docs. I wrote them in markdown and made a converter that turns them into html and stores them in the device when the project is compiled. That way someone can read the docs online or from the access point....
|
1792670117.7122445
|
1793274917.7122445
|
|
60253
|
T-MINUS -Your Everday Mission Control by @MIREYA | T-MINUS -Your Everday Mission Control by @MIREYA | Stardance...
|
MIREYA
|
1
|
13.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T13:53:12Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made T-MINUS.LINK: https://mireya-examclarity.github.io/T-MINUS-/.I have build it specifically for students. It is a space-themed productive website.The most challenging part of it was to write htmls and javascript (I barely understand it😅) so I have asked some help from Meta AI . And deploying it was another struggle . I kept deleting files in my repository and then I realised I have done my codes using flask and the api I’ve used were all wrong and I had to correct it too😢.But I really like that my website can finally work even though it’s not perfect . I like the colours (I spend most of my time finding the names of the colours). Please tell me what else I could do in my website.", "repo": "https://github.com/Mireya-examclarity/T-MINUS-", "demo": "https://mireya-examclarity.github.io/T-MINUS-/"}]...
|
[{"post_id": 81485, "ts": "202 [{"post_id": 81485, "ts": "2026-10-21T13:40:51Z", "hours": 2.5533, "text": "Guys I finally understood why my site was not working yesterday . I am so embarassed by it 😂.GitHub can’t run Python programs. My flask backend was useless there.So I merged my JavaScript and HTML into one single file, moved everything to localStorage, and removed all the API stuff. I spent like 2 hours thinking it was my code or my file paths. I kept pushing again and again ( yes i did 😅).Took so long but now it works and I’ve deployed using github. It was so annoying because I had to rewrite the clock logic and payload checklist without Python ( HTMLs are my nightmare😵).So the lesson I have learned is to check where you’re deploying before writing a whole Flask app 😅."}, {"post_id": 81240, "ts": "2026-10-20T13:10:34Z", "hours": 3.5706, "text": "Guys!!! Today, I worked on T-MINUS. I added JavaScript, changed the HTML, modified the interface, and made changes to the time and some of the features. Since T-MINUS is meant to make everyday tasks more fun by turning them into space-themed missions, I wanted the website to feel more interactive and match the idea better. Tomorrow, I plan to add more code to make the features more functional, improve how the website responds to user actions, and fix anything that isn’t working as expected. There’s still more to work on, but I’m slowly bringing my idea to life(! ! ). SITE LINK: https://mireya-examclarity.github.io/T-MINUS-/"}, {"post_id": 80755, "ts": "2026-10-18T18:22:40Z", "hours": 4.9431, "text": "IM WORKING ON T-MINUS , I TRIED TO COMPLETE THE CODES AND HTML BUT IT GOT CRASHED SO NOW IM HAVING SOME TROUBLE DEPLOYING IT BUT I HOPE I CAN FIX THE ISSUE TOMORROW(! !). I HAVE TO GO HARDCORE ON THIS ON GUYS!!!"}, {"post_id": 71685, "ts": "2026-09-21T09:47:16Z", "hours": 0.3358, "text": "I coded for 42 minutes, but HackaTime says 16. It got delayed - it only started tracking after I was already deep inside the build.In those 42 minutes, I killed my own app.My first T-MINUS was on Streamlit. It was a sleeping site. You’d open it after 15 minutes and it would just show “Waking up” - like an astronaut who fell asleep before launch.So I changed my entire deployment - from Streamlit to Flask and GitHub.That switch wasn’t clean. I had trouble adding the HTMLs - Flask wouldn’t read them, Jinja kept throwing got ‘:’ errors because it thought my JavaScript was its own code. I was stuck, I asked for help, fixed it by moving everything to pure JS.But I fixed all of it. Now it’s Flask, it’s on GitHub."}, {"post_id": 68175, "ts": "2026-09-14T17:26:57Z", "hours": 1.2597, "text": "I am working on T-MINUS . Everyone this site could make you guys accomplish your everday mission and duties(I hope so!).I was finally been able to revive my hackatime time tracker after a while and did not have much time left thats why i could only code for about 1hr .Anyway hope ill do more tomorrow!!!."}]...
|
Title: T-MINUS -Your Everday Mission Control by @M Title: T-MINUS -Your Everday Mission Control by @MIREYA | Stardance
Devlogs:
I am working on T-MINUS . Everyone this site could make you guys accomplish your everday mission and duties(I hope so!).I was finally been able to revive my hackatime time tracker after a while and did not have much time left thats why i could only code for about 1hr .Anyway hope ill do more tomorrow!!!.
I coded for 42 minutes, but HackaTime says 16. It got delayed - it only started tracking after I was already deep inside the build.In those 42 minutes, I killed my own app.My first T-MINUS was on Streamlit. It was a sleeping site. You’d open it after 15 minutes and it would just show “Waking up” - like an astronaut who fell asleep before launch.So I changed my entire deployment - from Streamlit to Flask and GitHub.That switch wasn’t clean. I had trouble adding the HTMLs - Flask wouldn’t read them, Jinja kept throwing got ‘:’ errors because it thought my JavaScript was its own code. I was stuck, I asked for help, fixed it by moving everything to pure JS.But I fixed all of it. Now it’s Flask, it’s on GitHub.
IM WORKING ON T-MINUS , I TRIED TO COMPLETE THE CODES AND HTML BUT IT GOT CRASHED SO NOW IM HAVING SOME TROUBLE DEPLOYING IT BUT I HOPE I CAN FIX THE ISSUE TOMORROW(! !). I HAVE TO GO HARDCORE ON THIS ON GUYS!!!
Guys!!! Today, I worked on T-MINUS. I added JavaScript, changed the HTML, modified the interface, and made changes to the time and some of the features. Since T-MINUS is meant to make everyday tasks more fun by turning them into space-themed missions, I wanted the website to feel more interactive and match the idea better. Tomorrow, I plan to add more code to make the features more functional, improve how the website responds to user actions, and fix anything that isn’t working as expected. There’s still more to work on, but I’m slowly bringing my idea to life(! ! ). SITE LINK: https://mireya-examclarity.github.io/T-MINUS-/
Guys I finally understood why my site was not working yesterday . I am so embarassed by it 😂.GitHub can’t run Python programs. My flask backend was useless there.So I merged my JavaScript and HTML into one single file, moved everything to localStorage, and removed all the API stuff. I spent like 2 hours thinking it was my code or my file paths. I kept pushing again and again ( yes i did 😅).Took so long but now it works and I’ve deployed using github. It was so annoying because I had to rewrite the clock logic and payload checklist without Python ( HTMLs are my nightmare😵).So the lesson I have learned is to check where you’re deploying before writing a whole Flask app 😅.
Ships:
I have made T-MINUS.LINK: https://mireya-examclarity.github.io/T-MINUS-/.I have build it specifically for students. It is a space-themed productive website.The most challenging part of it was to write htmls and javascript (I barely understand it😅) so I have asked some help from Meta AI . And deploying it was another struggle . I kept deleting files in my repository and then I realised I have done my codes using flask and the api I’ve used were all wrong and I had to correct it too😢.But I really like that my website can finally work even though it’s not perfect . I like the colours (I spend most of my time finding the names of the colours). Please tell me what else I could do in my website....
|
1793181083.604039
|
1793267483.604039
|
|
40372
|
Touch the Stars by @AdaChan | Stardance
|
AdaChan
|
0
|
5.94
|
0
|
[]
|
[{"post_id": 81483, "ts": "202 [{"post_id": 81483, "ts": "2026-10-21T13:33:28Z", "hours": 2.0906, "text": "I’ve been working on some new features for my game, including buffs and cosmetics. I probably should have written more code by now, but unfortunately, my keyboard has other plans. 😭 Some of my keys, especially O, L, and 9, have stopped working properly, and the accent keys are also causing problems. Since I speak Portuguese, which uses accents quite a lot, writing has become a real challenge. And programming without the letter O is surprisingly painful. For some reason, it’s EVERYWHERE in code! I keep finding different ways to type things and work around the problem, even though it’s making everything much slower. I even tried using my phone as a Bluetooth keyboard. Hehehe. At this point, I’m improvising however I can! 😂 I’m really sad that I won’t be able to get a new keyboard or repair this one anytime soon, but I’m still trying to make progress with the tools I have. Hopefully, I can get back to coding normally soon."}, {"post_id": 80159, "ts": "2026-10-16T13:59:46Z", "hours": 1.0575, "text": "I added the planets to my game! ☆ You can drag them around and place them wherever you want on the screen, and they also give you some buffs! I’m still figuring out how to organize everything, but I’m really loving how it’s turning out. It’s all so much fun!! ♡₊˚"}, {"post_id": 78758, "ts": "2026-10-11T14:48:32Z", "hours": 0.8222, "text": "I drew some planets to use as decorations on my website. I’m thinking about creating some buffs to add to the shop, so I’ll probably do that!"}, {"post_id": 78217, "ts": "2026-10-10T00:32:07Z", "hours": 1.9708, "text": "I’m making a little clicker game. That’s pretty much it!"}]...
|
Title: Touch the Stars by @AdaChan | Stardance
De Title: Touch the Stars by @AdaChan | Stardance
Devlogs:
I’m making a little clicker game. That’s pretty much it!
I drew some planets to use as decorations on my website. I’m thinking about creating some buffs to add to the shop, so I’ll probably do that!
I added the planets to my game! ☆ You can drag them around and place them wherever you want on the screen, and they also give you some buffs! I’m still figuring out how to organize everything, but I’m really loving how it’s turning out. It’s all so much fun!! ♡₊˚
I’ve been working on some new features for my game, including buffs and cosmetics. I probably should have written more code by now, but unfortunately, my keyboard has other plans. 😭 Some of my keys, especially O, L, and 9, have stopped working properly, and the accent keys are also causing problems. Since I speak Portuguese, which uses accents quite a lot, writing has become a real challenge. And programming without the letter O is surprisingly painful. For some reason, it’s EVERYWHERE in code! I keep finding different ways to type things and work around the problem, even though it’s making everything much slower. I even tried using my phone as a Bluetooth keyboard. Hehehe. At this point, I’m improvising however I can! 😂 I’m really sad that I won’t be able to get a new keyboard or repair this one anytime soon, but I’m still trying to make progress with the tools I have. Hopefully, I can get back to coding normally soon....
|
1793137932.2729855
|
1793742732.2729855
|
|
280
|
Ks' Corner by @Ks | Stardance
|
Ks
|
2
|
37.14
|
325
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-12T22:34:46Z", "hours": 15.0, "multiplier": 12.18, "payout": 177, "blessing": "neutral", "text": "This website is still a work in progress, but am shipping right now for Playground [I don’t know how to add it to the mission though] (Note: Find Lavender though Games -> Lavender’s Home -> Lavender) I hated doing the phone version, couldn’t get patting for the phone in any single way, but it works well on PC, (hover the mouse and move it a bit) In this update you also have the main Math page, still working on the smaller pages, might have to bring up Manim or something soon for them, and added a calculator!", "repo": "https://github.com/Ks-Marbs/ks-corner", "demo": "https://ks-marbs.github.io/ks-corner/"}, {"ship_num": 2, "ts": "2026-06-29T19:55:54Z", "hours": 20.0, "multiplier": 7.33, "payout": 148, "blessing": "neutral", "text": "My first website attempt Honestly too lazy to learn HTML so made it in Godot ’o-o Any and all feedback is appreciated", "repo": "https://github.com/Ks-Marbs/ks-corner", "demo": "https://ks-marbs.github.io/ks-corner/"}]...
|
[{"post_id": 81479, "ts": "202 [{"post_id": 81479, "ts": "2026-10-21T12:45:22Z", "hours": 2.1442, "text": "Added small pages for all three of my [old] series Tweaked Lavender a bit too"}, {"post_id": 79180, "ts": "2026-10-12T22:28:17Z", "hours": 2.5675, "text": "Finished adding Lavender, And her game page! Will ship for now so it qualifyies for Playground but ill still finish the other pages 🪻"}, {"post_id": 77385, "ts": "2026-10-06T19:00:40Z", "hours": 2.8272, "text": "Added the Lavender’s home page, and just added… Lavender?"}, {"post_id": 76020, "ts": "2026-10-02T02:34:12Z", "hours": 2.265, "text": "Made pages for room sokoban and Unn Rhyhtm game, as well as bugfixed the calculator on phone, as it was coming too small for the screen"}, {"post_id": 73376, "ts": "2026-09-25T01:17:36Z", "hours": 2.6642, "text": "Oh hey, we actually did a calculator… [sort of, its just a fancy keyboard and parcing in godot but i’m too lazy to make a full calculator] No idea what to do next except writing… ‘– It’s so boooooorinng"}, {"post_id": 70148, "ts": "2026-09-18T15:41:53Z", "hours": 2.2397, "text": "Added the Math page! Planning on adding a calculator “page” later, and maybe adding more articles written by myself when i have time ;-;"}, {"post_id": 65673, "ts": "2026-09-10T23:44:19Z", "hours": 2.0031, "text": "Updated godot from 4.5 to 4.7 It broke the image sizing so i fixed it ( ’–)"}, {"post_id": 18596, "ts": "2026-06-29T19:41:44Z", "hours": 4.6339, "text": "Finished the website (mostly) I think its nice enough to ship :] Should update with photos and irl prizes when i’m more comfortable sharing my irl name but except that, it works Added a very nice BG and pictures and audios"}, {"post_id": 13493, "ts": "2026-06-22T02:49:40Z", "hours": 4.1911, "text": "Week 15 to 21 worked mostly on getting the site phone ready. also began developing some features/Easter eggs. I’m develoging through phone and it does not have the enter key to type \\n"}, {"post_id": 9607, "ts": "2026-06-16T00:23:39Z", "hours": 5.5392, "text": "Week: 8->14/6 I’m not home so I hope this goes in time for the weekly stickers T-T This week I worked mostly on phone adaptation, also looked how to make each of the pages actual pages, and made the start screen text! Also discovered that images can go directly on text so will use that to my advantage :]"}, {"post_id": 4360, "ts": "2026-06-07T17:32:43Z", "hours": 0.7628, "text": "Images are now working! plans for the future is making the site diferent for phone i.e. vertical"}, {"post_id": 3881, "ts": "2026-06-06T23:37:48Z", "hours": 0.6258, "text": "Am I wrong for doing exactly 30 minutes everyday just so I can get all da stickers? But yeah, somehow typing all this and making it work for more than 1 mini page took 35 minutes"}, {"post_id": 3220, "ts": "2026-06-06T01:33:03Z", "hours": 3.0619, "text": "So in these last few days: Updated the site to make it scalable Made it so text exists Figuring out how to add images that move with the text (Hackatime changed the name of the project so I didn’t devlog since I didn’t see it did, please don’t remove my stickers)"}, {"post_id": 1014, "ts": "2026-06-02T20:06:21Z", "hours": 0.8453, "text": "Began building the website in Godot, and am creating the github repo (before i forget) Figured out how to make the mouse do the thingy where it turns into a “you can click here” thingy (unable to screenshot that but most of y’all know it) Began searching for how to turn scenes into pages in Godot -> HTML"}, {"post_id": 496, "ts": "2026-06-01T23:38:07Z", "hours": 0.5667, "text": "Heyyyy🟡 idk why but i can only type the title? Anyway, began doing a sketch at canva for reference"}]...
|
Title: Ks' Corner by @Ks | Stardance
Devlogs: Title: Ks' Corner by @Ks | Stardance
Devlogs:
Heyyyy🟡 idk why but i can only type the title? Anyway, began doing a sketch at canva for reference
Began building the website in Godot, and am creating the github repo (before i forget) Figured out how to make the mouse do the thingy where it turns into a “you can click here” thingy (unable to screenshot that but most of y’all know it) Began searching for how to turn scenes into pages in Godot -> HTML
So in these last few days: Updated the site to make it scalable Made it so text exists Figuring out how to add images that move with the text (Hackatime changed the name of the project so I didn’t devlog since I didn’t see it did, please don’t remove my stickers)
Am I wrong for doing exactly 30 minutes everyday just so I can get all da stickers? But yeah, somehow typing all this and making it work for more than 1 mini page took 35 minutes
Images are now working! plans for the future is making the site diferent for phone i.e. vertical
Week: 8->14/6 I’m not home so I hope this goes in time for the weekly stickers T-T This week I worked mostly on phone adaptation, also looked how to make each of the pages actual pages, and made the start screen text! Also discovered that images can go directly on text so will use that to my advantage :]
Week 15 to 21 worked mostly on getting the site phone ready. also began developing some features/Easter eggs. I’m develoging through phone and it does not have the enter key to type \n
Finished the website (mostly) I think its nice enough to ship :] Should update with photos and irl prizes when i’m more comfortable sharing my irl name but except that, it works Added a very nice BG and pictures and audios
Updated godot from 4.5 to 4.7 It broke the image sizing so i fixed it ( ’–)
Added the Math page! Planning on adding a calculator “page” later, and maybe adding more articles written by myself when i have time ;-;
Oh hey, we actually did a calculator… [sort of, its just a fancy keyboard and parcing in godot but i’m too lazy to make a full calculator] No idea what to do next except writing… ‘– It’s so boooooorinng
Made pages for room sokoban and Unn Rhyhtm game, as well as bugfixed the calculator on phone, as it was coming too small for the screen
Added the Lavender’s home page, and just added… Lavender?
Finished adding Lavender, And her game page! Will ship for now so it qualifyies for Playground but ill still finish the other pages 🪻
Added small pages for all three of my [old] series Tweaked Lavender a bit too
Ships:
My first website attempt Honestly too lazy to learn HTML so made it in Godot ’o-o Any and all feedback is appreciated
This website is still a work in progress, but am shipping right now for Playground [I don’t know how to add it to the mission though] (Note: Find Lavender though Games -> Lavender’s Home -> Lavender) I hated doing the phone version, couldn’t get patting for the phone in any single way, but it works well on PC, (hover the mouse and move it a bit) In this update you also have the main Math page, still working on the smaller pages, might have to bring up Manim or something soon for them, and added a calculator!...
|
1793116098.3750026
|
1793202498.3750026
|
|
70629
|
MausBot by @dahmaus | Stardance
|
dahmaus
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T12:42:10Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "MausBot A small Slack bot featuring fun commands, random answers, coin flips and dice rolls :D Was really interesting to make a bot and it was easier then i thought, hope you like it :^", "repo": "https://github.com/DahMaus/M4usBot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 81476, "ts": "202 [{"post_id": 81476, "ts": "2026-10-21T12:38:55Z", "hours": 0.8036, "text": "Done with MausBot! flipcoin roll dice (8ball) slop ball command Was super interesting to make a bot :P"}]...
|
Title: MausBot by @dahmaus | Stardance
Devlogs:
D Title: MausBot by @dahmaus | Stardance
Devlogs:
Done with MausBot! flipcoin roll dice (8ball) slop ball command Was super interesting to make a bot :P
Ships:
MausBot A small Slack bot featuring fun commands, random answers, coin flips and dice rolls :D Was really interesting to make a bot and it was easier then i thought, hope you like it :^...
|
1793166475.174341
|
1793252875.174341
|
|
63764
|
Vacuum cleaning roblox simulator game by @Unholy | Vacuum cleaning roblox simulator game by @Unholy | Stardance...
|
Unholy
|
0
|
10.95
|
0
|
[]
|
[{"post_id": 81475, "ts": "202 [{"post_id": 81475, "ts": "2026-10-21T12:36:20Z", "hours": 1.5483, "text": "Created 42 pets for my game"}, {"post_id": 80956, "ts": "2026-10-19T11:39:08Z", "hours": 2.5697, "text": "Devlog #idk Balanced the full vacuum and backpack economy Built out cost, CoinsMultiplier, TrashMultiplier, WalkSpeedMultiplier, and Storage values for all 15 vacuums and 15 backpacks, scaling up to a 50,000,000 coin top vacuum and 500,000 trash capacity on the max backpack — designed for a long-term progression curve. Finalized vacuum CleaningSize values Locked in whole-number cleaning sizes for all 15 vacuums, starting at 6, 2, 3 on the first vacuum and scaling up to 55, 2, 55 on the last, with Y (height) kept flat. Reworked how the cleaning hitbox is positioned The hitbox used to be placed relative to each vacuum model’s own PrimaryPart, which caused inconsistent rotation and placement across different vacuum models (notably the 15th vacuum’s hitbox was flipped vertically). Switched it to be positioned relative to the player’s HumanoidRootPart instead, using one simple offset (left/right, up/down, forward/back) with no rotation math needed. Fixed the old hitbox not clearing on vacuum switch After the rework, switching vacuums left the previous hitbox behind since it was no longer a child of the vacuum model being destroyed. Added explicit cleanup to destroy the old hitbox by name whenever a new vacuum is equipped. Fixed the hitbox falsely triggering Shop/Sell zones Parenting the hitbox directly to the character (from step 3’s rework) caused Shop and Sell triggers to treat hitbox collisions as the player themselves touching them. Fixed by parenting the hitbox back inside the vacuum clone while keeping it welded to the player for positioning, so it no longer gets mistaken for the player’s body."}, {"post_id": 75371, "ts": "2026-09-29T21:29:25Z", "hours": 1.7794, "text": "Trash spawning system for the new areas - Done"}, {"post_id": 75007, "ts": "2026-09-28T20:47:34Z", "hours": 1.6456, "text": "Made Egypt themed area"}, {"post_id": 74587, "ts": "2026-09-27T18:04:43Z", "hours": 1.2142, "text": "Made bathroom styled area for my game"}, {"post_id": 74171, "ts": "2026-09-26T20:34:15Z", "hours": 1.7094, "text": "Made 15 backpacks and made the entire backpack shop menu"}, {"post_id": 71361, "ts": "2026-09-20T18:05:53Z", "hours": 0.4833, "text": "Made some ui for my game"}]...
|
Title: Vacuum cleaning roblox simulator game by @U Title: Vacuum cleaning roblox simulator game by @Unholy | Stardance
Devlogs:
Made some ui for my game
Made 15 backpacks and made the entire backpack shop menu
Made bathroom styled area for my game
Made Egypt themed area
Trash spawning system for the new areas - Done
Devlog #idk Balanced the full vacuum and backpack economy Built out cost, CoinsMultiplier, TrashMultiplier, WalkSpeedMultiplier, and Storage values for all 15 vacuums and 15 backpacks, scaling up to a 50,000,000 coin top vacuum and 500,000 trash capacity on the max backpack — designed for a long-term progression curve. Finalized vacuum CleaningSize values Locked in whole-number cleaning sizes for all 15 vacuums, starting at 6, 2, 3 on the first vacuum and scaling up to 55, 2, 55 on the last, with Y (height) kept flat. Reworked how the cleaning hitbox is positioned The hitbox used to be placed relative to each vacuum model’s own PrimaryPart, which caused inconsistent rotation and placement across different vacuum models (notably the 15th vacuum’s hitbox was flipped vertically). Switched it to be positioned relative to the player’s HumanoidRootPart instead, using one simple offset (left/right, up/down, forward/back) with no rotation math needed. Fixed the old hitbox not clearing on vacuum switch After the rework, switching vacuums left the previous hitbox behind since it was no longer a child of the vacuum model being destroyed. Added explicit cleanup to destroy the old hitbox by name whenever a new vacuum is equipped. Fixed the hitbox falsely triggering Shop/Sell zones Parenting the hitbox directly to the character (from step 3’s rework) caused Shop and Sell triggers to treat hitbox collisions as the player themselves touching them. Fixed by parenting the hitbox back inside the vacuum clone while keeping it welded to the player for positioning, so it no longer gets mistaken for the player’s body.
Created 42 pets for my game...
|
1793054970.9483228
|
1793659770.9483228
|
|
34137
|
GMTK game jam 2026 by @ducki | Stardance
|
ducki
|
0
|
46.91
|
0
|
[]
|
[{"post_id": 81474, "ts": "202 [{"post_id": 81474, "ts": "2026-10-21T12:25:57Z", "hours": 3.6486, "text": "A public leaderboard I have not ever tried to add a public leaderboard to a game , but it was more pleasant than I expected. I took some of my old code to quickly make a js node application, using sequelize to handle the backend. Then set up everything to a Render web service and postgress database. Then connected godot to the web service and it works! When loosing in the endless mode you will be prompted if you wish to submit your score to the database, and if you are top 10, you will show up on the main menu. A small intro. The jam version had a very long intro, I remade it to have a way shorter one, so when trying the game over and over, it is not a hastle to wait through the tutorial."}, {"post_id": 81411, "ts": "2026-10-21T05:33:54Z", "hours": 4.0214, "text": "Bobs shop is officially open Buy upgrade cards after rounds to be able to beat even harder rounds. The goal is going to be to make it to the furthest level possible. And then flex on others with a level leaderboard. Main features I managed to make A very nice upgrade card system, which lets me make new cards insanely easily. (I love dictionaries) I can make each upgrade store its own function, then make custom new functions at will. Card buying and then displaying on 2D. As well as popping up when their special function is met Reroll buttons The game is starting to come togheter . Today I have woken up sick. because of it I probably won’t be able to finish in my own set time limit, but that is normal in game development, to plan less time than it would actually take. Video is a bit laggy"}, {"post_id": 81224, "ts": "2026-10-20T11:06:26Z", "hours": 2.4675, "text": "Welcome to Bobs shop I have made the shop cards, only have the buying left to add and make a bunch of custom card functions. Obviously made the cards stretch and pop around. gameplay loop The gameplay loop is almost done already. I added the button to start next round, which now means the player can go on forever, as long as they get enough score each round There is a fun “feature” of text and cards becoming huge, that I will showcase in the next devlog"}, {"post_id": 81195, "ts": "2026-10-20T07:58:02Z", "hours": 3.5203, "text": "Enviornment changes I realised the previous deep fog was a bit too much. So I gave bob a new skybox, so he does not have to live in darkness. Also a bunch more visual improvements. More buttons squatch and stretch. Optimized some code, where for some reason I was running the same code in 3 different spots, combined all that into just 1 function. Next I will start working on the shop, originally started a 2d shop, but realised I want to keep the 3d cards, so instead I am a 3d shop."}, {"post_id": 81020, "ts": "2026-10-19T16:24:43Z", "hours": 4.1611, "text": "I love polish The most important part of an incremental game is polish. So in the video, you can a load of the basics. Particles, Rotation, scaling. Numbers. I will have to improve this system further, but currently I already like how it feels. Cash calculating Currently I only have amount and multiplier. It is a bit inspired by balatro, I want to differenetiate a bit by trying to make it be more the players choice of possible combos. Instead of having some multiplier based on poker hands, each card shall do something. and each upgrade, either buffs a specific card, or lets the player themselves make combinations, for example, if your card sum is 10, get 3x the cash. more additions Added card selecting/unselecting added hand playing"}, {"post_id": 80928, "ts": "2026-10-19T08:28:55Z", "hours": 3.8089, "text": "Got a load of feedback about the game Bob is back! After getting a lot of feedback, I have realised what could be improved in the game, so I have decided to improve the game a bit, and try implement some stuff that I did not get to in the short GMTK game jam time frame but what is the fun if there is no challenge? So I have decided to attempt to finish all the game improvements in 50 hours of real world time (2 days) Current changes From the feedback, the 3d world buttons sometimes were hard to spot, so I moved them to be 2d. Also I have started to clean up some of the spaghetti code that was made when speedrunning this game in such a short time frame Made the cards order themselves based on values Idea that I want to implement I want to make the game be more like and incremental, and have a lot of customization. The idea is every card does something else, and between levels you get to buy upgrades, that change what each specific card does."}, {"post_id": 35656, "ts": "2026-07-27T07:28:11Z", "hours": 7.2297, "text": "Bob is succesfully a part of the gmtk game jam After having to rush the game, too big files and multiple game breaking bugs we managed to fix everything in time! The problems: Couple hours before submission I wanted to add a arrow to guide the player that they do not get lost. Now I tried for an entire hour to do some complex vector math, after giving up my teammate just found that there is the godot look_at() function o_o. Fun waste of an important hour. Game breaking bugs -> Scenes crashing, money doesnt reset when you restart the game (You would be stuck at 0 all the time), items dont get used up Now luckly they were all quite easy to fix, but then also, since this was a game jam we decided to use some premade assets. We ended up having a lot that we did not use in the directory, and then we found out itch allows only 200mb files for web games , we were almost double that. Well swing swing half the files deleted The game contents A small story scene in the beginning and end of game Playing cards against Bob ( Do anything you must to win) mainmenu, settings, ending screen tutorial, which hopefully explains the gameplay good enough overall We have stuff to work on, spaghetti code is something that can always improve, our modeling skills. Try not to rush everything in the end, but I am proud of our progress in this game jam, even more with the fact this was our first 3d game jam. I think this game needs a little bit more polish before being worthy of a stardance ship, so its gameplay shall be perfected after the suggestions from the jam voters. try out the jam version at https://duc-k.itch.io/cashless-drive If you also made a gmtk game jam game, drop a link to it in the comments for me to try out"}, {"post_id": 34911, "ts": "2026-07-26T00:33:33Z", "hours": 8.5508, "text": "Bob now plays cards with you on a moving car! In the past few hours in my gmtk game jam game I have succesfully polished the main blackjack game. meanwhile my teammate has been working on shops, between scenes. This doesnt mean there was no struggle I have banged my head a couple of times on my desk trying to figure out how to order every signal and event in the correct order. Bob was being a bit quiet So i let him be able to talk, well kind of ragebait the player This dialogue system is definetly one of the more favorite ones I have made, mainly because of how fast I was able to make it. Instead of making the next text function replace the entire current text that is displayed, I instead use a string Array to keep all the requested dialogues, where if there are no dialogues when adding to the array, I create a while loop untill I run out of dialogue strings, letting me handle multiple messags from different components all at the same time without even a chance of anything going wrong. I had given the game to a friend to playtest Understood that it is very hard to know what you are supposed to do (they got stuck not knowing what to do), that is why my main priority is going to be a polished tutorial, so people do not get stuck in the first 3 minutes. There are only around 22 hours left in the jam Will it be possible for this games team of 2 to finish in time, yes, but very rough, so this game will have to be polished a bit after submission to the jam. Comment your gmtk game jam games so I can check them out"}, {"post_id": 34343, "ts": "2026-07-24T23:15:08Z", "hours": 9.5028, "text": "Say hi to BOB This year I am participating in a gamejam in the GMTK game jam. Now the theme is kind of not my favorite (trauma from making timed games) You might be asking who is Bob, well he is the green alien in the picture, idk I think it makes sense. Game idea: So this year to keep it simple, taking inspiration from balatro and gamble with your friends, you get stuck in the desert and you are missing 5$ for a bus ticket but Bob here decides here is going to give you a lift, but you must pay him for every km you drive, you dont have money but you can get it by playing blackjack against him. Who said it was gonna be fair? Appart from the regular blackjack implementation, I have added cheating and items both to increase your chances of surviving. (Yes surviving, dont run out of cash) Sometimes Bob gets a bit distracted, during those moments you have the chance to cheat…. Or if you are fancy, use your items to do a load of powerful effects. Progress Progress is a bit slow, since gmtk game jam ends in like 2 days, but I think this is possible, godot signals have become my best friend to keep everything ordered correctly in all the scripts. This is definetly my best code for a game jam yet. If any of you is working on the GMTK game jam, comment your projects!"}]...
|
Title: GMTK game jam 2026 by @ducki | Stardance
D Title: GMTK game jam 2026 by @ducki | Stardance
Devlogs:
Say hi to BOB This year I am participating in a gamejam in the GMTK game jam. Now the theme is kind of not my favorite (trauma from making timed games) You might be asking who is Bob, well he is the green alien in the picture, idk I think it makes sense. Game idea: So this year to keep it simple, taking inspiration from balatro and gamble with your friends, you get stuck in the desert and you are missing 5$ for a bus ticket but Bob here decides here is going to give you a lift, but you must pay him for every km you drive, you dont have money but you can get it by playing blackjack against him. Who said it was gonna be fair? Appart from the regular blackjack implementation, I have added cheating and items both to increase your chances of surviving. (Yes surviving, dont run out of cash) Sometimes Bob gets a bit distracted, during those moments you have the chance to cheat…. Or if you are fancy, use your items to do a load of powerful effects. Progress Progress is a bit slow, since gmtk game jam ends in like 2 days, but I think this is possible, godot signals have become my best friend to keep everything ordered correctly in all the scripts. This is definetly my best code for a game jam yet. If any of you is working on the GMTK game jam, comment your projects!
Bob now plays cards with you on a moving car! In the past few hours in my gmtk game jam game I have succesfully polished the main blackjack game. meanwhile my teammate has been working on shops, between scenes. This doesnt mean there was no struggle I have banged my head a couple of times on my desk trying to figure out how to order every signal and event in the correct order. Bob was being a bit quiet So i let him be able to talk, well kind of ragebait the player This dialogue system is definetly one of the more favorite ones I have made, mainly because of how fast I was able to make it. Instead of making the next text function replace the entire current text that is displayed, I instead use a string Array to keep all the requested dialogues, where if there are no dialogues when adding to the array, I create a while loop untill I run out of dialogue strings, letting me handle multiple messags from different components all at the same time without even a chance of anything going wrong. I had given the game to a friend to playtest Understood that it is very hard to know what you are supposed to do (they got stuck not knowing what to do), that is why my main priority is going to be a polished tutorial, so people do not get stuck in the first 3 minutes. There are only around 22 hours left in the jam Will it be possible for this games team of 2 to finish in time, yes, but very rough, so this game will have to be polished a bit after submission to the jam. Comment your gmtk game jam games so I can check them out
Bob is succesfully a part of the gmtk game jam After having to rush the game, too big files and multiple game breaking bugs we managed to fix everything in time! The problems: Couple hours before submission I wanted to add a arrow to guide the player that they do not get lost. Now I tried for an entire hour to do some complex vector math, after giving up my teammate just found that there is the godot look_at() function o_o. Fun waste of an important hour. Game breaking bugs -> Scenes crashing, money doesnt reset when you restart the game (You would be stuck at 0 all the time), items dont get used up Now luckly they were all quite easy to fix, but then also, since this was a game jam we decided to use some premade assets. We ended up having a lot that we did not use in the directory, and then we found out itch allows only 200mb files for web games , we were almost double that. Well swing swing half the files deleted The game contents A small story scene in the beginning and end of game Playing cards against Bob ( Do anything you must to win) mainmenu, settings, ending screen tutorial, which hopefully explains the gameplay good enough overall We have stuff to work on, spaghetti code is something that can always improve, our modeling skills. Try not to rush everything in the end, but I am proud of our progress in this game jam, even more with the fact this was our first 3d game jam. I think this game needs a little bit more polish before being worthy of a stardance ship, so its gameplay shall be perfected after the suggestions from the jam voters. try out the jam version at https://duc-k.itch.io/cashless-drive If you also made a gmtk game jam game, drop a link to it in the comments for me to try out
Got a load of feedback about the game Bob is back! After getting a lot of feedback, I have realised what could be improved in the game, so I have decided to improve the game a bit, and try implement some stuff that I did not get to in the short GMTK game jam time frame but what is the fun if there is no challenge? So I have decided to attempt to finish all the game improvements in 50 hours of real world time (2 days) Current changes From the feedback, the 3d world buttons sometimes were hard to spot, so I moved them to be 2d. Also I have started to clean up some of the spaghetti code that was made when speedrunning this game in such a short time frame Made the cards order themselves based on values Idea that I want to implement I want to make the game be more like and incremental, and have a lot of customization. The idea is every card does something else, and between levels you get to buy upgrades, that change what each specific card does.
I love polish The most important part of an incremental game is polish. So in the video, you can a load of the basics. Particles, Rotation, scaling. Numbers. I will have to improve this system further, but currently I already like how it feels. Cash calculating Currently I only have amount and multiplier. It is a bit inspired by balatro, I want to differenetiate a bit by trying to make it be more the players choice of possible combos. Instead of having some multiplier based on poker hands, each card shall do something. and each upgrade, either buffs a specific card, or lets the player themselves make combinations, for example, if your card sum is 10, get 3x the cash. more additions Added card selecting/unselecting added hand playing
Enviornment changes I realised the previous deep fog was a bit too much. So I gave bob a new skybox, so he does not have to live in darkness. Also a bunch more visual improvements. More buttons squatch and stretch. Optimized some code, where for some reason I was running the same code in 3 different spots, combined all that into just 1 function. Next I will start working on the shop, originally started a 2d shop, but realised I want to keep the 3d cards, so instead I am a 3d shop.
Welcome to Bobs shop I have made the shop cards, only have the buying left to add and make a bunch of custom card functions. Obviously made the cards stretch and pop around. gameplay loop The gameplay loop is almost done already. I added the button to start next round, which now means the player can go on forever, as long as they get enough score each round There is a fun “feature” of text and cards becoming huge, that I will showcase in the next devlog
Bobs shop is officially open Buy upgrade cards after rounds to be able to beat even harder rounds. The goal is going to be to make it to the furthest level possible. And then flex on others with a level leaderboard. Main features I managed to make A very nice upgrade card system, which lets me make new cards insanely easily. (I love dictionaries) I can make each upgrade store its own function, then make custom new functions at will. Card buying and then displaying on 2D. As well as popping up when their special function is met Reroll buttons The game is starting to come togheter . Today I have woken up sick. because of it I probably won’t be able to finish in my own set time limit, but that is normal in game development, to plan less time than it would actually take. Video is a bit laggy
A public leaderboard I have not ever tried to add a public leaderboard to a game , but it was more pleasant than I expected. I took some of my old code to quickly make a js node application, using sequelize to handle the backend. Then set up everything to a Render web service and postgress database. Then connected godot to the web service and it works! When loosing in the endless mode you will be prompted if you wish to submit your score to the database, and if you are top 10, you will show up on the main menu. A small intro. The jam version had a very long intro, I remade it to have a way shorter one, so when trying the game over and over, it is not a hastle to wait through the tutorial....
|
1792641251.2250888
|
1793246051.2250888
|
|
70495
|
Haven Nottingham Badge by @Choc0latesauce | Starda Haven Nottingham Badge by @Choc0latesauce | Stardance...
|
Choc0latesauce
|
0
|
4.86
|
0
|
[]
|
[{"post_id": 81472, "ts": "202 [{"post_id": 81472, "ts": "2026-10-21T12:04:21Z", "hours": 1.8522, "text": "I’ve now defined all of the dimensions for the PCB and have started on the silkscreen art. I want to make the badge fun to wear and recognisable while also having room to display the sponsors, the front side will be dedicated to this with the back side dedicated to how to actually use the badge. Having lots of fun, the creativity is really flowing lol"}, {"post_id": 81445, "ts": "2026-10-21T09:45:20Z", "hours": 2.7042, "text": "I have now moved entirely into my own design, it uses the power generated from your phones NFC coil to power and update the E-ink display. As E-ink displays don’t require power to hold an image this negates the need for a battery making the badge much cheaper to produce and infinitely lighter. I’m very happy with my progress so far as this is a completely custom design! Moving onto the PCB design next."}, {"post_id": 81033, "ts": "2026-10-19T16:55:18Z", "hours": 0.3042, "text": "I’m the POC for Haven Nottingham which is being sponsored by JLCPCB. I thought I’d design some interesting badges for the attendees, tbh I don’t really know what I want them to look like at the moment or the features. Am taking inspiration from this badge at the moment though! https://oshwlab.com/notaroomba/dreamcard"}]...
|
Title: Haven Nottingham Badge by @Choc0latesauce | Title: Haven Nottingham Badge by @Choc0latesauce | Stardance
Devlogs:
I’m the POC for Haven Nottingham which is being sponsored by JLCPCB. I thought I’d design some interesting badges for the attendees, tbh I don’t really know what I want them to look like at the moment or the features. Am taking inspiration from this badge at the moment though! https://oshwlab.com/notaroomba/dreamcard
I have now moved entirely into my own design, it uses the power generated from your phones NFC coil to power and update the E-ink display. As E-ink displays don’t require power to hold an image this negates the need for a battery making the badge much cheaper to produce and infinitely lighter. I’m very happy with my progress so far as this is a completely custom design! Moving onto the PCB design next.
I’ve now defined all of the dimensions for the PCB and have started on the silkscreen art. I want to make the badge fun to wear and recognisable while also having room to display the sponsors, the front side will be dedicated to this with the back side dedicated to how to actually use the badge. Having lots of fun, the creativity is really flowing lol...
|
1793022461.3527505
|
1793627261.3527505
|
|
13934
|
My first slack bot! by @Saifan | Stardance
|
Saifan
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T13:59:15Z", "hours": 1.0, "multiplier": 1.01, "payout": 1, "blessing": "neutral", "text": "i created a slack bot named “KOT” having kings theme/behaviour for more info check my github repo plzz", "repo": "https://github.com/Saifan86/SlackBot-Kot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BAHTBN3U1?_gl=1*5vnct3*_gcl_au*MTYzNjg1MDQxLjE3ODE0NDI3MTI."}]...
|
[{"post_id": 8147, "ts": "2026 [{"post_id": 8147, "ts": "2026-06-13T16:15:52Z", "hours": 1.1336, "text": "slackBot"}]...
|
Title: My first slack bot! by @Saifan | Stardance
Title: My first slack bot! by @Saifan | Stardance
Devlogs:
slackBot
Ships:
i created a slack bot named “KOT” having kings theme/behaviour for more info check my github repo plzz...
|
1793094520.8205733
|
1793180920.8205733
|
|
20724
|
CRM by @F3rro_32 | Stardance
|
F3rro_32
|
1
|
124.74
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-14T16:34:42Z", "hours": 115.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "CRM An open-source CRM for Italian small businesses: contacts, companies, leads, quotes, orders, invoices with VAT, tickets, email campaigns, NPS surveys, reports and a customer portal. It started as a way to manage clients for a friend’s startup and became a working and valuable project. TRY IT (no install) https://crm.alessio.hackclub.app email: [email protected] password: HackClub-Demo-2026! The demo has full access and realistic fake data, so feel free to click everything, create, edit and delete. The data resets occasionally. Outgoing email is switched off on the demo. HEADS UP: the interface is in Italian. Use the translate widget in the corner of the app (or your browser’s translator) to read it in English. Real i18n is on my roadmap, sorry! WHAT TO LOOK AT A quote with line items, discounts and VAT by rate, and the “Print PDF” button. PDFs come from HTML templates you can edit, with a live preview on your last real document. A customer accepting a quote from a signed link, without an account. Full-text search across every module (PostgreSQL). Italian e-invoicing: it builds the FatturaPA XML and validates it against the official government XSD before saving. Invoices lock once sent to the SDI. The MCP server: an AI assistant can use the CRM through an API key, with seven generic tools that work on all 34 modules and respect permissions. 2FA (TOTP) with recovery codes, secrets encrypted at rest, installable PWA. HOW IT WORKS There is no “contacts” or “companies” table. One generic Record entity stores its fields in a jsonb column, and an ObjectType + FieldDef describe each module (39 field types). Adding a module is a configuration record, not a migration or a new controller. Permissions are checked per module and action at runtime. You can have more info in the README, so please check it. I hope you appreciate this project :)", "repo": "https://github.com/AlessioFerrari8/crm", "demo": "https://crm.alessio.hackclub.app"}]...
|
[{"post_id": 81469, "ts": "202 [{"post_id": 81469, "ts": "2026-10-21T11:47:01Z", "hours": 9.7417, "text": "Hey guys, what’s up? I’m finally in the last phase of getting my driving license, so that’s taking up some of my time too. The CRM is now online at crm.alessio.hackclub.app . The VPS has very little RAM, so I build the Docker images locally and transfer them to the server using docker save over SSH. It’s not the fanciest deployment process, but it works with the resources I have, so I’ll stick to it for now. One of the main things I worked on was the customer portal . The backend from last week finally has a frontend: customers can log in, see their tickets and documents, open requests, reply to messages, download PDFs and accept quotes. I also made sure that internal notes stay internal. Notes now have a Visible to customer checkbox, which is disabled by default. The portal only shows notes explicitly marked as visible, so there’s less risk of accidentally exposing something that should stay private. Another feature I added is Google Calendar import . It’s read-only for now, so the CRM can import events without modifying anything in your Google account. Events are created through the same service as normal CRM records, meaning workflows and the audit log still work as expected. Sync runs every 15 minutes, and if something goes wrong with an account, it won’t stop the others from syncing. I also started replacing the Google Translate workaround with proper internationalization (i18n). The translation system is in place, including support for parameters and locale-aware dates and numbers. The dictionary is type-checked, too, so missing English translations can be caught at compile time. There’s still a lot of work here: around 1,200 strings need to be translated by hand. It’s not the most exciting task, but I’d rather have proper translations than rely on Google Translate forever. Obviously that’s my opionion. I also started working on public registration, but it’s not ready yet. There’s one important limitation: the CRM currently has a single shared workspace, so everyone who registers would see the same data. Registration will stay disabled unless explicitly enabled until I decide how to handle that properly. That’s because the idea is to have 1 single DB for each workspace, since the CRM should be self-hosted. There’s still work to do, but the CRM is getting closer to the version I wanted to ship. See you in the next devlog!"}, {"post_id": 79560, "ts": "2026-10-14T16:31:36Z", "hours": 2.4331, "text": "Hey guys, how’s going? This will be a short devlog, and it’s the one before the shipping. I decided to ship the CRM, even if it’s not completely finished. That’s because I still have to do lots of things, but now I have a working product, so, since the changes I have to make are complementary. Unfortunately, I have a big issue: the whole interface is in Italian. The app is made for Italian small businesses (FatturaPA, VAT, SDI…), but if you come from Stardance you can’t read a single menu. Real i18n is still on my list and it is a big job, so for now I added the Google Translate widget in the corner of the app. If your browser is in English it starts translating by itself, otherwise you pick English from the selector. It’s not pretty, but it makes the demo usable today instead of “someday”. I had to widen the CSP in nginx for it, and I loaded the script as an external file so I didn’t need a second hash. I also fixed the README and cleaned the repo. Now everything should work fine, or at least let’s hope so. I hope you enjoy the product."}, {"post_id": 78818, "ts": "2026-10-11T17:58:49Z", "hours": 8.3728, "text": "Hey guys, how’s everythings going? I’m doing pretty well. As always I have lots of things to do, but I still have plenty of time for coding. School is demanding, and preparing for my driving license is also tough, but I’m managing everything little by little. Last time I ended up with an app that wouldn’t even start. Luckily, I fixed all those errors, and all 258 tests are now green and passing on the PostgreSQL db. After that, I added new features. First of all I worked on NPS surveys and quote acceptance. Customers can now receive surveys and answer them through a public link. They can also accept quotes directly from a link, without needing an account. I also made sure these features work with the existing workflows, so automations can still do their job properly. Another interesting addition is the MCP server. AI agents can now interact with the CRM through an API key. Instead of creating a separate set of tools for every module, I went with seven generic tools that can work across all 34 modules. This should make it easier for AI models to understand which actions they can perform, while keeping the CRM’s existing permissions and security rules in place. I also improved search quite a bit. Before, it mostly looked at record titles. Now it uses PostgreSQL full-text search to find relevant information inside the actual record data and rank the results. The audit history is also much easier to read, with related record IDs replaced by their actual titles. I worked on a couple of smaller but important things, too. The trash can now properly handle related files and records when permanently deleting something, while protecting fiscal documents that must be kept for ten years. Finally, I started working on the customer portal. It now has its own backend authentication and permission system, separate from the employee login. Customers will only be able to access records they’re actually allowed to see. The backend is ready, but I still need to connect the frontend pages and routes. There’s still quite a bit to do, but I’m getting closer to the first complete version of the CRM. See you in the next devlog!"}, {"post_id": 77578, "ts": "2026-10-07T15:01:58Z", "hours": 9.0769, "text": "Hey guys, how’s going? I have plenty of things to do, but coding is still one of my favorite activities, so I always try to save some time for it.This time I worked again on FatturaPA, which is the Italian electronic invoice.What I did, is that now, first of all, the CRM can now generate the FatturaPa XML directly from an invoice and validate it against the official XSD, before saving it. I also added the whole invoice lifecycle, from draft, to setn, delivered, accepted or rejected. The CRM can read the recepits from the SDI and show ufseful information when something goes wrong.Another important change is that invoices now become locked once they’re sent to the SDI. If something needs to be changed, the correct way is to create a credit note instead. This is much efficient in my opinion.I also started working on the SDI integration itself. For now there’s only a manual transport, but the system is built so that adding an actual provider later shouldn’t require changing the rest of the CRM. I did it this way, so I can decide which provider use, and not have to change everything.Besides invoicing, I added time tracking. You can start a timer from the top bar and see your hours directly on records. Timers also automatically close after a maximum amount of time, so nobody ends up with a 80-hour ticket because they forgot to stop it.Finally, I worked on email campaigns. You can create a campaign from a saved filter, send emails through a queue and manage unsubscribes. I also added some protections against things like open redirects and accidental unsubscribes.And now, the honest part: before writing this devlog, I ran the tests and guess what, the app didn’t even start.I used claude for debugging, cause I wans’t finding the error. Silly me, it was just a typo."}, {"post_id": 75572, "ts": "2026-09-30T13:58:27Z", "hours": 10.0467, "text": "Hey guys, how’s everything going? I’m alright. I’m so glad hackclub postponed the end of stardance, I have still another month to 1. finish this project 2. do other projects I had on my mind for such a long time. Before doing this devlog, I had to use claude to debug my work, because I had some errors I didn’t understand (I was using a class created for a test in the normal “code”), so bad :( and also other small issues. Lately I worked on one of the most significat features for me, which is 2FA . As my network teacher says \"zero trust, because the world is a place full of bastards\" . 2FA is one of the techniques I use to follow this approach. Basically, now you can press “Enable” in your preferences, scan the QR code with any authenticator app (f.e google), or just type the secret by hand, because half the people can’t frame a QR code at the first time, lol. You also have to confirm with a code. At login, if 2FA is on, there’s a second step for the six digits. You also get ten recovery codes that you can copy or download, shown only once. Turning it off asks for your password, so a stolen open session can’t remove this precaution. You’re probably wondering: are the secrets encrypted? Yes, they are. I mostly use AES-GCM, because it’s pretty simple, but also secure, so it’s the better compromise. The TOTP secret and the mailbox passwords are stored encrypted with AES-GCM. The key lives in an env variable, not in the db, so a database dump alone isn’t enough to generate codes or read someone’s email. I also turned the crm in a PWA . You can install it on your phone or desktop, it has its own icon and window, and when I deploy a new verion, it tells you to reload, instead of silently serving you the old one from cache (it also checks every 6 hours, maybe I’m gonna change it to 10, idk, for the tab you leave open for days) Like in every other devlog, I made some tests and updated the docs. The report engine now has tests against a real Postgres started in docker, and the repo finally has a real README (it’s not finished, just with some basic information, claude, thanks for the suggestion of making it). Oh, I nearly forgot. I also worked on emails. Now I’m currently working on the Italian electronic invoice, which is called FatturaPA. The crm builds the XML from an invoice, and the first test I wrote checks it against the official government XSD: if it doesn’t pass, it isn’t saved. I think I’m gonna study a bit of english / american law, to allow people out of Italy to use this app as well. I hope you like my product, see you soon"}, {"post_id": 71912, "ts": "2026-09-21T19:15:14Z", "hours": 9.0044, "text": "Hey guys, how have you been doing lately? I’m alright. I’m still getting my driver license, so I don’t have much time to code. Last devlog was all about the PDF engine on the backend, and I closed it saying that the UI was next. Here it is: Print button : I added a print button Print PDF on quotes, orders, delivery notes and invoices. The file is downloaded with the document number as its name, so you get for example 2025-47.pdf and not just document.pdf Template editor : I also added to settings a new tab called “Print”. On the left there’s the list of templates, on the right the HTML, the page size and the margin. The preview renders the last real document of that module instead of a fake one, so what you can see is exactly what your customer receives. The default templates can’t be edited you duplicate them: the seeder rewrites them at every boot, so any change would silently disapper on the next restart. I preferred to say it in the interface rather than let someoune lose an afternoon of work. Company data : The company settings now hold also the legal name, VAT number, tax code, address and contact line. That’s what the PDF header prints, and without them the header comes out empty. VAT that adds up to the cent The header discount is spread across the VAT rates and every share gets rounded, so the sum of the shares could end up one or two cents away from the total. On a quote nobody would ever notice. On an electronic invoice it’s rejection 00423. Now the rounding leftover goes on the last rate, so taxable + VAT = total, always. Tests on a real db : The report engine builds SQL at runtime, and mocking a database proves nothing, so its tests now start a throwaway Postgres in Docker and run against it: filters, grouping, ordering and counting. Two bugs closed : Merging two records didn’t look at the bin, so a deleted record could be merged into a live one. And editing a saved report answered 405, because the frontend was sending PUT to an endpoint that only has POST. Right now I’m working on the 2FA (for those who don’t know, the 2 factor auth). I’m writing the TOTP myself instead of pulling in a library: it’s an HMAC-SHA1 of the 30 second counter, and the six digits come out of the dynamic truncation described in the RFC. The secret is encrypted in the database with AES-GCM, because someone who can read the db must not be able to generate the codes, otherwise a second factor is just a second password. There are ten recovery codes, stored hashed and usable once each, and the last accepted counter is saved, so the same code can’t be replayed during its 30 seconds. The tests are the official RFC 6238 vectors: a TOTP written at home always “works” until you compare it with a real auth app, and at that point it’s too late to find out. Two things I know are missing: the second factor has no interface yet, there’s no page to scan the QR code from, and the mailbox that turns incoming emails into tickets is only half written. See you soon, the end of this project is near."}, {"post_id": 67216, "ts": "2026-09-13T08:29:02Z", "hours": 8.6217, "text": "Hey guys, how’s it going? I hope you’re all doing well. School started here in Italy, so I have less time compared to August. I also have to get my driver’s license, so I’m studying for that too. Unfortunately, coding isn’t the first thing I do every day anymore. I’m still working on the PDF generator. Last time I mentioned that relation fields were showing raw IDs and that document totals weren’t formatted properly. I fixed both of those, but I’ll get back to them later. About the PDF The template is HTML, and it lives in the DB. I didn’t hardcode the layout in Java. I created a PdfTemplate entity that stores the HTML, page size and margins. There is one default template for each document type: quote, order, delivery note and invoice. Thymeleaf fills the template with the document data, and OpenHTMLToPDF + PDFBox generate the PDF. Since the HTML is provided by the user, I also had to think about security. A template could try to load something like file:///etc/passwd or access an internal URL. Because of this, external protocols are disabled and only data: URIs are allowed. Page sizes are also checked against a whitelist. I also had to deal with the fact that HTML isn’t always valid XML. OpenHTMLToPDF expects XML, so I use jsoup to normalize the HTML first. Otherwise, perfectly normal HTML can cause a SAXParseException . And finally, fonts have to be embedded in the PDF. Without including DejaVu Sans in the jar, the PDF doesn’t render correctly. VAT summary I also worked on the VAT summary. Lines are grouped by VAT rate, shipping is added to the highest rate, and the document discount is distributed across the rates instead of being applied at the end. VAT is then calculated on the discounted amounts, so everything adds up correctly: taxable + VAT = total This actually fixed a bug where VAT was calculated before applying the document discount. It wasn’t very obvious until I started testing it with real numbers. Three endpoints The PDF system now has three endpoints: print a document preview a template print a batch For the preview, instead of creating a fake document, I use the last real document of that module. This way there is only one PDF generation system to maintain. The batch endpoint combines multiple documents into one PDF, while checking permissions for every document. A few other fixes The two ugly things from last time are also gone. Relation titles are now resolved by a shared backend service, so instead of UUIDs you see things like the company name. The same service is used by the lists, detail pages and PDFs. Amounts in the PDF are also formatted using the user’s preferences. I also added tags to the record lists. Tags are resolved in bulk instead of doing a permission check for every single row, which makes a big difference on larger lists. The backend part is basically done for this cycle. The print button and template editor are already written, but they’re not wired up yet. Right now I’m still using the API to test the generator. So, UI is next. See you in the next devlog!"}, {"post_id": 63513, "ts": "2026-09-07T12:44:46Z", "hours": 6.7903, "text": "Hey guys, how’s going? Soon school is going to start for me, but luckily it’s my last year in high school, so I’m really happy about this. Lately I had much time to code, so I continued working on this project. Last devlog was all backend; I said the engine was there and the screens weren’t. This time it’s quite the opposite. I didn’t really touch the backend, I spent the last 5-6 hours writing the frontend. Here’s the details of what I did: Document lines the grid is finally in the record detail. You can add lines, set quantity, price, discount and VAT, additionaly with the subtotal / VAT / total block, that updates while you type. When you save, the whole set of lines is sent at once. Tags I added the tag picker on the record detail, so you can attach and remove tags from a record as you wish. I also made the page that shows every record with a given tag, from all the modules together. Duplicates The duplicate finder now has its own screen: you choose a module, you get the pairs it thinks are duplicates, and the you see the two records side by side and pick field by field which value to keep before merging them. Reports There’s a page to build a report with a wizard (rows, columns, metrics, filters) and a preview that shows you the result before saving it. Dashboard widgets This is the main thing of this cycle. I wrote all six widget types, which are: - KPI tile - split KPI tile - chart - table - pivot - record list A widget is just a saved report query plus the type of rendering you want, so it runs on the report engine. Dashboards with tabs You can create a dashboard, add tabs to it and put widgets inside, so you can keep for example sales and support separated from each other. Sidebar and topbar The sidebar now has the routes for all the new pages, and the topbar has a quick-create button to make a record from anywhere without opening its module first. Two things are still not nice and I’m aware: in some places the relation fields show the raw id instead of the name of the record, and the totals of the document lines are not formatted with the user preferences yet, so you read 9054.00 instead of 9.054,00 EUR. Both are small and both are on the list to be improved. Now I’m working on the PDF generator See you, I hope you enjoy this project"}, {"post_id": 59674, "ts": "2026-09-01T16:28:33Z", "hours": 8.095, "text": "Hey guys, how it’s going? These days I’ve got quite a lot of work to do, since we’re in the middle of harvest season here in Italy, so I don’t have much time to work on the project. Unfortunately, today it rains, so I’m home, and I can spend some time on the PC. Lately I’ve been working a lot on the backend. The first two things I did are documents and document numbering : I created the model for document rows ( DocumentLine ), with its engine to calculate totals, including subtotals, discounts and VAT. I also added unit tests for the calculator. I also implemented automatic document numbering, so documents like quotes, invoices and tickets are automatically assigned a number when they’re created. Then I worked on quote revisions, with a new QuoteRevisionService to keep track of different versions of the same quote. Another thing I started working on is document conversion. The idea is to be able to convert a quote into an invoice, but this part is still a work in progress. I also spent quite a bit of time on reports and dashboards: added the Report model and the ReportEngine / ’ReportService` added default reports through a ReportSeeder created the Dashboard model, with tabs and widgets added the related controllers, services and repositories On the frontend side I’ve scaffolded the pieces for dashboards and widgets — the widgets/ and dashboard-tabs/ components exist and the dashboard and report services are written — but the components themselves are still empty shells. The data layer is ready, the screens aren’t written yet. That’s what I’ll pick up next. Another big thing I worked on is tags and data quality. I added the tag model and APIs, together with the services and repositories. I also started working on a duplicate finder and record merging system, so duplicate contacts/companies can be detected and merged instead of leaving messy data around. For PostgreSQL, I also enabled pg_trgm to improve fuzzy searches for duplicate detection. Finally, I added user preferences for number and date formats, including a live preview so users can immediately see how their chosen formats will look in the app. I’ve also added icons for the new modules. As you can probably tell, this was a very backend-heavy cycle. Almost everything I built this time: document lines, numbering, quote revisions, reports, dashboards, tags and duplicate detection lives in the models and the services, and the UI for most of it isn’t there yet. So this time there isn’t much to show in screenshots: the engine is in place, the screens come next. I’d rather get the model right first and build the interface on top of something solid than the other way around. Hopefully I’ll be able to find some more time to work on it after harvest, so see you in a while."}, {"post_id": 45652, "ts": "2026-08-12T09:05:39Z", "hours": 4.9961, "text": "Hey guys, back on this project. Last time I said the next round was going to be document lines, my quote was “the only part of this CRM that doesn’t fit the dynamic JSON engine”. That’s what this round was, plus the report engine on top of it. Document Lines : One single table for all four documents: quote, sales order, delivery note, invoice. The line is exactly the samein all of them, the only thing that changes is the document holding it, and a document here is just a Record like any other, so there’s no type constraint on the line at all. A line can be a product line, a free text line (no amounts, just something to say in the middle of the document) or a subtotal. Two things get copied at save time: the description and the vat percentage. The math is its own class, DocumentLineCalculator, and it’s the one piece of this project I wanted testable completely on its own, because it’s the only place where a wrong rounding produces a wrong tax document. The order is fixed: gross = quantity × unit price discount = a percentage of the gross, or a flat amount net = gross - discount, rounded to 2 decimals here vat = net × rate, rounded line total = net + vat Rounding happens after the discount and after the vat, never on the unit price: round the unit price and the error gets multiplied by the quantity. Rounding mode is HALF_UP, which is the commercial rounding used here, not HALF_EVEN. And a flat discount bigger than the line itself gets clamped instead of producing a negative amount, since that’s a typo 100% of the time. Lines are always saved all together. The endpoint is a PUT that replaces the whole set. It deletes and rewrites instead of diffing row by row, because a document has a few dozen lines at most and the diff would cost more code than it’s worth. The reason for this rule is the totals: they depend on every line, so a partial save would leave the header and the lines disagreeing, even if only for a moment. The totals (subtotal, vatTotal, total) get written back into the document’s own JSON, plus the header level discount and shipping cost. They live there so they can be list columns you filter and sort on, which is the whole point of having them. Now I’m working on the dashboard graphs, widget and this kind of things.I hope you like the project. I’m sorry if I don’t have any screenshot of the working website, it’s because I focused only on the backend, the frontend of this part still needs to be written."}, {"post_id": 42597, "ts": "2026-08-07T12:41:14Z", "hours": 6.4236, "text": "Hey guys, still on this project. This round was all about the stuff that sits on top of the modules, instead of new modules. Per-user formatting preferences . There’s a new “My preferences” page in the user menu. Every user picks how they want to see numbers and dates: thousands separator, decimal separator, currency (any ISO code, the symbol gets resolved automatically), how many decimals, whether the symbol goes before or after the number, and whether to cut trailing zeros. Same thing for the date format. There’s a live preview box that updates while you touch the selects, so you see 1.234,50 € turn into $ 1,234.5 as you change this. The setting applies everywhere, lists, record details and so on. Tags . These are cross-module, which is the whole point; a tag can sit on a lead and on a ticket. There are two kinds: shared ones, visible to the whole workspace, and private ones, which only you see. Each one has a color. You can attach and detach them from any record, and there’s a “all records with this tag” view that goes across modules, filtered by your permissions, so if you can see tickets but not opportunities, you only get the tickets.I did not build this as a field type, even though I already have a TAGS one. That one belongs to a single ObjectType with its own fixed options, so it gives you neither the shared catalog nor the cross-module search. Duplicate merge . You pick a module and it gives you back the candidate pairs, ranked by how similar their titles are (there’s a threshold you can move, default 0.6). Then you get the two records side by side and choose, field by field, which value survives. When you confirm: the winner keeps everything you picked, every relation that pointed at the loser now points at the winner, ids of the loser mentioned inside other records get rewritten too, including the ones stored in lists, notes and tags move over (and if the winner already had that tag, the duplicate link is dropped), the loser goes to the trash, not deleted. A wrong merge has to be recoverable, and I already have a bin, so I used it. Document numbering . Documents now number themselves. It’s configurable per module: prefix, whether to include the year, padding, separator. Right now it’s on for three of them: - quotes → 2025-47 - invoices → FT2025-0001 - tickets → TT643 The counter is per module and per year, and it’s locked while it’s being read, so two people creating a quote at the same time can’t get the same number. If you type a number by hand, yours wins, that matters when you’re entering an old document with its original number. On top of that, quotes have revisions. Revising 2025-13 gives you 2025-13_2 , a brand new document that links back to its parent, while the parent moves to the “revised” stage. And you can revise a revision, so 2025-13_2_2 works too, the counter is progressive per parent, not global, which took a bit more care than I expected. Next up is the big one: document lines. Quote → order → delivery note → invoice, with quantities, discounts and VAT per line. It’s the only part of this CRM that doesn’t fit the dynamic JSON engine everything else is built on, so it gets its own real tables. See ya in the next devlog, I hope you like the project. P.S. you’ll see the tag in the next devlog, I still have to implement the frontend"}, {"post_id": 40187, "ts": "2026-08-03T16:19:02Z", "hours": 5.575, "text": "Hey guys, I’m still working on this project, cause there are lots of things to do.Lately I focused on improving and adding things to the ObjectTypes. As you can see in the two images of the sidebar, I added like 10 fields. Among them, the most important are goals , basically contains the possibility of creating a goal, setting an owner, which is responsible for this goal (clearly depends on the situation), the actual goal and the period. Along with that you can set a metric, so if the goal is revenue , opportunities , leads , custom project_task , basically it contains the instruction for each member, on a certain project service_contract , the support, it contains the subject, the company which is referred to, start and end date, the actual status, so active , expiring , expired , terminated , hours spent and so on. Along with these and the other I didn’t cite here, I added 3 object for the sales, where this two are the most important: The first one is the supplier , it contains all the specs, so name, vat, email, phone, website, address, and eventual notes. The second one, the most important, is sales_order , which contains the subject, the number of the order, a relation with the company, and a relation with the contact, a relation with the quote (I don’t know if it’s right, in italian it’s called preventivo), the possibility of setting a status, so created , confirmed , shipped , closed , cancelled , the order date, a relation with the payment Method object, and all the financial part, so the subtotal, with maybe the discount, vat, the total and the infos for the shipping, billing and shipping address. I hope to finish this project asap, since it’s taking me so looong.See ya in the next devlogs"}, {"post_id": 38868, "ts": "2026-08-01T13:05:15Z", "hours": 5.2586, "text": "Hey guys, I have stopped this project for a bit, but here I am again. I’m currently improving the CRM, mostly the security, which, for me, is one of the most important parts, and adding functionalities. Lately I focused on the mails. I added my smtp server, and in the backend, I managed all mails. Here is an example, with the invitation email. It’s in italian, but don’t worry, basically it invites you to the CRM, and then you can create your own account, with password. As you can see in the third screenshot, I can manage the invitation link, whether I want to invite an admin, or a simple employee."}, {"post_id": 26409, "ts": "2026-07-11T05:54:20Z", "hours": 10.4239, "text": "Hey guys, this week was also about making the CRM feel more complete. Alongside several new features, I also spent a good amount of time improving security and fixing one particularly deceptive bug. First of all, I added a new global Calendar page that shows every record with a date in one monthly view. Events, tasks, reminders and subscription renewals are all displayed together, each with its own color. Before this, the calendar only existed inside each record type, so there wasn’t a way to see everything happening at once. I also integrated Cal.com. The booking page can now be embedded directly inside the CRM, and when someone books a meeting, a webhook automatically creates an Event record. If the meeting is rescheduled, the existing record is updated instead of creating a duplicate, and if it’s cancelled, the event is removed. To keep the integration secure, the webhook signature is verified using the raw request body instead of reserializing the JSON. I spent some time looking at features from Pipedrive, HubSpot and Attio, then implemented a few that I really liked. The Kanban board now shows the total value of each column, making it easy to see how much every stage of the pipeline is worth. I also added rotting, which highlights cards that haven’t been updated for more than two weeks so forgotten leads are easier to spot. Another big addition is public forms. Every record type can now expose a public form that can be shared with a link or embedded into any website. When someone submits it, a new record is created automatically and any related workflows are triggered. The feature also includes a honeypot for bots and per-IP rate limiting. Finally, I added a Trash Bin, allowing users to restore accidentally deleted records with a single click. I also added the ability to assign an owner directly from the record page. Passwords now follow the same rules everywhere in the application: at least 8 characters one uppercase letter one lowercase letter one number one special character. The backend enforces the policy, while the frontend shows a live checklist as the user types. I also added a Change Password page. When a password is changed, every other active session is logged out while the current one stays active. At one point login stopped working and always returned “Invalid credentials”. It turned out the password wasn’t the problem at all, the backend was stuck in a crash loop. A new database column was added as “not null” without a default value, so Hibernate couldn’t apply the change to an existing table. The application never finished starting, and the frontend showed a generic login error. I fixed the database manually, added a default value to the migration, and made a note for the future: every new “not null” column should always have a default value. After adding all these features, I went through another security pass. The rate limiter now also protects password changes and the Cal.com webhook. I also added a scheduled cleanup job that removes old expired sessions from the database. Finally, I configured proper security headers, including a CSP. Public forms can still be embedded on external websites, while the rest of the CRM remains protected from being embedded elsewhere. Stay tuned, cause I still have lots to do :)"}, {"post_id": 14329, "ts": "2026-06-23T12:44:44Z", "hours": 5.6103, "text": "I continued working on this wonderful project. The first thing I implemented was the sidebar, designed as a reusable component. You can expand and collapse it to switch between icons only and icons with text. I also added a top bar, which contains the company name (top left), a search bar that will allow users to scan the entire database and quickly find what they’re looking for. I also added translations (2 languages for now), light and dark mode, notifications, and a profile section with the user’s name. Additionally, I implemented a simple dashboard with fake data to start shaping the overall user experience. Stay tuned."}, {"post_id": 13650, "ts": "2026-06-22T12:28:12Z", "hours": 8.3619, "text": "Still working on my project. It’s been really tough so far, I’m still on the backend, which is very hard. I feel lucky to have AI helping me; it would be really difficult without it. Honestly, it’s hard even with AI, so I lean on it a lot. I don’t think using AI is a negative: as long as you understand the code it writes and can modify, fix, and improve it, you’re fine. On the backend I’m currently working on the engine underneath, mainly the database relations. For example, the record table stores its fields generically (as JSON), so users can define whatever fields they want. The catch is that validating the data is on me, since the fields are dynamic, the database can’t enforce their shape, so it all has to be checked in code, mostly in the frontend. I’ve also started on the frontend: first by dockerizing it, then by adding the login form that exercises my backend."}, {"post_id": 11904, "ts": "2026-06-19T12:16:33Z", "hours": 5.9808, "text": "Started working on a very big project, called CRM. I hope you know what a CRM is, but for who doesn’t, a crm is basically an app, or maybe a dashboard, used by companies to keep track of their clients, employees and all this kind of things. It helps growing a company, with integrated tickets and so on. This app will be built in the following tech stack: Angular for the frontend, with daisyUI and tailwindCSS as graphical libraries Java Spring for the backend, able to manage correctly users, types and endpoints. I chose this over nestJS with prisma, because I want to have more control on the db. db, I have still to choose what I want and should use, because now I’m focusing on other things, like JWT auth, creation of users and entities and so on. My idea is to use this as a base, and then for maybe companies who needs it, I could like improve this, add requested features, and optimize everything. My current situation: I started the angular project, but I still have to install all libraries and update determined packages I created backend, and I’m currently focusing on auth (as you can see from the pic), with jwt sessions, users, entities, permissions and this kind of things. db, still in progress The application will be dockerized for best practice."}]...
|
Title: CRM by @F3rro_32 | Stardance
Devlogs:
Star Title: CRM by @F3rro_32 | Stardance
Devlogs:
Started working on a very big project, called CRM. I hope you know what a CRM is, but for who doesn’t, a crm is basically an app, or maybe a dashboard, used by companies to keep track of their clients, employees and all this kind of things. It helps growing a company, with integrated tickets and so on. This app will be built in the following tech stack: Angular for the frontend, with daisyUI and tailwindCSS as graphical libraries Java Spring for the backend, able to manage correctly users, types and endpoints. I chose this over nestJS with prisma, because I want to have more control on the db. db, I have still to choose what I want and should use, because now I’m focusing on other things, like JWT auth, creation of users and entities and so on. My idea is to use this as a base, and then for maybe companies who needs it, I could like improve this, add requested features, and optimize everything. My current situation: I started the angular project, but I still have to install all libraries and update determined packages I created backend, and I’m currently focusing on auth (as you can see from the pic), with jwt sessions, users, entities, permissions and this kind of things. db, still in progress The application will be dockerized for best practice.
Still working on my project. It’s been really tough so far, I’m still on the backend, which is very hard. I feel lucky to have AI helping me; it would be really difficult without it. Honestly, it’s hard even with AI, so I lean on it a lot. I don’t think using AI is a negative: as long as you understand the code it writes and can modify, fix, and improve it, you’re fine. On the backend I’m currently working on the engine underneath, mainly the database relations. For example, the record table stores its fields generically (as JSON), so users can define whatever fields they want. The catch is that validating the data is on me, since the fields are dynamic, the database can’t enforce their shape, so it all has to be checked in code, mostly in the frontend. I’ve also started on the frontend: first by dockerizing it, then by adding the login form that exercises my backend.
I continued working on this wonderful project. The first thing I implemented was the sidebar, designed as a reusable component. You can expand and collapse it to switch between icons only and icons with text. I also added a top bar, which contains the company name (top left), a search bar that will allow users to scan the entire database and quickly find what they’re looking for. I also added translations (2 languages for now), light and dark mode, notifications, and a profile section with the user’s name. Additionally, I implemented a simple dashboard with fake data to start shaping the overall user experience. Stay tuned.
Hey guys, this week was also about making the CRM feel more complete. Alongside several new features, I also spent a good amount of time improving security and fixing one particularly deceptive bug. First of all, I added a new global Calendar page that shows every record with a date in one monthly view. Events, tasks, reminders and subscription renewals are all displayed together, each with its own color. Before this, the calendar only existed inside each record type, so there wasn’t a way to see everything happening at once. I also integrated Cal.com. The booking page can now be embedded directly inside the CRM, and when someone books a meeting, a webhook automatically creates an Event record. If the meeting is rescheduled, the existing record is updated instead of creating a duplicate, and if it’s cancelled, the event is removed. To keep the integration secure, the webhook signature is verified using the raw request body instead of reserializing the JSON. I spent some time looking at features from Pipedrive, HubSpot and Attio, then implemented a few that I really liked. The Kanban board now shows the total value of each column, making it easy to see how much every stage of the pipeline is worth. I also added rotting, which highlights cards that haven’t been updated for more than two weeks so forgotten leads are easier to spot. Another big addition is public forms. Every record type can now expose a public form that can be shared with a link or embedded into any website. When someone submits it, a new record is created automatically and any related workflows are triggered. The feature also includes a honeypot for bots and per-IP rate limiting. Finally, I added a Trash Bin, allowing users to restore accidentally deleted records with a single click. I also added the ability to assign an owner directly from the record page. Passwords now follow the same rules everywhere in the application: at least 8 characters one uppercase letter one lowercase letter one number one special character. The backend enforces the policy, while the frontend shows a live checklist as the user types. I also added a Change Password page. When a password is changed, every other active session is logged out while the current one stays active. At one point login stopped working and always returned “Invalid credentials”. It turned out the password wasn’t the problem at all, the backend was stuck in a crash loop. A new database column was added as “not null” without a default value, so Hibernate couldn’t apply the change to an existing table. The application never finished starting, and the frontend showed a generic login error. I fixed the database manually, added a default value to the migration, and made a note for the future: every new “not null” column should always have a default value. After adding all these features, I went through another security pass. The rate limiter now also protects password changes and the Cal.com webhook. I also added a scheduled cleanup job that removes old expired sessions from the database. Finally, I configured proper security headers, including a CSP. Public forms can still be embedded on external websites, while the rest of the CRM remains protected from being embedded elsewhere. Stay tuned, cause I still have lots to do :)
Hey guys, I have stopped this project for a bit, but here I am again. I’m currently improving the CRM, mostly the security, which, for me, is one of the most important parts, and adding functionalities. Lately I focused on the mails. I added my smtp server, and in the backend, I managed all mails. Here is an example, with the invitation email. It’s in italian, but don’t worry, basically it invites you to the CRM, and then you can create your own account, with password. As you can see in the third screenshot, I can manage the invitation link, whether I want to invite an admin, or a simple employee.
Hey guys, I’m still working on this project, cause there are lots of things to do.Lately I focused on improving and adding things to the ObjectTypes. As you can see in the two images of the sidebar, I added like 10 fields. Among them, the most important are goals , basically contains the possibility of creating a goal, setting an owner, which is responsible for this goal (clearly depends on the situation), the actual goal and the period. Along with that you can set a metric, so if the goal is revenue , opportunities , leads , custom project_task , basically it contains the instruction for each member, on a certain project service_contract , the support, it contains the subject, the company which is referred to, start and end date, the actual status, so active , expiring , expired , terminated , hours spent and so on. Along with these and the other I didn’t cite here, I added 3 object for the sales, where this two are the most important: The first one is the supplier , it contains all the specs, so name, vat, email, phone, website, address, and eventual notes. The second one, the most important, is sales_order , which contains the subject, the number of the order, a relation with the company, and a relation with the contact, a relation with the quote (I don’t know if it’s right, in italian it’s called preventivo), the possibility of setting a status, so created , confirmed , shipped , closed , cancelled , the order date, a relation with the payment Method object, and all the financial part, so the subtotal, with maybe the discount, vat, the total and the infos for the shipping, billing and shipping address. I hope to finish this project asap, since it’s taking me so looong.See ya in the next devlogs
Hey guys, still on this project. This round was all about the stuff that sits on top of the modules, instead of new modules. Per-user formatting preferences . There’s a new “My preferences” page in the user menu. Every user picks how they want to see numbers and dates: thousands separator, decimal separator, currency (any ISO code, the symbol gets resolved automatically), how many decimals, whether the symbol goes before or after the number, and whether to cut trailing zeros. Same thing for the date format. There’s a live preview box that updates while you touch the selects, so you see 1.234,50 € turn into $ 1,234.5 as you change this. The setting applies everywhere, lists, record details and so on. Tags . These are cross-module, which is the whole point; a tag can sit on a lead and on a ticket. There are two kinds: shared ones, visible to the whole workspace, and private ones, which only you see. Each one has a color. You can attach and detach them from any record, and there’s a “all records with this tag” view that goes across modules, filtered by your permissions, so if you can see tickets but not opportunities, you only get the tickets.I did not build this as a field type, even though I already have a TAGS one. That one belongs to a single ObjectType with its own fixed options, so it gives you neither the shared catalog nor the cross-module search. Duplicate merge . You pick a module and it gives you back the candidate pairs, ranked by how similar their titles are (there’s a threshold you can move, default 0.6). Then you get the two records side by side and choose, field by field, which value survives. When you confirm: the winner keeps everything you picked, every relation that pointed at the loser now points at the winner, ids of the loser mentioned inside other records get rewritten too, including the ones stored in lists, notes and tags move over (and if the winner already had that tag, the duplicate link is dropped), the loser goes to the trash, not deleted. A wrong merge has to be recoverable, and I already have a bin, so I used it. Document numbering . Documents now number themselves. It’s configurable per module: prefix, whether to include the year, padding, separator. Right now it’s on for three of them: - quotes → 2025-47 - invoices → FT2025-0001 - tickets → TT643 The counter is per module and per year, and it’s locked while it’s being read, so two people creating a quote at the same time can’t get the same number. If you type a number by hand, yours wins, that matters when you’re entering an old document with its original number. On top of that, quotes have revisions. Revising 2025-13 gives you 2025-13_2 , a brand new document that links back to its parent, while the parent moves to the “revised” stage. And you can revise a revision, so 2025-13_2_2 works too, the counter is progressive per parent, not global, which took a bit more care than I expected. Next up is the big one: document lines. Quote → order → delivery note → invoice, with quantities, discounts and VAT per line. It’s the only part of this CRM that doesn’t fit the dynamic JSON engine everything else is built on, so it gets its own real tables. See ya in the next devlog, I hope you like the project. P.S. you’ll see the tag in the next devlog, I still have to implement the frontend
Hey guys, back on this project. Last time I said the next round was going to be document lines, my quote was “the only part of this CRM that doesn’t fit the dynamic JSON engine”. That’s what this round was, plus the report engine on top of it. Document Lines : One single table for all four documents: quote, sales order, delivery note, invoice. The line is exactly the samein all of them, the only thing that changes is the document holding it, and a document here is just a Record like any other, so there’s no type constraint on the line at all. A line can be a product line, a free text line (no amounts, just something to say in the middle of the document) or a subtotal. Two things get copied at save time: the description and the vat percentage. The math is its own class, DocumentLineCalculator, and it’s the one piece of this project I wanted testable completely on its own, because it’s the only place where a wrong rounding produces a wrong tax document. The order is fixed: gross = quantity × unit price discount = a percentage of the gross, or a flat amount net = gross - discount, rounded to 2 decimals here vat = net × rate, rounded line total = net + vat Rounding happens after the discount and after the vat, never on the unit price: round the unit price and the error gets multiplied by the quantity. Rounding mode is HALF_UP, which is the commercial rounding used here, not HALF_EVEN. And a flat discount bigger than the line itself gets clamped instead of producing a negative amount, since that’s a typo 100% of the time. Lines are always saved all together. The endpoint is a PUT that replaces the whole set. It deletes and rewrites instead of diffing row by row, because a document has a few dozen lines at most and the diff would cost more code than it’s worth. The reason for this rule is the totals: they depend on every line, so a partial save would leave the header and the lines disagreeing, even if only for a moment. The totals (subtotal, vatTotal, total) get written back into the document’s own JSON, plus the header level discount and shipping cost. They live there so they can be list columns you filter and sort on, which is the whole point of having them. Now I’m working on the dashboard graphs, widget and this kind of things.I hope you like the project. I’m sorry if I don’t have any screenshot of the working website, it’s because I focused only on the backend, the frontend of this part still needs to be written.
Hey guys, how it’s going? These days I’ve got quite a lot of work to do, since we’re in the middle of harvest season here in Italy, so I don’t have much time to work on the project. Unfortunately, today it rains, so I’m home, and I can spend some time on the PC. Lately I’ve been working a lot on the backend. The first two things I did are documents and document numbering : I created the model for document rows ( DocumentLine ), with its engine to calculate totals, including subtotals, discounts and VAT. I also added unit tests for the calculator. I also implemented automatic document numbering, so documents like quotes, invoices and tickets are automatically assigned a number when they’re created. Then I worked on quote revisions, with a new QuoteRevisionService to keep track of different versions of the same quote. Another thing I started working on is document conversion. The idea is to be able to convert a quote into an invoice, but this part is still a work in progress. I also spent quite a bit of time on reports and dashboards: added the Report model and the ReportEngine / ’ReportService` added default reports through a ReportSeeder created the Dashboard model, with tabs and widgets added the related controllers, services and repositories On the frontend side I’ve scaffolded the pieces for dashboards and widgets — the widgets/ and dashboard-tabs/ components exist and the dashboard and report services are written — but the components themselves are still empty shells. The data layer is ready, the screens aren’t written yet. That’s what I’ll pick up next. Another big thing I worked on is tags and data quality. I added the tag model and APIs, together with the services and repositories. I also started working on a duplicate finder and record merging system, so duplicate contacts/companies can be detected and merged instead of leaving messy data around. For PostgreSQL, I also enabled pg_trgm to improve fuzzy searches for duplicate detection. Finally, I added user preferences for number and date formats, including a live preview so users can immediately see how their chosen formats will look in the app. I’ve also added icons for the new modules. As you can probably tell, this was a very backend-heavy cycle. Almost everything I built this time: document lines, numbering, quote revisions, reports, dashboards, tags and duplicate detection lives in the models and the services, and the UI for most of it isn’t there yet. So this time there isn’t much to show in screenshots: the engine is in place, the screens come next. I’d rather get the model right first and build the interface on top of something solid than the other way around. Hopefully I’ll be able to find some more time to work on it after harvest, so see you in a while.
Hey guys, how’s going? Soon school is going to start for me, but luckily it’s my last year in high school, so I’m really happy about this. Lately I had much time to code, so I continued working on this project. Last devlog was all backend; I said the engine was there and the screens weren’t. This time it’s quite the opposite. I didn’t really touch the backend, I spent the last 5-6 hours writing the frontend. Here’s the details of what I did: Document lines the grid is finally in the record detail. You can add lines, set quantity, price, discount and VAT, additionaly with the subtotal / VAT / total block, that updates while you type. When you save, the whole set of lines is sent at once. Tags I added the tag picker on the record detail, so you can attach and remove tags from a record as you wish. I also made the page that shows every record with a given tag, from all the modules together. Duplicates The duplicate finder now has its own screen: you choose a module, you get the pairs it thinks are duplicates, and the you see the two records side by side and pick field by field which value to keep before merging them. Reports There’s a page to build a report with a wizard (rows, columns, metrics, filters) and a preview that shows you the result before saving it. Dashboard widgets This is the main thing of this cycle. I wrote all six widget types, which are: - KPI tile - split KPI tile - chart - table - pivot - record list A widget is just a saved report query plus the type of rendering you want, so it runs on the report engine. Dashboards with tabs You can create a dashboard, add tabs to it and put widgets inside, so you can keep for example sales and support separated from each other. Sidebar and topbar The sidebar now has the routes for all the new pages, and the topbar has a quick-create button to make a record from anywhere without opening its module first. Two things are still not nice and I’m aware: in some places the relation fields show the raw id instead of the name of the record, and the totals of the document lines are not formatted with the user preferences yet, so you read 9054.00 instead of 9.054,00 EUR. Both are small and both are on the list to be improved. Now I’m working on the PDF generator See you, I hope you enjoy this project
Hey guys, how’s it going? I hope you’re all doing well. School started here in Italy, so I have less time compared to August. I also have to get my driver’s license, so I’m studying for that too. Unfortunately, coding isn’t the first thing I do every day anymore. I’m still working on the PDF generator. Last time I mentioned that relation fields were showing raw IDs and that document totals weren’t formatted properly. I fixed both of those, but I’ll get back to them later. About the PDF The template is HTML, and it lives in the DB. I didn’t hardcode the layout in Java. I created a PdfTemplate entity that stores the HTML, page size and margins. There is one default template for each document type: quote, order, delivery note and invoice. Thymeleaf fills the template with the document data, and OpenHTMLToPDF + PDFBox generate the PDF. Since the HTML is provided by the user, I also had to think about security. A template could try to load something like file:///etc/passwd or access an internal URL. Because of this, external protocols are disabled and only data: URIs are allowed. Page sizes are also checked against a whitelist. I also had to deal with the fact that HTML isn’t always valid XML. OpenHTMLToPDF expects XML, so I use jsoup to normalize the HTML first. Otherwise, perfectly normal HTML can cause a SAXParseException . And finally, fonts have to be embedded in the PDF. Without including DejaVu Sans in the jar, the PDF doesn’t render correctly. VAT summary I also worked on the VAT summary. Lines are grouped by VAT rate, shipping is added to the highest rate, and the document discount is distributed across the rates instead of being applied at the end. VAT is then calculated on the discounted amounts, so everything adds up correctly: taxable + VAT = total This actually fixed a bug where VAT was calculated before applying the document discount. It wasn’t very obvious until I started testing it with real numbers. Three endpoints The PDF system now has three endpoints: print a document preview a template print a batch For the preview, instead of creating a fake document, I use the last real document of that module. This way there is only one PDF generation system to maintain. The batch endpoint combines multiple documents into one PDF, while checking permissions for every document. A few other fixes The two ugly things from last time are also gone. Relation titles are now resolved by a shared backend service, so instead of UUIDs you see things like the company name. The same service is used by the lists, detail pages and PDFs. Amounts in the PDF are also formatted using the user’s preferences. I also added tags to the record lists. Tags are resolved in bulk instead of doing a permission check for every single row, which makes a big difference on larger lists. The backend part is basically done for this cycle. The print button and template editor are already written, but they’re not wired up yet. Right now I’m still using the API to test the generator. So, UI is next. See you in the next devlog!
Hey guys, how have you been doing lately? I’m alright. I’m still getting my driver license, so I don’t have much time to code. Last devlog was all about the PDF engine on the backend, and I closed it saying that the UI was next. Here it is: Print button : I added a print button Print PDF on quotes, orders, delivery notes and invoices. The file is downloaded with the document number as its name, so you get for example 2025-47.pdf and not just document.pdf Template editor : I also added to settings a new tab called “Print”. On the left there’s the list of templates, on the right the HTML, the page size and the margin. The preview renders the last real document of that module instead of a fake one, so what you can see is exactly what your customer receives. The default templates can’t be edited you duplicate them: the seeder rewrites them at every boot, so any change would silently disapper on the next restart. I preferred to say it in the interface rather than let someoune lose an afternoon of work. Company data : The company settings now hold also the legal name, VAT number, tax code, address and contact line. That’s what the PDF header prints, and without them the header comes out empty. VAT that adds up to the cent The header discount is spread across the VAT rates and every share gets rounded, so the sum of the shares could end up one or two cents away from the total. On a quote nobody would ever notice. On an electronic invoice it’s rejection 00423. Now the rounding leftover goes on the last rate, so taxable + VAT = total, always. Tests on a real db : The report engine builds SQL at runtime, and mocking a database proves nothing, so its tests now start a throwaway Postgres in Docker and run against it: filters, grouping, ordering and counting. Two bugs closed : Merging two records didn’t look at the bin, so a deleted record could be merged into a live one. And editing a saved report answered 405, because the frontend was sending PUT to an endpoint that only has POST. Right now I’m working on the 2FA (for those who don’t know, the 2 factor auth). I’m writing the TOTP myself instead of pulling in a library: it’s an HMAC-SHA1 of the 30 second counter, and the six digits come out of the dynamic truncation described in the RFC. The secret is encrypted in the database with AES-GCM, because someone who can read the db must not be able to generate the codes, otherwise a second factor is just a second password. There are ten recovery codes, stored hashed and usable once each, and the last accepted counter is saved, so the same code can’t be replayed during its 30 seconds. The tests are the official RFC 6238 vectors: a TOTP written at home always “works” until you compare it with a real auth app, and at that point it’s too late to find out. Two things I know are missing: the second factor has no interface yet, there’s no page to scan the QR code from, and the mailbox that turns incoming emails into tickets is only half written. See you soon, the end of this project is near.
Hey guys, how’s everything going? I’m alright. I’m so glad hackclub postponed the end of stardance, I have still another month to 1. finish this project 2. do other projects I had on my mind for such a long time. Before doing this devlog, I had to use claude to debug my work, because I had some errors I didn’t understand (I was using a class created for a test in the normal “code”), so bad :( and also other small issues. Lately I worked on one of the most significat features for me, which is 2FA . As my network teacher says "zero trust, because the world is a place full of bastards" . 2FA is one of the techniques I use to follow this approach. Basically, now you can press “Enable” in your preferences, scan the QR code with any authenticator app (f.e google), or just type the secret by hand, because half the people can’t frame a QR code at the first time, lol. You also have to confirm with a code. At login, if 2FA is on, there’s a second step for the six digits. You also get ten recovery codes that you can copy or download, shown only once. Turning it off asks for your password, so a stolen open session can’t remove this precaution. You’re probably wondering: are the secrets encrypted? Yes, they are. I mostly use AES-GCM, because it’s pretty simple, but also secure, so it’s the better compromise. The TOTP secret and the mailbox passwords are stored encrypted with AES-GCM. The key lives in an env variable, not in the db, so a database dump alone isn’t enough to generate codes or read someone’s email. I also turned the crm in a PWA . You can install it on your phone or desktop, it has its own icon and window, and when I deploy a new verion, it tells you to reload, instead of silently serving you the old one from cache (it also checks every 6 hours, maybe I’m gonna change it to 10, idk, for the tab you leave open for days) Like in every other devlog, I made some tests and updated the docs. The report engine now has tests against a real Postgres started in docker, and the repo finally has a real README (it’s not finished, just with some basic information, claude, thanks for the suggestion of making it). Oh, I nearly forgot. I also worked on emails. Now I’m currently working on the Italian electronic invoice, which is called FatturaPA. The crm builds the XML from an invoice, and the first test I wrote checks it against the official government XSD: if it doesn’t pass, it isn’t saved. I think I’m gonna study a bit of english / american law, to allow people out of Italy to use this app as well. I hope you like my product, see you soon
Hey guys, how’s going? I have plenty of things to do, but coding is still one of my favorite activities, so I always try to save some time for it.This time I worked again on FatturaPA, which is the Italian electronic invoice.What I did, is that now, first of all, the CRM can now generate the FatturaPa XML directly from an invoice and validate it against the official XSD, before saving it. I also added the whole invoice lifecycle, from draft, to setn, delivered, accepted or rejected. The CRM can read the recepits from the SDI and show ufseful information when something goes wrong.Another important change is that invoices now become locked once they’re sent to the SDI. If something needs to be changed, the correct way is to create a credit note instead. This is much efficient in my opinion.I also started working on the SDI integration itself. For now there’s only a manual transport, but the system is built so that adding an actual provider later shouldn’t require changing the rest of the CRM. I did it this way, so I can decide which provider use, and not have to change everything.Besides invoicing, I added time tracking. You can start a timer from the top bar and see your hours directly on records. Timers also automatically close after a maximum amount of time, so nobody ends up with a 80-hour ticket because they forgot to stop it.Finally, I worked on email campaigns. You can create a campaign from a saved filter, send emails through a queue and manage unsubscribes. I also added some protections against things like open redirects and accidental unsubscribes.And now, the honest part: before writing this devlog, I ran the tests and guess what, the app didn’t even start.I used claude for debugging, cause I wans’t finding the error. Silly me, it was just a typo.
Hey guys, how’s everythings going? I’m doing pretty well. As always I have lots of things to do, but I still have plenty of time for coding. School is demanding, and preparing for my driving license is also tough, but I’m managing everything little by little. Last time I ended up with an app that wouldn’t even start. Luckily, I fixed all those errors, and all 258 tests are now green and passing on the PostgreSQL db. After that, I added new features. First of all I worked on NPS surveys and quote acceptance. Customers can now receive surveys and answer them through a public link. They can also accept quotes directly from a link, without needing an account. I also made sure these features work with the existing workflows, so automations can still do their job properly. Another interesting addition is the MCP server. AI agents can now interact with the CRM through an API key. Instead of creating a separate set of tools for every module, I went with seven generic tools that can work across all 34 modules. This should make it easier for AI models to understand which actions they can perform, while keeping the CRM’s existing permissions and security rules in place. I also improved search quite a bit. Before, it mostly looked at record titles. Now it uses PostgreSQL full-text search to find relevant information inside the actual record data and rank the results. The audit history is also much easier to read, with related record IDs replaced by their actual titles. I worked on a couple of smaller but important things, too. The trash can now properly handle related files and records when permanently deleting something, while protecting fiscal documents that must be kept for ten years. Finally, I started working on the customer portal. It now has its own backend authentication and permission system, separate from the employee login. Customers will only be able to access records they’re actually allowed to see. The backend is ready, but I still need to connect the frontend pages and routes. There’s still quite a bit to do, but I’m getting closer to the first complete version of the CRM. See you in the next devlog!
Hey guys, how’s going? This will be a short devlog, and it’s the one before the shipping. I decided to ship the CRM, even if it’s not completely finished. That’s because I still have to do lots of things, but now I have a working product, so, since the changes I have to make are complementary. Unfortunately, I have a big issue: the whole interface is in Italian. The app is made for Italian small businesses (FatturaPA, VAT, SDI…), but if you come from Stardance you can’t read a single menu. Real i18n is still on my list and it is a big job, so for now I added the Google Translate widget in the corner of the app. If your browser is in English it starts translating by itself, otherwise you pick English from the selector. It’s not pretty, but it makes the demo usable today instead of “someday”. I had to widen the CSP in nginx for it, and I loaded the script as an external file so I didn’t need a second hash. I also fixed the README and cleaned the repo. Now everything should work fine, or at least let’s hope so. I hope you enjoy the product.
Hey guys, what’s up? I’m finally in the last phase of getting my driving license, so that’s taking up some of my time too. The CRM is now online at crm.alessio.hackclub.app . The VPS has very little RAM, so I build the Docker images locally and transfer them to the server using docker save over SSH. It’s not the fanciest deployment process, but it works with the resources I have, so I’ll stick to it for now. One of the main things I worked on was the customer portal . The backend from last week finally has a frontend: customers can log in, see their tickets and documents, open requests, reply to messages, download PDFs and accept quotes. I also made sure that internal notes stay internal. Notes now have a Visible to customer checkbox, which is disabled by default. The portal only shows notes explicitly marked as visible, so there’s less risk of accidentally exposing something that should stay private. Another feature I added is Google Calendar import . It’s read-only for now, so the CRM can import events without modifying anything in your Google account. Events are created through the same service as normal CRM records, meaning workflows and the audit log still work as expected. Sync runs every 15 minutes, and if something goes wrong with an account, it won’t stop the others from syncing. I also started replacing the Google Translate workaround with proper internationalization (i18n). The translation system is in place, including support for parameters and locale-aware dates and numbers. The dictionary is type-checked, too, so missing English translations can be caught at compile time. There’s still a lot of work here: around 1,200 strings need to be translated by hand. It’s not the most exciting task, but I’d rather have proper translations than rely on Google Translate forever. Obviously that’s my opionion. I also started working on public registration, but it’s not ready yet. There’s one important limitation: the CRM currently has a single shared workspace, so everyone who registers would see the same data. Registration will stay disabled unless explicitly enabled until I decide how to handle that properly. That’s because the idea is to have 1 single DB for each workspace, since the CRM should be self-hosted. There’s still work to do, but the CRM is getting closer to the version I wanted to ship. See you in the next devlog!
Ships:
CRM An open-source CRM for Italian small businesses: contacts, companies, leads, quotes, orders, invoices with VAT, tickets, email campaigns, NPS surveys, reports and a customer portal. It started as a way to manage clients for a friend’s startup and became a working and valuable project. TRY IT (no install) https://crm.alessio.hackclub.app email: [email protected] password: HackClub-Demo-2026! The demo has full access and realistic fake data, so feel free to click everything, create, edit and delete. The data resets occasionally. Outgoing email is switched off on the demo. HEADS UP: the interface is in Italian. Use the translate widget in the corner of the app (or your browser’s translator) to read it in English. Real i18n is on my roadmap, sorry! WHAT TO LOOK AT A quote with line items, discounts and VAT by rate, and the “Print PDF” button. PDFs come from HTML templates you can edit, with a live preview on your last real document. A customer accepting a quote from a signed link, without an account. Full-text search across every module (PostgreSQL). Italian e-invoicing: it builds the FatturaPA XML and validates it against the official government XSD before saving. Invoices lock once sent to the SDI. The MCP server: an AI assistant can use the CRM through an API key, with seven generic tools that work on all 34 modules and respect permissions. 2FA (TOTP) with recovery codes, secrets encrypted at rest, installable PWA. HOW IT WORKS There is no “contacts” or “companies” table. One generic Record entity stores its fields in a jsonb column, and an ObjectType + FieldDef describe each module (39 field types). Adding a module is a configuration record, not a migration or a new controller. Permissions are checked per module and action at runtime. You can have more info in the README, so please check it. I hope you appreciate this project :)...
|
1793199114.023006
|
1793285514.023006
|
|
65217
|
AmateurFriction by @amateur_tech_guy | Stardance
|
amateur_tech_guy
|
0
|
24.01
|
0
|
[]
|
[{"post_id": 81466, "ts": "202 [{"post_id": 81466, "ts": "2026-10-21T11:24:35Z", "hours": 3.3531, "text": "final devlog: happy to announce this project is done! i submitted it to phantom so i will not be submitting it to stardance."}, {"post_id": 78178, "ts": "2026-10-09T21:39:31Z", "hours": 4.5606, "text": "devlog #2: been working on the header, the form and the help page, anyways theres a bit more to fix like making the form look good and the help button and then i can finally move on to the final step, making the AI responsive"}, {"post_id": 73945, "ts": "2026-09-26T11:54:15Z", "hours": 16.095, "text": "devlog #1: been so busy lately, first devlog in a long long time anyways i started small i wish i could do more to make it look better but unfortunately i lack time:( how yall been tho?"}]...
|
Title: AmateurFriction by @amateur_tech_guy | Star Title: AmateurFriction by @amateur_tech_guy | Stardance
Devlogs:
devlog #1: been so busy lately, first devlog in a long long time anyways i started small i wish i could do more to make it look better but unfortunately i lack time:( how yall been tho?
devlog #2: been working on the header, the form and the help page, anyways theres a bit more to fix like making the form look good and the help button and then i can finally move on to the final step, making the AI responsive
final devlog: happy to announce this project is done! i submitted it to phantom so i will not be submitting it to stardance....
|
1793084117.7690842
|
1793688917.7690842
|
|
17432
|
Sleepy OS by @sriyank | Stardance
|
sriyank
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T16:28:49Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a os that is personalized to me i chose a hobby that i like to do sleeping and based the theme of that, as you can see i have also used js for the logic behind the dragging of the windows and pictures thank you.", "repo": "https://github.com/SasukeUchiha12309876/Sleepy-OS", "demo": "https://sleepy-os.vercel.app/"}]...
|
[{"post_id": 8146, "ts": "2026 [{"post_id": 8146, "ts": "2026-06-13T16:15:35Z", "hours": 0.5328, "text": "i believe that i am done i dont think i will go all out for this project though i will slowly gget into the flow but for now i will submit what i habve the update i made today is a dragable window and closable windo of a picture"}, {"post_id": 7869, "ts": "2026-06-13T03:52:03Z", "hours": 0.9389, "text": "Now i made some good progress with a app and a taskbar"}, {"post_id": 7689, "ts": "2026-06-12T20:51:11Z", "hours": 0.4464, "text": "Right now i just finished on the background for the os now i am going to start on the taskbar"}]...
|
Title: Sleepy OS by @sriyank | Stardance
Devlogs: Title: Sleepy OS by @sriyank | Stardance
Devlogs:
Right now i just finished on the background for the os now i am going to start on the taskbar
Now i made some good progress with a app and a taskbar
i believe that i am done i dont think i will go all out for this project though i will slowly gget into the flow but for now i will submit what i habve the update i made today is a dragable window and closable windo of a picture
Ships:
I created a os that is personalized to me i chose a hobby that i like to do sleeping and based the theme of that, as you can see i have also used js for the logic behind the dragging of the windows and pictures thank you....
|
1793119892.291011
|
1793206292.291011
|