|
21464
|
OpenCV Gesture Based Online Arcade by @anushkaa | OpenCV Gesture Based Online Arcade by @anushkaa | Stardance...
|
anushkaa
|
1
|
31.0
|
502
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T19:22:32Z", "hours": 31.0, "multiplier": 16.45, "payout": 502, "blessing": "neutral", "text": "Built a hand gesture controlled arcade where you play games using just your webcam! Three games: Hand Pong, Space Shooter and Snake, each using a different gesture. Started in Python with OpenCV and MediaPipe, rebuilt in JavaScript so it runs in the browser with no downloads needed. Not the smoothest or best arcade ever but definitely built with a lot of struggle and I’m still working on making it better everyday! Learned both languages from scratch during this project. The hardest part was getting MediaPipe working in the browser, went through four different CDN links before finding one that worked!", "repo": "https://github.com/anushkabasu/gesture-arcade-web", "demo": "https://anushkabasu.github.io/gesture-arcade-web/"}]...
|
[{"post_id": 32453, "ts": "202 [{"post_id": 32453, "ts": "2026-07-21T17:30:33Z", "hours": 0.5886, "text": "Devlog 03 — Fixing, Tuning and Ready to Ship What I Fixed This Session Spent this session purely on debugging and tuning. No new features — just making everything feel right. Snake controls — went through three different control schemes. Tried fist tilt, tried swipe gestures, finally landed on index finger pointing. The snake steers toward wherever your finger is pointing relative to the snake’s head. Tiny finger movements don’t accidentally change direction: const dist = Math . sqrt ( dx * dx + dy * dy ) if ( dist > CELL * 3 ) { } Space Shooter — enemies were spawning too slowly and too late. Fixed spawn timer to start at 999 so enemies appear immediately, and doubled the spawn rate. Waves feel much more intense now. Instructions — Added the instructions page correctly so anyone can click [I] to understand required gestures. Mirror flipping — cursor and menu hover were using inconsistent coordinate systems. Unified everything so palmX is flipped once at the source and all games use the same value. What the Project Is Now A fully browser-based hand gesture arcade with three games: Hand Pong — palm height controls your paddle Space Shooter — palm position aims, pinch fires Snake — point your index finger to steer No downloads. No installs. Just a webcam and a browser. Shipping Pushing to GitHub Pages today. Anyone with a webcam can play instantly at the live URL. Finally ready to ship!"}, {"post_id": 32340, "ts": "2026-07-21T13:26:49Z", "hours": 10.1625, "text": "Devlog 02 - Rebuilding Gesture Arcade for the Web The Big Decision Scrapped the entire Python version and rebuilt from scratch in JavaScript. Python with pygame cannot run in a browser, and without a live demo URL Stardance reviewers can’t try the project. The whole point is gesture control — and that needs a webcam running locally. Only solution was JavaScript. Problem? I had never written it before. Learning JavaScript from Scratch Coming from Python the syntax felt familiar but the logic was completely different. Hardest part was MediaPipe. In Python it’s 2 lines: import mediapipe as mp hands = mp . solutions . hands . Hands () In JavaScript it’s a whole async setup that took me forever to get right: const fs = await FilesetResolver . forVisionTasks ( \" https://cdn.jsdelivr.net/npm/@mediapipe/ [email protected] /wasm \" ) const hl = await HandLandmarker . createFromOptions ( fs , { baseOptions : { modelAssetPath : \" ... \" }, numHands : 1 , runningMode : \" VIDEO \" }) Went through 4 different CDN links before finding one that worked. CORS errors, 404s, wrong module formats — been through everything. Eventually got it working with Skypack. How the Hand Tracking Works Every frame the camera captures an image, MediaPipe finds 21 landmark points on your hand, and I calculate useful values from those points: hand . palmX = ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 hand . palmY = ( lm [ 0 ]. y + lm [ 5 ]. y + lm [ 9 ]. y + lm [ 13 ]. y + lm [ 17 ]. y ) / 5 const dx = lm [ 4 ]. x - lm [ 8 ]. x const dy = lm [ 4 ]. y - lm [ 8 ]. y hand . pinching = Math . sqrt ( dx * dx + dy * dy ) < 0.07 const up = [ lm [ 8 ]. y < lm [ 6 ]. y , lm [ 12 ]. y < lm [ 10 ]. y , lm [ 16 ]. y < lm [ 14 ]. y , lm [ 20 ]. y < lm [ 18 ]. y ] hand . fist = up . every ( f => ! f ) All 3 games share the same hand object that gets updated every single frame. Bugs I Ran Into Mirror flipping — spent ages debugging why the cursor moved the wrong way. Camera captures a mirrored image so moving right makes x go in the -x direction. Fixed by flipping palmX at the source: hand . palmX = 1 - ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 CDN failures — MediaPipe’s official CDN kept returning 404. Tried jsdelivr, unpkg, and two others before Skypack worked. Module type errors — JavaScript modules need type=\"module\" on the script tag otherwise imports don’t work at all. What Needs Fixing Next Space Shooter — not enough enemies spawning, waves feel too sparse. AI enemies too aggressive, players can’t score enough Hand Cursor — white circle cursor looks too similar to the pong ball, confusing during gameplay. Needs a better indicator GitHub Pages — need to push everything live so there’s an actual demo URL"}, {"post_id": 24213, "ts": "2026-07-07T17:05:18Z", "hours": 5.6992, "text": "Devlog 2.01 - Building the Web Version of Gesture Arcade What I worked on today Rebuilt the entire Gesture Arcade frontend from Python and Pygame to a fully web-based version using HTML, CSS, and JavaScript! This was a big decision and here’s why I made it… Why I switched from Python -> Web The Python version runs almost perfectly as a desktop app (that’s a lie, I’ve been struggling a bit with one of the games) but cannot be played in a browser! Gesture control requires webcam access which Python/Pygame cannot expose over the internet. A browser version means -> anyone with a webcam can play instantly! An ‘.exe’ limits who can actually try it. This also counts as an extended Python version. So, consider this an improvement on the last version. Here on, I’m going to refine the UI/UX, basic gameplay, better my logs, and finish this in a better error-less manner. Ignore all logs till now, it’s only about to get better! What I built today Retro monospace homepage in HTML/CSS. (Screenshot attached) Integrated MediaPipe Hand Landmarker via JavaScript for real-time hand tracking. Challenges I ran into MediaPipe CDN kept returning 404 errors (went through about 4 different CDN links before finding one that worked) ‘type=“module”’ was required for the import to work correctly. What’s Next Build Hand Pong in JavaScript using HTML5 Canvas(??) Connect hand tracking to paddle movement. Add all 4 games one by one. Host on GitHub Pages for a live URL. Tech Stack HTML + CSS + JavaScript MediaPipe Tasks Vsion 0.10.3. Skypack CDN for module imports."}, {"post_id": 19407, "ts": "2026-06-30T18:35:44Z", "hours": 7.1633, "text": "Snake game added! Finished making the Snake game for the arcade! It’s working, but I don’t think it’s where I want it to be yet. Right now the controls use fist direction, but I’m thinking of switching to palm direction instead because I feel like it’d be more smooth to play. I also haven’t fully figured out optimizing for different screen sizes yet, and the grid still needs some work so gameplay feels more consistent across displays. Visually, I want to tweak the snake design a bit too and make it feel less placeholder and more polished. Still a bunch of things to improve, but honestly every game has been teaching me something new and I’m slowly figuring things out as I go :)"}, {"post_id": 14288, "ts": "2026-06-23T10:51:09Z", "hours": 3.1236, "text": "Small Update - I’m sort of done making Pong! The paddle on your side is controlled by how far or low you position your palm in front of the camera. It definitely doesn’t work as well as I want it to yet 😭🙏 but getting the basic gameplay running feels like a milestone! Right now I’m trying to improve responsiveness, fix weird behavior, and generally figure out as I go. Still lots to improve, but one game down and have learnt a ton. :D"}, {"post_id": 13831, "ts": "2026-06-22T17:43:08Z", "hours": 3.9269, "text": "OpenCV Hand Gesture Controlled Gaming Arcade 🎮 Hi! I’m currently building a hand gesture controlled gaming arcade using OpenCV! I’m still pretty new to programming, so this project doesn’t involve a lot of fancy or advanced programming, I’m using it as a way to learn and understand Python. I’ve been reading a lot of documentation, experimenting, failing, and debugging, more than I’d like to admit. To help plan everything out, I also made a simple flowchart to map the project structure and workflow. I’ve attached it as an image. The current plan is to include these four games: Hand Pong Fruit Ninja Space Shooter Snake Here’s the homepage I’ve made. Along with a popup instructions panel. If anyone has suggestions on libraries/ references I should use, please let me know."}]...
|
Title: OpenCV Gesture Based Online Arcade by @anus Title: OpenCV Gesture Based Online Arcade by @anushkaa | Stardance
Devlogs:
OpenCV Hand Gesture Controlled Gaming Arcade 🎮 Hi! I’m currently building a hand gesture controlled gaming arcade using OpenCV! I’m still pretty new to programming, so this project doesn’t involve a lot of fancy or advanced programming, I’m using it as a way to learn and understand Python. I’ve been reading a lot of documentation, experimenting, failing, and debugging, more than I’d like to admit. To help plan everything out, I also made a simple flowchart to map the project structure and workflow. I’ve attached it as an image. The current plan is to include these four games: Hand Pong Fruit Ninja Space Shooter Snake Here’s the homepage I’ve made. Along with a popup instructions panel. If anyone has suggestions on libraries/ references I should use, please let me know.
Small Update - I’m sort of done making Pong! The paddle on your side is controlled by how far or low you position your palm in front of the camera. It definitely doesn’t work as well as I want it to yet 😭🙏 but getting the basic gameplay running feels like a milestone! Right now I’m trying to improve responsiveness, fix weird behavior, and generally figure out as I go. Still lots to improve, but one game down and have learnt a ton. :D
Snake game added! Finished making the Snake game for the arcade! It’s working, but I don’t think it’s where I want it to be yet. Right now the controls use fist direction, but I’m thinking of switching to palm direction instead because I feel like it’d be more smooth to play. I also haven’t fully figured out optimizing for different screen sizes yet, and the grid still needs some work so gameplay feels more consistent across displays. Visually, I want to tweak the snake design a bit too and make it feel less placeholder and more polished. Still a bunch of things to improve, but honestly every game has been teaching me something new and I’m slowly figuring things out as I go :)
Devlog 2.01 - Building the Web Version of Gesture Arcade What I worked on today Rebuilt the entire Gesture Arcade frontend from Python and Pygame to a fully web-based version using HTML, CSS, and JavaScript! This was a big decision and here’s why I made it… Why I switched from Python -> Web The Python version runs almost perfectly as a desktop app (that’s a lie, I’ve been struggling a bit with one of the games) but cannot be played in a browser! Gesture control requires webcam access which Python/Pygame cannot expose over the internet. A browser version means -> anyone with a webcam can play instantly! An ‘.exe’ limits who can actually try it. This also counts as an extended Python version. So, consider this an improvement on the last version. Here on, I’m going to refine the UI/UX, basic gameplay, better my logs, and finish this in a better error-less manner. Ignore all logs till now, it’s only about to get better! What I built today Retro monospace homepage in HTML/CSS. (Screenshot attached) Integrated MediaPipe Hand Landmarker via JavaScript for real-time hand tracking. Challenges I ran into MediaPipe CDN kept returning 404 errors (went through about 4 different CDN links before finding one that worked) ‘type=“module”’ was required for the import to work correctly. What’s Next Build Hand Pong in JavaScript using HTML5 Canvas(??) Connect hand tracking to paddle movement. Add all 4 games one by one. Host on GitHub Pages for a live URL. Tech Stack HTML + CSS + JavaScript MediaPipe Tasks Vsion 0.10.3. Skypack CDN for module imports.
Devlog 02 - Rebuilding Gesture Arcade for the Web The Big Decision Scrapped the entire Python version and rebuilt from scratch in JavaScript. Python with pygame cannot run in a browser, and without a live demo URL Stardance reviewers can’t try the project. The whole point is gesture control — and that needs a webcam running locally. Only solution was JavaScript. Problem? I had never written it before. Learning JavaScript from Scratch Coming from Python the syntax felt familiar but the logic was completely different. Hardest part was MediaPipe. In Python it’s 2 lines: import mediapipe as mp hands = mp . solutions . hands . Hands () In JavaScript it’s a whole async setup that took me forever to get right: const fs = await FilesetResolver . forVisionTasks ( " https://cdn.jsdelivr.net/npm/@mediapipe/ [email protected] /wasm " ) const hl = await HandLandmarker . createFromOptions ( fs , { baseOptions : { modelAssetPath : " ... " }, numHands : 1 , runningMode : " VIDEO " }) Went through 4 different CDN links before finding one that worked. CORS errors, 404s, wrong module formats — been through everything. Eventually got it working with Skypack. How the Hand Tracking Works Every frame the camera captures an image, MediaPipe finds 21 landmark points on your hand, and I calculate useful values from those points: hand . palmX = ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 hand . palmY = ( lm [ 0 ]. y + lm [ 5 ]. y + lm [ 9 ]. y + lm [ 13 ]. y + lm [ 17 ]. y ) / 5 const dx = lm [ 4 ]. x - lm [ 8 ]. x const dy = lm [ 4 ]. y - lm [ 8 ]. y hand . pinching = Math . sqrt ( dx * dx + dy * dy ) < 0.07 const up = [ lm [ 8 ]. y < lm [ 6 ]. y , lm [ 12 ]. y < lm [ 10 ]. y , lm [ 16 ]. y < lm [ 14 ]. y , lm [ 20 ]. y < lm [ 18 ]. y ] hand . fist = up . every ( f => ! f ) All 3 games share the same hand object that gets updated every single frame. Bugs I Ran Into Mirror flipping — spent ages debugging why the cursor moved the wrong way. Camera captures a mirrored image so moving right makes x go in the -x direction. Fixed by flipping palmX at the source: hand . palmX = 1 - ( lm [ 0 ]. x + lm [ 5 ]. x + lm [ 9 ]. x + lm [ 13 ]. x + lm [ 17 ]. x ) / 5 CDN failures — MediaPipe’s official CDN kept returning 404. Tried jsdelivr, unpkg, and two others before Skypack worked. Module type errors — JavaScript modules need type="module" on the script tag otherwise imports don’t work at all. What Needs Fixing Next Space Shooter — not enough enemies spawning, waves feel too sparse. AI enemies too aggressive, players can’t score enough Hand Cursor — white circle cursor looks too similar to the pong ball, confusing during gameplay. Needs a better indicator GitHub Pages — need to push everything live so there’s an actual demo URL
Devlog 03 — Fixing, Tuning and Ready to Ship What I Fixed This Session Spent this session purely on debugging and tuning. No new features — just making everything feel right. Snake controls — went through three different control schemes. Tried fist tilt, tried swipe gestures, finally landed on index finger pointing. The snake steers toward wherever your finger is pointing relative to the snake’s head. Tiny finger movements don’t accidentally change direction: const dist = Math . sqrt ( dx * dx + dy * dy ) if ( dist > CELL * 3 ) { } Space Shooter — enemies were spawning too slowly and too late. Fixed spawn timer to start at 999 so enemies appear immediately, and doubled the spawn rate. Waves feel much more intense now. Instructions — Added the instructions page correctly so anyone can click [I] to understand required gestures. Mirror flipping — cursor and menu hover were using inconsistent coordinate systems. Unified everything so palmX is flipped once at the source and all games use the same value. What the Project Is Now A fully browser-based hand gesture arcade with three games: Hand Pong — palm height controls your paddle Space Shooter — palm position aims, pinch fires Snake — point your index finger to steer No downloads. No installs. Just a webcam and a browser. Shipping Pushing to GitHub Pages today. Anyone with a webcam can play instantly at the live URL. Finally ready to ship!
Ships:
Built a hand gesture controlled arcade where you play games using just your webcam! Three games: Hand Pong, Space Shooter and Snake, each using a different gesture. Started in Python with OpenCV and MediaPipe, rebuilt in JavaScript so it runs in the browser with no downloads needed. Not the smoothest or best arcade ever but definitely built with a lot of struggle and I’m still working on making it better everyday! Learned both languages from scratch during this project. The hardest part was getting MediaPipe working in the browser, went through four different CDN links before finding one that worked!...
|
1793127056.8839183
|
1793213456.8839183
|
|
23455
|
KingOS 95 by @Wirenux | Stardance
|
Wirenux
|
2
|
31.0
|
405
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T16:51:29Z", "hours": 10.0, "multiplier": 15.75, "payout": 163, "blessing": "neutral", "text": "KingOS 95 The C&A certified 32-bit workstation built for trapped souls ⎛⎝( ` ᢍ ´ )⎠⎞ᵐᵘʰᵃʰᵃ What did you make? For my second ship, I’ve massively expanded KingOS 95! If you missed the first one, it’s a web-based OS built entirely with vanilla HTML, CSS, and JS, inspired by Windows 95 and the lore of The Amazing Digital Circus (I recommend you to go see the 1st Ship). In this update, I’ve mainly add customization option. Here is what’s new: AMI-Like BIOS & Boot Sequence: The OS now actually “boots up.” You can interrupt the startup to enter a fully functional, keyboard-navigated BIOS screen before loading the desktop. Control Panel & Settings App: A centralized hub to manage the OS. Wallpaper: Added a Display Properties menu with hand-redrawn, classic tiled wallpapers (16x16, 32x32, etc.) and a live, perfectly scaled preview window. Accessibility (CRT Toggle): The CRT shader looks really good, but I added a global setting to turn it off so people with photosensitivity or eye strain can still play around safely. UI Polish: I’ve added new tools bar to the File Explorer and the CaineApp terminal. What was challenging? Without a heavy framework like React or Vue, global state management is hard ! When a user toggles the CRT effect or changes the wallpaper, that state needs to instantly update across the entire DOM and persist correctly. Also, building the live-preview monitor inside the Display Properties getting those tiny 16x16 pixel patterns to scale and tile exactly how they will look on the massive desktop required a lot of tricky CSS and JavaScript math. What are you proud of? I’m incredibly proud of the accessibility and the “feel” of the OS. Adding the CRT toggle means more people can explore the project comfortably. But mostly, I’m proud that I managed to add an entire BIOS environment and a global settings architecture while keeping the codebase 100% vanilla and very fast. What should people know so they can test your project? To fully test the workstation, use the official Digital Circus credentials to unlock the computer: Username: kinger Password: queenie123 (or leave it empty!) Things to try: Classic Scenario : Go to My Computer -> Characters -> AI -> CAINE, then spam your keys or Enter to trigger the animation loop! Open the Settings app from the Start Menu to change your wallpaper and toggle the CRT effect. Open the Start Menu, hit Shut Down, and reset the machine so you can catch the brand-new BIOS boot sequence! Explore the project ! ᕙ( •̀ ᗜ •́ )ᕗ", "repo": "https://github.com/wirenux/KingOS-95", "demo": "https://kingos-95.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-03T13:58:01Z", "hours": 21.0, "multiplier": 11.75, "payout": 242, "blessing": "neutral", "text": "What did you make? KingOS 95 is a web-based OS (webOS) that use the style of Windows 95/98 and is based on the universe of The Amazing Digital Circus. Built entirely with vanilla HTML,JS,CSS. Project features: Custom Vector Window Manager: A lightweight window manager supporting zIndex layering, minimizing, maximizing, dragging and resizing window Virtual JSON Filesystem: Dynamic folder and document structure using only a JSON file CRT Display Shader: Scanline and aesthetic from retro display. Overlays optimized for web performance Start Menu: Handles application spawns, external link, and direct OS state toggles (Log Off / Shut Down). Bespoke Circus Applications: Interactive apps matching the show’s lore, including CaineApp (a custom command terminal) and the PurgeAIProgram. What was challenging? The biggest problem came from trying to create a retro look on modern development tools: The Windowing Engine: Writing a fluid and stable window manager in pure vanilla JS without heavy UI frameworks is kinda hard and need building a good state architecture for tracking DOM coordinates, drag states, and layered sorting order on the fly. The Build Pipeline Battle: During deployment, Vite 8’s ultra-modern strict compiler (LightningCSS) repeatedly crashed over a legacy media query ( @media (not(hover))) hidden inside the 98.css stylesheet. What are you proud of? Building a fully responsive, visually complex webOS completely from scratch without leaning on bulky frontend frameworks. Achieving a high level of performance with native HTML, CSS, and JavaScript means the entire simulation loads instantly and stays incredibly responsive. What should people know so they can test your project? To fully use the workstation, testers need to know the official credentials (there are the same in the show !) to unlock the “computer” Username: kinger Password: quennie123", "repo": "https://github.com/wirenux/KingOS-95", "demo": "https://kingos-95.vercel.app/"}]...
|
[{"post_id": 26672, "ts": "202 [{"post_id": 26672, "ts": "2026-07-11T16:40:07Z", "hours": 0.5289, "text": "I guess i’ll make a Devlogs ! (other wise I’ll lost ✨31min✨) So here is the final readme for the 2nd ship"}, {"post_id": 26640, "ts": "2026-07-11T15:58:52Z", "hours": 0.2989, "text": "Yay the 30 Hours have been reached 🎉 Otherwise I’ve added a popup when you press ESC to confirm you want to exit."}, {"post_id": 26618, "ts": "2026-07-11T15:26:01Z", "hours": 0.6364, "text": "I’ve add a BUNCH of CSS & JS so right now i’ve this result ! (this can be use fully with the keyboard)"}, {"post_id": 26594, "ts": "2026-07-11T14:46:21Z", "hours": 1.15, "text": "I’m building the BIOS (when you press anythings on the boot menu)"}, {"post_id": 26502, "ts": "2026-07-11T10:33:08Z", "hours": 0.2706, "text": "I’ve drawn Caine but for a desktop icon !"}, {"post_id": 25858, "ts": "2026-07-10T10:40:14Z", "hours": 0.8136, "text": "I’ve done some invisible fix (like bugs etc…) AND draw every icon for the tools bar in the Caine App and add the tools bar itself !"}, {"post_id": 25271, "ts": "2026-07-09T13:11:55Z", "hours": 1.3239, "text": "I’ve draw all the icon for the toolbar in the File Explorer ! and put them in with some CSS and JS so when you press the Up folder button you go….. ✨UP✨"}, {"post_id": 25228, "ts": "2026-07-09T11:01:34Z", "hours": 0.5172, "text": "I’ve done various fixes and add the Netscape Logo Animation !"}, {"post_id": 24835, "ts": "2026-07-08T17:25:41Z", "hours": 0.2631, "text": "Now the CRT On/Off switch work ! (This was not that difficult, just add or remove an attribute to a div). The 1st screenshot is without and the 2nd is with the CRT effect"}, {"post_id": 24822, "ts": "2026-07-08T17:09:26Z", "hours": 2.0914, "text": "Wow it’s been 2hours 😶. There now is a lot of things who have change ! There now a full Display Properties app (1st screenshot). And when you select a wallpaper there is a preview who fit perfectly into the screen and there is the ability to change the real background (2st screen shot) I’ve also redraw every wallpaper (for the most is just 32x32, 128x128, 64x64 or 16x16 repeated through the whole screen)"}, {"post_id": 24686, "ts": "2026-07-08T13:12:26Z", "hours": 0.3128, "text": "I’ve finally finished the screen (the inside is blank so i could put so texture in it with some code)"}, {"post_id": 24675, "ts": "2026-07-08T12:53:05Z", "hours": 0.6431, "text": "I’m recreating the screen in Display Management in Aseprite because I can’t find any resource for this online. This is so loonnnnggg I’ve just done the frame :,) (Also I’m pixel perfect)"}, {"post_id": 24635, "ts": "2026-07-08T11:07:36Z", "hours": 1.6453, "text": "I’m adding the Control Panel with the Display Settings, because a review say to me : You should add a flashing warning and a settings to disable the CRT effect"}, {"post_id": 21481, "ts": "2026-07-03T13:36:07Z", "hours": 2.5628, "text": "Stardance said to me : \"You will lost 2h33 if you ship right now without a devlog\" so here is it. Yay the 20h bar have been reached !!! In the last 2h i’ve add a lot of things like: hosting the website on vercel, make the whole readme, update project detail on Stardance and add the C&A Favicon, (i’ve also fix some bugs). So now I’m ready to Ship ! Wish me luck !"}, {"post_id": 19995, "ts": "2026-07-01T13:58:10Z", "hours": 0.6561, "text": "It was hard but i now have resizable window ! With a window handle in the bottom right corner"}, {"post_id": 19967, "ts": "2026-07-01T13:02:33Z", "hours": 0.8253, "text": "There is now Netscape ! I’ve used my other project KlassicOS to implement Netscape in this one. Because i’ve already done the code ! I’ve also fix some bug related to button and CSS because on this project I use 98.css but on KlassicOS i was making every 3d effect on the button by hand"}, {"post_id": 19943, "ts": "2026-07-01T12:02:35Z", "hours": 0.7442, "text": "There now is a Window Error with custom error text"}, {"post_id": 19903, "ts": "2026-07-01T10:31:14Z", "hours": 0.4681, "text": "I’ve added the Recycle Bin window !"}, {"post_id": 19309, "ts": "2026-06-30T16:06:25Z", "hours": 0.2939, "text": "I’ve added boot sound and restart when Purge AI Program have finished"}, {"post_id": 19279, "ts": "2026-06-30T15:30:41Z", "hours": 0.6861, "text": "Now there is a Window 95 boot image"}, {"post_id": 19222, "ts": "2026-06-30T14:17:55Z", "hours": 0.445, "text": "The BIOS Loading screen is finished ! (+ i’ve fix the crt on effect on Safari / Chrome)"}, {"post_id": 19198, "ts": "2026-06-30T13:45:12Z", "hours": 0.2731, "text": "Just draw the little blue man (i don’t know his name)"}, {"post_id": 19181, "ts": "2026-06-30T13:24:40Z", "hours": 1.1983, "text": "There now is a BIOS boot animation !!"}, {"post_id": 18648, "ts": "2026-06-29T20:43:02Z", "hours": 0.8586, "text": "Now there is a New CRT effect (the boot one is so beautiful) https://www.youtube.com/watch?v=M90K87DTchw"}, {"post_id": 18498, "ts": "2026-06-29T17:44:42Z", "hours": 1.3147, "text": "Now there is some custom and responsive position for Bubble and CAINE’s heads & Bubble and CAINE’s heads can expand or contract depending on window size (i’ve also add a new C&A white icon)"}, {"post_id": 18426, "ts": "2026-06-29T16:07:54Z", "hours": 0.3283, "text": "CAINE & Bubble are now on screen !"}, {"post_id": 18415, "ts": "2026-06-29T15:44:32Z", "hours": 0.275, "text": "Just finished bubble and assemble CAINE + Animation"}, {"post_id": 18403, "ts": "2026-06-29T15:20:29Z", "hours": 0.5625, "text": "I’ve finished CAINE’s part : And start Bubble"}, {"post_id": 18371, "ts": "2026-06-29T14:33:19Z", "hours": 0.4225, "text": "I’ve just finished the lower part of his mouth"}, {"post_id": 18353, "ts": "2026-06-29T14:04:40Z", "hours": 0.3314, "text": "I’ve just draw the hat!"}, {"post_id": 18344, "ts": "2026-06-29T13:44:45Z", "hours": 0.3358, "text": "I’m drawing the eyes of CAINE ‘cause i’havent found the pixel art online"}, {"post_id": 18309, "ts": "2026-06-29T12:42:22Z", "hours": 0.4603, "text": "Add an invisible change but I now have a function to spawn window that I can use every where"}, {"post_id": 18272, "ts": "2026-06-29T11:17:41Z", "hours": 1.1169, "text": "I’ve just finished the CAINE App ! When you open the app You get the exact same text as in the episode. In the app you you type anythings (you can litteraly smash your keyboard) it will write the same input as in the episode ! Or you could just spam enter to get to the end ! (The text is from the fandom of The Amazing Digital Circus : https://tadc.fandom.com/wiki/Computer )"}, {"post_id": 17891, "ts": "2026-06-28T20:35:21Z", "hours": 0.3278, "text": "now have caine app"}, {"post_id": 17874, "ts": "2026-06-28T20:10:48Z", "hours": 0.2842, "text": "More files !!"}, {"post_id": 17850, "ts": "2026-06-28T19:52:17Z", "hours": 0.8342, "text": "There now is all the file like in the episode"}, {"post_id": 17745, "ts": "2026-06-28T17:41:27Z", "hours": 0.9056, "text": "Now have the File explorer with pseudo File System using JSON File :"}, {"post_id": 17693, "ts": "2026-06-28T16:27:02Z", "hours": 0.7456, "text": "Now able to create fully customizable windows, with custom icons, size, title, titlebar button"}, {"post_id": 17657, "ts": "2026-06-28T15:18:17Z", "hours": 0.7142, "text": "I now have clickable icon on the desktop !"}, {"post_id": 14617, "ts": "2026-06-23T19:57:31Z", "hours": 0.5364, "text": "Now have a proper Start Menu"}, {"post_id": 13227, "ts": "2026-06-21T17:38:44Z", "hours": 0.8644, "text": "Just add the clock (+ sound icon) and the start menu button"}, {"post_id": 13102, "ts": "2026-06-21T13:12:10Z", "hours": 0.4253, "text": "Finished the login phase"}, {"post_id": 13010, "ts": "2026-06-21T08:51:31Z", "hours": 1.0308, "text": "Hi ! I’m adding the login phase of the webOS"}]...
|
Title: KingOS 95 by @Wirenux | Stardance
Devlogs: Title: KingOS 95 by @Wirenux | Stardance
Devlogs:
Hi ! I’m adding the login phase of the webOS
Finished the login phase
Just add the clock (+ sound icon) and the start menu button
Now have a proper Start Menu
I now have clickable icon on the desktop !
Now able to create fully customizable windows, with custom icons, size, title, titlebar button
Now have the File explorer with pseudo File System using JSON File :
There now is all the file like in the episode
More files !!
now have caine app
I’ve just finished the CAINE App ! When you open the app You get the exact same text as in the episode. In the app you you type anythings (you can litteraly smash your keyboard) it will write the same input as in the episode ! Or you could just spam enter to get to the end ! (The text is from the fandom of The Amazing Digital Circus : https://tadc.fandom.com/wiki/Computer )
Add an invisible change but I now have a function to spawn window that I can use every where
I’m drawing the eyes of CAINE ‘cause i’havent found the pixel art online
I’ve just draw the hat!
I’ve just finished the lower part of his mouth
I’ve finished CAINE’s part : And start Bubble
Just finished bubble and assemble CAINE + Animation
CAINE & Bubble are now on screen !
Now there is some custom and responsive position for Bubble and CAINE’s heads & Bubble and CAINE’s heads can expand or contract depending on window size (i’ve also add a new C&A white icon)
Now there is a New CRT effect (the boot one is so beautiful) https://www.youtube.com/watch?v=M90K87DTchw
There now is a BIOS boot animation !!
Just draw the little blue man (i don’t know his name)
The BIOS Loading screen is finished ! (+ i’ve fix the crt on effect on Safari / Chrome)
Now there is a Window 95 boot image
I’ve added boot sound and restart when Purge AI Program have finished
I’ve added the Recycle Bin window !
There now is a Window Error with custom error text
There is now Netscape ! I’ve used my other project KlassicOS to implement Netscape in this one. Because i’ve already done the code ! I’ve also fix some bug related to button and CSS because on this project I use 98.css but on KlassicOS i was making every 3d effect on the button by hand
It was hard but i now have resizable window ! With a window handle in the bottom right corner
Stardance said to me : "You will lost 2h33 if you ship right now without a devlog" so here is it. Yay the 20h bar have been reached !!! In the last 2h i’ve add a lot of things like: hosting the website on vercel, make the whole readme, update project detail on Stardance and add the C&A Favicon, (i’ve also fix some bugs). So now I’m ready to Ship ! Wish me luck !
I’m adding the Control Panel with the Display Settings, because a review say to me : You should add a flashing warning and a settings to disable the CRT effect
I’m recreating the screen in Display Management in Aseprite because I can’t find any resource for this online. This is so loonnnnggg I’ve just done the frame :,) (Also I’m pixel perfect)
I’ve finally finished the screen (the inside is blank so i could put so texture in it with some code)
Wow it’s been 2hours 😶. There now is a lot of things who have change ! There now a full Display Properties app (1st screenshot). And when you select a wallpaper there is a preview who fit perfectly into the screen and there is the ability to change the real background (2st screen shot) I’ve also redraw every wallpaper (for the most is just 32x32, 128x128, 64x64 or 16x16 repeated through the whole screen)
Now the CRT On/Off switch work ! (This was not that difficult, just add or remove an attribute to a div). The 1st screenshot is without and the 2nd is with the CRT effect
I’ve done various fixes and add the Netscape Logo Animation !
I’ve draw all the icon for the toolbar in the File Explorer ! and put them in with some CSS and JS so when you press the Up folder button you go….. ✨UP✨
I’ve done some invisible fix (like bugs etc…) AND draw every icon for the tools bar in the Caine App and add the tools bar itself !
I’ve drawn Caine but for a desktop icon !
I’m building the BIOS (when you press anythings on the boot menu)
I’ve add a BUNCH of CSS & JS so right now i’ve this result ! (this can be use fully with the keyboard)
Yay the 30 Hours have been reached 🎉 Otherwise I’ve added a popup when you press ESC to confirm you want to exit.
I guess i’ll make a Devlogs ! (other wise I’ll lost ✨31min✨) So here is the final readme for the 2nd ship
Ships:
What did you make? KingOS 95 is a web-based OS (webOS) that use the style of Windows 95/98 and is based on the universe of The Amazing Digital Circus. Built entirely with vanilla HTML,JS,CSS. Project features: Custom Vector Window Manager: A lightweight window manager supporting zIndex layering, minimizing, maximizing, dragging and resizing window Virtual JSON Filesystem: Dynamic folder and document structure using only a JSON file CRT Display Shader: Scanline and aesthetic from retro display. Overlays optimized for web performance Start Menu: Handles application spawns, external link, and direct OS state toggles (Log Off / Shut Down). Bespoke Circus Applications: Interactive apps matching the show’s lore, including CaineApp (a custom command terminal) and the PurgeAIProgram. What was challenging? The biggest problem came from trying to create a retro look on modern development tools: The Windowing Engine: Writing a fluid and stable window manager in pure vanilla JS without heavy UI frameworks is kinda hard and need building a good state architecture for tracking DOM coordinates, drag states, and layered sorting order on the fly. The Build Pipeline Battle: During deployment, Vite 8’s ultra-modern strict compiler (LightningCSS) repeatedly crashed over a legacy media query ( @media (not(hover))) hidden inside the 98.css stylesheet. What are you proud of? Building a fully responsive, visually complex webOS completely from scratch without leaning on bulky frontend frameworks. Achieving a high level of performance with native HTML, CSS, and JavaScript means the entire simulation loads instantly and stays incredibly responsive. What should people know so they can test your project? To fully use the workstation, testers need to know the official credentials (there are the same in the show !) to unlock the “computer” Username: kinger Password: quennie123
KingOS 95 The C&A certified 32-bit workstation built for trapped souls ⎛⎝( ` ᢍ ´ )⎠⎞ᵐᵘʰᵃʰᵃ What did you make? For my second ship, I’ve massively expanded KingOS 95! If you missed the first one, it’s a web-based OS built entirely with vanilla HTML, CSS, and JS, inspired by Windows 95 and the lore of The Amazing Digital Circus (I recommend you to go see the 1st Ship). In this update, I’ve mainly add customization option. Here is what’s new: AMI-Like BIOS & Boot Sequence: The OS now actually “boots up.” You can interrupt the startup to enter a fully functional, keyboard-navigated BIOS screen before loading the desktop. Control Panel & Settings App: A centralized hub to manage the OS. Wallpaper: Added a Display Properties menu with hand-redrawn, classic tiled wallpapers (16x16, 32x32, etc.) and a live, perfectly scaled preview window. Accessibility (CRT Toggle): The CRT shader looks really good, but I added a global setting to turn it off so people with photosensitivity or eye strain can still play around safely. UI Polish: I’ve added new tools bar to the File Explorer and the CaineApp terminal. What was challenging? Without a heavy framework like React or Vue, global state management is hard ! When a user toggles the CRT effect or changes the wallpaper, that state needs to instantly update across the entire DOM and persist correctly. Also, building the live-preview monitor inside the Display Properties getting those tiny 16x16 pixel patterns to scale and tile exactly how they will look on the massive desktop required a lot of tricky CSS and JavaScript math. What are you proud of? I’m incredibly proud of the accessibility and the “feel” of the OS. Adding the CRT toggle means more people can explore the project comfortably. But mostly, I’m proud that I managed to add an entire BIOS environment and a global settings architecture while keeping the codebase 100% vanilla and very fast. What should people know so they can test your project? To fully test the workstation, use the official Digital Circus credentials to unlock the computer: Username: kinger Password: queenie123 (or leave it empty!) Things to try: Classic Scenario : Go to My Computer -> Characters -> AI -> CAINE, then spam your keys or Enter to trigger the animation loop! Open the Settings app from the Start Menu to change your wallpaper and toggle the CRT effect. Open the Start Menu, hit Shut Down, and reset the machine so you can catch the brand-new BIOS boot sequence! Explore the project ! ᕙ( •̀ ᗜ •́ )ᕗ...
|
1793112504.039396
|
1793198904.039396
|
|
24566
|
Gamble This Website! by @forkosssa | Stardance
|
forkosssa
|
1
|
31.0
|
526
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T15:32:19Z", "hours": 31.0, "multiplier": 17.02, "payout": 526, "blessing": "neutral", "text": "A site where you gamble it’s budget and if you lose too much money it will impact the websites look and feel!", "repo": "https://github.com/Fork0n/gamble-this-site", "demo": "https://gamble-this-website.vercel.app/"}]...
|
[{"post_id": 31270, "ts": "202 [{"post_id": 31270, "ts": "2026-07-19T15:25:40Z", "hours": 4.92, "text": "so i’ve decided to finally end this project.it was fun but i think it’s already production ready, i’ve been working hard lately and i think it’s finished. i’ve finished the core mechanic of the site getting shittier and i’m really proud of my work. surely there are some bugs and other things that i’d love to change/fix but i’mma ship it as is.anyways, have fun playing!"}, {"post_id": 26127, "ts": "2026-07-10T18:55:01Z", "hours": 2.5892, "text": "So I’ve decided to finally address the elephant in the room and draw the sprites; apparently I’ve bitten off more than I can chew, and the sprites came out… shitty (who could’ve guessed). Even though it recorded only like 2 hrs, it was more like 2 hrs + 10+ hrs in Krita. Drawing sprites is apparently extremely hard sooooo idk if I will finish all the sprites before shipping. Anyways, I’ve done sprites for “normal” and “poor” statuses, and I guess I have to do the rich as well, since bankrupt will have no CSS anyways, and I’ll invent something for the filthy rich."}, {"post_id": 22958, "ts": "2026-07-05T17:10:47Z", "hours": 6.4067, "text": "soooo it was quite a long time from the last update (about 5 days)all this time i was working mostly on aesthetics and implementing the core feature of the variable design, anyway i added SFX (mostly so that i can remove them on bankruptcy…). Also i added 3 new modals ready to be implemented! ServiceShutoffNoticeCSS.vue, ServiceShutoffNoticeSound.vue and GameFinishedNotice.vue! also it’s pretty misc and minor but now i added a bunch of typewriter fonts to use!"}, {"post_id": 19197, "ts": "2026-06-30T13:44:48Z", "hours": 2.7144, "text": "HUUUUUUUUUGE README.md updata and minor changes1) added clickable links for the hotline2) revisioned some code3) addedd personal infoa and portfolio4) finally made a half as decent README.md"}, {"post_id": 18346, "ts": "2026-06-29T13:47:20Z", "hours": 2.9567, "text": "I took the weekend half off and now i’ve practically finished the projectI updated some stuff, refined some designs like the heads/tails oneAlso besides that I added the stuff that i’ve been trying to add sine i finished the coinflip: now we see a spinning roulette sprite! Yay I just have to draw a few sprites and i guess it’s ready to be shipped!(ah, yes, don’t mind the placeholder that i used, i needed to check if it would spin the way i need, i’ll make a sprite for it some day) also i’ll probably ship the project before jul 2, the last thing i want is codding on my birthday, or maybe i will, who knows, anyways there’s not that much codding left to do, only sprites"}, {"post_id": 16411, "ts": "2026-06-26T18:13:55Z", "hours": 1.6192, "text": "added not that much1) revisioned the tilting kickflip and kickflip, added neo versions that are… maybe not linearly improved but are a kind of evolution2) added warning when restarting or closing (except when the budget is 1000; it helps when developing and is generally redundant since $1000 is the initial budget)3) added a disclaimer to the coinflip modal (a bug when the coin side image updates with a delay)4) added a general disclaimer as well as a gambling addiction disclaimer with auto country and hotline fetching5) brainstormed adding “past due” warnings when budget is low"}, {"post_id": 15780, "ts": "2026-06-25T17:31:29Z", "hours": 3.2533, "text": "added another shit ton of stuff1) modals for: coinflip animation; coinflip side selector; roulette animation; also added arrows and stuff2) made sprites for normal coin head & tail3) added the ability to select a coin side before betting (yeah, forgot about it last time)4) made so that on coinflip (when you press the flip button) it plays the animation in a modal, the animation actually corresponds to your bet and the status (won/lost) and ypur bet amount!5) finally addressing the elephant in the room:you can now kickflip the logo! yes… also that brought a rework of the tilting script + now we have tilting-kickflip.ts because it wasn’t working good enough with both stacked and kickflip.ts in case you don’t need tilting at all"}, {"post_id": 15304, "ts": "2026-06-24T21:10:31Z", "hours": 4.0117, "text": "added a shit ton of stuff1) modals for betting, selecting roulette number and a template for the game modal but i’ll add that later (maybe)2) uhm i made gambling working? yes, now you can bet and only guess if it’s working fine or if it has a severe bug3) refined the layout (probably)4) added /sandbox to test and develop stuff5) that’s it ig, fine for 3-4hrs? maybe"}, {"post_id": 15011, "ts": "2026-06-24T12:02:47Z", "hours": 1.0928, "text": "added tilting to the title, and buttonsadded a working budget counterthe placeholder now serves the purpose of debug: bet adds $100 to the budget and roll subs $100next update should add at least some working mechanics on gambling, and then i will leave the aesthetics and the core mechanic of the design getting better or worse to the end ( i still have to draw the sprites…)"}, {"post_id": 14502, "ts": "2026-06-23T17:21:01Z", "hours": 1.3697, "text": "as of now it’s not more than a demo of the design and layout, i haven’t even decided on what the third came should be, i guess for an hour it’s quite good"}]...
|
Title: Gamble This Website! by @forkosssa | Starda Title: Gamble This Website! by @forkosssa | Stardance
Devlogs:
as of now it’s not more than a demo of the design and layout, i haven’t even decided on what the third came should be, i guess for an hour it’s quite good
added tilting to the title, and buttonsadded a working budget counterthe placeholder now serves the purpose of debug: bet adds $100 to the budget and roll subs $100next update should add at least some working mechanics on gambling, and then i will leave the aesthetics and the core mechanic of the design getting better or worse to the end ( i still have to draw the sprites…)
added a shit ton of stuff1) modals for betting, selecting roulette number and a template for the game modal but i’ll add that later (maybe)2) uhm i made gambling working? yes, now you can bet and only guess if it’s working fine or if it has a severe bug3) refined the layout (probably)4) added /sandbox to test and develop stuff5) that’s it ig, fine for 3-4hrs? maybe
added another shit ton of stuff1) modals for: coinflip animation; coinflip side selector; roulette animation; also added arrows and stuff2) made sprites for normal coin head & tail3) added the ability to select a coin side before betting (yeah, forgot about it last time)4) made so that on coinflip (when you press the flip button) it plays the animation in a modal, the animation actually corresponds to your bet and the status (won/lost) and ypur bet amount!5) finally addressing the elephant in the room:you can now kickflip the logo! yes… also that brought a rework of the tilting script + now we have tilting-kickflip.ts because it wasn’t working good enough with both stacked and kickflip.ts in case you don’t need tilting at all
added not that much1) revisioned the tilting kickflip and kickflip, added neo versions that are… maybe not linearly improved but are a kind of evolution2) added warning when restarting or closing (except when the budget is 1000; it helps when developing and is generally redundant since $1000 is the initial budget)3) added a disclaimer to the coinflip modal (a bug when the coin side image updates with a delay)4) added a general disclaimer as well as a gambling addiction disclaimer with auto country and hotline fetching5) brainstormed adding “past due” warnings when budget is low
I took the weekend half off and now i’ve practically finished the projectI updated some stuff, refined some designs like the heads/tails oneAlso besides that I added the stuff that i’ve been trying to add sine i finished the coinflip: now we see a spinning roulette sprite! Yay I just have to draw a few sprites and i guess it’s ready to be shipped!(ah, yes, don’t mind the placeholder that i used, i needed to check if it would spin the way i need, i’ll make a sprite for it some day) also i’ll probably ship the project before jul 2, the last thing i want is codding on my birthday, or maybe i will, who knows, anyways there’s not that much codding left to do, only sprites
HUUUUUUUUUGE README.md updata and minor changes1) added clickable links for the hotline2) revisioned some code3) addedd personal infoa and portfolio4) finally made a half as decent README.md
soooo it was quite a long time from the last update (about 5 days)all this time i was working mostly on aesthetics and implementing the core feature of the variable design, anyway i added SFX (mostly so that i can remove them on bankruptcy…). Also i added 3 new modals ready to be implemented! ServiceShutoffNoticeCSS.vue, ServiceShutoffNoticeSound.vue and GameFinishedNotice.vue! also it’s pretty misc and minor but now i added a bunch of typewriter fonts to use!
So I’ve decided to finally address the elephant in the room and draw the sprites; apparently I’ve bitten off more than I can chew, and the sprites came out… shitty (who could’ve guessed). Even though it recorded only like 2 hrs, it was more like 2 hrs + 10+ hrs in Krita. Drawing sprites is apparently extremely hard sooooo idk if I will finish all the sprites before shipping. Anyways, I’ve done sprites for “normal” and “poor” statuses, and I guess I have to do the rich as well, since bankrupt will have no CSS anyways, and I’ll invent something for the filthy rich.
so i’ve decided to finally end this project.it was fun but i think it’s already production ready, i’ve been working hard lately and i think it’s finished. i’ve finished the core mechanic of the site getting shittier and i’m really proud of my work. surely there are some bugs and other things that i’d love to change/fix but i’mma ship it as is.anyways, have fun playing!
Ships:
A site where you gamble it’s budget and if you lose too much money it will impact the websites look and feel!...
|
1793116225.186024
|
1793202625.186024
|
|
27377
|
AI-Powered Adventure Text Game by @jeremyngai | St AI-Powered Adventure Text Game by @jeremyngai | Stardance...
|
jeremyngai
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T08:27:12Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is an AI-powered text adventure device using an ESP32, an e-paper display and a rotary encoder. It is powered by Gemini to generate infinite stories and choices. It uses ESP32-C3 microcontroller to connect to WiFi and query the Gemini API. Gemini generates an interactive story segment and choices for the player in JSON format. Then the text is shown on the e-paper display. The user can use the rotary encoder to scroll through the text and select their next action. Each choice is returned to the history buffer on the ESP32 and is sent back to Gemini to generate the next story segment. Personally the most enjoyable part is when the PCB worked after i soldered them, however the coding part is hell cuz i sucks at coding lol. It haven’t got an enclosure yet, i will work on it soon! Now I can play this in my free time!", "repo": "https://github.com/Jeremy-Ngai-Sew-Poh/InkQuest", "demo": ""}]...
|
[{"post_id": 74300, "ts": "202 [{"post_id": 74300, "ts": "2026-09-27T04:39:13Z", "hours": 1.6014, "text": "I worked on the game loop system so the story is infinite. after you selected your choice your response will be sent back to gemini api to generate next story! now its actually infinite loop"}, {"post_id": 38642, "ts": "2026-08-01T04:29:45Z", "hours": 4.8872, "text": "Spent the last few days implementing gemini api into the code and formatting json data like text, choice into the e paper display :) I’ll take a break from this project as i have joined other competition. so stay tuned!"}, {"post_id": 31150, "ts": "2026-07-19T10:08:00Z", "hours": 2.8883, "text": "GAH DAMN MY PCB IS WORKING!!! Timelapse below! I spent the last few hours carefully soldering my new PCB. I decided to use 0805 for all smd component cuz in my last project, I used 0603 ones and it was PURE TORTURE to solder them all lol. lessen learnt! Overall, I absolutely love the pcb outcome its nicer than I expected especially the ws2812b led and all those smd resistor (they look so sci-fi xD). However there was one flaw, I forgot about the ESP32 antenna. I’m forced to awkwardly fit the antenna on the pcb back (right beside my Great Wave silkscreen print). Luckily it didn’t block it lol. This is something I needa keep in mind the next time! You might be wondering what’s that tiny pin header I used there. It’s just a pin header, but for the design, I wanted it to be ultra slim, so I designed a PCB sandwich layout. The battery fits perfectly between the e-paper pcb and my pcb. However the problem with normal pin headers is that they are super chunky, they have like 9mm gap. That instantly ruin the whole vibe… So after hours of digging in aliexpress, I found those low profile pin header. They are SUPER PERFECT for my project (6mm gap), which is exactly my battery thickness!!! Anyways the low profile pin header was NOT CHEAP at all… well at least its so worth it. Other than soldering the PCB, I did a few adjustment to the firmware, including: rotary encoder logic improvement - I used interrupt pin logic to read it, they place the rotary encoder at the toppest priority (if theres any changes in pin state, the esp32 instantly ignore everything and focus on the encoder). That’s all for now, stay tuned! its so fun"}, {"post_id": 30648, "ts": "2026-07-18T12:04:16Z", "hours": 1.4833, "text": "Today I worked on a WiFi prompt to let user choose whether they want to connect to a different wifi or existing one, because this device is supposed to be portable, working anywhere, so this is very important. However, I’m still figuring out how to show the WiFi name… wm.getWiFiSSID() didn’t work though. Btw, all my hardware had already arrived just now!! (after slow ahh aliexpress) I can’t wait to solder them, so stay tuned lol XD"}, {"post_id": 30125, "ts": "2026-07-17T13:25:32Z", "hours": 4.3369, "text": "In the last few days, I made a few changes to my project: I decided to switch the idea from the initial quiz game concept into a choice-based adventure text game, it’s basically an infinite “choose your own adventure” concept. I feel like it’s way more fun! I worked with the WiFiManager library to make the wifi setup more accessible and easy. We now don’t need to hardcode wifi password into the code, the device will launch a hotspot captive portal and you can just connect any of your device to setup wifi at anytime anywhere. portable, isn’t it? Since this game concept will need the e-paper display to show a long text, I used a serif font and coded an automatic text wrapping and an adaptive scroll bar at the side so you can know the length of the text I also added a low battery and data parsing error page for the user alongside with an ok button to shutdown the device. What’s next? After the text formatting is stable, i’ll be focusing on text generation and choice logic!! xD"}, {"post_id": 27138, "ts": "2026-07-12T12:49:33Z", "hours": 2.3742, "text": "Added automatic text wrapping, improved code logic and added low battery screen"}, {"post_id": 26595, "ts": "2026-07-11T14:50:08Z", "hours": 0.6044, "text": "Sent PCB design to JLCPCB for manufacturing (the silkscreen boutta look fire!!)"}, {"post_id": 26395, "ts": "2026-07-11T05:00:22Z", "hours": 1.8842, "text": "Finalised PCB schematics and tested with breadboard. PCB is ready to be manufactured!!"}, {"post_id": 24655, "ts": "2026-07-08T11:42:57Z", "hours": 1.2667, "text": "Added WS2812B Neopixel on the PCB and rerouted PCB"}, {"post_id": 22722, "ts": "2026-07-05T09:35:39Z", "hours": 2.0708, "text": "Finalised schematics circuit, now starting PCB layout!!"}, {"post_id": 22147, "ts": "2026-07-04T13:36:10Z", "hours": 0.4381, "text": "Updated UI interface to fit longer question and answer"}, {"post_id": 21968, "ts": "2026-07-04T05:52:14Z", "hours": 1.4556, "text": "Designed first schematics for custom PCB"}, {"post_id": 21501, "ts": "2026-07-03T14:21:54Z", "hours": 0.3519, "text": "Added ADC reading from battery pin to calculate percentage"}, {"post_id": 19185, "ts": "2026-06-30T13:32:47Z", "hours": 0.3486, "text": "I implemented random seed for Gemini and reinforced the prompt because the AI keep generating the same question and answer over and over again"}, {"post_id": 19168, "ts": "2026-06-30T12:51:47Z", "hours": 1.8264, "text": "Finally implemented Gemini 3.1 Flash Lite into my e-paper ai quiz! Took a long long time debugging errors. Next I’m gonna optimise the ui"}, {"post_id": 18247, "ts": "2026-06-29T10:07:48Z", "hours": 0.7272, "text": "Removed variable dummy placeholder to prepare for API implementation. Also fixed navigation bug when switching pages."}, {"post_id": 17501, "ts": "2026-06-28T09:50:58Z", "hours": 0.6828, "text": "Added hourglass loading screen and improved code logic"}, {"post_id": 17459, "ts": "2026-06-28T07:44:51Z", "hours": 0.7906, "text": "Implemented full quiz logic in Arduino IDE (Gemini API yet to do)"}, {"post_id": 17431, "ts": "2026-06-28T06:34:17Z", "hours": 0.5061, "text": "Added logic pages system using partial refresh in Arduino IDE"}, {"post_id": 17370, "ts": "2026-06-28T04:02:32Z", "hours": 0.4453, "text": "Initialise e-paper screen and wifi in Arduino IDE"}, {"post_id": 17359, "ts": "2026-06-28T03:34:17Z", "hours": 0.3494, "text": "UI Design for quiz interface"}]...
|
Title: AI-Powered Adventure Text Game by @jeremyng Title: AI-Powered Adventure Text Game by @jeremyngai | Stardance
Devlogs:
UI Design for quiz interface
Initialise e-paper screen and wifi in Arduino IDE
Added logic pages system using partial refresh in Arduino IDE
Implemented full quiz logic in Arduino IDE (Gemini API yet to do)
Added hourglass loading screen and improved code logic
Removed variable dummy placeholder to prepare for API implementation. Also fixed navigation bug when switching pages.
Finally implemented Gemini 3.1 Flash Lite into my e-paper ai quiz! Took a long long time debugging errors. Next I’m gonna optimise the ui
I implemented random seed for Gemini and reinforced the prompt because the AI keep generating the same question and answer over and over again
Added ADC reading from battery pin to calculate percentage
Designed first schematics for custom PCB
Updated UI interface to fit longer question and answer
Finalised schematics circuit, now starting PCB layout!!
Added WS2812B Neopixel on the PCB and rerouted PCB
Finalised PCB schematics and tested with breadboard. PCB is ready to be manufactured!!
Sent PCB design to JLCPCB for manufacturing (the silkscreen boutta look fire!!)
Added automatic text wrapping, improved code logic and added low battery screen
In the last few days, I made a few changes to my project: I decided to switch the idea from the initial quiz game concept into a choice-based adventure text game, it’s basically an infinite “choose your own adventure” concept. I feel like it’s way more fun! I worked with the WiFiManager library to make the wifi setup more accessible and easy. We now don’t need to hardcode wifi password into the code, the device will launch a hotspot captive portal and you can just connect any of your device to setup wifi at anytime anywhere. portable, isn’t it? Since this game concept will need the e-paper display to show a long text, I used a serif font and coded an automatic text wrapping and an adaptive scroll bar at the side so you can know the length of the text I also added a low battery and data parsing error page for the user alongside with an ok button to shutdown the device. What’s next? After the text formatting is stable, i’ll be focusing on text generation and choice logic!! xD
Today I worked on a WiFi prompt to let user choose whether they want to connect to a different wifi or existing one, because this device is supposed to be portable, working anywhere, so this is very important. However, I’m still figuring out how to show the WiFi name… wm.getWiFiSSID() didn’t work though. Btw, all my hardware had already arrived just now!! (after slow ahh aliexpress) I can’t wait to solder them, so stay tuned lol XD
GAH DAMN MY PCB IS WORKING!!! Timelapse below! I spent the last few hours carefully soldering my new PCB. I decided to use 0805 for all smd component cuz in my last project, I used 0603 ones and it was PURE TORTURE to solder them all lol. lessen learnt! Overall, I absolutely love the pcb outcome its nicer than I expected especially the ws2812b led and all those smd resistor (they look so sci-fi xD). However there was one flaw, I forgot about the ESP32 antenna. I’m forced to awkwardly fit the antenna on the pcb back (right beside my Great Wave silkscreen print). Luckily it didn’t block it lol. This is something I needa keep in mind the next time! You might be wondering what’s that tiny pin header I used there. It’s just a pin header, but for the design, I wanted it to be ultra slim, so I designed a PCB sandwich layout. The battery fits perfectly between the e-paper pcb and my pcb. However the problem with normal pin headers is that they are super chunky, they have like 9mm gap. That instantly ruin the whole vibe… So after hours of digging in aliexpress, I found those low profile pin header. They are SUPER PERFECT for my project (6mm gap), which is exactly my battery thickness!!! Anyways the low profile pin header was NOT CHEAP at all… well at least its so worth it. Other than soldering the PCB, I did a few adjustment to the firmware, including: rotary encoder logic improvement - I used interrupt pin logic to read it, they place the rotary encoder at the toppest priority (if theres any changes in pin state, the esp32 instantly ignore everything and focus on the encoder). That’s all for now, stay tuned! its so fun
Spent the last few days implementing gemini api into the code and formatting json data like text, choice into the e paper display :) I’ll take a break from this project as i have joined other competition. so stay tuned!
I worked on the game loop system so the story is infinite. after you selected your choice your response will be sent back to gemini api to generate next story! now its actually infinite loop
Ships:
This is an AI-powered text adventure device using an ESP32, an e-paper display and a rotary encoder. It is powered by Gemini to generate infinite stories and choices. It uses ESP32-C3 microcontroller to connect to WiFi and query the Gemini API. Gemini generates an interactive story segment and choices for the player in JSON format. Then the text is shown on the e-paper display. The user can use the rotary encoder to scroll through the text and select their next action. Each choice is returned to the history buffer on the ESP32 and is sent back to Gemini to generate the next story segment. Personally the most enjoyable part is when the PCB worked after i soldered them, however the coding part is hell cuz i sucks at coding lol. It haven’t got an enclosure yet, i will work on it soon! Now I can play this in my free time!...
|
1793152278.702267
|
1793238678.702267
|
|
29817
|
Gleam by @arth_mi | Stardance
|
arth_mi
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T22:29:30Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Gleam is a FastAPI backend driving RGBW strips through a generic plugin API, so effects are built on exposed primitives (color, intensity, dim) rather than hardcoded. The tricky part was getting the architecture right first: syncing modules through a shared clock and separating color/intensity/white as distinct render layers. I’m especially proud of the Ambilight module, which captures HDMI output live and mirrors it onto the strip in real time, fully on-device with no cloud dependency.", "repo": "https://github.com/arthmi/gleam", "demo": "https://gleam-virid.vercel.app/docs"}]...
|
[{"post_id": 72828, "ts": "202 [{"post_id": 72828, "ts": "2026-09-23T20:31:06Z", "hours": 10.8583, "text": "Just finished a new module! The module is called audio_reactive and, as its name suggests, it reacts to the audio input provided (system default if parameter = None). It lights up the selected target as the sound gets louder. It also features animations to make sudden transitions feel smoother.Here are the parameters for this module: device: Audio input device name, or a portion of it (empty = system default) color: Color of the light min_intensity: Intensity when the input is silent [0.0 - 1.0] max_intensity: Intensity at maximum volume [0.0 - 1.0] sensitivity: Gain applied to the normalized level [0.1 - 5.0] attack: Rise time in milliseconds (how quickly the light reacts to a louder sound) release: Fall time in milliseconds (how slowly the light fades when the sound drops)"}, {"post_id": 45228, "ts": "2026-08-11T15:51:49Z", "hours": 3.2964, "text": "Rewrite the entirety of the Ambilight module for better functionalities and performances. I wrote an advanced algorithm to get a smoother result in addition to more parameters : device_index edge reversed band_depth_percent weight_exponent sample_overlap_percent saturation_boost -temporal_smoothing_tau The main functionalities added are: Advanced Color Averaging: Improved methods to calculate smarter average colors, such as sampling larger color bands or allowing LEDs to influence adjacent colors. Temporal Smoothing: Introduction of “temporal_smoothing_tau” to ensure smoother, more natural color transitions over time. Enhanced Immersion: Addition of “saturation_boost” and “weight_exponent” parameters to deliver a more vibrant and immersive visual experience. For instance, the colors on the left terminal simulate the final result that would handle the left edge of the screen (using default parameters)."}, {"post_id": 34682, "ts": "2026-07-25T16:23:38Z", "hours": 16.5069, "text": "Just finished the main functionalities of the ambilight module of my LED controller. It takes a stream from the edge of the screen (HDMI to USB, for example), then processes each frame to get the average color of the surrounding area. I’m still working on a blur effect that would give a less detailed result for a better experience. (Sorry for the bad recording quality, this was made on an old laptop.)"}]...
|
Title: Gleam by @arth_mi | Stardance
Devlogs:
Jus Title: Gleam by @arth_mi | Stardance
Devlogs:
Just finished the main functionalities of the ambilight module of my LED controller. It takes a stream from the edge of the screen (HDMI to USB, for example), then processes each frame to get the average color of the surrounding area. I’m still working on a blur effect that would give a less detailed result for a better experience. (Sorry for the bad recording quality, this was made on an old laptop.)
Rewrite the entirety of the Ambilight module for better functionalities and performances. I wrote an advanced algorithm to get a smoother result in addition to more parameters : device_index edge reversed band_depth_percent weight_exponent sample_overlap_percent saturation_boost -temporal_smoothing_tau The main functionalities added are: Advanced Color Averaging: Improved methods to calculate smarter average colors, such as sampling larger color bands or allowing LEDs to influence adjacent colors. Temporal Smoothing: Introduction of “temporal_smoothing_tau” to ensure smoother, more natural color transitions over time. Enhanced Immersion: Addition of “saturation_boost” and “weight_exponent” parameters to deliver a more vibrant and immersive visual experience. For instance, the colors on the left terminal simulate the final result that would handle the left edge of the screen (using default parameters).
Just finished a new module! The module is called audio_reactive and, as its name suggests, it reacts to the audio input provided (system default if parameter = None). It lights up the selected target as the sound gets louder. It also features animations to make sudden transitions feel smoother.Here are the parameters for this module: device: Audio input device name, or a portion of it (empty = system default) color: Color of the light min_intensity: Intensity when the input is silent [0.0 - 1.0] max_intensity: Intensity at maximum volume [0.0 - 1.0] sensitivity: Gain applied to the normalized level [0.1 - 5.0] attack: Rise time in milliseconds (how quickly the light reacts to a louder sound) release: Fall time in milliseconds (how slowly the light fades when the sound drops)
Ships:
Gleam is a FastAPI backend driving RGBW strips through a generic plugin API, so effects are built on exposed primitives (color, intensity, dim) rather than hardcoded. The tricky part was getting the architecture right first: syncing modules through a shared clock and separating color/intensity/white as distinct render layers. I’m especially proud of the Ambilight module, which captures HDMI output live and mirrors it onto the strip in real time, fully on-device with no cloud dependency....
|
1793152242.24645
|
1793238642.24645
|
|
31386
|
My very own WebOS by @Vigaash | Stardance
|
Vigaash
|
3
|
31.0
|
42
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-05T22:24:33Z", "hours": 3.0, "multiplier": 2.89, "payout": 7, "blessing": "neutral", "text": "I made the Tamil Cinema OS, an OS dedicated to Tamil Cinema. Dive in to learn more about Tamil Cinema! It was built using HTML, Javascript, CSS, and too much knowledge about Tamil Cinema. Currently, there are seven apps that are active. What was challenging for me was trying to use arrays, as it was a little confusing to me for HTML. Currently, the apps are: Kollywood Notes, Snake Game, Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, and Kollywood Beats. New features are: Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, Kollywood Beats, and Bubble Shooter. More thorough details are in my Readme! I am doing another ship because I really need a small amount of Stardust for a purchase. Hope you guys like it!", "repo": "https://github.com/Vigaash-Lingeswaran/Web-OS", "demo": "https://vigaash-lingeswaran.github.io/Web-OS/"}, {"ship_num": 2, "ts": "2026-07-27T16:51:06Z", "hours": 15.0, "multiplier": 2.33, "payout": 35, "blessing": "neutral", "text": "I made the Tamil Cinema OS, an OS dedicated to Tamil Cinema. Dive in to learn more about Tamil Cinema! It was built using HTML, Javascript, CSS, and too much knowledge about Tamil Cinema. Currently, there are seven apps that are active. What was challenging for me was trying to use arrays, as it was a little confusing to me for HTML. Currently, the apps are: Kollywood Notes, Snake Game, Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, and Kollywood Beats. New features are: Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, and Kollywood Beats. More thorough details are in my Readme! Hope you guys like it!", "repo": "https://github.com/Vigaash-Lingeswaran/Web-OS", "demo": "https://vigaash-lingeswaran.github.io/Web-OS/"}, {"ship_num": 3, "ts": "2026-07-17T17:47:11Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hey guys! I have made my own OS called the Tamil Cinema OS. This OS is all about the depths of Tamil Cinema. Currently, I have two different apps, the first being a notes app for first-timers who don’t know much about Tamil Cinema. The next is a snake game for some relaxation. What was challenging for me was trying to figure out what appas I should make, especially since I would try to make it Tamil Cinema related. Another thing that was challenging was all the different uses of classes and the HTML rules, since it’s my first time using these types of things. The thorough details are in my Readme. Hope you guys like it!", "repo": "https://github.com/Vigaash-Lingeswaran/Web-OS", "demo": "https://vigaash-lingeswaran.github.io/Web-OS/"}]...
|
[{"post_id": 62510, "ts": "202 [{"post_id": 62510, "ts": "2026-09-05T22:20:26Z", "hours": 2.5419, "text": "Hey, I have been working a lot on the Tamil Cinema OS. Here’s what I have done. I first started off by creating another app. I wanted to make another game to sharpen my skills, so I decided to make the bubble shooter game. During this, I was able to learn a lot of new functions such as the Math functions and the degtorad functions. These functions allowed me to both control the angle that the player is aiming and control the way the aimed bubble ricochets. This was a little challenging for me because both of these were very new, so I had a difficult time trying to figure out how to use them in correlation with player inputs. Next steps would be to polish the whole OS."}, {"post_id": 35869, "ts": "2026-07-27T16:12:40Z", "hours": 2.98, "text": "Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done: I started off by creating and finishing the seventh app, which is a music player. This music player has a playlist of many Tamil Cinema hits. To create this, I first had to use for the first time to play the audio. From there, I created an array that would cycle through the different songs and their respective cover pictures. For the styling, I wanted it to be kind of similar to how a Spotify player would look, so I had to create a rectangular container and create adequate buttons and styles for the app. Overall, I was able to learn a lot about how audio is referenced in HTML through this app. After this, I just polished up all the other apps, which included the calculator and the games, where I was able to get the clear button working on the calculator and also get the scores working on the games. Overall, I was able to learn a lot in these devlogs about the variety of hidden functions inside HTML. Next steps would just be to finish polishing any of the other apps."}, {"post_id": 34677, "ts": "2026-07-25T16:16:47Z", "hours": 6.1967, "text": "Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have got done: I started off with finishing off the fifth app, which would be Youtube. I decided that it would be better to allow the viewer to watch a playlist instead of the whole browser, as it would also match my theme because now, the viewer gets to wtach trailer of Tamil movies. I did this using the youtubeiframeAPI. This allowed me to get the exact version of Youtube, but also customizable to my liking. After this, I used an array with all of the video IDs and made a function that would cycle through the videos. Overall, it was a good learning experience for me with these new features. The next thing I did was make a fun facts page. This had a bunch of different fun facts about Tamil Cinema. I did this by creating a caption carousel. I used an index, and used that to cycle through the different facts. Overall, I learned a lot about the different functions within HTML and also about video playback in this devlog. Next steps would be to create my next app, which would be a music player with some good Tamil songs."}, {"post_id": 33581, "ts": "2026-07-23T16:58:01Z", "hours": 1.6439, "text": "Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done so far: The main thing I have been trying to accomplish is trying to create my fifth app, which would be Youtube. I have gotten all of the controls for the actual app icon all done, but I still need to work on trying to get it to connect. I tried using and then using the URL of Youtube, but that didn’t really work, as it refused to connect. I am trying to research some different ways I can try to attach the application. The other things I have been doing would just be trying to add some scores in the games I created. I am having a little hard time, as sometimes the score only updates the first time. Next steps would just be trying to get the fifth app done."}, {"post_id": 33044, "ts": "2026-07-22T16:31:57Z", "hours": 4.4944, "text": "Hey guys! I have been working a lot on the Tamil Cinema OS so far. Here’s what I have done so far: I started off by creating my third feature, which is the breakout game. This is where there are tiles you must break with a bouncing ball. I decided that instead of keeping the game’s code inside the original index file, I would keep it as a different file and then use to link those two files together. I also decided to implement these features into the other apps. The code for this project wasn’t that hard, as I was able to use my previous game development experience to help with most of the parts, but there were some aspects, like the tiles and their Arrays that I had a little trouble with. After this, I created the calculator app. This app was pretty simple, as it was just a bunch of buttons and some functions in Javascript. The hard part about this would be figuring out what type of style I wanted for it. Next steps would be to start and finish up the fifth app, and maybe polish some of the other apps as well."}, {"post_id": 30236, "ts": "2026-07-17T17:34:27Z", "hours": 1.3797, "text": "Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done so far: I have finally finished the second feature of the Tamil Cinema OS, which is the Snake Game. I learned how to code this directly into the HTML file. Originally, I thought I would have to create a new file with the game code, but after some research, I learned I could just put it into the original file. The code for this game was a little difficult, as I was having a little trouble with the part where I would have to generate the new apple when it was eaten. After some research, I learned how to use a random number generator in correlation to the grids of the game to have the apples spawn in a different place. I also decided in the end that the snake would be able to go through walls and would only die if it bumped into itself. I learned a lot through this game, especially how to use a variety of functions in HTML. Next steps would be to polish the website off for final touches."}, {"post_id": 29605, "ts": "2026-07-16T17:25:42Z", "hours": 5.1017, "text": "Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done so far. I have finally finished my first app, which is the notes app. I wanted to kind of make this app like a guide for a first- time viewer, so it has things like recommendations for different movies, and also has things like the history of Tamil Cinema. I have also added some parts to the app that talk about Tamil music as well. This kind of took me a long time because it was a little hard for me to try and figure out what type of app I wanted to make originally, and there were a lot of bugs that I only figured out after looking closely at my variable declaration. i had accidentally deleted the aspect of the app that changed the cursor type to a pointer, but I didn’t know until a long time after, which is why there is so much time spent on this devlog. I have learned a lot about Javascript in this time, as it has introduced me to arrays and how they should be used, especially for the feature of my notes app that allows the viewer to see all of the notes. Next steps would be to create a second app. I am thinking of a game of some sort, but I haven’t completely thought it out."}, {"post_id": 25363, "ts": "2026-07-09T16:42:43Z", "hours": 5.3653, "text": "Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I did: I started off by creating my first app. This has been a pretty hard process as I had a little trouble trying to get the code in the right place, especially for the part where I am trying to make the window only take up until the top bar, instead of the whole screen. I have also finished up the top bar with all of the buttons however, sometimes the click function to open the welcome window doesn’t work. i have checked my code multiple times, but I still do not know where I am going wrong for that part. I have learned a lot in this time, as it was my first time using HTML, and I am still getting comfortable with it. I had also spent a lot of time trying to figure out better backgrounds for my OS because every time I try to make a new one, it always comes out too blurry for my liking. In the end, I was able to fix all of those problems. next steps would be to finish the final touches on my first Movie ranker application, and also go on to creating my second app, which will probably be something that involves trivia or something, haven’t really thought about it yet. Please feel free to leave any suggestions for my project."}, {"post_id": 23625, "ts": "2026-07-06T18:06:01Z", "hours": 1.0533, "text": "Hey guys! This is my first devlog for the WEB OS. Here’s what I did: I decided to make an OS that is dedicated to Tamil Cinema. I have just started the coding for it, but it is my first time using HTML, and have no experience with CSS or JS, so that’s why it took me a long time to get this done. So far, I have gotten the title screen down and have started to work on my first window. Next steps would just be to have finished my first window and move on to the second or third ones. I could also start to work on making my OS a little bit more polished."}]...
|
Title: My very own WebOS by @Vigaash | Stardance
Title: My very own WebOS by @Vigaash | Stardance
Devlogs:
Hey guys! This is my first devlog for the WEB OS. Here’s what I did: I decided to make an OS that is dedicated to Tamil Cinema. I have just started the coding for it, but it is my first time using HTML, and have no experience with CSS or JS, so that’s why it took me a long time to get this done. So far, I have gotten the title screen down and have started to work on my first window. Next steps would just be to have finished my first window and move on to the second or third ones. I could also start to work on making my OS a little bit more polished.
Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I did: I started off by creating my first app. This has been a pretty hard process as I had a little trouble trying to get the code in the right place, especially for the part where I am trying to make the window only take up until the top bar, instead of the whole screen. I have also finished up the top bar with all of the buttons however, sometimes the click function to open the welcome window doesn’t work. i have checked my code multiple times, but I still do not know where I am going wrong for that part. I have learned a lot in this time, as it was my first time using HTML, and I am still getting comfortable with it. I had also spent a lot of time trying to figure out better backgrounds for my OS because every time I try to make a new one, it always comes out too blurry for my liking. In the end, I was able to fix all of those problems. next steps would be to finish the final touches on my first Movie ranker application, and also go on to creating my second app, which will probably be something that involves trivia or something, haven’t really thought about it yet. Please feel free to leave any suggestions for my project.
Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done so far. I have finally finished my first app, which is the notes app. I wanted to kind of make this app like a guide for a first- time viewer, so it has things like recommendations for different movies, and also has things like the history of Tamil Cinema. I have also added some parts to the app that talk about Tamil music as well. This kind of took me a long time because it was a little hard for me to try and figure out what type of app I wanted to make originally, and there were a lot of bugs that I only figured out after looking closely at my variable declaration. i had accidentally deleted the aspect of the app that changed the cursor type to a pointer, but I didn’t know until a long time after, which is why there is so much time spent on this devlog. I have learned a lot about Javascript in this time, as it has introduced me to arrays and how they should be used, especially for the feature of my notes app that allows the viewer to see all of the notes. Next steps would be to create a second app. I am thinking of a game of some sort, but I haven’t completely thought it out.
Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done so far: I have finally finished the second feature of the Tamil Cinema OS, which is the Snake Game. I learned how to code this directly into the HTML file. Originally, I thought I would have to create a new file with the game code, but after some research, I learned I could just put it into the original file. The code for this game was a little difficult, as I was having a little trouble with the part where I would have to generate the new apple when it was eaten. After some research, I learned how to use a random number generator in correlation to the grids of the game to have the apples spawn in a different place. I also decided in the end that the snake would be able to go through walls and would only die if it bumped into itself. I learned a lot through this game, especially how to use a variety of functions in HTML. Next steps would be to polish the website off for final touches.
Hey guys! I have been working a lot on the Tamil Cinema OS so far. Here’s what I have done so far: I started off by creating my third feature, which is the breakout game. This is where there are tiles you must break with a bouncing ball. I decided that instead of keeping the game’s code inside the original index file, I would keep it as a different file and then use to link those two files together. I also decided to implement these features into the other apps. The code for this project wasn’t that hard, as I was able to use my previous game development experience to help with most of the parts, but there were some aspects, like the tiles and their Arrays that I had a little trouble with. After this, I created the calculator app. This app was pretty simple, as it was just a bunch of buttons and some functions in Javascript. The hard part about this would be figuring out what type of style I wanted for it. Next steps would be to start and finish up the fifth app, and maybe polish some of the other apps as well.
Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done so far: The main thing I have been trying to accomplish is trying to create my fifth app, which would be Youtube. I have gotten all of the controls for the actual app icon all done, but I still need to work on trying to get it to connect. I tried using and then using the URL of Youtube, but that didn’t really work, as it refused to connect. I am trying to research some different ways I can try to attach the application. The other things I have been doing would just be trying to add some scores in the games I created. I am having a little hard time, as sometimes the score only updates the first time. Next steps would just be trying to get the fifth app done.
Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have got done: I started off with finishing off the fifth app, which would be Youtube. I decided that it would be better to allow the viewer to watch a playlist instead of the whole browser, as it would also match my theme because now, the viewer gets to wtach trailer of Tamil movies. I did this using the youtubeiframeAPI. This allowed me to get the exact version of Youtube, but also customizable to my liking. After this, I used an array with all of the video IDs and made a function that would cycle through the videos. Overall, it was a good learning experience for me with these new features. The next thing I did was make a fun facts page. This had a bunch of different fun facts about Tamil Cinema. I did this by creating a caption carousel. I used an index, and used that to cycle through the different facts. Overall, I learned a lot about the different functions within HTML and also about video playback in this devlog. Next steps would be to create my next app, which would be a music player with some good Tamil songs.
Hey guys! I have been working a lot on the Tamil Cinema OS. Here’s what I have done: I started off by creating and finishing the seventh app, which is a music player. This music player has a playlist of many Tamil Cinema hits. To create this, I first had to use for the first time to play the audio. From there, I created an array that would cycle through the different songs and their respective cover pictures. For the styling, I wanted it to be kind of similar to how a Spotify player would look, so I had to create a rectangular container and create adequate buttons and styles for the app. Overall, I was able to learn a lot about how audio is referenced in HTML through this app. After this, I just polished up all the other apps, which included the calculator and the games, where I was able to get the clear button working on the calculator and also get the scores working on the games. Overall, I was able to learn a lot in these devlogs about the variety of hidden functions inside HTML. Next steps would just be to finish polishing any of the other apps.
Hey, I have been working a lot on the Tamil Cinema OS. Here’s what I have done. I first started off by creating another app. I wanted to make another game to sharpen my skills, so I decided to make the bubble shooter game. During this, I was able to learn a lot of new functions such as the Math functions and the degtorad functions. These functions allowed me to both control the angle that the player is aiming and control the way the aimed bubble ricochets. This was a little challenging for me because both of these were very new, so I had a difficult time trying to figure out how to use them in correlation with player inputs. Next steps would be to polish the whole OS.
Ships:
Hey guys! I have made my own OS called the Tamil Cinema OS. This OS is all about the depths of Tamil Cinema. Currently, I have two different apps, the first being a notes app for first-timers who don’t know much about Tamil Cinema. The next is a snake game for some relaxation. What was challenging for me was trying to figure out what appas I should make, especially since I would try to make it Tamil Cinema related. Another thing that was challenging was all the different uses of classes and the HTML rules, since it’s my first time using these types of things. The thorough details are in my Readme. Hope you guys like it!
I made the Tamil Cinema OS, an OS dedicated to Tamil Cinema. Dive in to learn more about Tamil Cinema! It was built using HTML, Javascript, CSS, and too much knowledge about Tamil Cinema. Currently, there are seven apps that are active. What was challenging for me was trying to use arrays, as it was a little confusing to me for HTML. Currently, the apps are: Kollywood Notes, Snake Game, Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, and Kollywood Beats. New features are: Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, and Kollywood Beats. More thorough details are in my Readme! Hope you guys like it!
I made the Tamil Cinema OS, an OS dedicated to Tamil Cinema. Dive in to learn more about Tamil Cinema! It was built using HTML, Javascript, CSS, and too much knowledge about Tamil Cinema. Currently, there are seven apps that are active. What was challenging for me was trying to use arrays, as it was a little confusing to me for HTML. Currently, the apps are: Kollywood Notes, Snake Game, Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, and Kollywood Beats. New features are: Breakout Game, Calculator, Kollywood Trailers, Kollywood Facts, Kollywood Beats, and Bubble Shooter. More thorough details are in my Readme! I am doing another ship because I really need a small amount of Stardust for a purchase. Hope you guys like it!...
|
1793116294.0484903
|
1793202694.0484903
|
|
32859
|
CornOS by @corn | Stardance
|
corn
|
1
|
31.0
|
231
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T12:53:33Z", "hours": 31.0, "multiplier": 7.35, "payout": 231, "blessing": "neutral", "text": "A 32-bit x86 OS from complete scratch with GRUB as its bootloader, for educational purpose only.", "repo": "https://github.com/dcorn-stone/CornOS", "demo": "https://github.com/dcorn-stone/CornOS/releases"}]...
|
[{"post_id": 56602, "ts": "202 [{"post_id": 56602, "ts": "2026-08-28T12:50:21Z", "hours": 4.935, "text": "Finished tidying up and completing the ps/2 driver. Preparing to ship now, and try to implement paging in the future!"}, {"post_id": 52766, "ts": "2026-08-23T03:29:28Z", "hours": 7.145, "text": "Just trying to organize things in my codebase, completing the ps/2 scan code decoding function for set 2, and preparing to move on to implementing paging"}, {"post_id": 30524, "ts": "2026-07-18T05:26:27Z", "hours": 3.0786, "text": "Just made my OS capable of loading either exactly one Multiboot module or none. The module can be verified inside a debugger (gdb) which the EAX register should be set to 0xDEADBEEF."}, {"post_id": 27115, "ts": "2026-07-12T11:53:46Z", "hours": 4.3775, "text": "Made output logic better"}, {"post_id": 26357, "ts": "2026-07-11T03:11:05Z", "hours": 1.9347, "text": "Got the keyboard working!!!"}, {"post_id": 26307, "ts": "2026-07-11T01:02:22Z", "hours": 9.9053, "text": "Currently working on a ps/2 keyboard driver, only completing this for basic input. I have just done the state machine and scan code conversion, now trying to handle key events."}]...
|
Title: CornOS by @corn | Stardance
Devlogs:
Curre Title: CornOS by @corn | Stardance
Devlogs:
Currently working on a ps/2 keyboard driver, only completing this for basic input. I have just done the state machine and scan code conversion, now trying to handle key events.
Got the keyboard working!!!
Made output logic better
Just made my OS capable of loading either exactly one Multiboot module or none. The module can be verified inside a debugger (gdb) which the EAX register should be set to 0xDEADBEEF.
Just trying to organize things in my codebase, completing the ps/2 scan code decoding function for set 2, and preparing to move on to implementing paging
Finished tidying up and completing the ps/2 driver. Preparing to ship now, and try to implement paging in the future!
Ships:
A 32-bit x86 OS from complete scratch with GRUB as its bootloader, for educational purpose only....
|
1793123288.051202
|
1793209688.051202
|
|
35978
|
Quick, Timer's UP! by @ishanmeher09 | Stardanc Quick, Timer's UP! by @ishanmeher09 | Stardance...
|
ishanmeher09
|
2
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-10T22:25:11Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a collection of fast paced minigames. And this is my second version. The first version had two minigames, a platformer game and a clicker game, but for my second version, I added two more, and they’re a bit more interesting. I added a seesaw game, and it has blocks that randomly spawn at different locations on the plank, and the player has to select a weight and click at different spots to balance it out. Before there was a way to exploit how it works, and click below the plank so the plank would never hit the ground, but you can’t do that anymore. Basically the plank can’t touch the ground until the timer ends. I then added a launcher game, and it has a target that moves back and forth, and the player needs to click and hold or hold spacebar to settle on a power for the shot, and use the mouse to aim the barrel. They need to hit the target before the timer ends. Also, now the timer doesn’t start until the one word instructions on each game fade. Those are the main differences, along with the pause menu, and yeah!", "repo": "https://github.com/whatisupyo12/WarioWareGame/", "demo": "https://2002-2.itch.io/quick-timers-up"}, {"ship_num": 2, "ts": "2026-09-29T23:41:25Z", "hours": 20.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a collection of fast paced minigames, but added my own personal design choices and sprites I made too. It took me a while, because I had a lot of bugs that needed fixing, but it works now. I added a player sprite that has animations, and also worked on my finished screen so it has confetti (yay). My death screen’s pretty basic though. In general for now, it works, and I’ll probably be adding more soon.", "repo": "https://github.com/whatisupyo12/WarioWareGame/", "demo": "https://2002-2.itch.io/quick-timers-up"}]...
|
[{"post_id": 78475, "ts": "202 [{"post_id": 78475, "ts": "2026-10-10T21:59:29Z", "hours": 7.7939, "text": "I finished my fourth minigame and final, a launcher minigame, where the player has to hold down click or space while aiming the cannon, in order to hit the target and win. I also completed third minigame too, the balancing one (I forgot to devlog it, oops). It’s a seesaw minigame, and basically weights fall and how have to balance the seesaw by selecting different weights and dropping them. It now has weight labels which it didnt have earlier, and weights automatically spawn now, when initially it just had two blocks that would cause a tilt."}, {"post_id": 77117, "ts": "2026-10-05T17:43:48Z", "hours": 2.83, "text": "Worked on a functional pause screen that goes back to menu or can resume game, took a while since I wasnt able to figure out why I couldn’t do some of the functions to hide the pause panel within one function, but if it works, it works."}, {"post_id": 75403, "ts": "2026-09-29T23:37:30Z", "hours": 1.675, "text": "I finished tweaking all the bugs, and my game is ready to ship with my two current minigames."}, {"post_id": 75222, "ts": "2026-09-29T14:43:25Z", "hours": 7.9036, "text": "Finished an ending/lose scene, and finished all minigames, I’m probably just going to start working on more minigames now."}, {"post_id": 74906, "ts": "2026-09-28T15:57:57Z", "hours": 7.665, "text": "Finished both minigames and now I’ll be working on the final ending scene as in a custom win/loss"}, {"post_id": 73432, "ts": "2026-09-25T02:33:21Z", "hours": 2.5306, "text": "Working on Game UI, and its functional and works now, also made sprites"}]...
|
Title: Quick, Timer's UP! by @ishanmeher09 | S Title: Quick, Timer's UP! by @ishanmeher09 | Stardance
Devlogs:
Working on Game UI, and its functional and works now, also made sprites
Finished both minigames and now I’ll be working on the final ending scene as in a custom win/loss
Finished an ending/lose scene, and finished all minigames, I’m probably just going to start working on more minigames now.
I finished tweaking all the bugs, and my game is ready to ship with my two current minigames.
Worked on a functional pause screen that goes back to menu or can resume game, took a while since I wasnt able to figure out why I couldn’t do some of the functions to hide the pause panel within one function, but if it works, it works.
I finished my fourth minigame and final, a launcher minigame, where the player has to hold down click or space while aiming the cannon, in order to hit the target and win. I also completed third minigame too, the balancing one (I forgot to devlog it, oops). It’s a seesaw minigame, and basically weights fall and how have to balance the seesaw by selecting different weights and dropping them. It now has weight labels which it didnt have earlier, and weights automatically spawn now, when initially it just had two blocks that would cause a tilt.
Ships:
I made a collection of fast paced minigames, but added my own personal design choices and sprites I made too. It took me a while, because I had a lot of bugs that needed fixing, but it works now. I added a player sprite that has animations, and also worked on my finished screen so it has confetti (yay). My death screen’s pretty basic though. In general for now, it works, and I’ll probably be adding more soon.
I made a collection of fast paced minigames. And this is my second version. The first version had two minigames, a platformer game and a clicker game, but for my second version, I added two more, and they’re a bit more interesting. I added a seesaw game, and it has blocks that randomly spawn at different locations on the plank, and the player has to select a weight and click at different spots to balance it out. Before there was a way to exploit how it works, and click below the plank so the plank would never hit the ground, but you can’t do that anymore. Basically the plank can’t touch the ground until the timer ends. I then added a launcher game, and it has a target that moves back and forth, and the player needs to click and hold or hold spacebar to settle on a power for the shot, and use the mouse to aim the barrel. They need to hit the target before the timer ends. Also, now the timer doesn’t start until the one word instructions on each game fade. Those are the main differences, along with the pause menu, and yeah!...
|
1793148871.5041335
|
1793235271.5041335
|
|
37082
|
Stickytab by @NotSuspiciousProgrammer | Stardance
|
NotSuspiciousProgrammer
|
4
|
31.0
|
301
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-15T23:10:23Z", "hours": 2.0, "multiplier": 8.71, "payout": 23, "blessing": "neutral", "text": "What’s New? I fixed some major bugs in Stickytab, and made updates to adapt to other screen ratios! Now, Stickytab should work well on any screen ratio (you will still receive a warning just in case). What Is Stickytab? Stickytab was originally part of a mission for a custom new tab. Because it is part of a mission, please rate originality based on the components of Stickytab (like my stickies and calendar), and not based on the concept of Stickytab (a custom new tab, which was from the mission). Stickytab is designed to boost productivity, and it features stickies, a calculator, a calendar, and a method for quickly accessing webpages. For more information about the method for webpages, see my README. What Was Challenging? The calendar bug was the hardest to fix. There’s a devlog about it below, describing how I fixed the bug and caused two more bugs in the process. Can anyone else relate to this? Ratings I hope you enjoy exploring Stickytab! Please give descriptive ratings to help me improve :)", "repo": "https://github.com/kpoovakan/stickytab", "demo": "https://kpoovakan.github.io/stickytab/"}, {"ship_num": 2, "ts": "2026-09-01T02:50:52Z", "hours": 11.0, "multiplier": 12.89, "payout": 175, "blessing": "neutral", "text": "This is a customizable New Tab page designed for better productivity!! A sticky manager displays sticky notes, where you can organize reminders for yourself. Add events to a calendar, which displays the current month and the next upcoming month. Save frequently visited sites, quickly search through them using the webpage search bar, and visit the site with keyboard shortcuts! Quickly view the time and date, and access a simple calculator or Desmos calculator. Set preferences in the settings area. For more details about Stickytab’s many features, take a look at my README. In this ship, I had to utilize complex JSON for the calendar component of Stickytab. This challenged me a lot, and I was stuck with my bugs for many hours! Eventually I managed to find all the different bugs, and the calendar is a working component of Stickytab. Please explore my Stickytab project - I hope you find it a useful tool for productivity!! Check out the README file (that’s why it’s called “readme”) before using Stickytab.", "repo": "https://github.com/kpoovakan/stickytab", "demo": "https://kpoovakan.github.io/stickytab/"}, {"ship_num": 3, "ts": "2026-08-07T02:59:18Z", "hours": 9.0, "multiplier": 9.87, "payout": 103, "blessing": "neutral", "text": "Stickytab is a better New Tab page designed for productivity and organization. You can save sticky notes and fill them with reminders, quickly access a calculator, and save frequently visited sites. View the date and time (both 12-hour and 24-hour time formats are supported) and quickly access the README for help anytime. When you enter a URL for a webpage, there is a popup that searches through your saved sites to find a saved site that matches the URL you are entering. You can filter through the results using the up and down arrow keys, and use the enter key to open the site. This can save a lot of time when you are opening websites! You can create reminders for yourself by posting sticky notes on Stickytab. (That’s why it’s called Stickytab!!) Up to twelve stickies can be viewed on the page; additional stickies can be viewed by pressing the corresponding button. Preferences for the default search engine, time format, and Desmos calculator shortcut can be edited and saved locally. One of the most challenging parts of Stickytab was using the browser’s local storage; I have never done that before! The other challenging part was creating the recursive JavaScript function that searches through your saved sites. I somehow managed to fix all my bugs.. and ended up with a complete and fully working New Tab page. Hope you enjoy Stickytab! Feel free to test it out, or look through the README for more information :)", "repo": "https://github.com/kpoovakan/stickytab", "demo": "https://kpoovakan.github.io/stickytab/"}, {"ship_num": 4, "ts": "2026-07-31T16:36:38Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a fully working NewTab page! I call it Stickytab because of my favorite part: you can stick sticky notes on the new tab page! The sticky notes are saved locally to your browser, which means that you can save your sticky notes and see them later, even after you close the page. You can also save sites (kind of like browser bookmarks, but with easier access) to the new tab page, also saved locally to your browser. Figuring out how to access and use local browser storage was the hardest part for me, because it is something I have not done before in JavaScript. It definitely took a lot of W3Schools articles!", "repo": "https://github.com/kpoovakan/stickytab", "demo": "https://kpoovakan.github.io/stickytab/"}]...
|
[{"post_id": 68879, "ts": "202 [{"post_id": 68879, "ts": "2026-09-15T22:52:12Z", "hours": 1.0242, "text": "I worked on Stickytab’s responsiveness! Stickytab now works on all screen ratios. Even so, there’s still a warning for other screen ratios, just in case there’s something I missed. I don’t think I missed anything, but it’s best to be prepared :)"}, {"post_id": 68335, "ts": "2026-09-14T23:22:32Z", "hours": 1.2042, "text": "I found a bug in the calendar component, fixed it in ten minutes. Guess what? That fix caused two more bugs. Those took over an hour of searching through my code to fix, and it was caused by ONE TINY VARIABLE DECLARATION MISTAKE. Like, seriously?? I’m glad my bug is fixed now, and the calendar works properly, but… an hour? For a single variable declaration thingy?? Can anyone else relate to this?"}, {"post_id": 59337, "ts": "2026-09-01T02:18:13Z", "hours": 5.9306, "text": "FINALLY!! The calendar component of Stickytab has been completed! Now, you can add events to the calendar, to the current month or next month. Events can also be removed if they’re cancelled. The events are saved locally to your browser, and their aesthetics can be customized through Stickytab’s settings."}, {"post_id": 54035, "ts": "2026-08-24T19:49:03Z", "hours": 1.5517, "text": "Sneaky bugs… always hiding in the darkest corners of my code. In continuation for working on the calendar component of Stickytab, I fixed all the bugs I could find. I also improved the aesthetics of the calendar, and started some code for the special calendar customization components!"}, {"post_id": 51973, "ts": "2026-08-21T23:33:45Z", "hours": 2.9792, "text": "The core code for a calendar was added to Stickytab! Since I usually use saved sites through the webpage search bar, and not through directly clicking the link in the list on the right, I decided to put a more productive tool in the right-hand side of Stickytab. Sites can still be saved through the “Saved Sites” button - and they are very usable through the helpful webpage search bar! Next I will work on adding cool functions to Stickytab’s calendar!!"}, {"post_id": 49997, "ts": "2026-08-19T00:56:48Z", "hours": 0.8503, "text": "Responsiveness added - sort of! After the second ship, a lot of people talked about the peeving-ness of restricting Stickytab to a 16:9 landscape screen ratio. I edited all three main files - the HTML, CSS, and JS - to support other screen ratios. Stickytab still works best with a 16:9 landscape screen ratio, but now it is physically possible to use it with a different ratio."}, {"post_id": 42400, "ts": "2026-08-07T02:50:57Z", "hours": 1.8253, "text": "Updated the README and fixed hidden bugs throughout Stickytab. I think I’m ready to ship!!"}, {"post_id": 42147, "ts": "2026-08-06T19:10:50Z", "hours": 2.2278, "text": "Squashed all my bugs and added KEYBOARD SHORTCUTS to the search autocomplete! Now it’s easy to navigate through and open saved sites; the up and down arrow keys move through the list, and the enter key opens the site. If you start by typing “s”, then it finds all your saved sites that begin with “s” (not including the http). If you continue by typing “t” to make “st”, then it finds all your saved sites that begin with “st”. To-do: Update and improve the README Preference and site saving with a .json file? Add dotfiles to the repo Add font tags to calculator Add thing where using the arrow to go to the very bottom of the autocomplete list and beyond the bottom will exit the autocomplete to go to root URLs instead of saved ones"}, {"post_id": 41030, "ts": "2026-08-04T23:12:46Z", "hours": 1.1317, "text": "FINALLY!! I finished the recursive JavaScript loop to filter through saved sites and find ones that match the search query. Next I’ll be working on making those results usable, through clickable links and maybe through a keyboard shortcut with the enter key. Bugs to fix: One I found with saving sites without http or https Making this sites window close when a user exits the webpage search and left it blank To-do: Fix bugs (obviously) Add delete button to calculator - I just realized I forgot this Make links clickable (and add keyboard shortcuts?) Make popup div’s height automatically adjust to size of the list? Add a feature for exporting/importing all preferences, sites, and stickies in a .json?"}, {"post_id": 40252, "ts": "2026-08-03T17:35:35Z", "hours": 0.3597, "text": "I added a digit limit to the calculator, for both aesthetic purposes and for the bug that came with rounding JavaScript numbers. I also fixed some bugs regarding local storage saved preferences. Next I’ll start working on what might be the hardest part of Stickytab: a partial autocomplete for the webpage opener using saved sites."}, {"post_id": 40228, "ts": "2026-08-03T17:06:52Z", "hours": 0.4819, "text": "Added calculator customization! There’s a Desmos button on the calculator that allows you to quickly open the Desmos calculator. Now, you can customize your preferred Desmos calculator, saved locally to browser storage."}, {"post_id": 40184, "ts": "2026-08-03T16:17:33Z", "hours": 2.7125, "text": "I finally finished the calculator! Its code was significantly more confusing than I thought it would be, but I somehow managed to fix some of my bugs..? There’s a limit to how many digits are shown, but not how many digits are stored, and JavaScript slightly rounds the digits, so I should work on adding an actual digit limit."}, {"post_id": 33847, "ts": "2026-07-24T02:50:08Z", "hours": 5.8261, "text": "Finished the code for the site saving feature. Now, favorite sites can be saved (locally on your browser) and accessed anytime. The sticky manager is finished for now. I also completed a settings page which can store preferences for time formats and search engines. Time to decide between adding any finishing touches, or shipping this completed project!"}, {"post_id": 32112, "ts": "2026-07-21T01:38:08Z", "hours": 0.4447, "text": "I completed core code for stickies and updated the README. Next I’ll be adding to the other empty spaces of the newtab page. I’m planning for a calculator and saved shorctuts for web addresses, but this is usually what happens when I plan my coding: I plan things I plan some more I don’t follow my plans Anyway, regarding the things I’ve completed for this devlog: I used a different code editor for the stickies (so that I could compile all the graphics into a single HTML file) and I couldn’t figure out how to add Hackatime to it. Hopefully it’ll be fine..? I updated the README with, well, more detailed instructions. The README is still a little vague, so I should add to it later. I can’t think of anything else for this devlog. Back to coding!"}, {"post_id": 32051, "ts": "2026-07-20T22:47:48Z", "hours": 2.9247, "text": "I added basic search engine capabilities to Stickytab! In addition to this, there’s an iframe that’s ready for a file containing the code for the best part of this project: the stickies!! I guess it’s time to start working on those sticky notes before I move on to the other blank parts of the page."}, {"post_id": 31572, "ts": "2026-07-20T02:26:25Z", "hours": 0.2664, "text": "Added basic code files for my Stickytab project!"}]...
|
Title: Stickytab by @NotSuspiciousProgrammer | Sta Title: Stickytab by @NotSuspiciousProgrammer | Stardance
Devlogs:
Added basic code files for my Stickytab project!
I added basic search engine capabilities to Stickytab! In addition to this, there’s an iframe that’s ready for a file containing the code for the best part of this project: the stickies!! I guess it’s time to start working on those sticky notes before I move on to the other blank parts of the page.
I completed core code for stickies and updated the README. Next I’ll be adding to the other empty spaces of the newtab page. I’m planning for a calculator and saved shorctuts for web addresses, but this is usually what happens when I plan my coding: I plan things I plan some more I don’t follow my plans Anyway, regarding the things I’ve completed for this devlog: I used a different code editor for the stickies (so that I could compile all the graphics into a single HTML file) and I couldn’t figure out how to add Hackatime to it. Hopefully it’ll be fine..? I updated the README with, well, more detailed instructions. The README is still a little vague, so I should add to it later. I can’t think of anything else for this devlog. Back to coding!
Finished the code for the site saving feature. Now, favorite sites can be saved (locally on your browser) and accessed anytime. The sticky manager is finished for now. I also completed a settings page which can store preferences for time formats and search engines. Time to decide between adding any finishing touches, or shipping this completed project!
I finally finished the calculator! Its code was significantly more confusing than I thought it would be, but I somehow managed to fix some of my bugs..? There’s a limit to how many digits are shown, but not how many digits are stored, and JavaScript slightly rounds the digits, so I should work on adding an actual digit limit.
Added calculator customization! There’s a Desmos button on the calculator that allows you to quickly open the Desmos calculator. Now, you can customize your preferred Desmos calculator, saved locally to browser storage.
I added a digit limit to the calculator, for both aesthetic purposes and for the bug that came with rounding JavaScript numbers. I also fixed some bugs regarding local storage saved preferences. Next I’ll start working on what might be the hardest part of Stickytab: a partial autocomplete for the webpage opener using saved sites.
FINALLY!! I finished the recursive JavaScript loop to filter through saved sites and find ones that match the search query. Next I’ll be working on making those results usable, through clickable links and maybe through a keyboard shortcut with the enter key. Bugs to fix: One I found with saving sites without http or https Making this sites window close when a user exits the webpage search and left it blank To-do: Fix bugs (obviously) Add delete button to calculator - I just realized I forgot this Make links clickable (and add keyboard shortcuts?) Make popup div’s height automatically adjust to size of the list? Add a feature for exporting/importing all preferences, sites, and stickies in a .json?
Squashed all my bugs and added KEYBOARD SHORTCUTS to the search autocomplete! Now it’s easy to navigate through and open saved sites; the up and down arrow keys move through the list, and the enter key opens the site. If you start by typing “s”, then it finds all your saved sites that begin with “s” (not including the http). If you continue by typing “t” to make “st”, then it finds all your saved sites that begin with “st”. To-do: Update and improve the README Preference and site saving with a .json file? Add dotfiles to the repo Add font tags to calculator Add thing where using the arrow to go to the very bottom of the autocomplete list and beyond the bottom will exit the autocomplete to go to root URLs instead of saved ones
Updated the README and fixed hidden bugs throughout Stickytab. I think I’m ready to ship!!
Responsiveness added - sort of! After the second ship, a lot of people talked about the peeving-ness of restricting Stickytab to a 16:9 landscape screen ratio. I edited all three main files - the HTML, CSS, and JS - to support other screen ratios. Stickytab still works best with a 16:9 landscape screen ratio, but now it is physically possible to use it with a different ratio.
The core code for a calendar was added to Stickytab! Since I usually use saved sites through the webpage search bar, and not through directly clicking the link in the list on the right, I decided to put a more productive tool in the right-hand side of Stickytab. Sites can still be saved through the “Saved Sites” button - and they are very usable through the helpful webpage search bar! Next I will work on adding cool functions to Stickytab’s calendar!!
Sneaky bugs… always hiding in the darkest corners of my code. In continuation for working on the calendar component of Stickytab, I fixed all the bugs I could find. I also improved the aesthetics of the calendar, and started some code for the special calendar customization components!
FINALLY!! The calendar component of Stickytab has been completed! Now, you can add events to the calendar, to the current month or next month. Events can also be removed if they’re cancelled. The events are saved locally to your browser, and their aesthetics can be customized through Stickytab’s settings.
I found a bug in the calendar component, fixed it in ten minutes. Guess what? That fix caused two more bugs. Those took over an hour of searching through my code to fix, and it was caused by ONE TINY VARIABLE DECLARATION MISTAKE. Like, seriously?? I’m glad my bug is fixed now, and the calendar works properly, but… an hour? For a single variable declaration thingy?? Can anyone else relate to this?
I worked on Stickytab’s responsiveness! Stickytab now works on all screen ratios. Even so, there’s still a warning for other screen ratios, just in case there’s something I missed. I don’t think I missed anything, but it’s best to be prepared :)
Ships:
I made a fully working NewTab page! I call it Stickytab because of my favorite part: you can stick sticky notes on the new tab page! The sticky notes are saved locally to your browser, which means that you can save your sticky notes and see them later, even after you close the page. You can also save sites (kind of like browser bookmarks, but with easier access) to the new tab page, also saved locally to your browser. Figuring out how to access and use local browser storage was the hardest part for me, because it is something I have not done before in JavaScript. It definitely took a lot of W3Schools articles!
Stickytab is a better New Tab page designed for productivity and organization. You can save sticky notes and fill them with reminders, quickly access a calculator, and save frequently visited sites. View the date and time (both 12-hour and 24-hour time formats are supported) and quickly access the README for help anytime. When you enter a URL for a webpage, there is a popup that searches through your saved sites to find a saved site that matches the URL you are entering. You can filter through the results using the up and down arrow keys, and use the enter key to open the site. This can save a lot of time when you are opening websites! You can create reminders for yourself by posting sticky notes on Stickytab. (That’s why it’s called Stickytab!!) Up to twelve stickies can be viewed on the page; additional stickies can be viewed by pressing the corresponding button. Preferences for the default search engine, time format, and Desmos calculator shortcut can be edited and saved locally. One of the most challenging parts of Stickytab was using the browser’s local storage; I have never done that before! The other challenging part was creating the recursive JavaScript function that searches through your saved sites. I somehow managed to fix all my bugs.. and ended up with a complete and fully working New Tab page. Hope you enjoy Stickytab! Feel free to test it out, or look through the README for more information :)
This is a customizable New Tab page designed for better productivity!! A sticky manager displays sticky notes, where you can organize reminders for yourself. Add events to a calendar, which displays the current month and the next upcoming month. Save frequently visited sites, quickly search through them using the webpage search bar, and visit the site with keyboard shortcuts! Quickly view the time and date, and access a simple calculator or Desmos calculator. Set preferences in the settings area. For more details about Stickytab’s many features, take a look at my README. In this ship, I had to utilize complex JSON for the calendar component of Stickytab. This challenged me a lot, and I was stuck with my bugs for many hours! Eventually I managed to find all the different bugs, and the calendar is a working component of Stickytab. Please explore my Stickytab project - I hope you find it a useful tool for productivity!! Check out the README file (that’s why it’s called “readme”) before using Stickytab.
What’s New? I fixed some major bugs in Stickytab, and made updates to adapt to other screen ratios! Now, Stickytab should work well on any screen ratio (you will still receive a warning just in case). What Is Stickytab? Stickytab was originally part of a mission for a custom new tab. Because it is part of a mission, please rate originality based on the components of Stickytab (like my stickies and calendar), and not based on the concept of Stickytab (a custom new tab, which was from the mission). Stickytab is designed to boost productivity, and it features stickies, a calculator, a calendar, and a method for quickly accessing webpages. For more information about the method for webpages, see my README. What Was Challenging? The calendar bug was the hardest to fix. There’s a devlog about it below, describing how I fixed the bug and caused two more bugs in the process. Can anyone else relate to this? Ratings I hope you enjoy exploring Stickytab! Please give descriptive ratings to help me improve :)...
|
1793116499.686392
|
1793202899.686392
|
|
37382
|
My Website! by @Dana | Stardance
|
Dana
|
2
|
31.0
|
195
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-13T01:05:21Z", "hours": 27.0, "multiplier": 7.01, "payout": 188, "blessing": "neutral", "text": "I decided to do this to experiment with a new language and create a page about myself—so people can get to know me, or simply as a project I can improve later on.", "repo": "https://github.com/danovich2009-design/Mi-pagina", "demo": "https://mywebpagedanrl.netlify.app"}, {"ship_num": 2, "ts": "2026-07-19T20:40:30Z", "hours": 4.0, "multiplier": 2.04, "payout": 7, "blessing": "neutral", "text": "I created a personal “About Me” webpage featuring a modern, dark, and elegant design using my favorite colors; I built the foundation of the site using HTML and Tailwind CSS. It includes sections covering my background, my home country (Colombia), my passion for horseback riding, my favorite video games, and a card-based gallery. It is currently in beta, as I still need to polish a few details and refine certain design elements. The most challenging part was setting up the responsive structure and resolving technical issues related to images and browser compatibility. I am proud of the visual outcome, the thematic consistency, and the fact that I achieved a design that is both attractive and functional.", "repo": "https://github.com/danovich2009-design/Mi-pagina", "demo": "https://mywebpagedanrl.netlify.app"}]...
|
[{"post_id": 46065, "ts": "202 [{"post_id": 46065, "ts": "2026-08-13T00:38:07Z", "hours": 3.0808, "text": "After a few tweaks, translating all the text into English, and uploading my complete code to GitHub, I was finally able to finish my project :)"}, {"post_id": 42371, "ts": "2026-08-07T01:51:16Z", "hours": 3.0633, "text": "Today I’m starting to fix the HTML, and I decided to watch videos to learn more things to improve my page."}, {"post_id": 41096, "ts": "2026-08-05T02:34:14Z", "hours": 3.0069, "text": "Today I finally finished the CSS part—which took me four days—and it took so long because I ran into several errors I didn’t know how to fix."}, {"post_id": 40458, "ts": "2026-08-03T23:52:43Z", "hours": 2.0681, "text": "In my spare time, I managed to create a new page for the code, but I ran into some issues; since I haven’t finished the code yet, the main page looks disorganized and is missing the fonts I applied."}, {"post_id": 39251, "ts": "2026-08-02T03:14:46Z", "hours": 2.2356, "text": "Today, I can get a head start on the hobbies section and add a bit more movement to parts of my website to make it look more fluid."}, {"post_id": 38571, "ts": "2026-08-01T01:37:31Z", "hours": 3.3747, "text": "Today I started working on the second part of my website; I added more code and tried to make the page look better and be more organized. I still need to add some text, and then I’ll start on the third part."}, {"post_id": 33284, "ts": "2026-07-23T02:18:43Z", "hours": 1.845, "text": "I couldn’t make as much progress today, but I was able to implement new typefaces and create a new color palette that I’ll use for my page."}, {"post_id": 32738, "ts": "2026-07-22T02:37:34Z", "hours": 2.5075, "text": "Today, you can apply a new font to the home section of my page and change the text color."}, {"post_id": 32092, "ts": "2026-07-21T00:41:44Z", "hours": 5.1356, "text": "During my four hours of work today, I focused on reorganizing my webpage, writing new code, and integrating it with the existing code. I decided on a video-game-style theme for the homepage and began adding neon text and selecting a color palette."}, {"post_id": 31493, "ts": "2026-07-19T22:10:58Z", "hours": 0.4536, "text": "I added several sections: “Where I’m from,” “My country,” “Horseback riding,” “Video games,” and a card featuring my cat. I swapped out some images for more personal photos. I improved the layout and standardized the image sizes. I fixed coding errors and restructured the page to make it look better. I updated the GitHub README. Current status: The site is functional and in beta. I still want to keep refining it (tweaking details, adding social media links, etc.). I’m happy with the progress; I learned a lot about HTML, Tailwind, and how to organize a web project."}, {"post_id": 31455, "ts": "2026-07-19T20:32:08Z", "hours": 0.4617, "text": "Changing my page to https"}, {"post_id": 31410, "ts": "2026-07-19T19:11:29Z", "hours": 3.1539, "text": "Understanding how to create a website"}]...
|
Title: My Website! by @Dana | Stardance
Devlogs:
Title: My Website! by @Dana | Stardance
Devlogs:
Understanding how to create a website
Changing my page to https
I added several sections: “Where I’m from,” “My country,” “Horseback riding,” “Video games,” and a card featuring my cat. I swapped out some images for more personal photos. I improved the layout and standardized the image sizes. I fixed coding errors and restructured the page to make it look better. I updated the GitHub README. Current status: The site is functional and in beta. I still want to keep refining it (tweaking details, adding social media links, etc.). I’m happy with the progress; I learned a lot about HTML, Tailwind, and how to organize a web project.
During my four hours of work today, I focused on reorganizing my webpage, writing new code, and integrating it with the existing code. I decided on a video-game-style theme for the homepage and began adding neon text and selecting a color palette.
Today, you can apply a new font to the home section of my page and change the text color.
I couldn’t make as much progress today, but I was able to implement new typefaces and create a new color palette that I’ll use for my page.
Today I started working on the second part of my website; I added more code and tried to make the page look better and be more organized. I still need to add some text, and then I’ll start on the third part.
Today, I can get a head start on the hobbies section and add a bit more movement to parts of my website to make it look more fluid.
In my spare time, I managed to create a new page for the code, but I ran into some issues; since I haven’t finished the code yet, the main page looks disorganized and is missing the fonts I applied.
Today I finally finished the CSS part—which took me four days—and it took so long because I ran into several errors I didn’t know how to fix.
Today I’m starting to fix the HTML, and I decided to watch videos to learn more things to improve my page.
After a few tweaks, translating all the text into English, and uploading my complete code to GitHub, I was finally able to finish my project :)
Ships:
I created a personal “About Me” webpage featuring a modern, dark, and elegant design using my favorite colors; I built the foundation of the site using HTML and Tailwind CSS. It includes sections covering my background, my home country (Colombia), my passion for horseback riding, my favorite video games, and a card-based gallery. It is currently in beta, as I still need to polish a few details and refine certain design elements. The most challenging part was setting up the responsive structure and resolving technical issues related to images and browser compatibility. I am proud of the visual outcome, the thematic consistency, and the fact that I achieved a design that is both attractive and functional.
I decided to do this to experiment with a new language and create a page about myself—so people can get to know me, or simply as a project I can improve later on....
|
1793098444.2656374
|
1793184844.2656374
|
|
38416
|
Badgeware Tufty WeatherStation by @nouxinf | Stard Badgeware Tufty WeatherStation by @nouxinf | Stardance...
|
nouxinf
|
1
|
31.0
|
579
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T19:20:46Z", "hours": 31.0, "multiplier": 18.44, "payout": 579, "blessing": "neutral", "text": "I just finished making the Badgeware Tufty Weatherstation. The Badgeware Tufty is a cool digital conference badge made by Pimoroni that comes with a nice screen, buttons, a battery and the RP2350 chip. This makes it fairly capable at 8MiB of RAM, meaning it could be used for just about anything (yes 8MiB is enough). The default firmware has an apps launcher that can launch user-made MicroPython apps, like Weatherstation. Weatherstation is essentially a weather app. The two main features are 1. the multisensor strip: you can plug in a Pimoroni made multisensor stick to get temperature, humidity and air pressure data and 2. internet data from openmeteo. you set the coordinates for your locations in options.json (typing them in manually with the tufty’s 5 buttons would be a pain), it fetches place names for the coordinates (usually suburb, city) through OpenStreetMap Nominatim and displays them or you can set a nickname to override it. it then fetches the weather data from openmeteo and displays temperature, precipitation and wind direction with cool pixel art icons. it updates weather data every 10 minutes, but you can manually refresh by pressing A. The other two screens is the vitals screen, which displays battery percentage, though it doesn’t display the percentage if it’s charging due to a bug with either the firmware or the hardware where it always shows 100% even though its not, the amount of storage space left and the amount of ram free. The next screen after that is attribution info, giving credit to OpenStreetMap and Open-meteo which is legally required. If you’re reading this you probably don’t have a Badgeware Tufty and that’s ok because I forked the official Badgeware Web Emulator at https://try.badgewa.re/ (with permission “I think it’s acceptable to consider it MIT, but either way fork away- and enjoy!” - Gadgetoid, the developer of the simulator on the pimoroni discord) and updated it with some info, installation instructions, and an options.json setup tool. Try it out at https://weatherstation.nouxinf.net/ or press the “Try Project” button! Note that Vitals info data and sensor data are made up (obviously). I hope you enjoy this project!", "repo": "https://github.com/nouxinf/weatherstation", "demo": "https://weatherstation.nouxinf.net/"}]...
|
[{"post_id": 65536, "ts": "202 [{"post_id": 65536, "ts": "2026-09-10T18:54:32Z", "hours": 3.0042, "text": "Devlog #11 of the Badgeware Tufty Weatherstation (prob the final one) In this devlog I: added this vitals screen which includes battery percentage, flash storage space used and the amount of PSRAM free. It doesn’t show the percentage when its plugged in because for some reason the battery reader always gives 100% when its plugged in published the weatherstation website to https://weatherstation.nouxinf.net/ fix a few bugs"}, {"post_id": 64339, "ts": "2026-09-08T17:18:47Z", "hours": 2.3861, "text": "Devlog #10 of the Badgeware Tufty Weatherstation In this devlog I: added some more effective error handling moved a bunch of functions out of __init__.py into their own files to make the code cleaner add an attribution screen (pictured) to be legally compliant with copyright"}, {"post_id": 63098, "ts": "2026-09-06T18:20:34Z", "hours": 6.5119, "text": "Devlog #9 of the Badgeware Tufty Weatherstation In this devlog I: stripped down the fork of the badgeware web emulator to onl have the badge screen and console log then added content to the homepage talking about the app added a new page with installation instructions for users unfamiliar with the badgeware tufty in that tutorial page i made a tool that generates options.json configurations where you can set temperature unit and pick out coordinates on a map"}, {"post_id": 59070, "ts": "2026-08-31T17:54:39Z", "hours": 1.4375, "text": "Devlog #8 of the Badgeware Tufty Weatherstation In this devlog I: forked the badgeware web simulator with permission modified the backend slightly to “work on my machine” also modified the actual badge code to use badgeware libraries instead of micropython libraries to let it work on the emulator added a github action to automatically update whats on the simulator repo when a new weatherstation release comes out things i’ve yet to add: automatic time zone setting in the simulator: will add that by overriding secrets.py somehow reskinning the whole site to be a weatherstation homepage"}, {"post_id": 58207, "ts": "2026-08-30T15:49:08Z", "hours": 2.3372, "text": "Devlog #7 of the Badgeware Tufty Weatherstation In this devlog I: Made it that the A button allows refetching weather data Automatically refresh weather data every 10 minutes Have a text display that shows when the weather was last updated (respecting TIMEZONE setting in secrets.py) Fixed some issues so now most of the time you can plug and replug the multisensor stick. Doesn’t work very reliably though due to issues where the cable is half-connected yet the badge is trying to read from the sensor."}, {"post_id": 53955, "ts": "2026-08-24T17:43:27Z", "hours": 0.3058, "text": "Devlog #6 of the Badgeware Tufty Weatherstation In this devlog I: removed unused functions that were replaced by native 3.0 functions made it so that the app works without internet so you can just use it as a sensor"}, {"post_id": 53936, "ts": "2026-08-24T17:12:48Z", "hours": 4.6589, "text": "Devlog #5 of the Badgeware Tufty Weatherstation Stuff added since the last devlog: Updated firmware version: While I was working on a side project Pimoroni made new firmware versions so I ported it from 2.0.2 to 3.0.2 though I’m pretty sure it works with 3.0.0 3.0.1 Along with that I changed some functions to native ones like word wrapping and centering text that came with 3.0 I added a temperature icon to the internet weather, and added precipitation and wind direction both with icons (pictured) I modified someone else’s screenshot code to work on windows and have a few extra features, which is how the screenshot attached was taken. Added comment boxes generated by one of my side projects, https://commentboxgenerator.lemonsite.uk/ Write a readme and roadmap Things that have yet to be added (from the roadmap) Offline support internet is optional just like sensor Update weather every 1 hour or on request- Some basic forecast information (e.g. weather icons per day of the week) in another screen Web editor for options.json through Flask or Bun (preferrably something self contained though) Badge diagnostics page (e.g. storage space, RAM, battery) Fork badgeware web simulator to work with weatherstation by adding proxy"}, {"post_id": 39425, "ts": "2026-08-02T11:36:26Z", "hours": 2.7283, "text": "Devlog #4 of the Badgeware Tufty Weatherstation Stuff added in this devlog: Indicator to show how many pages there are and which one you’re on 16 weather icons that map to the WMO codes that openmeteo gives Temperature display (that respects units set in options.json) Potentially next I’ll code a precipitation levels display, and maybe some charts that show temperature and precipitation throughout the day when you press B."}, {"post_id": 37151, "ts": "2026-07-29T17:22:28Z", "hours": 4.6317, "text": "Devlog #3 of the Badgeware Tufty Weatherstation The Badgeware Tufty is this cool conference badge from Pimoroni that is programmable with MicroPython. I’ve been making a Weather Station app for it, which can use a Pimoroni multisensor kit to show temperature, humidity and air pressure, but soon it will be able to fetch weather data around the world from the internet. In the previous devlogs I added the multisensor screen. Now I’ve started working on the weather from the internet part. So far it gets coordinates from options.json, and can show the suburb/neighbourhood and the city from Openstreetmap Nominatim. You can also optionally set a nickname for a location. Next up I’ll actually be putting the weather info in. That’ll involve getting data from Openmeteo, drawing a bunch of pixel art icons for each (~80) weather codes and rendering out the data."}, {"post_id": 34081, "ts": "2026-07-24T15:30:16Z", "hours": 0.5519, "text": "Added an option to use Fahrenheit or Kelvin instead of Celsius by editing options.json on the computer"}, {"post_id": 34047, "ts": "2026-07-24T14:28:24Z", "hours": 2.8611, "text": "I’m making a weather app for the Badgeware Tufty, a cool badge wearable that’s programmable with MicroPython! First step that I’ve done for my app is coding a screen that shows the temperature, humidity and air pressure sensed from the multisensor strip that comes with the Badgeware Tufty STEM kit. I’ve made 30 pixel art icons so far that scale with the values. Next up I’ll be adding the option to grab weather data from the internet using Openmeteo API for the weather data and Openstreetmap nominatim to get a place name. The locations would have to be configured through a JSON config file on the computer as the 5 buttons on the Tufty aren’t really enough for this kind of input. Maybe there could be some web UI to pick coordinates off a map and update the config file?"}]...
|
Title: Badgeware Tufty WeatherStation by @nouxinf Title: Badgeware Tufty WeatherStation by @nouxinf | Stardance
Devlogs:
I’m making a weather app for the Badgeware Tufty, a cool badge wearable that’s programmable with MicroPython! First step that I’ve done for my app is coding a screen that shows the temperature, humidity and air pressure sensed from the multisensor strip that comes with the Badgeware Tufty STEM kit. I’ve made 30 pixel art icons so far that scale with the values. Next up I’ll be adding the option to grab weather data from the internet using Openmeteo API for the weather data and Openstreetmap nominatim to get a place name. The locations would have to be configured through a JSON config file on the computer as the 5 buttons on the Tufty aren’t really enough for this kind of input. Maybe there could be some web UI to pick coordinates off a map and update the config file?
Added an option to use Fahrenheit or Kelvin instead of Celsius by editing options.json on the computer
Devlog #3 of the Badgeware Tufty Weatherstation The Badgeware Tufty is this cool conference badge from Pimoroni that is programmable with MicroPython. I’ve been making a Weather Station app for it, which can use a Pimoroni multisensor kit to show temperature, humidity and air pressure, but soon it will be able to fetch weather data around the world from the internet. In the previous devlogs I added the multisensor screen. Now I’ve started working on the weather from the internet part. So far it gets coordinates from options.json, and can show the suburb/neighbourhood and the city from Openstreetmap Nominatim. You can also optionally set a nickname for a location. Next up I’ll actually be putting the weather info in. That’ll involve getting data from Openmeteo, drawing a bunch of pixel art icons for each (~80) weather codes and rendering out the data.
Devlog #4 of the Badgeware Tufty Weatherstation Stuff added in this devlog: Indicator to show how many pages there are and which one you’re on 16 weather icons that map to the WMO codes that openmeteo gives Temperature display (that respects units set in options.json) Potentially next I’ll code a precipitation levels display, and maybe some charts that show temperature and precipitation throughout the day when you press B.
Devlog #5 of the Badgeware Tufty Weatherstation Stuff added since the last devlog: Updated firmware version: While I was working on a side project Pimoroni made new firmware versions so I ported it from 2.0.2 to 3.0.2 though I’m pretty sure it works with 3.0.0 3.0.1 Along with that I changed some functions to native ones like word wrapping and centering text that came with 3.0 I added a temperature icon to the internet weather, and added precipitation and wind direction both with icons (pictured) I modified someone else’s screenshot code to work on windows and have a few extra features, which is how the screenshot attached was taken. Added comment boxes generated by one of my side projects, https://commentboxgenerator.lemonsite.uk/ Write a readme and roadmap Things that have yet to be added (from the roadmap) Offline support internet is optional just like sensor Update weather every 1 hour or on request- Some basic forecast information (e.g. weather icons per day of the week) in another screen Web editor for options.json through Flask or Bun (preferrably something self contained though) Badge diagnostics page (e.g. storage space, RAM, battery) Fork badgeware web simulator to work with weatherstation by adding proxy
Devlog #6 of the Badgeware Tufty Weatherstation In this devlog I: removed unused functions that were replaced by native 3.0 functions made it so that the app works without internet so you can just use it as a sensor
Devlog #7 of the Badgeware Tufty Weatherstation In this devlog I: Made it that the A button allows refetching weather data Automatically refresh weather data every 10 minutes Have a text display that shows when the weather was last updated (respecting TIMEZONE setting in secrets.py) Fixed some issues so now most of the time you can plug and replug the multisensor stick. Doesn’t work very reliably though due to issues where the cable is half-connected yet the badge is trying to read from the sensor.
Devlog #8 of the Badgeware Tufty Weatherstation In this devlog I: forked the badgeware web simulator with permission modified the backend slightly to “work on my machine” also modified the actual badge code to use badgeware libraries instead of micropython libraries to let it work on the emulator added a github action to automatically update whats on the simulator repo when a new weatherstation release comes out things i’ve yet to add: automatic time zone setting in the simulator: will add that by overriding secrets.py somehow reskinning the whole site to be a weatherstation homepage
Devlog #9 of the Badgeware Tufty Weatherstation In this devlog I: stripped down the fork of the badgeware web emulator to onl have the badge screen and console log then added content to the homepage talking about the app added a new page with installation instructions for users unfamiliar with the badgeware tufty in that tutorial page i made a tool that generates options.json configurations where you can set temperature unit and pick out coordinates on a map
Devlog #10 of the Badgeware Tufty Weatherstation In this devlog I: added some more effective error handling moved a bunch of functions out of __init__.py into their own files to make the code cleaner add an attribution screen (pictured) to be legally compliant with copyright
Devlog #11 of the Badgeware Tufty Weatherstation (prob the final one) In this devlog I: added this vitals screen which includes battery percentage, flash storage space used and the amount of PSRAM free. It doesn’t show the percentage when its plugged in because for some reason the battery reader always gives 100% when its plugged in published the weatherstation website to https://weatherstation.nouxinf.net/ fix a few bugs
Ships:
I just finished making the Badgeware Tufty Weatherstation. The Badgeware Tufty is a cool digital conference badge made by Pimoroni that comes with a nice screen, buttons, a battery and the RP2350 chip. This makes it fairly capable at 8MiB of RAM, meaning it could be used for just about anything (yes 8MiB is enough). The default firmware has an apps launcher that can launch user-made MicroPython apps, like Weatherstation. Weatherstation is essentially a weather app. The two main features are 1. the multisensor strip: you can plug in a Pimoroni made multisensor stick to get temperature, humidity and air pressure data and 2. internet data from openmeteo. you set the coordinates for your locations in options.json (typing them in manually with the tufty’s 5 buttons would be a pain), it fetches place names for the coordinates (usually suburb, city) through OpenStreetMap Nominatim and displays them or you can set a nickname to override it. it then fetches the weather data from openmeteo and displays temperature, precipitation and wind direction with cool pixel art icons. it updates weather data every 10 minutes, but you can manually refresh by pressing A. The other two screens is the vitals screen, which displays battery percentage, though it doesn’t display the percentage if it’s charging due to a bug with either the firmware or the hardware where it always shows 100% even though its not, the amount of storage space left and the amount of ram free. The next screen after that is attribution info, giving credit to OpenStreetMap and Open-meteo which is legally required. If you’re reading this you probably don’t have a Badgeware Tufty and that’s ok because I forked the official Badgeware Web Emulator at https://try.badgewa.re/ (with permission “I think it’s acceptable to consider it MIT, but either way fork away- and enjoy!” - Gadgetoid, the developer of the simulator on the pimoroni discord) and updated it with some info, installation instructions, and an options.json setup tool. Try it out at https://weatherstation.nouxinf.net/ or press the “Try Project” button! Note that Vitals info data and sensor data are made up (obviously). I hope you enjoy this project!...
|
1793145274.7351775
|
1793231674.7351775
|
|
41879
|
ISS Tracker & Flight Deck by @aarush_kakade | ISS Tracker & Flight Deck by @aarush_kakade | Stardance...
|
aarush_kakade
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T17:45:00Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hoomans! Here’s my real-time ISS tracker and flight deck that turns live orbital data into a fun dashboard. Combined multiple pieces ,the map, telemetry, crew data, pass prediction, and UI styling into one clean experience without making it feel cluttered or broken. I’m proud that I was able to structure the project, clean up a lot of messy code, and make the different parts work together smoothly. To test it, You should allow location access if they want pass predictions, and they should know that the live data depends on external APIs, so the dashboard is can handle fallback states gracefully :) (P.S- A bloomberg version with much better UI is coming soon)", "repo": "https://github.com/aarushkakade/ISS-Tracker-Flight-Deck", "demo": "https://aarushkakade.github.io/ISS-Tracker-Flight-Deck/"}]...
|
[{"post_id": 40845, "ts": "202 [{"post_id": 40845, "ts": "2026-08-04T17:05:48Z", "hours": 9.0, "text": "Hello fellow hoomans! I think this is good enogh for V1. For those of you that don’t know about this project, this is an International Space Station Tracker. I’m currently thinking and working on making a second version, which I’m thinking of basing on the Bloomberg terminal colors and designs. The live telemetry, orbital map, crew section, and pass prediction all work together, and the focus at the end has been on technical cleanup, synchronization, and making the interface feel consistent. READY TO SHIPPP :)"}, {"post_id": 39974, "ts": "2026-08-03T09:58:12Z", "hours": 11.0, "text": "Hello Peoplee!!! I forgot to write the devlog, so i lost a lost of my time :( . The project has moved past layout and into the real engineering part. The dashboard is stable now, and I’m focusing on making the ISS data, map, and telemetry behave like one clean system instead of a bunch of separate pieces. The tricky part has been keeping the update timing, coordinates, and visuals all in sync so the whole thing feels smooth instead of glitchy. I’m also thinking ahead about making the structure scalable, so the orbit trail, footprint, and telemetry can grow without turning into chaos. Right now it feels less like a mockup and more like a tiny mission control panel trying to hold itself together :P"}, {"post_id": 38289, "ts": "2026-07-31T16:30:13Z", "hours": 4.0, "text": "Been working more on the tracker,finally starting to feel like an actual system instead of just a rough layout. The main dashboard structure is in place now, and I’m slowly connecting the pieces so it behaves more like a real flight-deck style interface. Still early,but the project has moved past the empty prototype stage, which is a good sign.The main challenge has been making the UI feel coherent while keeping it ready for live data. The map, telemetry panel, and tracking area all need to work together cleanly, and even small decisions like spacing, update frequency, and data formatting matter more than I expected.A lot of time is going into debugging little issues and making sure the page feels stable rather than just visually complete."}, {"post_id": 37549, "ts": "2026-07-30T11:06:58Z", "hours": 5.0, "text": "I’ve started building an ISS Tracker & Flight Deck dashboard. So far I’ve set up the basic interface and begun wiring the map and telemetry sections. It’s still an early prototype, but the structure is now in place :)"}]...
|
Title: ISS Tracker & Flight Deck by @aarush_ka Title: ISS Tracker & Flight Deck by @aarush_kakade | Stardance
Devlogs:
I’ve started building an ISS Tracker & Flight Deck dashboard. So far I’ve set up the basic interface and begun wiring the map and telemetry sections. It’s still an early prototype, but the structure is now in place :)
Been working more on the tracker,finally starting to feel like an actual system instead of just a rough layout. The main dashboard structure is in place now, and I’m slowly connecting the pieces so it behaves more like a real flight-deck style interface. Still early,but the project has moved past the empty prototype stage, which is a good sign.The main challenge has been making the UI feel coherent while keeping it ready for live data. The map, telemetry panel, and tracking area all need to work together cleanly, and even small decisions like spacing, update frequency, and data formatting matter more than I expected.A lot of time is going into debugging little issues and making sure the page feels stable rather than just visually complete.
Hello Peoplee!!! I forgot to write the devlog, so i lost a lost of my time :( . The project has moved past layout and into the real engineering part. The dashboard is stable now, and I’m focusing on making the ISS data, map, and telemetry behave like one clean system instead of a bunch of separate pieces. The tricky part has been keeping the update timing, coordinates, and visuals all in sync so the whole thing feels smooth instead of glitchy. I’m also thinking ahead about making the structure scalable, so the orbit trail, footprint, and telemetry can grow without turning into chaos. Right now it feels less like a mockup and more like a tiny mission control panel trying to hold itself together :P
Hello fellow hoomans! I think this is good enogh for V1. For those of you that don’t know about this project, this is an International Space Station Tracker. I’m currently thinking and working on making a second version, which I’m thinking of basing on the Bloomberg terminal colors and designs. The live telemetry, orbital map, crew section, and pass prediction all work together, and the focus at the end has been on technical cleanup, synchronization, and making the interface feel consistent. READY TO SHIPPP :)
Ships:
Hoomans! Here’s my real-time ISS tracker and flight deck that turns live orbital data into a fun dashboard. Combined multiple pieces ,the map, telemetry, crew data, pass prediction, and UI styling into one clean experience without making it feel cluttered or broken. I’m proud that I was able to structure the project, clean up a lot of messy code, and make the different parts work together smoothly. To test it, You should allow location access if they want pass predictions, and they should know that the live data depends on external APIs, so the dashboard is can handle fallback states gracefully :) (P.S- A bloomberg version with much better UI is coming soon)...
|
1792878862.6188219
|
1793742862.6188219
|
|
43969
|
Smart Relocator ESP32 by @henilX0 | Stardance
|
henilX0
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T17:20:11Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Building this ESP32-powered automated robot was an awesome ride—it uses a sweeping servo and ultrasonic sensor to scan the area, detects objects, and pulls off precise turns using MPU6050 IMU feedback alongside custom 3D-printed rack-and-pinion parts. The trickiest part wasn’t just the code, but figuring out KiCad from scratch to design a compact, clean custom circuit board schematic, all while wrestling with the tight wiring and power stability for the motors and sensors.", "repo": "https://github.com/HENILX0/ESP32_SMART_ROBOT-", "demo": ""}]...
|
[{"post_id": 66823, "ts": "202 [{"post_id": 66823, "ts": "2026-09-12T18:39:26Z", "hours": 3.5917, "text": "Just wrapped up designing and routing the custom dual-layer PCB for my ESP32 Smart Robot in KiCad!Took quite a bit of time to get all the pin mapping and trace routing clean without messy crossovers. Here’s what’s packed onto the board:ESP32 DevKit footprint & MPU6050 IMU connectorPin headers for motor driver, ultrasonic sensor, and dual servosPower circuitry with DPDT switch, filter capacitors, and status LEDsChecked everything in the 3D viewer and all the component clearances look clean. Next up: exporting Gerbers and getting this board fabricated!"}, {"post_id": 59854, "ts": "2026-09-01T20:34:45Z", "hours": 2.5875, "text": "Finally back on track after taking about a week off due to some medical/health reasons! Today, I finished designing the complete rack-and-pinion servo gripper in Onshape and integrated it into the full mobile robot assembly. The CAD model is now 100% complete, including the multi-tier chassis, ultrasonic sensor mount, motor driver, and gripper mechanism. Since all the CAD designs are ready, I really need 3D printing grant support/help now to get these physical parts printed so I can start assembling the hardware!"}, {"post_id": 54045, "ts": "2026-08-24T20:06:51Z", "hours": 0.4503, "text": "Redesigned the spur gear and rack profiles in Onshape to get a better tooth fit and pitch alignment. Spent time tweaking assembly mates and testing how the mechanism converts servo rotation into smooth linear movement for the gripper arms. Still fine-tuning, but getting closer to the final assembly!"}, {"post_id": 53245, "ts": "2026-08-23T18:06:05Z", "hours": 0.3, "text": "Spent time in Onshape experimenting with different gear profiles and rack designs for the gripper! Tested tooth counts and pitch alignments to figure out how to convert the servo’s rotation into smooth linear motion. Still tweaking the design, but getting closer!"}, {"post_id": 52650, "ts": "2026-08-22T21:51:45Z", "hours": 1.8875, "text": "Modeled the gripper base plate in Onshape with integrated guide rails and gear clearance for the servo horn. Also mounted the HC-SR04 ultrasonic sensor to the top deck! Still working on finishing the moving gripper arms, but the base structure and sensor placement are locked in."}, {"post_id": 51941, "ts": "2026-08-21T21:48:17Z", "hours": 1.2344, "text": "Designed a custom H-shaped bracket in Onshape to mount the SG90 gripper servo directly onto the front chassis. Integrated precise cutout & screw mounts, aligned everything, and successfully mated the part into the main robot assembly!"}, {"post_id": 51338, "ts": "2026-08-20T23:00:26Z", "hours": 2.6814, "text": "Worked super hard today to completely redesign the robot chassis from scratch in Onshape! My main goal was to optimize material usage, keep the structure lightweight, and make physical assembly as easy as possible.The best part about this new design is all the open space ,there’s so much room from every side now. Routing wires, tuning components, or swapping parts like the ESP32 and motor driver will be totally effortless. Spent hours fine-tuning the component placement and layout, and everything fits together perfectly now!"}, {"post_id": 50564, "ts": "2026-08-19T19:29:04Z", "hours": 0.7011, "text": "Designed a custom mounting bracket for the HC-SR04 ultrasonic sensor in Onshape today! Created the front casing to hold the sensor, added filleted edges for structural rigidity, and integrated a bottom mounting arm to attach it to the servo motor."}, {"post_id": 49794, "ts": "2026-08-18T18:48:37Z", "hours": 0.7506, "text": "Fine-tuned chassis dimensions in Onshape and modeled two structural components: designed a precision grid of internal screw bosses on the base plate for component mounting, and created a custom plate with filleted edges and corner screw holes."}, {"post_id": 49141, "ts": "2026-08-17T19:32:06Z", "hours": 0.9847, "text": "Updated the chassis dimensions in Onshape for better alignment! Also designed and mounted the bracket connecting the ultrasonic sensor to the SG90 servo motor."}, {"post_id": 48459, "ts": "2026-08-16T20:14:17Z", "hours": 2.0519, "text": "Designed the top cover plate for the robot chassis in Onshape today! Added a custom honeycomb mesh pattern for weight reduction, integrated an exact cutout for the SG90 servo motor, and added corner screw bosses to mount it securely to the chassis."}, {"post_id": 47721, "ts": "2026-08-15T20:23:24Z", "hours": 1.9272, "text": "Updated the robot chassis dimensions in Onshape today! Arranged 3D models for components (motors, wheels, battery holder, and electronics) inside the frame to verify fitment and component spacing. Will keep tweaking dimensions as physical assembly progresses."}, {"post_id": 47135, "ts": "2026-08-14T20:10:20Z", "hours": 0.4178, "text": "Worked on the robot chassis CAD design in Onshape today! Added a custom pattern and configured the motor mounting dimensions so everything fits properly."}, {"post_id": 46538, "ts": "2026-08-13T20:42:42Z", "hours": 0.8614, "text": "Fixed the MPU6050 power drop issue today by properly wiring it with the capacitor setup on the PCB. After fixing the power, started designing the initial robot chassis base in Onshape to fit all components!"}, {"post_id": 45953, "ts": "2026-08-12T19:30:18Z", "hours": 2.7806, "text": "Fixed a short circuit today by replacing a damaged capacitor. Got the MPU6050 setup fully working and tested it with code. Also started drafting the 8cm target logic for the servo and ultrasonic sensor,will code the full logic tomorrow!"}, {"post_id": 45333, "ts": "2026-08-11T18:35:33Z", "hours": 0.9825, "text": "Wired and soldered the buck converter power setup. Ran into a short circuit issue whenever the ESP32 was connected and spent the entire session testing voltages and debugging (still in progress)."}, {"post_id": 44786, "ts": "2026-08-10T19:58:42Z", "hours": 2.5739, "text": "Finished soldering and hardware connections for the MPU6050 sensor today! Added this sensor so the robot can measure precise turning angles to face target objects accurately. Next step is writing the code for it!"}, {"post_id": 44094, "ts": "2026-08-09T17:03:31Z", "hours": 0.4006, "text": "Updated the robot’s code in Arduino IDE today! Fixed a few compilation errors in the logic and tweaked some code settings so everything runs smoothly now. Next step is testing it live on the chassis!"}, {"post_id": 43403, "ts": "2026-08-08T16:59:41Z", "hours": 1.8772, "text": "Wrote some new code in Arduino IDE today and wired up the ultrasonic sensor! I set the motor speed to 50% so it moves slow and doesn’t crash while testing. Right now, I’ve added a simple logic where as soon as the sensor detects an object in front, the robot moves towards it. Step by step getting it to work!"}, {"post_id": 43084, "ts": "2026-08-08T05:11:05Z", "hours": 1.6028, "text": "Finally built the first working prototype today! I mounted the ESP32, motor driver, and BO motors onto a temporary MDF board chassis to check wiring and component balance.Wrote custom code in Arduino IDE to handle motor control, flashed it to the board, and successfully verified basic movement!Next steps:Integrate the ultrasonic sensor for obstacle avoidance.Connect the servo motor for the gripper mechanism."}, {"post_id": 42288, "ts": "2026-08-06T22:32:07Z", "hours": 0.3, "text": "Devlog #1: Hardware Soldering & Power Distribution SetupTime Spent: 4 Hours Project Concept & Autonomous Logic Building an autonomous ESP32 mobile robot that identifies, grips, and clears obstacle objects to open areas.- Search & Detection: Ultrasonic sensor continuously scans forward; halts and aligns when an object enters the 8cm threshold.- Gripping & Spatial Mapping: Servo gripper secures the object. A servo-mounted ultrasonic sensor rotates 0°–180° to calculate the vector with maximum open clearance.- Relocation & Rescan: Robot navigates to the identified open space, drops the object, and rescans the environment.- Idle Search Loop: If no target is within 8cm, the robot incrementally pivots left in a continuous patrol-and-scan loop. What I Built Today (Hardware Progress) - Layout Design: Planned component placement and trace routing on Zero PCB board.- Power Regulation: Connected 18650 Li-ion battery pack to LM2596 Buck Converter for stable 5V output.- Header Sockets: Soldered 8-pin female header block for motor driver + male headers for ESP32, servos, and sensors.- Circuit Protection: Soldered main push-button switch and 1000µF decoupling capacitor across 5V rails to prevent ESP32 brownouts.- Auxiliary Power: Added separate 9V battery line to power motor drivers independently."}]...
|
Title: Smart Relocator ESP32 by @henilX0 | Stardan Title: Smart Relocator ESP32 by @henilX0 | Stardance
Devlogs:
Devlog #1: Hardware Soldering & Power Distribution SetupTime Spent: 4 Hours Project Concept & Autonomous Logic Building an autonomous ESP32 mobile robot that identifies, grips, and clears obstacle objects to open areas.- Search & Detection: Ultrasonic sensor continuously scans forward; halts and aligns when an object enters the 8cm threshold.- Gripping & Spatial Mapping: Servo gripper secures the object. A servo-mounted ultrasonic sensor rotates 0°–180° to calculate the vector with maximum open clearance.- Relocation & Rescan: Robot navigates to the identified open space, drops the object, and rescans the environment.- Idle Search Loop: If no target is within 8cm, the robot incrementally pivots left in a continuous patrol-and-scan loop. What I Built Today (Hardware Progress) - Layout Design: Planned component placement and trace routing on Zero PCB board.- Power Regulation: Connected 18650 Li-ion battery pack to LM2596 Buck Converter for stable 5V output.- Header Sockets: Soldered 8-pin female header block for motor driver + male headers for ESP32, servos, and sensors.- Circuit Protection: Soldered main push-button switch and 1000µF decoupling capacitor across 5V rails to prevent ESP32 brownouts.- Auxiliary Power: Added separate 9V battery line to power motor drivers independently.
Finally built the first working prototype today! I mounted the ESP32, motor driver, and BO motors onto a temporary MDF board chassis to check wiring and component balance.Wrote custom code in Arduino IDE to handle motor control, flashed it to the board, and successfully verified basic movement!Next steps:Integrate the ultrasonic sensor for obstacle avoidance.Connect the servo motor for the gripper mechanism.
Wrote some new code in Arduino IDE today and wired up the ultrasonic sensor! I set the motor speed to 50% so it moves slow and doesn’t crash while testing. Right now, I’ve added a simple logic where as soon as the sensor detects an object in front, the robot moves towards it. Step by step getting it to work!
Updated the robot’s code in Arduino IDE today! Fixed a few compilation errors in the logic and tweaked some code settings so everything runs smoothly now. Next step is testing it live on the chassis!
Finished soldering and hardware connections for the MPU6050 sensor today! Added this sensor so the robot can measure precise turning angles to face target objects accurately. Next step is writing the code for it!
Wired and soldered the buck converter power setup. Ran into a short circuit issue whenever the ESP32 was connected and spent the entire session testing voltages and debugging (still in progress).
Fixed a short circuit today by replacing a damaged capacitor. Got the MPU6050 setup fully working and tested it with code. Also started drafting the 8cm target logic for the servo and ultrasonic sensor,will code the full logic tomorrow!
Fixed the MPU6050 power drop issue today by properly wiring it with the capacitor setup on the PCB. After fixing the power, started designing the initial robot chassis base in Onshape to fit all components!
Worked on the robot chassis CAD design in Onshape today! Added a custom pattern and configured the motor mounting dimensions so everything fits properly.
Updated the robot chassis dimensions in Onshape today! Arranged 3D models for components (motors, wheels, battery holder, and electronics) inside the frame to verify fitment and component spacing. Will keep tweaking dimensions as physical assembly progresses.
Designed the top cover plate for the robot chassis in Onshape today! Added a custom honeycomb mesh pattern for weight reduction, integrated an exact cutout for the SG90 servo motor, and added corner screw bosses to mount it securely to the chassis.
Updated the chassis dimensions in Onshape for better alignment! Also designed and mounted the bracket connecting the ultrasonic sensor to the SG90 servo motor.
Fine-tuned chassis dimensions in Onshape and modeled two structural components: designed a precision grid of internal screw bosses on the base plate for component mounting, and created a custom plate with filleted edges and corner screw holes.
Designed a custom mounting bracket for the HC-SR04 ultrasonic sensor in Onshape today! Created the front casing to hold the sensor, added filleted edges for structural rigidity, and integrated a bottom mounting arm to attach it to the servo motor.
Worked super hard today to completely redesign the robot chassis from scratch in Onshape! My main goal was to optimize material usage, keep the structure lightweight, and make physical assembly as easy as possible.The best part about this new design is all the open space ,there’s so much room from every side now. Routing wires, tuning components, or swapping parts like the ESP32 and motor driver will be totally effortless. Spent hours fine-tuning the component placement and layout, and everything fits together perfectly now!
Designed a custom H-shaped bracket in Onshape to mount the SG90 gripper servo directly onto the front chassis. Integrated precise cutout & screw mounts, aligned everything, and successfully mated the part into the main robot assembly!
Modeled the gripper base plate in Onshape with integrated guide rails and gear clearance for the servo horn. Also mounted the HC-SR04 ultrasonic sensor to the top deck! Still working on finishing the moving gripper arms, but the base structure and sensor placement are locked in.
Spent time in Onshape experimenting with different gear profiles and rack designs for the gripper! Tested tooth counts and pitch alignments to figure out how to convert the servo’s rotation into smooth linear motion. Still tweaking the design, but getting closer!
Redesigned the spur gear and rack profiles in Onshape to get a better tooth fit and pitch alignment. Spent time tweaking assembly mates and testing how the mechanism converts servo rotation into smooth linear movement for the gripper arms. Still fine-tuning, but getting closer to the final assembly!
Finally back on track after taking about a week off due to some medical/health reasons! Today, I finished designing the complete rack-and-pinion servo gripper in Onshape and integrated it into the full mobile robot assembly. The CAD model is now 100% complete, including the multi-tier chassis, ultrasonic sensor mount, motor driver, and gripper mechanism. Since all the CAD designs are ready, I really need 3D printing grant support/help now to get these physical parts printed so I can start assembling the hardware!
Just wrapped up designing and routing the custom dual-layer PCB for my ESP32 Smart Robot in KiCad!Took quite a bit of time to get all the pin mapping and trace routing clean without messy crossovers. Here’s what’s packed onto the board:ESP32 DevKit footprint & MPU6050 IMU connectorPin headers for motor driver, ultrasonic sensor, and dual servosPower circuitry with DPDT switch, filter capacitors, and status LEDsChecked everything in the 3D viewer and all the component clearances look clean. Next up: exporting Gerbers and getting this board fabricated!
Ships:
Building this ESP32-powered automated robot was an awesome ride—it uses a sweeping servo and ultrasonic sensor to scan the area, detects objects, and pulls off precise turns using MPU6050 IMU feedback alongside custom 3D-printed rack-and-pinion parts. The trickiest part wasn’t just the code, but figuring out KiCad from scratch to design a compact, clean custom circuit board schematic, all while wrestling with the tight wiring and power stability for the motors and sensors....
|
1793148592.9167795
|
1793234992.9167795
|
|
45757
|
SlackSmith by @sebcun | Stardance
|
sebcun
|
1
|
31.0
|
476
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T07:59:52Z", "hours": 31.0, "multiplier": 15.53, "payout": 476, "blessing": "neutral", "text": "SlackSmith is a way to build Slack bots with no coding experience needed. Built using Electron, you drag and drop nodes after following a simple Slack setup and your bot is immediately ready. There are features like: Slash commands Scheduled events Send block kit messages HTTP requests Themes and more. Demo/trailer video is here! https://youtu.be/_7V3fs6bPT4", "repo": "https://github.com/sebcun/slacksmith", "demo": "https://github.com/sebcun/slacksmith/releases/tag/main2"}]...
|
[{"post_id": 57146, "ts": "202 [{"post_id": 57146, "ts": "2026-08-29T07:50:53Z", "hours": 0.9531, "text": "Read me’s and undos!"}, {"post_id": 57070, "ts": "2026-08-29T05:04:16Z", "hours": 3.4203, "text": "Devlog 13 Added block kit messages, scheduled triggers, and http requests. At first I wasn’t sure how I was going to do block kit messages to make it simple to use, but then I decided it would be best to have a visual esque builder which is what I did. Along with this, http request component has been added allowing you to get, patch, post, etc, as well as scheduled trigger being added to repeat a flow every xx minutes/seconds/hours."}, {"post_id": 56933, "ts": "2026-08-28T23:15:42Z", "hours": 2.0664, "text": "Devlog 13 Tabs, tabs and more tabs! Created a tab system for bots where you can create new tabs/canvases to keep your bot and flows organised."}, {"post_id": 52006, "ts": "2026-08-22T01:03:10Z", "hours": 1.1597, "text": "Added themes. Themes are easy to create and use, with the topbar and simple hex files to create your own."}, {"post_id": 49409, "ts": "2026-08-18T06:59:42Z", "hours": 1.5108, "text": "Devlog 11 I added a seperate window for bot logs for people to open, making it easier to manage their bot. I also added the ability to run bots independently so you don’t need to have SlackSmith open, as well as allowing for you to run bots on cloud hosts. Tbh wasn’t sure how to do this at all at first, so I did do this part with AI assistance."}, {"post_id": 49344, "ts": "2026-08-18T03:35:10Z", "hours": 1.6267, "text": "Devlog 10 Onboarding I have added onboarding. This appears when you first create a bot, prompting you to set it up through the slack API dashboard with easy to follow steps so everything works stress free."}, {"post_id": 49310, "ts": "2026-08-18T01:48:07Z", "hours": 2.9872, "text": "Develop 9 New Components and TopBar I have added full array functionality with array set, array length, array add, array remove, etc as components. I have also added the top bar to the electron app for things such as saving, running, etc."}, {"post_id": 48728, "ts": "2026-08-17T08:01:14Z", "hours": 2.835, "text": "Devlog 8 New Components triggers: user join channel, user left channel, bot mention data: math, random number, random string, date and time, convert, string, string length, string replace, string split, string join, string contains, string case, regex match, regex replace"}, {"post_id": 47982, "ts": "2026-08-16T08:10:03Z", "hours": 2.5394, "text": "Devlog 7 Bot Runtime I create the main runtime of the app which allows for you to actually start building bots! I ran into some issues first before figuring you have to add scopes for pretty much everything in slack, so I have to figure out the best way to handle that to users, however it does work when you add these events and scopes. So far there is only about 5 components that actually work, but I will be working on adding a lot more soon."}, {"post_id": 47866, "ts": "2026-08-16T03:39:03Z", "hours": 1.6106, "text": "Devlog #6 I added the functionality to add your bot to the app, as well as it verifies that it is actually real information. I also updated the basic runtime to have a start/stop/restart instead of ‘starting’ when you open the bot /app."}, {"post_id": 47815, "ts": "2026-08-16T00:51:40Z", "hours": 1.5319, "text": "Devlog #5 I have added the properties as well as node categories and more. Now time to work on actual functionality!"}, {"post_id": 44893, "ts": "2026-08-10T22:56:04Z", "hours": 2.1872, "text": "Devlog #4 Today I added the node editor to the app. Honestly wasn’t sure how I was going to do it yet but after looking at Foblex flow and Reactflow and taking some inspiration and some snippets I managed to make it and are fairly happy with the outcome. Obviously there is still a bit to do but I am going to work on adding all the actions (or at least have proper actions in different categories) before worrying about that."}, {"post_id": 43845, "ts": "2026-08-09T08:37:52Z", "hours": 2.2497, "text": "Devlog #3 I created the backend storage as well as frontend for the basics of creating and managing bots. I had some issues with it refusing to store in app storage however after some sudo commands I managed to get past it."}, {"post_id": 43739, "ts": "2026-08-09T04:49:34Z", "hours": 3.3856, "text": "Devlog #2 Shifted to Electron base and created components. At first I was going to make this completely web based and then refactor to electron later, but decided that would be too much of a hassle so I’ve now gone straight to Electron. Along with that, I’ve custom made elements ill need along the way with a slack like color pallete"}, {"post_id": 43594, "ts": "2026-08-08T23:01:46Z", "hours": 0.5694, "text": "Devlog #1 I have started working working on this project. So far I have only setup the basic setup and basic web server however I am looking forward to making this and continuing."}]...
|
Title: SlackSmith by @sebcun | Stardance
Devlogs: Title: SlackSmith by @sebcun | Stardance
Devlogs:
Devlog #1 I have started working working on this project. So far I have only setup the basic setup and basic web server however I am looking forward to making this and continuing.
Devlog #2 Shifted to Electron base and created components. At first I was going to make this completely web based and then refactor to electron later, but decided that would be too much of a hassle so I’ve now gone straight to Electron. Along with that, I’ve custom made elements ill need along the way with a slack like color pallete
Devlog #3 I created the backend storage as well as frontend for the basics of creating and managing bots. I had some issues with it refusing to store in app storage however after some sudo commands I managed to get past it.
Devlog #4 Today I added the node editor to the app. Honestly wasn’t sure how I was going to do it yet but after looking at Foblex flow and Reactflow and taking some inspiration and some snippets I managed to make it and are fairly happy with the outcome. Obviously there is still a bit to do but I am going to work on adding all the actions (or at least have proper actions in different categories) before worrying about that.
Devlog #5 I have added the properties as well as node categories and more. Now time to work on actual functionality!
Devlog #6 I added the functionality to add your bot to the app, as well as it verifies that it is actually real information. I also updated the basic runtime to have a start/stop/restart instead of ‘starting’ when you open the bot /app.
Devlog 7 Bot Runtime I create the main runtime of the app which allows for you to actually start building bots! I ran into some issues first before figuring you have to add scopes for pretty much everything in slack, so I have to figure out the best way to handle that to users, however it does work when you add these events and scopes. So far there is only about 5 components that actually work, but I will be working on adding a lot more soon.
Devlog 8 New Components triggers: user join channel, user left channel, bot mention data: math, random number, random string, date and time, convert, string, string length, string replace, string split, string join, string contains, string case, regex match, regex replace
Develop 9 New Components and TopBar I have added full array functionality with array set, array length, array add, array remove, etc as components. I have also added the top bar to the electron app for things such as saving, running, etc.
Devlog 10 Onboarding I have added onboarding. This appears when you first create a bot, prompting you to set it up through the slack API dashboard with easy to follow steps so everything works stress free.
Devlog 11 I added a seperate window for bot logs for people to open, making it easier to manage their bot. I also added the ability to run bots independently so you don’t need to have SlackSmith open, as well as allowing for you to run bots on cloud hosts. Tbh wasn’t sure how to do this at all at first, so I did do this part with AI assistance.
Added themes. Themes are easy to create and use, with the topbar and simple hex files to create your own.
Devlog 13 Tabs, tabs and more tabs! Created a tab system for bots where you can create new tabs/canvases to keep your bot and flows organised.
Devlog 13 Added block kit messages, scheduled triggers, and http requests. At first I wasn’t sure how I was going to do block kit messages to make it simple to use, but then I decided it would be best to have a visual esque builder which is what I did. Along with this, http request component has been added allowing you to get, patch, post, etc, as well as scheduled trigger being added to repeat a flow every xx minutes/seconds/hours.
Read me’s and undos!
Ships:
SlackSmith is a way to build Slack bots with no coding experience needed. Built using Electron, you drag and drop nodes after following a simple Slack setup and your bot is immediately ready. There are features like: Slash commands Scheduled events Send block kit messages HTTP requests Themes and more. Demo/trailer video is here! https://youtu.be/_7V3fs6bPT4...
|
1793202600.1407344
|
1793289000.1407344
|
|
46735
|
AlternativeLink by @ERR0RW0LF | Stardance
|
ERR0RW0LF
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T19:24:36Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "AlternativeLink This project implements the SharkLink Protocol making it compatible with the Shark Jack Display by Hak5. This ship is for the underlying core lib in combination with the CLI. CLI The CLI tool provides a quick and easy way to use any pc in combination with the Shark Jack Display. Using the -h / --help flags this help message is printed: Rust implementation for SharkLink Usage: alternative-link-cli.exe [OPTIONS] --interface <INTERFACE> Options: -i, --interface <INTERFACE> Interface IP to bind to (skips interactive picker) -p, --port <PORT> UDP port to use [default: 1337] -c, --code <CODE> Shared room/pairing code [default: 1-3-3-7] --broadcast-interval <BROADCAST_INTERVAL> Broadcast interval in seconds [default: 5] --auto-test Run non-interactively: auto-test connection as soon as a peer is found. If this is not set after receiving a Ping and sending the Ack the program closes --no-stop Prevents the program from automatically stopping (you will need to manually kill the program if this is set) -v... Increase log verbosity (-v -vv) --json Emit machine-readable JSON status lines instead of prose --max-direct-tries <MAX_DIRECT_TRIES> Maximum retries for the direct connection test [default: 20] -h, --help Print help -V, --version Print version Development The first prototype was developed in python using package inspection with wireshark. After refining that prototype, I wrote a first all in one (file) interactive version of that prototype using rust. Then I found out that the SharkLink tool on the Shark Jack Display a bash script is. (I never looked at it properly but just found out that I accidentally implemented a similar control flow using python and rust) After that I split the project into the cargo workspace structure with one lib and cli crates. Now I have started developing an interactive version but more close to original. Trying it The README on GitHub details how to run it on windows. This is because I have only tested it in these combinations. But it should work everywhere because I haven’t used anything os specific and tested it on wsl.", "repo": "https://github.com/ERR0RW0LF/AlternativeLink", "demo": "https://github.com/ERR0RW0LF/AlternativeLink/releases"}]...
|
[{"post_id": 69567, "ts": "202 [{"post_id": 69567, "ts": "2026-09-17T10:11:34Z", "hours": 5.7008, "text": "Devlog 6: Finaly finished the CLI. Over the past hours I have improved my code a lot. By making it automaticly terminate if it gets pinged and adding the --no_stop flag to prevent automatic closing. Next up: Shipping it and maybe after getting some feedback improving it."}, {"post_id": 64219, "ts": "2026-09-08T13:45:01Z", "hours": 9.0597, "text": "Devlog 5: I finally did it! It’s now a cli tool! What changed: It’s a Cli. So, to use it just try the --help / -h flag to get the usage. Also, I restructured the project into a core lib and the cli bin crates using a cargo workspace. This should allow me to more easily develop the Tui later. I also set up two github workflows, one that audits my used packages using the actions-rust-lang/audit action. The other one builds me the cli for a lot of different targets using the dtolnay/rust-toolchain action. I also started writing some instructions to try the project, but this is still an area of active development. Next up I defiantly need to document the protocol that I’m using. Also, as I have mentioned I want to create a tui. Maybe later a gui would be a great addition but that’s something I’m not quite sure about."}, {"post_id": 55421, "ts": "2026-08-27T07:26:58Z", "hours": 3.2636, "text": "Devlog 4: (Now with logging) What change Rewrote a lot of the logic making it safer Added a timeout for pinging Added a Code struct which has TryFrom<&str> and std::fmt::Display implemented so it’s really easy to convert a code string to the code structure and back added logging with tracing Combined both sending sockets to one Arc<UdpSocket> so broadcaster and direct connection check share one socket reducing overhead Changed how I handle Errors, no longer ignoring them Next up: Cli Maybe a tui"}, {"post_id": 47172, "ts": "2026-08-14T21:15:25Z", "hours": 2.3325, "text": "Devlog 3: Got everything working in Rust. Now the direct connection check works in both directions. Next up: Optimizing TUI CLI"}, {"post_id": 46519, "ts": "2026-08-13T20:03:20Z", "hours": 7.4931, "text": "Devlog 2: I started reimplementing everything in rust. Already have the discovery broadcast and listener working. So the only things missing are the direct connection check from the program site and a better looking interface like a tui."}, {"post_id": 45299, "ts": "2026-08-11T17:42:09Z", "hours": 2.7483, "text": "Devlog 1: So I reverse engineered the protocol hak5 uses for SharkLink using one SharkJack Display and my PC with Wireshark for package inspection. I first needed to implement the device discovery which is a broadcast UDP package which in plan text says <PIN> <Sender_Ip>\\n so for example 1-3-3-7 192.168.178.1\\n Then I reverse engineered the ping messages which are a direct connection with first PING <Sender_IP>\\n and then the response which is ACK <Sender_IP>\\n . Nextup: Reimplement the program in rust and after that create a tui."}]...
|
Title: AlternativeLink by @ERR0RW0LF | Stardance
Title: AlternativeLink by @ERR0RW0LF | Stardance
Devlogs:
Devlog 1: So I reverse engineered the protocol hak5 uses for SharkLink using one SharkJack Display and my PC with Wireshark for package inspection. I first needed to implement the device discovery which is a broadcast UDP package which in plan text says <PIN> <Sender_Ip>\n so for example 1-3-3-7 192.168.178.1\n Then I reverse engineered the ping messages which are a direct connection with first PING <Sender_IP>\n and then the response which is ACK <Sender_IP>\n . Nextup: Reimplement the program in rust and after that create a tui.
Devlog 2: I started reimplementing everything in rust. Already have the discovery broadcast and listener working. So the only things missing are the direct connection check from the program site and a better looking interface like a tui.
Devlog 3: Got everything working in Rust. Now the direct connection check works in both directions. Next up: Optimizing TUI CLI
Devlog 4: (Now with logging) What change Rewrote a lot of the logic making it safer Added a timeout for pinging Added a Code struct which has TryFrom<&str> and std::fmt::Display implemented so it’s really easy to convert a code string to the code structure and back added logging with tracing Combined both sending sockets to one Arc<UdpSocket> so broadcaster and direct connection check share one socket reducing overhead Changed how I handle Errors, no longer ignoring them Next up: Cli Maybe a tui
Devlog 5: I finally did it! It’s now a cli tool! What changed: It’s a Cli. So, to use it just try the --help / -h flag to get the usage. Also, I restructured the project into a core lib and the cli bin crates using a cargo workspace. This should allow me to more easily develop the Tui later. I also set up two github workflows, one that audits my used packages using the actions-rust-lang/audit action. The other one builds me the cli for a lot of different targets using the dtolnay/rust-toolchain action. I also started writing some instructions to try the project, but this is still an area of active development. Next up I defiantly need to document the protocol that I’m using. Also, as I have mentioned I want to create a tui. Maybe later a gui would be a great addition but that’s something I’m not quite sure about.
Devlog 6: Finaly finished the CLI. Over the past hours I have improved my code a lot. By making it automaticly terminate if it gets pinged and adding the --no_stop flag to prevent automatic closing. Next up: Shipping it and maybe after getting some feedback improving it.
Ships:
AlternativeLink This project implements the SharkLink Protocol making it compatible with the Shark Jack Display by Hak5. This ship is for the underlying core lib in combination with the CLI. CLI The CLI tool provides a quick and easy way to use any pc in combination with the Shark Jack Display. Using the -h / --help flags this help message is printed: Rust implementation for SharkLink Usage: alternative-link-cli.exe [OPTIONS] --interface <INTERFACE> Options: -i, --interface <INTERFACE> Interface IP to bind to (skips interactive picker) -p, --port <PORT> UDP port to use [default: 1337] -c, --code <CODE> Shared room/pairing code [default: 1-3-3-7] --broadcast-interval <BROADCAST_INTERVAL> Broadcast interval in seconds [default: 5] --auto-test Run non-interactively: auto-test connection as soon as a peer is found. If this is not set after receiving a Ping and sending the Ack the program closes --no-stop Prevents the program from automatically stopping (you will need to manually kill the program if this is set) -v... Increase log verbosity (-v -vv) --json Emit machine-readable JSON status lines instead of prose --max-direct-tries <MAX_DIRECT_TRIES> Maximum retries for the direct connection test [default: 20] -h, --help Print help -V, --version Print version Development The first prototype was developed in python using package inspection with wireshark. After refining that prototype, I wrote a first all in one (file) interactive version of that prototype using rust. Then I found out that the SharkLink tool on the Shark Jack Display a bash script is. (I never looked at it properly but just found out that I accidentally implemented a similar control flow using python and rust) After that I split the project into the cargo workspace structure with one lib and cli crates. Now I have started developing an interactive version but more close to original. Trying it The README on GitHub details how to run it on windows. This is because I have only tested it in these combinations. But it should work everywhere because I haven’t used anything os specific and tested it on wsl....
|
1793145106.0348272
|
1793231506.0348272
|
|
47866
|
Thyme - Medication Tracker by @anhedonia | Stardan Thyme - Medication Tracker by @anhedonia | Stardance...
|
anhedonia
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-28T15:43:33Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Haii :3 !! I made thyme, it’s a little app to effectively track your medication courses throughout the days ! I couldn’t find any native, local, and foss material 3 expressive medication tracker for android so I set myself on building one ! It allows to not miss doses ( soon ) and enjoy nice stats ! I focused on design, trying to make something that felt satisfying to use and interact with, so i put a lot of effort into designing nice little icons, some subtle animations and especially a good ux ! It requires zero permissions and is fully offline It has a nice stats screen that displays cool data on your courses following (i love stats). I It supports multiple type of scheduling, like tapers and cycles ! It’s not fully feature complete, it lacks proper reminders (which im working on but its hard!!), and could use some other features (like stock tracking (medication stock, not wall street, sorry), or new schedule types) To test the project you will need an android device or emulator !!! You can just download the apk, or use the nifty little Obtainium install link ! I hope you will enjoy it !", "repo": "https://github.com/whayn/thyme", "demo": "https://github.com/whayn/thyme/releases/latest"}]...
|
[{"post_id": 54498, "ts": "202 [{"post_id": 54498, "ts": "2026-08-25T14:49:53Z", "hours": 12.4025, "text": "Devlog 6 : I tried to setup alerts, and its horrific… Practically android is super annoying when coming to alarm apps and you need to account for 20 untestable edge cases regarding permissions, battery optimisations and so much more. At the same time the design i pulled off looks really bad i kinda feel like… so i kind of wanna scrap this feature, ship the tracker as it was before, and come back to it later… There is just too much to account for that I’m actually able to account of"}, {"post_id": 50247, "ts": "2026-08-19T12:16:00Z", "hours": 9.6642, "text": "Devlog 5 : Huge UI update, I actually made an app i’d actually use This was so much fun to iterate between design and code, the icons were nice to create too, I hope I made enough :3 We have a new screen for adding or editing medication, it’s multiple steps, pretty and enjoyable ! We got multiple palettes for dark mode and light mode, that was a fun challenge to overcome, since we cant just store the color in the db, we instead store an index towards a color ! Had fun with developer options, so i made a function to generate fake data to try if everything works properly ! I changed the stats rendering to make it more readable and fixed the timeline so that it stays a continuous line throughout, i think it looks neat ! I still have one or two design decision in mind I must take before implementing : the alerts screen tons of new features, stock, other courses type, and so much more !"}, {"post_id": 49023, "ts": "2026-08-17T16:45:57Z", "hours": 1.8931, "text": "Devlog 4 : A cool statistics screen, cause stats are fucken awesome it shows how well you follow your courses with a calendar view, and statistics sover period of time !"}, {"post_id": 48280, "ts": "2026-08-16T16:19:13Z", "hours": 3.0375, "text": "Devlog 3 : UI is started, and I like it so far !!! I’ve been working for a few hours on the ui since the backend is practically completed, and i’m happy with what i’ve done I’ve got a pretty timeline ui, good options for regimens, cycles, daily, on specific days, every n days. We have a pretty timeline view ! Tomorrow I shall update the Medications tab to improve the ux, and also add a really cool stat tab to follow your average time taken at, what percentage of your regimen do you follow and so much more ! then of course, and what i fear the most, a robust, multi level, alarm system, unskipable, recurring, snoozeable, whilst circumventing battery optimisation and other stuff"}, {"post_id": 48081, "ts": "2026-08-16T11:28:29Z", "hours": 2.6753, "text": "Devlog 2 : Database work, the most fun ! Sooooo, worked for 2 little hours on the project thinking about how I should properly design the database and decided on the following : 3 entities, Medications, that manage the physical pill and stock, Scheduled dose managing the time at which a medication must be taken and how many doses. Finally a Log for each doses attached to a time, will allow to track and get some stats later ! Finally i quickly whipped up a ui to add medications, its far from the final ui, i already have better ideas on that and ill hope itll look good !"}, {"post_id": 47603, "ts": "2026-08-15T16:34:01Z", "hours": 1.6497, "text": "Devlog 1 : Learning Kotlin + Jetpack Compose isn’t that easy actually I tried to rawdog it and quickly ran into the fact that it’s not that intuitive to work with… This was my first time playing around with Kotlin and I learned on top of it : Jetpack compose premises The way to create databases on an android app We have composables that emit and return nothing, Lazy Layouts that require lists, and so much more. Was honestly so much fun, hyped to continue tomorrow, probably on data modelling tasks or maybe start to work on ui !"}]...
|
Title: Thyme - Medication Tracker by @anhedonia | Title: Thyme - Medication Tracker by @anhedonia | Stardance
Devlogs:
Devlog 1 : Learning Kotlin + Jetpack Compose isn’t that easy actually I tried to rawdog it and quickly ran into the fact that it’s not that intuitive to work with… This was my first time playing around with Kotlin and I learned on top of it : Jetpack compose premises The way to create databases on an android app We have composables that emit and return nothing, Lazy Layouts that require lists, and so much more. Was honestly so much fun, hyped to continue tomorrow, probably on data modelling tasks or maybe start to work on ui !
Devlog 2 : Database work, the most fun ! Sooooo, worked for 2 little hours on the project thinking about how I should properly design the database and decided on the following : 3 entities, Medications, that manage the physical pill and stock, Scheduled dose managing the time at which a medication must be taken and how many doses. Finally a Log for each doses attached to a time, will allow to track and get some stats later ! Finally i quickly whipped up a ui to add medications, its far from the final ui, i already have better ideas on that and ill hope itll look good !
Devlog 3 : UI is started, and I like it so far !!! I’ve been working for a few hours on the ui since the backend is practically completed, and i’m happy with what i’ve done I’ve got a pretty timeline ui, good options for regimens, cycles, daily, on specific days, every n days. We have a pretty timeline view ! Tomorrow I shall update the Medications tab to improve the ux, and also add a really cool stat tab to follow your average time taken at, what percentage of your regimen do you follow and so much more ! then of course, and what i fear the most, a robust, multi level, alarm system, unskipable, recurring, snoozeable, whilst circumventing battery optimisation and other stuff
Devlog 4 : A cool statistics screen, cause stats are fucken awesome it shows how well you follow your courses with a calendar view, and statistics sover period of time !
Devlog 5 : Huge UI update, I actually made an app i’d actually use This was so much fun to iterate between design and code, the icons were nice to create too, I hope I made enough :3 We have a new screen for adding or editing medication, it’s multiple steps, pretty and enjoyable ! We got multiple palettes for dark mode and light mode, that was a fun challenge to overcome, since we cant just store the color in the db, we instead store an index towards a color ! Had fun with developer options, so i made a function to generate fake data to try if everything works properly ! I changed the stats rendering to make it more readable and fixed the timeline so that it stays a continuous line throughout, i think it looks neat ! I still have one or two design decision in mind I must take before implementing : the alerts screen tons of new features, stock, other courses type, and so much more !
Devlog 6 : I tried to setup alerts, and its horrific… Practically android is super annoying when coming to alarm apps and you need to account for 20 untestable edge cases regarding permissions, battery optimisations and so much more. At the same time the design i pulled off looks really bad i kinda feel like… so i kind of wanna scrap this feature, ship the tracker as it was before, and come back to it later… There is just too much to account for that I’m actually able to account of
Ships:
Haii :3 !! I made thyme, it’s a little app to effectively track your medication courses throughout the days ! I couldn’t find any native, local, and foss material 3 expressive medication tracker for android so I set myself on building one ! It allows to not miss doses ( soon ) and enjoy nice stats ! I focused on design, trying to make something that felt satisfying to use and interact with, so i put a lot of effort into designing nice little icons, some subtle animations and especially a good ux ! It requires zero permissions and is fully offline It has a nice stats screen that displays cool data on your courses following (i love stats). I It supports multiple type of scheduling, like tapers and cycles ! It’s not fully feature complete, it lacks proper reminders (which im working on but its hard!!), and could use some other features (like stock tracking (medication stock, not wall street, sorry), or new schedule types) To test the project you will need an android device or emulator !!! You can just download the apk, or use the nifty little Obtainium install link ! I hope you will enjoy it !...
|
1792875276.1153498
|
1793739276.1153498
|
|
54773
|
DMGTile by @Wirenux | Stardance
|
Wirenux
|
2
|
31.0
|
394
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T13:06:36Z", "hours": 16.0, "multiplier": 11.12, "payout": 183, "blessing": "neutral", "text": "DMGTile v2 - GPUI Rewrite This version is a full rewrite of the UI (and some other functionality) with GPUI (the framework that Zed use). I kept every feature from the v1, 128-tile projects, undo/redo, copy/paste/cut, .dmgtile save/load, .bin and .c export, all the drawing tools. And rebuilt the interface from scratch with a pixel-art aesthetic: pixelated corner on every panel, a pixel font, and cached GPU textures for thumbnails and previews. What I added in this version ? Toast notifications for save, export, and error feedback Native macOS menu bar with File / Edit / Help, plus a matching in-window bar on Windows and Linux Real app icon Optimized tile list that only renders visible tiles, so scrolling stays smooth I also added the toast notification (compared to V1) The app is now more macOS compliant, I was able to add the top bar with the classic : File, Edit, View, Help etc… I was also able to put a icon ! What can I do now ? Everything you need to know is in the README.md or in the GitHub Release This might sound like a little update but the rewrite took me around 17 hour so…… thank you for reading ❤️ (I even made a cute little icon :D )", "repo": "https://github.com/wirenux/DMGTile", "demo": "https://github.com/wirenux/DMGTile/releases/"}, {"ship_num": 2, "ts": "2026-09-03T17:16:52Z", "hours": 15.0, "multiplier": 13.92, "payout": 211, "blessing": "neutral", "text": "What is this ? DMGTile is a Gameboy Tile Editor/Designer build in Rust. Basically it’s a drawing program for Gameboy game. Why ( °ヮ° ) ? The idea for this project came from GBTD (Gameboy Tile Designer), who is Windows only and kinda old… So I recreated it from-scratch in Rust, so it can run on Linux, Windows & macOS without Wine (or equivalent). And all of this with the same features as GBTD. Core Features ( ദ്ദി ˙ᗜ˙ ) Editor Pixel Painting: Use the mouse to paint ദ്ദി(˵ •̀ ᴗ - ˵ ) ✧ Bucket Fill: A classic flood-fill tool Transform Tools: You can flip, rotate, move the active tile Live Previews: A little 4x4 grid to preview the active tile in a pattern (e.g: a background) Cached Texture Rendering: Tile textures are cached and only rebuilt when a tile is modified Project Management Multi-Tile Support: You can draw up to 128 tiles per project file (you can scroll the list on the right of the screen to change tile) Undo/Redo: Each action is store in a stack, so you are able to undo or redo an action ! Copy/Paste/Cut: Duplicate or move tile data between slots (in the same project) File Format: Each project is saved in .dmgtile (JSON), storing only the modified tiles while preseving the tiles ID Keyboard Shortcut: Full Cmd/Ctrl support for New Project, Open, Save, Undo, Redo, etc… Even the tools have there own shortcut Export .bin Export: Exports all the modified tiles into the Gameboy’s native 2bpp format .c Export: Exports all the modified tiles as a C array, with configurable array name (Can be used with GBDK) Selective export: Only the modified tiles are written out Okay… but how to test it ? There is multiple way to test DMGTile but the easiest is to go to the Github Release and download the program for your OS ദ്ദി(˵ •̀ ᴗ - ˵ ) ✧ Then you can launch it and start drawing ! You can also try the export part to a .bin or .c file (you can see the note.md file on github, it’s my personal note when I was building DMGTile) Thank you Just a little thank you ❤️ (Every things you need is probably in the README.md) (I even made a cute little icon :D )", "repo": "https://github.com/wirenux/DMGTile", "demo": "https://github.com/wirenux/DMGTile/releases/"}]...
|
[{"post_id": 71193, "ts": "202 [{"post_id": 71193, "ts": "2026-09-20T12:52:44Z", "hours": 0.9414, "text": "This is the last devlogs for DMGTile. AKA the V2 Release . I modified the README for the GPUI version, made the github release and last minutes fix. Bye bye"}, {"post_id": 71136, "ts": "2026-09-20T10:40:25Z", "hours": 1.6833, "text": "After 1h40 of headache I FINNALY added a menu bar to Linux and Windows . At first I wanted to use gpui-components but there was way to much issue with it so I build my own bar (in the same style as the whole app) I even created a quick Dockerfile to test on my mac the linux build. I also added the export to .c and .bin"}, {"post_id": 71056, "ts": "2026-09-20T07:55:11Z", "hours": 2.5719, "text": "In those 2h30 I’ve done a lot of thing The most of it was optimization with the Tile List Rendering and Caching but I also rearrange all the code (before it’s was just a big main.rs file) And I added Save, Open & New Project and clean a little bit"}, {"post_id": 69769, "ts": "2026-09-17T19:13:56Z", "hours": 1.0592, "text": "This is a short update because I fix some little bug like : Alignment on the tile list (with the number) Not getting the little shortcut sign on macOS And I added: Toast notification style with error color or success color"}, {"post_id": 69206, "ts": "2026-09-16T16:23:50Z", "hours": 1.9942, "text": "In 2 hours I added 2 big thing The Copy/Paste/Cut integration The tool bar Icon for the toolbar The icon was pretty long to make (because i suck at drawing… ) And implementing the tool bar too. Here are some picture of the icon and the toolbar (I use Aseprite btw)"}, {"post_id": 68248, "ts": "2026-09-14T19:31:57Z", "hours": 0.4703, "text": "This is a very very little update I added the same tools as in the EGUI version : Shift (Left, Right, Down, Up) and Rotate (it wasn’t difficult at all)"}, {"post_id": 67439, "ts": "2026-09-13T15:29:02Z", "hours": 5.365, "text": "A Lot of thing happen in 5h20 I create a custom UI with Game Boy related color, custom button, border, font, etc… For now I have the drawing zone, the preview, the tiles list, the shade selector and tools To be more specific I added rounder pixelated shade selector, rounded pixelated border, Undo, Redo, Draw/bucket tools"}, {"post_id": 64110, "ts": "2026-09-08T09:40:33Z", "hours": 0.5522, "text": "Little update : I added the Shade selector and the palette selector, but also the Early GameBoy font ! And I think it look nice"}, {"post_id": 64095, "ts": "2026-09-08T08:51:15Z", "hours": 1.8236, "text": "I just discovered gpui it’s a UI library based on the GPU. It was created by the same team that make Zed (the code editor). And I found out that it very personalizable. So I am rewriting DMGTile in it . So far I have the basic grid and basic tools like the bucket, the pencil, eraser etc… The only problem is that I can’t track the right click drag. (I also got the native macOS toolbar)"}, {"post_id": 60922, "ts": "2026-09-03T16:08:44Z", "hours": 1.1617, "text": "This might be the last devlogs before Ship Nº1 After wayyyy to much time the macOS, Windows and Linux build are ready ! Apple GateKeeper and windows Defender don’t like my application 😭 they both flag as something weird / virus… I also realize that my Linux build wasn’t working so I fix it ! I released v1.0.0 ! I added those warning about Windows Defender and Apple GateKeeper ! I also added the --dev flag to get the dev menu and finished the README.md"}, {"post_id": 59459, "ts": "2026-09-01T10:08:27Z", "hours": 0.6517, "text": "I have been writing the README.md before the release !"}, {"post_id": 59102, "ts": "2026-08-31T18:41:06Z", "hours": 0.9964, "text": "I change a little bit the logo to add a background for the app icon. Now the app run on macOS, Windows & Linux with icon on each one ! The next step is to make the README & a little Manual ! (And of course publish & build the release version for Windows MacOS & Linux !)"}, {"post_id": 59026, "ts": "2026-08-31T16:41:18Z", "hours": 1.2864, "text": "After 40min in Aseprite I am finally happy with a logo (I am so so pround of my self 😤 ). I designed it all by my self . Also I added some “toast” for a better UX."}, {"post_id": 58250, "ts": "2026-08-30T16:45:43Z", "hours": 0.7447, "text": "This is a little update. In this devlogs I just created & tested my Makefile to cross built for Linux, Windows, MacOS from my Mac. And this work !"}, {"post_id": 58187, "ts": "2026-08-30T15:22:18Z", "hours": 2.755, "text": "Wow 2h45 This the devlogs with the most things I added Here is a list of everything I added: A Export window Now allow up to 128 tiles on a single file When you draw somethings in tile 1 and on tile 6 in the .dmgtile file there will save only those 2 with there ID. In the .c file is the same but without there ID so there will just be right after the other (same thing for .bin ) “New project” button, with it you can start a…. NEW PROJECT Keyboard shortcut text in the top menu Keyboard shortcut to use every tool and change shade easily Hover text on every tool (to show the keyboard shortcut) Multiple tile render Move tool bar to the top for better UI Copy, Cut, Paste tile Add more Ctrl+Z utility Big chunk of tile see if it’s look good on repeat Andddd, that it (this was damn hard). You can find every commit on my github."}, {"post_id": 57963, "ts": "2026-08-30T09:27:33Z", "hours": 1.225, "text": "A big feature here I added the export to .dmgtile file (it’s just a JSON but modified ). You can also open it ! I also added the Undo / Redo with CTRL+Z & CTRL+SHIFT+Z (or the same but with CMD on macOS) and also in the Edit menu But for me the biggest feature of this devlogs is the Export menu where you can choose the extension (.bin or .c) and if you choose .c you can modify the array name . I also added the drag when using the bucket 🪣"}, {"post_id": 57596, "ts": "2026-08-29T19:56:50Z", "hours": 1.8133, "text": "A lot of change . I added a top bar to with the option to export the tile in .bin & .c For the top bar I had the idea of using muda but it just a complete mess on macOS and over kill for what I wanted to do so i just use the eframe equivalent I also added icon to replace the old text."}, {"post_id": 56748, "ts": "2026-08-28T17:05:51Z", "hours": 1.0083, "text": "Wow exaclty one hour Now the tile can be exported ! Understanting the Gameboy way to read tile was so hard that I started to write my own docs 💀 . In this devlogs the important part is just to know that now every tile can be exported in a .bin (later I will do a .c/.h like GBTD)"}, {"post_id": 56673, "ts": "2026-08-28T15:07:20Z", "hours": 1.5358, "text": "I added a LOT of thing (i think… ) . I added all the basic tool for pixel art (for the gameboy). Here is a list : Canvas movement (move the pixel art in the canvas), Horizontal and Vertical flip, Rotate 90 clockwise, Pen & Bucket tool. I also added a new RGB palette to get the classic green one and the gray one (I also did fixed some little bug with the UI and the canvas)"}, {"post_id": 55549, "ts": "2026-08-27T14:00:53Z", "hours": 0.7142, "text": "Little update here . I added some new things . I added the color selector ! Also some shade indicator for the left and right mouse button, since in the color selector you can change the color for both. (They even got there own little outline )"}, {"post_id": 55524, "ts": "2026-08-27T13:03:21Z", "hours": 1.2633, "text": "1st devlogs . Right now I added the very basic feature, the grid with draw and erase. You can draw in dark grey with the left click and erase (paint in white) with the right click !"}]...
|
Title: DMGTile by @Wirenux | Stardance
Devlogs:
1 Title: DMGTile by @Wirenux | Stardance
Devlogs:
1st devlogs . Right now I added the very basic feature, the grid with draw and erase. You can draw in dark grey with the left click and erase (paint in white) with the right click !
Little update here . I added some new things . I added the color selector ! Also some shade indicator for the left and right mouse button, since in the color selector you can change the color for both. (They even got there own little outline )
I added a LOT of thing (i think… ) . I added all the basic tool for pixel art (for the gameboy). Here is a list : Canvas movement (move the pixel art in the canvas), Horizontal and Vertical flip, Rotate 90 clockwise, Pen & Bucket tool. I also added a new RGB palette to get the classic green one and the gray one (I also did fixed some little bug with the UI and the canvas)
Wow exaclty one hour Now the tile can be exported ! Understanting the Gameboy way to read tile was so hard that I started to write my own docs 💀 . In this devlogs the important part is just to know that now every tile can be exported in a .bin (later I will do a .c/.h like GBTD)
A lot of change . I added a top bar to with the option to export the tile in .bin & .c For the top bar I had the idea of using muda but it just a complete mess on macOS and over kill for what I wanted to do so i just use the eframe equivalent I also added icon to replace the old text.
A big feature here I added the export to .dmgtile file (it’s just a JSON but modified ). You can also open it ! I also added the Undo / Redo with CTRL+Z & CTRL+SHIFT+Z (or the same but with CMD on macOS) and also in the Edit menu But for me the biggest feature of this devlogs is the Export menu where you can choose the extension (.bin or .c) and if you choose .c you can modify the array name . I also added the drag when using the bucket 🪣
Wow 2h45 This the devlogs with the most things I added Here is a list of everything I added: A Export window Now allow up to 128 tiles on a single file When you draw somethings in tile 1 and on tile 6 in the .dmgtile file there will save only those 2 with there ID. In the .c file is the same but without there ID so there will just be right after the other (same thing for .bin ) “New project” button, with it you can start a…. NEW PROJECT Keyboard shortcut text in the top menu Keyboard shortcut to use every tool and change shade easily Hover text on every tool (to show the keyboard shortcut) Multiple tile render Move tool bar to the top for better UI Copy, Cut, Paste tile Add more Ctrl+Z utility Big chunk of tile see if it’s look good on repeat Andddd, that it (this was damn hard). You can find every commit on my github.
This is a little update. In this devlogs I just created & tested my Makefile to cross built for Linux, Windows, MacOS from my Mac. And this work !
After 40min in Aseprite I am finally happy with a logo (I am so so pround of my self 😤 ). I designed it all by my self . Also I added some “toast” for a better UX.
I change a little bit the logo to add a background for the app icon. Now the app run on macOS, Windows & Linux with icon on each one ! The next step is to make the README & a little Manual ! (And of course publish & build the release version for Windows MacOS & Linux !)
I have been writing the README.md before the release !
This might be the last devlogs before Ship Nº1 After wayyyy to much time the macOS, Windows and Linux build are ready ! Apple GateKeeper and windows Defender don’t like my application 😭 they both flag as something weird / virus… I also realize that my Linux build wasn’t working so I fix it ! I released v1.0.0 ! I added those warning about Windows Defender and Apple GateKeeper ! I also added the --dev flag to get the dev menu and finished the README.md
I just discovered gpui it’s a UI library based on the GPU. It was created by the same team that make Zed (the code editor). And I found out that it very personalizable. So I am rewriting DMGTile in it . So far I have the basic grid and basic tools like the bucket, the pencil, eraser etc… The only problem is that I can’t track the right click drag. (I also got the native macOS toolbar)
Little update : I added the Shade selector and the palette selector, but also the Early GameBoy font ! And I think it look nice
A Lot of thing happen in 5h20 I create a custom UI with Game Boy related color, custom button, border, font, etc… For now I have the drawing zone, the preview, the tiles list, the shade selector and tools To be more specific I added rounder pixelated shade selector, rounded pixelated border, Undo, Redo, Draw/bucket tools
This is a very very little update I added the same tools as in the EGUI version : Shift (Left, Right, Down, Up) and Rotate (it wasn’t difficult at all)
In 2 hours I added 2 big thing The Copy/Paste/Cut integration The tool bar Icon for the toolbar The icon was pretty long to make (because i suck at drawing… ) And implementing the tool bar too. Here are some picture of the icon and the toolbar (I use Aseprite btw)
This is a short update because I fix some little bug like : Alignment on the tile list (with the number) Not getting the little shortcut sign on macOS And I added: Toast notification style with error color or success color
In those 2h30 I’ve done a lot of thing The most of it was optimization with the Tile List Rendering and Caching but I also rearrange all the code (before it’s was just a big main.rs file) And I added Save, Open & New Project and clean a little bit
After 1h40 of headache I FINNALY added a menu bar to Linux and Windows . At first I wanted to use gpui-components but there was way to much issue with it so I build my own bar (in the same style as the whole app) I even created a quick Dockerfile to test on my mac the linux build. I also added the export to .c and .bin
This is the last devlogs for DMGTile. AKA the V2 Release . I modified the README for the GPUI version, made the github release and last minutes fix. Bye bye
Ships:
What is this ? DMGTile is a Gameboy Tile Editor/Designer build in Rust. Basically it’s a drawing program for Gameboy game. Why ( °ヮ° ) ? The idea for this project came from GBTD (Gameboy Tile Designer), who is Windows only and kinda old… So I recreated it from-scratch in Rust, so it can run on Linux, Windows & macOS without Wine (or equivalent). And all of this with the same features as GBTD. Core Features ( ദ്ദി ˙ᗜ˙ ) Editor Pixel Painting: Use the mouse to paint ദ്ദി(˵ •̀ ᴗ - ˵ ) ✧ Bucket Fill: A classic flood-fill tool Transform Tools: You can flip, rotate, move the active tile Live Previews: A little 4x4 grid to preview the active tile in a pattern (e.g: a background) Cached Texture Rendering: Tile textures are cached and only rebuilt when a tile is modified Project Management Multi-Tile Support: You can draw up to 128 tiles per project file (you can scroll the list on the right of the screen to change tile) Undo/Redo: Each action is store in a stack, so you are able to undo or redo an action ! Copy/Paste/Cut: Duplicate or move tile data between slots (in the same project) File Format: Each project is saved in .dmgtile (JSON), storing only the modified tiles while preseving the tiles ID Keyboard Shortcut: Full Cmd/Ctrl support for New Project, Open, Save, Undo, Redo, etc… Even the tools have there own shortcut Export .bin Export: Exports all the modified tiles into the Gameboy’s native 2bpp format .c Export: Exports all the modified tiles as a C array, with configurable array name (Can be used with GBDK) Selective export: Only the modified tiles are written out Okay… but how to test it ? There is multiple way to test DMGTile but the easiest is to go to the Github Release and download the program for your OS ദ്ദി(˵ •̀ ᴗ - ˵ ) ✧ Then you can launch it and start drawing ! You can also try the export part to a .bin or .c file (you can see the note.md file on github, it’s my personal note when I was building DMGTile) Thank you Just a little thank you ❤️ (Every things you need is probably in the README.md) (I even made a cute little icon :D )
DMGTile v2 - GPUI Rewrite This version is a full rewrite of the UI (and some other functionality) with GPUI (the framework that Zed use). I kept every feature from the v1, 128-tile projects, undo/redo, copy/paste/cut, .dmgtile save/load, .bin and .c export, all the drawing tools. And rebuilt the interface from scratch with a pixel-art aesthetic: pixelated corner on every panel, a pixel font, and cached GPU textures for thumbnails and previews. What I added in this version ? Toast notifications for save, export, and error feedback Native macOS menu bar with File / Edit / Help, plus a matching in-window bar on Windows and Linux Real app icon Optimized tile list that only renders visible tiles, so scrolling stays smooth I also added the toast notification (compared to V1) The app is now more macOS compliant, I was able to add the top bar with the classic : File, Edit, View, Help etc… I was also able to put a icon ! What can I do now ? Everything you need to know is in the README.md or in the GitHub Release This might sound like a little update but the rewrite took me around 17 hour so…… thank you for reading ❤️ (I even made a cute little icon :D )...
|
1793098098.7336242
|
1793184498.7336242
|
|
57140
|
Visora by @Amadev | Stardance
|
Amadev
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T17:29:23Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Built Visora, an MCP server that gives AI agents reliable high-level control over the Unity Editor. The hardest part was making animation and editor workflows safe and predictable: IK, gaze, retargeting, animation QA, bridge reload recovery, prefab inspection, rollback, and reproducible preview artifacts. I’m most proud of how much of the Unity-side behavior is covered by real EditMode/integration tests instead of only mocked Python tests. To test it, use the GitHub release/source, follow the setup guide, connect Visora to a Unity project, and try the MCP tools for animation, scene inspection, previews, or prefab inspection.", "repo": "https://github.com/AmaLS367/Visora", "demo": "https://github.com/AmaLS367/Visora/releases/tag/v0.1.3"}]...
|
[{"post_id": 65482, "ts": "202 [{"post_id": 65482, "ts": "2026-09-10T17:21:38Z", "hours": 5.3419, "text": "Preview Artifacts, Bridge Recovery & Prefab Workflows Added reproducible animation preview artifacts with stored records and comparison tools for repeatable QA.Improved Unity bridge recovery during reloads/recompiles, added retry hints and safer timeout handling. Added real Unity E2E animation fixtures and reorganized the test suite.Finished the v0.1.3 release, refreshed the README/docs, and started v0.1.4 prefab workflows. Added inspect_prefab_asset and inspect_prefab_overrides with native Unity services, support for nested/variant/model prefabs, structured override inspection, stable IDs, and Python/integration/EditMode test coverage."}, {"post_id": 64760, "ts": "2026-09-09T12:27:18Z", "hours": 8.7661, "text": "Worked on a large animation/character workflow update for Visora. Added dedicated agent workflows for animation authoring, camera/action sequences, rig retargeting, IK, gaze, motion polishing, contact handling and animation QA. Updated the MCP instructions and project docs so agents have a clear workflow for checking rigs, previewing animation, validating motion and handling Humanoid/Generic fallback cases. Implemented new animation tooling around Two-Bone IK, viewport-based effector placement and character gaze. Added support for solving and baking IK/gaze into animation clips, including parameter validation and Unity capability checks.Added a bigger QA layer for animation. This includes temporal motion analysis, curve discontinuity diagnostics, self-intersection checks and comparison of animation previews. Also added contact baking for things like planted feet/hands and camera-subject action tooling for synchronizing character motion with camera impacts. Added atomic animation transactions and improved rollback/backup handling so multiple animation edits can be applied together and reverted safely when something fails. Refactored the Unity-side animation services around shared sampling, curve writing and rollback helpers. Spent a good amount of time hardening all of this against actual Unity edge cases: Edit Mode requirements, unsupported bridge capabilities, invalid parameters, unknown diagnostic values, quaternion discontinuities, tangent preservation and proper exception handling. Added a Unity EditMode integration test suite covering IK, gaze, contact baking and atomic animation transactions, together with a runner script. Expanded the Python unit tests for the new animation tools and failure cases as well.Also reworked Visora’s visual output. Screenshots, animation previews and video frames now use multimodal MCP image blocks and file artifacts instead of dumping Base64 data into the response. Multi-frame previews can generate contact sheets, and full-resolution artifacts stay on disk. After that I focused heavily on MCP context usage. Compact tool definitions reduced the tool catalog payload significantly, diagnostic tools now have limits/filtering for large skeletons and clips, tool results are compacted, duplicate structured output is removed, and several redundant tools/wrappers were merged or deleted. The tool catalog went from 55 tools down to 44. Merged the two separate video capture tools into a single capture_video workflow and reduced the default screenshot resolution to 720p. Inline images are now automatically downscaled while keeping the full-resolution artifact available separately. Finally tuned the default diagnostic dump sizes further so normal tool calls consume much less agent context and larger detailed dumps are requested only when they are actually needed."}, {"post_id": 62172, "ts": "2026-09-05T13:09:04Z", "hours": 2.9436, "text": "Editing Animation Clips & Events Hey everyone, continue working on it. Up until now, the agent could only really watch animations—taking previews and checking poses. If a keyframe was off or a transition looked janky, you still had to go into Unity and fix it by hand. Now, the agent can actually edit AnimationClip assets directly. It can add, move, or delete keyframes, tweak curves, and set tangent modes like smooth, linear, or step holds. Giving an AI write access to your animation files is honestly a bit scary—one bad curve and your character turns into a noodle. To keep things safe, Visora now takes an automatic backup of the clip before touching it, and hooks every edit into Unity’s native Undo system. If the agent makes a mess, you can roll it back with a tool call or just hit Ctrl + Z right in the editor. We also added tools to create and remove animation events. This makes it way easier to sync things like hit-stops, camera shake, or footstep sounds to exact frames on the timeline instead of guessing with timers."}, {"post_id": 61583, "ts": "2026-09-04T15:45:13Z", "hours": 5.5072, "text": "Visora v0.1.3 — Giving Agents Eyes on Unity Animations So, we just fixed a massive problem. Once I hit merge, a huge weight lifted off my shoulders. It feels like the raw volume of code I write is getting smaller each time, but what actually lands has a massive, cascading impact on the entire system.Until now, whenever an AI agent needed to inspect an animation in Unity, it was basically flying blind. The old approach was either pulling raw curve data (which tells an agent nothing about clipping, silhouette, or visual feel) or recording full video dumps over the HTTP bridge. Video was heavy, expensive on tokens, slow to transfer, and worse: if the camera wasn’t manually lined up in the scene, the character would just walk right out of frame or get clipped halfway through. With Visora v0.1.3, we tackled this head-on by building preview_animation. It’s not just a snapshot tool — it’s a complete visual pipeline designed specifically for agent context budgets. What Actually Changed Under the Hood Trajectory-Aware Auto-Framing (C# Engine Side) Instead of relying on whatever camera happens to be in the scene, Visora now spins up a transient preview camera. Before snapping a single frame, it samples the clip across its timeline, collects every active skinned and mesh renderer, and computes a union bounding sphere for the entire motion trajectory. It places the camera at an ideal 45° vantage point, automatically calculates the optimal distance based on camera FOV, and dynamically compensates for vertical vs. horizontal aspect ratios so tall or wide aspect ratios don’t clip the character’s head or limbs. Smart Keyframe Selection (Python Side) Agents can’t look at 120 raw frames — that would incinerate context windows and latency. We built an intelligent keyframe extractor (preview_keyframes.py) that analyzes the clip curves to find where actual motion happens: curve extrema, zero-crossings, sudden velocity changes, and animation event timestamps. It pins the start and end poses, then fits the most informative frames within a strict frame budget (e.g. 4 to 8 images). Zero-Side-Effect Scene Safety One of the hardest parts of building agent tooling for Unity is engine hygiene. The preview system samples the animation, renders offscreen to a custom RenderTexture, encodes directly to PNG byte buffers, and cleans up after itself. No dummy cameras left in the hierarchy, no dirty scene flags, and character poses are strictly restored to their pre-sampling state. Hardened CI & The Unity Package Gate We also tightened our pre-commit and CI gates. We introduced scripts/check_unity_package.py, compiling the C# package directly against real Unity assemblies with Microsoft.Unity.Analyzers in headless Linux containers. If there’s an obsolete API, a loose memory allocation, or a CA analyzer warning, the build fails before it ever touches a project. It feels great to have this merged and rock-solid. With animation visual inspection out of the way, I’m heading straight to the next item on the Roadmap: Typed Clip, Event, and Camera Authoring!"}, {"post_id": 60781, "ts": "2026-09-03T11:33:29Z", "hours": 2.2286, "text": "Visora devlog — v0.1.1 & v0.1.2 Shipped two releases back to back. Visora now has a proper open-source foundation: an Apache-2.0 license, full contributor and security docs, a hardened Docker image, and a complete CI pipeline that tests every change and publishes releases automatically. v0.1.1 was about infrastructure — agents can now search the web for 3D models, environments and rigs and import them straight into a live Unity project, plus all the CI/CD and Docker groundwork. v0.1.2 was about packaging and community — licensing, PyPI metadata, issue templates, contributor guides, and release integrity checks. You can now just pip install visora. And here’s the first real demo. A 2-second shot: a Rover-style character from Wuthering Waves throws a flying kick straight into the camera in a desert wasteland. The environment, the rig, the animation and the capture were all built by an AI agent driving a live Unity Editor through Visora — nothing hand-placed. The whole thing was made by Claude Sonnet 5, using about 20% of the 5-hour limit on the $20 plan. So a mid-tier model, for a fraction of a cheap subscription, can already take a scene from empty to finished shot on its own. Right now it’s 2 seconds — deliberately small, to set the floor. The goal is for Visora to grow into something where AI can build full, directed animation sequences: minute-long shots, multiple characters, real rigging, proper timelines. “Make me a cutscene” turning into an actual cutscene. This dropkick is just the starting line."}, {"post_id": 60717, "ts": "2026-09-03T08:42:43Z", "hours": 0.915, "text": "Production CI/CD and MCP 2.0 are now complete for Visora. The project now has a parallel GitHub Actions pipeline covering formatting, Ruff linting, strict mypy checks, unit and integration tests, lockfile validation, Unity package validation, distribution builds, and an enforced 80% coverage threshold. The workflows use uv caching, cancel outdated runs automatically, and skip runs for documentation-only changes. All GitHub Actions are pinned by commit SHA. A release pipeline now validates version tags, runs the full verification suite, builds the package, publishes it to PyPI, and creates a GitHub Release. Dependabot was added to update GitHub Actions and Python dependencies weekly. Funding configuration was added as well. Visora was migrated from MCP 1.x to MCP 2.1.1, replacing FastMCP with MCPServer and updating the related tests and documentation. The updated Dependabot pull request passed every CI check and was merged. The Production CI/CD roadmap item is now marked as completed."}, {"post_id": 60695, "ts": "2026-09-03T07:39:13Z", "hours": 3.4883, "text": "Visora devlog — asset pipeline & Unity native bridge (18 commits) Asset pipeline: from broken to trustworthy Built out the 3D-asset workflow (search → download → import → verify) and then spent most of the effort hardening it against silent failures: Added asset search/download/Unity-import tools (1a0bcd3, bf6a7d9), then refactored out dead backward-compat aliases (dda6c17). Fixed real bugs found by actually running it: ambientCG downloads being wrongly rejected and Sketchfab results silently hidden (99d3f15), a wrong ambientCG download URL for 3D models (1d6e2ce), a crash on comma-separated port lists plus missing env-var docs (117e6e3), and .bin/.mtl companion files being incorrectly stripped out of glTF/OBJ archives (5cb1afa). Discovered Sketchfab’s own search API ignores the query text entirely (verified live) — added web_search_assets, a SearXNG-primary/DuckDuckGo-fallback real web search to find a specific named model and extract its Sketchfab UID (4489725). Biggest find: download_and_import_asset was reporting success=true even when Unity couldn’t actually parse the file (glTF with no importer installed → empty placeholder asset). Fixed to detect and reject that case explicitly instead of lying about success (8c4241b). Native Unity bridge: first real compile & runtime test com.visora.editor had apparently never been compiled in a real Unity Editor before. Opening it in Unity 6.6 surfaced a chain of genuine bugs, fixed one at a time: A broken float field that Unity’s JSON deserializer can’t handle, flattened to float on both C# and Python sides (08f502e, 4d05468). Unity 6.6 API removals: GetInstanceID() → GetEntityId() (c8c8905), then GetEntityId()’s own obsolete int-conversion operator → GetRawData() (027e39c). Two HTTP handlers (/api/editor/state, /api/visora/info) and a log-callback subscription were calling Unity APIs off the main thread, causing runtime errors — dispatched onto the main thread (d27e03f, 5e3069b). Dynamic C# snippet compilation was missing a reference to UnityEditor.CoreModule, breaking any snippet touching EditorApplication/EditorSceneManager (a8689a9). Agent guidance Shipped documentation aimed at other agents driving Visora, not just humans: an always-on MCP instructions block plus a copyable Claude Code skill (visora-asset-workflow) covering Sketchfab’s broken search, supported import formats, and how to actually verify an import worked (4e8cd5c). Housekeeping Committed the 29 .meta files Unity generated on first real import of the package — standard Unity convention, and further confirmation the package had never been opened in a real editor before this round of testing (b9e4f01). Net effect: the asset import pipeline no longer lies about success, Sketchfab search actually works for named models, and the native Unity bridge compiles and runs cleanly on Unity 6.6 — all verified end-to-end (ambientCG apple + a Sketchfab character model imported, inspected, and visually confirmed in-scene)."}, {"post_id": 60167, "ts": "2026-09-02T11:47:32Z", "hours": 1.5803, "text": "Building Visora: Teaching AI agents to actually see and fix Unity scenes (v0.1.0 update) Quick update on what I’ve been hacking on for Visora since adding the project banner. The problem I ran into: If you try to let an AI agent (like Claude or Cursor) work inside Unity, it’s usually a disaster. Current bridges just let the model run raw C# strings and read console logs.The agent is completely blind. It doesn’t know if a 3D character spawned behind the camera, if an animation is flying off into infinity, or if a model looks like a spiky mess because bone weights are broken. Even worse, agents love to edit things during Play Mode or hit save while Unity is recompiling, completely wrecking the scene files.I got tired of babysitting that, so I built Visora — a Python MCP server and a companion Unity package that gives agents actual eyes, rigging smarts, and guardrails so they don’t break your project. V0.1.0 — Here is what I’ve coded and got working over the last few days: Gave the agent actual vision. The agent can now render screenshots from any camera in the scene, check if a character is cut off by the screen edges or clipping planes (project_world_points and diagnose_camera_framing), compare before/after images, and even record short MP4/WebP video clips to inspect physics and animations over time. Made it understand rigs and animations. Instead of guessing why an animation looks wrong: It inspects AnimationClip curves directly and catches unwanted position or scale drift. It can sample any character’s pose at a specific second, inspect the transforms, and immediately restore the original pose so nothing stays messed up. Added a skeleton mapper with fuzzy bone search that understands both standard Humanoid rigs and messy Japanese MMD bone chains (like 全ての親, センター, 下半身, D-bones). Skinned mesh diagnostics Added tools to inspect SkinnedMeshRenderers. It detects inverted or zero-sized bounding boxes, missing root bones, and broken bone weights. It also tells you whether a glitch is just a missing material/texture or an actual broken mesh deformation. Made scene edits safe (undo & transaction rollback). Every script the agent runs now happens inside an isolated Undo group. If the C# code crashes or throws an exception, Visora automatically rolls back the entire scene to before the run. It also blocks saving during Play Mode so your scene never gets corrupted. Native Unity package + 24 typed tools Built a native Unity Editor package (com.visora.editor) using HttpListener hooked directly into Unity’s main editor update loop. On the Python side, I implemented 24 clean MCP tools with strict Pydantic schemas, auto-discovery for ports 8080-8085, and async queue polling for long tasks. Tagged and released v0.1.0 on GitHub with complete setup guides, agent recipes, and test coverage. What I’m building next for v0.1.1: Auto 3D model web search & download: I want the agent to search the web, find 3D models, textures, and environments, and download/import them directly into the Unity project so it can build and animate entire scenes on its own. Clean GitHub Actions CI/CD: Automatic linting, typing, and test runners on every commit. Docker support: A lightweight Dockerfile to easily run the MCP server anywhere in a headless container. You can check out the code and the v0.1.0 release here: https://github.com/AmaLS367/Visora"}]...
|
Title: Visora by @Amadev | Stardance
Devlogs:
Bui Title: Visora by @Amadev | Stardance
Devlogs:
Building Visora: Teaching AI agents to actually see and fix Unity scenes (v0.1.0 update) Quick update on what I’ve been hacking on for Visora since adding the project banner. The problem I ran into: If you try to let an AI agent (like Claude or Cursor) work inside Unity, it’s usually a disaster. Current bridges just let the model run raw C# strings and read console logs.The agent is completely blind. It doesn’t know if a 3D character spawned behind the camera, if an animation is flying off into infinity, or if a model looks like a spiky mess because bone weights are broken. Even worse, agents love to edit things during Play Mode or hit save while Unity is recompiling, completely wrecking the scene files.I got tired of babysitting that, so I built Visora — a Python MCP server and a companion Unity package that gives agents actual eyes, rigging smarts, and guardrails so they don’t break your project. V0.1.0 — Here is what I’ve coded and got working over the last few days: Gave the agent actual vision. The agent can now render screenshots from any camera in the scene, check if a character is cut off by the screen edges or clipping planes (project_world_points and diagnose_camera_framing), compare before/after images, and even record short MP4/WebP video clips to inspect physics and animations over time. Made it understand rigs and animations. Instead of guessing why an animation looks wrong: It inspects AnimationClip curves directly and catches unwanted position or scale drift. It can sample any character’s pose at a specific second, inspect the transforms, and immediately restore the original pose so nothing stays messed up. Added a skeleton mapper with fuzzy bone search that understands both standard Humanoid rigs and messy Japanese MMD bone chains (like 全ての親, センター, 下半身, D-bones). Skinned mesh diagnostics Added tools to inspect SkinnedMeshRenderers. It detects inverted or zero-sized bounding boxes, missing root bones, and broken bone weights. It also tells you whether a glitch is just a missing material/texture or an actual broken mesh deformation. Made scene edits safe (undo & transaction rollback). Every script the agent runs now happens inside an isolated Undo group. If the C# code crashes or throws an exception, Visora automatically rolls back the entire scene to before the run. It also blocks saving during Play Mode so your scene never gets corrupted. Native Unity package + 24 typed tools Built a native Unity Editor package (com.visora.editor) using HttpListener hooked directly into Unity’s main editor update loop. On the Python side, I implemented 24 clean MCP tools with strict Pydantic schemas, auto-discovery for ports 8080-8085, and async queue polling for long tasks. Tagged and released v0.1.0 on GitHub with complete setup guides, agent recipes, and test coverage. What I’m building next for v0.1.1: Auto 3D model web search & download: I want the agent to search the web, find 3D models, textures, and environments, and download/import them directly into the Unity project so it can build and animate entire scenes on its own. Clean GitHub Actions CI/CD: Automatic linting, typing, and test runners on every commit. Docker support: A lightweight Dockerfile to easily run the MCP server anywhere in a headless container. You can check out the code and the v0.1.0 release here: https://github.com/AmaLS367/Visora
Visora devlog — asset pipeline & Unity native bridge (18 commits) Asset pipeline: from broken to trustworthy Built out the 3D-asset workflow (search → download → import → verify) and then spent most of the effort hardening it against silent failures: Added asset search/download/Unity-import tools (1a0bcd3, bf6a7d9), then refactored out dead backward-compat aliases (dda6c17). Fixed real bugs found by actually running it: ambientCG downloads being wrongly rejected and Sketchfab results silently hidden (99d3f15), a wrong ambientCG download URL for 3D models (1d6e2ce), a crash on comma-separated port lists plus missing env-var docs (117e6e3), and .bin/.mtl companion files being incorrectly stripped out of glTF/OBJ archives (5cb1afa). Discovered Sketchfab’s own search API ignores the query text entirely (verified live) — added web_search_assets, a SearXNG-primary/DuckDuckGo-fallback real web search to find a specific named model and extract its Sketchfab UID (4489725). Biggest find: download_and_import_asset was reporting success=true even when Unity couldn’t actually parse the file (glTF with no importer installed → empty placeholder asset). Fixed to detect and reject that case explicitly instead of lying about success (8c4241b). Native Unity bridge: first real compile & runtime test com.visora.editor had apparently never been compiled in a real Unity Editor before. Opening it in Unity 6.6 surfaced a chain of genuine bugs, fixed one at a time: A broken float field that Unity’s JSON deserializer can’t handle, flattened to float on both C# and Python sides (08f502e, 4d05468). Unity 6.6 API removals: GetInstanceID() → GetEntityId() (c8c8905), then GetEntityId()’s own obsolete int-conversion operator → GetRawData() (027e39c). Two HTTP handlers (/api/editor/state, /api/visora/info) and a log-callback subscription were calling Unity APIs off the main thread, causing runtime errors — dispatched onto the main thread (d27e03f, 5e3069b). Dynamic C# snippet compilation was missing a reference to UnityEditor.CoreModule, breaking any snippet touching EditorApplication/EditorSceneManager (a8689a9). Agent guidance Shipped documentation aimed at other agents driving Visora, not just humans: an always-on MCP instructions block plus a copyable Claude Code skill (visora-asset-workflow) covering Sketchfab’s broken search, supported import formats, and how to actually verify an import worked (4e8cd5c). Housekeeping Committed the 29 .meta files Unity generated on first real import of the package — standard Unity convention, and further confirmation the package had never been opened in a real editor before this round of testing (b9e4f01). Net effect: the asset import pipeline no longer lies about success, Sketchfab search actually works for named models, and the native Unity bridge compiles and runs cleanly on Unity 6.6 — all verified end-to-end (ambientCG apple + a Sketchfab character model imported, inspected, and visually confirmed in-scene).
Production CI/CD and MCP 2.0 are now complete for Visora. The project now has a parallel GitHub Actions pipeline covering formatting, Ruff linting, strict mypy checks, unit and integration tests, lockfile validation, Unity package validation, distribution builds, and an enforced 80% coverage threshold. The workflows use uv caching, cancel outdated runs automatically, and skip runs for documentation-only changes. All GitHub Actions are pinned by commit SHA. A release pipeline now validates version tags, runs the full verification suite, builds the package, publishes it to PyPI, and creates a GitHub Release. Dependabot was added to update GitHub Actions and Python dependencies weekly. Funding configuration was added as well. Visora was migrated from MCP 1.x to MCP 2.1.1, replacing FastMCP with MCPServer and updating the related tests and documentation. The updated Dependabot pull request passed every CI check and was merged. The Production CI/CD roadmap item is now marked as completed.
Visora devlog — v0.1.1 & v0.1.2 Shipped two releases back to back. Visora now has a proper open-source foundation: an Apache-2.0 license, full contributor and security docs, a hardened Docker image, and a complete CI pipeline that tests every change and publishes releases automatically. v0.1.1 was about infrastructure — agents can now search the web for 3D models, environments and rigs and import them straight into a live Unity project, plus all the CI/CD and Docker groundwork. v0.1.2 was about packaging and community — licensing, PyPI metadata, issue templates, contributor guides, and release integrity checks. You can now just pip install visora. And here’s the first real demo. A 2-second shot: a Rover-style character from Wuthering Waves throws a flying kick straight into the camera in a desert wasteland. The environment, the rig, the animation and the capture were all built by an AI agent driving a live Unity Editor through Visora — nothing hand-placed. The whole thing was made by Claude Sonnet 5, using about 20% of the 5-hour limit on the $20 plan. So a mid-tier model, for a fraction of a cheap subscription, can already take a scene from empty to finished shot on its own. Right now it’s 2 seconds — deliberately small, to set the floor. The goal is for Visora to grow into something where AI can build full, directed animation sequences: minute-long shots, multiple characters, real rigging, proper timelines. “Make me a cutscene” turning into an actual cutscene. This dropkick is just the starting line.
Visora v0.1.3 — Giving Agents Eyes on Unity Animations So, we just fixed a massive problem. Once I hit merge, a huge weight lifted off my shoulders. It feels like the raw volume of code I write is getting smaller each time, but what actually lands has a massive, cascading impact on the entire system.Until now, whenever an AI agent needed to inspect an animation in Unity, it was basically flying blind. The old approach was either pulling raw curve data (which tells an agent nothing about clipping, silhouette, or visual feel) or recording full video dumps over the HTTP bridge. Video was heavy, expensive on tokens, slow to transfer, and worse: if the camera wasn’t manually lined up in the scene, the character would just walk right out of frame or get clipped halfway through. With Visora v0.1.3, we tackled this head-on by building preview_animation. It’s not just a snapshot tool — it’s a complete visual pipeline designed specifically for agent context budgets. What Actually Changed Under the Hood Trajectory-Aware Auto-Framing (C# Engine Side) Instead of relying on whatever camera happens to be in the scene, Visora now spins up a transient preview camera. Before snapping a single frame, it samples the clip across its timeline, collects every active skinned and mesh renderer, and computes a union bounding sphere for the entire motion trajectory. It places the camera at an ideal 45° vantage point, automatically calculates the optimal distance based on camera FOV, and dynamically compensates for vertical vs. horizontal aspect ratios so tall or wide aspect ratios don’t clip the character’s head or limbs. Smart Keyframe Selection (Python Side) Agents can’t look at 120 raw frames — that would incinerate context windows and latency. We built an intelligent keyframe extractor (preview_keyframes.py) that analyzes the clip curves to find where actual motion happens: curve extrema, zero-crossings, sudden velocity changes, and animation event timestamps. It pins the start and end poses, then fits the most informative frames within a strict frame budget (e.g. 4 to 8 images). Zero-Side-Effect Scene Safety One of the hardest parts of building agent tooling for Unity is engine hygiene. The preview system samples the animation, renders offscreen to a custom RenderTexture, encodes directly to PNG byte buffers, and cleans up after itself. No dummy cameras left in the hierarchy, no dirty scene flags, and character poses are strictly restored to their pre-sampling state. Hardened CI & The Unity Package Gate We also tightened our pre-commit and CI gates. We introduced scripts/check_unity_package.py, compiling the C# package directly against real Unity assemblies with Microsoft.Unity.Analyzers in headless Linux containers. If there’s an obsolete API, a loose memory allocation, or a CA analyzer warning, the build fails before it ever touches a project. It feels great to have this merged and rock-solid. With animation visual inspection out of the way, I’m heading straight to the next item on the Roadmap: Typed Clip, Event, and Camera Authoring!
Editing Animation Clips & Events Hey everyone, continue working on it. Up until now, the agent could only really watch animations—taking previews and checking poses. If a keyframe was off or a transition looked janky, you still had to go into Unity and fix it by hand. Now, the agent can actually edit AnimationClip assets directly. It can add, move, or delete keyframes, tweak curves, and set tangent modes like smooth, linear, or step holds. Giving an AI write access to your animation files is honestly a bit scary—one bad curve and your character turns into a noodle. To keep things safe, Visora now takes an automatic backup of the clip before touching it, and hooks every edit into Unity’s native Undo system. If the agent makes a mess, you can roll it back with a tool call or just hit Ctrl + Z right in the editor. We also added tools to create and remove animation events. This makes it way easier to sync things like hit-stops, camera shake, or footstep sounds to exact frames on the timeline instead of guessing with timers.
Worked on a large animation/character workflow update for Visora. Added dedicated agent workflows for animation authoring, camera/action sequences, rig retargeting, IK, gaze, motion polishing, contact handling and animation QA. Updated the MCP instructions and project docs so agents have a clear workflow for checking rigs, previewing animation, validating motion and handling Humanoid/Generic fallback cases. Implemented new animation tooling around Two-Bone IK, viewport-based effector placement and character gaze. Added support for solving and baking IK/gaze into animation clips, including parameter validation and Unity capability checks.Added a bigger QA layer for animation. This includes temporal motion analysis, curve discontinuity diagnostics, self-intersection checks and comparison of animation previews. Also added contact baking for things like planted feet/hands and camera-subject action tooling for synchronizing character motion with camera impacts. Added atomic animation transactions and improved rollback/backup handling so multiple animation edits can be applied together and reverted safely when something fails. Refactored the Unity-side animation services around shared sampling, curve writing and rollback helpers. Spent a good amount of time hardening all of this against actual Unity edge cases: Edit Mode requirements, unsupported bridge capabilities, invalid parameters, unknown diagnostic values, quaternion discontinuities, tangent preservation and proper exception handling. Added a Unity EditMode integration test suite covering IK, gaze, contact baking and atomic animation transactions, together with a runner script. Expanded the Python unit tests for the new animation tools and failure cases as well.Also reworked Visora’s visual output. Screenshots, animation previews and video frames now use multimodal MCP image blocks and file artifacts instead of dumping Base64 data into the response. Multi-frame previews can generate contact sheets, and full-resolution artifacts stay on disk. After that I focused heavily on MCP context usage. Compact tool definitions reduced the tool catalog payload significantly, diagnostic tools now have limits/filtering for large skeletons and clips, tool results are compacted, duplicate structured output is removed, and several redundant tools/wrappers were merged or deleted. The tool catalog went from 55 tools down to 44. Merged the two separate video capture tools into a single capture_video workflow and reduced the default screenshot resolution to 720p. Inline images are now automatically downscaled while keeping the full-resolution artifact available separately. Finally tuned the default diagnostic dump sizes further so normal tool calls consume much less agent context and larger detailed dumps are requested only when they are actually needed.
Preview Artifacts, Bridge Recovery & Prefab Workflows Added reproducible animation preview artifacts with stored records and comparison tools for repeatable QA.Improved Unity bridge recovery during reloads/recompiles, added retry hints and safer timeout handling. Added real Unity E2E animation fixtures and reorganized the test suite.Finished the v0.1.3 release, refreshed the README/docs, and started v0.1.4 prefab workflows. Added inspect_prefab_asset and inspect_prefab_overrides with native Unity services, support for nested/variant/model prefabs, structured override inspection, stable IDs, and Python/integration/EditMode test coverage.
Ships:
Built Visora, an MCP server that gives AI agents reliable high-level control over the Unity Editor. The hardest part was making animation and editor workflows safe and predictable: IK, gaze, retargeting, animation QA, bridge reload recovery, prefab inspection, rollback, and reproducible preview artifacts. I’m most proud of how much of the Unity-side behavior is covered by real EditMode/integration tests instead of only mocked Python tests. To test it, use the GitHub release/source, follow the setup guide, connect Visora to a Unity project, and try the MCP tools for animation, scene inspection, previews, or prefab inspection....
|
1793152218.8804007
|
1793238618.8804007
|
|
57999
|
Guaraná Horizon by @vexith | Stardance
|
vexith
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T11:52:46Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a plane simulation game inspired by star fox. it has support for windows and linux", "repo": "https://github.com/Vexith/Guarana-Horizon", "demo": "https://github.com/Vexith/Guarana-Horizon/releases"}]...
|
[{"post_id": 75533, "ts": "202 [{"post_id": 75533, "ts": "2026-09-30T11:51:10Z", "hours": 4.8189, "text": "devlog #7 => added bots and tweaked physics physics of the airplane tweaked due to a bug that kept the plane rising up. added bot AI started to implement the weapons system currently i plan to add multiplayer support and sound"}, {"post_id": 73599, "ts": "2026-09-25T13:22:36Z", "hours": 4.4992, "text": "devlog #6 -> rewritten camera system and 3d model rendering new rewritten camera system without the mouse, based on chase camera method using currently this 3d model . all credits to designer soup added obj mesh rendering of the plane added rendering different plane colors currently i plan to add enemys, projectiles and multiplayer support"}, {"post_id": 72245, "ts": "2026-09-22T14:59:23Z", "hours": 9.6628, "text": "devlog #5 => better physics engine and new rendering method on this devlog, i added better physics more focused in gameplay (still not perfect but better than before) added flat shading with directional light added new physics engine added restriction to not go above floor currently, i plan to add enemys, projectiles for the plane, 3D model of the plane, be able to switch the plane."}, {"post_id": 69176, "ts": "2026-09-16T15:16:32Z", "hours": 5.4231, "text": "devlog #4 => rendering the plane and controlling it in this devlog, i finally got the plane rendering properly and responding clearly the controls without getting the velocity infinite. added green lines on the ground to make it like 3D currently, it has the simple static camera following the plane, but in the future it will be variable, to give the sense of the plane moving and not only the background. i added input ramping for the keyboard controls to give fluidity to the plane (previously it look like that the plane was moving too fast). i switched from the Euler angles to quaternions, because in the euler angles, when pitch reaches +/- 90 degrees yaw and roll become the same degree of freedom and the representation breaks. currently, i plan to add enemys, projectiles for the plane and multiplayer support, maybe custom planes."}, {"post_id": 68056, "ts": "2026-09-14T13:16:38Z", "hours": 2.085, "text": "devlog #3 => rendering now the game has a basic SDL3 window and renderer, i replaced the old keyboard input (get async keystate) with SDL3 events, connecting pitch, yaw, roll and throttle controls. its still just a triangle with controls for now, but finally it’s taking shape now ( https://imgur.com/a/D3RhBLy )"}, {"post_id": 67060, "ts": "2026-09-13T03:20:08Z", "hours": 1.6633, "text": "devlog #2 => from simulation to flight from this devlog, i started turning the flight simulation into something actually controllable, i added a separate input system for pitch, yaw, roll and throttle, keeping the controls independent from the aircraft physics. its still running in the console for now, but the aircraft can finally respond to player input. for the next devlog, i want to implement rendering and camera ( https://imgur.com/a/xCKDbTZ ) for gif"}, {"post_id": 64487, "ts": "2026-09-08T22:22:37Z", "hours": 3.1472, "text": "devlog #1 - starting GuaranaHorizon i’ve started working on Guarana Horizon, a multiplayer flight game inspired by star fox. im making it from scratch in C, without using a game engine. right now im mainly focused on getting the aircraft physics working before moving on to graphics and gameplay. in the beginning, the physics engine kept becoming unstable and eventually getting the values to extraordinay values out of reality but now the aircraft can now accelerate, generate lift, climb and experience drag and gravity without the simulation spitting nonsense. now it only runs tests programs to check if the physics is alright. next i want to add actual flight controls (WASD) and then start working on rendering (probably SDL2)."}]...
|
Title: Guaraná Horizon by @vexith | Stardance
Dev Title: Guaraná Horizon by @vexith | Stardance
Devlogs:
devlog #1 - starting GuaranaHorizon i’ve started working on Guarana Horizon, a multiplayer flight game inspired by star fox. im making it from scratch in C, without using a game engine. right now im mainly focused on getting the aircraft physics working before moving on to graphics and gameplay. in the beginning, the physics engine kept becoming unstable and eventually getting the values to extraordinay values out of reality but now the aircraft can now accelerate, generate lift, climb and experience drag and gravity without the simulation spitting nonsense. now it only runs tests programs to check if the physics is alright. next i want to add actual flight controls (WASD) and then start working on rendering (probably SDL2).
devlog #2 => from simulation to flight from this devlog, i started turning the flight simulation into something actually controllable, i added a separate input system for pitch, yaw, roll and throttle, keeping the controls independent from the aircraft physics. its still running in the console for now, but the aircraft can finally respond to player input. for the next devlog, i want to implement rendering and camera ( https://imgur.com/a/xCKDbTZ ) for gif
devlog #3 => rendering now the game has a basic SDL3 window and renderer, i replaced the old keyboard input (get async keystate) with SDL3 events, connecting pitch, yaw, roll and throttle controls. its still just a triangle with controls for now, but finally it’s taking shape now ( https://imgur.com/a/D3RhBLy )
devlog #4 => rendering the plane and controlling it in this devlog, i finally got the plane rendering properly and responding clearly the controls without getting the velocity infinite. added green lines on the ground to make it like 3D currently, it has the simple static camera following the plane, but in the future it will be variable, to give the sense of the plane moving and not only the background. i added input ramping for the keyboard controls to give fluidity to the plane (previously it look like that the plane was moving too fast). i switched from the Euler angles to quaternions, because in the euler angles, when pitch reaches +/- 90 degrees yaw and roll become the same degree of freedom and the representation breaks. currently, i plan to add enemys, projectiles for the plane and multiplayer support, maybe custom planes.
devlog #5 => better physics engine and new rendering method on this devlog, i added better physics more focused in gameplay (still not perfect but better than before) added flat shading with directional light added new physics engine added restriction to not go above floor currently, i plan to add enemys, projectiles for the plane, 3D model of the plane, be able to switch the plane.
devlog #6 -> rewritten camera system and 3d model rendering new rewritten camera system without the mouse, based on chase camera method using currently this 3d model . all credits to designer soup added obj mesh rendering of the plane added rendering different plane colors currently i plan to add enemys, projectiles and multiplayer support
devlog #7 => added bots and tweaked physics physics of the airplane tweaked due to a bug that kept the plane rising up. added bot AI started to implement the weapons system currently i plan to add multiplayer support and sound
Ships:
i made a plane simulation game inspired by star fox. it has support for windows and linux...
|
1793152333.8721719
|
1793238733.8721719
|
|
59107
|
Start Assistant by @kis904 | Stardance
|
kis904
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T07:07:24Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It is a program built in python, can record and perform user’s actions. It was hard to make the app look good and not like an old from the 90s. I’m proud of it as it’s now a working useful app.", "repo": "https://github.com/kis904/Start-Assistant", "demo": "https://github.com/kis904/Start-Assistant/releases/tag/StartAssistantv1"}]...
|
[{"post_id": 66883, "ts": "202 [{"post_id": 66883, "ts": "2026-09-12T20:38:02Z", "hours": 31.4297, "text": "hey everyone, I will copy the more important previous posts from Macondo. If you’re interested all posts are amonf the pictures as screenshots. You can also find plenty of logs on the project’s github page. 29th of July 2026 hey everyone, today I was experimenting a lot with speech recognition with python’s SpeechRecognition library and available Vosk offline engines. I found an example code on a guy’s vlog and modified it to my engine, but all I discovered is just that my laptop is too weak to run it so I guess that’s it. Unfortunately it took another 60 minutes to read github readme-s, the library’s documentation, vlogs, vosk’s official page just get to know that. Screenshots among the attachments. 3rd of July 2026 hey, I have a window a few buttons and a pop up window. My first and only feature yet is that it can change the size of the window based on user input and changes it’s config file that it handles itself. It was a hell a lot of work to make that config text file work… It always had some problem e.g. when it was writing the new settings it wanted string not list, or the \\n that signed a new line stayed there so it didn’t recognize the settings in the conf file or couldn’t apply it. To sum it up, it was a lot of time, but now I will work on its main feature."}]...
|
Title: Start Assistant by @kis904 | Stardance
Dev Title: Start Assistant by @kis904 | Stardance
Devlogs:
hey everyone, I will copy the more important previous posts from Macondo. If you’re interested all posts are amonf the pictures as screenshots. You can also find plenty of logs on the project’s github page. 29th of July 2026 hey everyone, today I was experimenting a lot with speech recognition with python’s SpeechRecognition library and available Vosk offline engines. I found an example code on a guy’s vlog and modified it to my engine, but all I discovered is just that my laptop is too weak to run it so I guess that’s it. Unfortunately it took another 60 minutes to read github readme-s, the library’s documentation, vlogs, vosk’s official page just get to know that. Screenshots among the attachments. 3rd of July 2026 hey, I have a window a few buttons and a pop up window. My first and only feature yet is that it can change the size of the window based on user input and changes it’s config file that it handles itself. It was a hell a lot of work to make that config text file work… It always had some problem e.g. when it was writing the new settings it wanted string not list, or the \n that signed a new line stayed there so it didn’t recognize the settings in the conf file or couldn’t apply it. To sum it up, it was a lot of time, but now I will work on its main feature.
Ships:
It is a program built in python, can record and perform user’s actions. It was hard to make the app look good and not like an old from the 90s. I’m proud of it as it’s now a working useful app....
|
1793152581.709626
|
1793238981.709626
|
|
59728
|
vn_folks by @lanhoamanh | Stardance
|
lanhoamanh
|
1
|
31.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-18T15:03:13Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made VNfolks, a small website about Vietnamese folklore, traditional beliefs, and the stories I grew up hearing about. I wanted to present these topics in English and look at them from both a cultural and scientific perspective .The hardest part was probably deciding how to present these stories without making them feel like I was trying to prove that supernatural things are real. I also had to spend quite a lot of time researching the background of different beliefs and figuring out how to turn all of that information into something simple and easy to read. I’m most proud of the fact that I actually finished and shipped the website. It started as an idea based on my own interests, and I ended up turning it into something that other people can explore too .If you want to test it, you can start from the Home page and use the navigation to explore the different topics and stories. The website is mainly designed for people who are curious about Vietnamese culture, folklore, or just enjoy learning about strange and mysterious stories.", "repo": "https://github.com/lanhoamanh/vn_folks", "demo": "https://vnfolks.vercel.app/"}]...
|
[{"post_id": 69647, "ts": "202 [{"post_id": 69647, "ts": "2026-09-17T14:16:30Z", "hours": 6.6447, "text": "I’ve finally added the data and JS to the website—yes, it’s complete."}, {"post_id": 67924, "ts": "2026-09-14T07:24:46Z", "hours": 4.1164, "text": "I have finished the website’s interface. I used AI to generate illustrations because finding actual photos was difficult given the spiritual and folklore-related theme; however, I still make an effort to include human-created illustrations in each article to help users visualize the content better. I will proceed with the JavaScript implementation and provide updates later."}, {"post_id": 64833, "ts": "2026-09-09T14:53:00Z", "hours": 12.1892, "text": "I am currently designing the interface; it is not yet finished, so I will continue working on it."}, {"post_id": 64139, "ts": "2026-09-08T10:32:50Z", "hours": 8.3653, "text": "I am building a website that compiles information on spiritual and folk traditions in Vietnam. I have finished the HTML structure and am currently developing ideas for the interface; I will provide updates later."}]...
|
Title: vn_folks by @lanhoamanh | Stardance
Devlog Title: vn_folks by @lanhoamanh | Stardance
Devlogs:
I am building a website that compiles information on spiritual and folk traditions in Vietnam. I have finished the HTML structure and am currently developing ideas for the interface; I will provide updates later.
I am currently designing the interface; it is not yet finished, so I will continue working on it.
I have finished the website’s interface. I used AI to generate illustrations because finding actual photos was difficult given the spiritual and folklore-related theme; however, I still make an effort to include human-created illustrations in each article to help users visualize the content better. I will proceed with the JavaScript implementation and provide updates later.
I’ve finally added the data and JS to the website—yes, it’s complete.
Ships:
I made VNfolks, a small website about Vietnamese folklore, traditional beliefs, and the stories I grew up hearing about. I wanted to present these topics in English and look at them from both a cultural and scientific perspective .The hardest part was probably deciding how to present these stories without making them feel like I was trying to prove that supernatural things are real. I also had to spend quite a lot of time researching the background of different beliefs and figuring out how to turn all of that information into something simple and easy to read. I’m most proud of the fact that I actually finished and shipped the website. It started as an idea based on my own interests, and I ended up turning it into something that other people can explore too .If you want to test it, you can start from the Home page and use the navigation to explore the different topics and stories. The website is mainly designed for people who are curious about Vietnamese culture, folklore, or just enjoy learning about strange and mysterious stories....
|
1793008366.3432298
|
1793872366.3432298
|
|
41829
|
Koshi's Bookshelf by @koshi | Stardance
|
koshi
|
1
|
30.97
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-22T18:34:42Z", "hours": 28.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own Bookshelf, where I can keep track of the books I read and write down my thoughts about them. One of the things I really enjoyed working on was getting the book interactions and animations to work, because I wanted the website to feel alive rather than just look pretty. I’m really happy with how it turned out. Please try it out. (˶ᵔ ᵕ ᵔ˶)", "repo": "https://github.com/gotcha-khushi/koshi-bookshelf", "demo": "https://gotcha-khushi.github.io/koshi-bookshelf/"}]...
|
[{"post_id": 83324, "ts": "202 [{"post_id": 83324, "ts": "2026-10-27T18:15:17Z", "hours": 0.9589, "text": "more reviews added, more to go."}, {"post_id": 82952, "ts": "2026-10-26T11:10:37Z", "hours": 2.0083, "text": "I added more reviews, most of these books I read a long time ago so to write a review I had to go through them again that’s why it’s taking so much time, I also changed the color of the green sidebar a little."}, {"post_id": 81844, "ts": "2026-10-22T18:20:56Z", "hours": 1.8303, "text": "I’ve added a few reviews some reviews are still left but my website is ready for shipping!!"}, {"post_id": 80454, "ts": "2026-10-17T17:54:19Z", "hours": 0.9964, "text": "i also made a header logo for my wesite"}, {"post_id": 80390, "ts": "2026-10-17T14:20:26Z", "hours": 3.245, "text": "today i worked on the ‘about me’ section and made it actually working also added my github link to the website and i gave it a dark mode too but it looking too empty so i added a sun and moon icon to change modes."}, {"post_id": 79714, "ts": "2026-10-15T06:14:41Z", "hours": 1.3931, "text": "I finally got all the real book covers rendering perfectly on the 3D shelf for Stardance Hack Club. I had a frustrating bug earlier where the whole shelf vanished because my JavaScript was trying to apply color math to the spine text before the text element even existed, but I reordered the logic and fixed the crash. I also stripped out the heavy CSS filters so the cover art looks exactly like the original image files now instead of being artificially darkened. Since I am manually coloring the spines in my JSON data, I wrote a quick script that calculates the brightness of those hex codes and automatically flips the title text to black or white so it never gets lost in the background. I wrapped it up by cleaning up the CSS for the metadata so the author and rating stats stay in a neat, straight line above the reviews."}, {"post_id": 78825, "ts": "2026-10-11T18:13:51Z", "hours": 9.2222, "text": "i made a lot of progress last couple of days cleaning up my bookshelf code by moving the book generation logic into a new book.js file, which made it way easier to load real cover images directly from my JSON data. I had to use AI to figure out the 3D book animation because the math was really hard, but now the spine and cover finally open naturally without clipping through each other. To make the books look more realistic, I also blended the paper texture right into the cover art and added a crease shadow that fades in inside the spine when a book is clicked open. I wrapped it up by building a continuous hover-scroll loop for the navigation arrows, so the shelf just pans smoothly the whole time my mouse is resting on them."}, {"post_id": 58744, "ts": "2026-08-31T09:32:09Z", "hours": 5.8228, "text": "i wanted to add this paper like texture in the books which took a lot of time, im thinking of changing the overall color palate of the website to make it look more vintage. also took a lot of time off, gotta continue working now."}, {"post_id": 44116, "ts": "2026-08-09T17:53:16Z", "hours": 4.3197, "text": "The basic structure of my bookshelf along with some css styling is done, a lot of work is still left"}, {"post_id": 37713, "ts": "2026-07-30T16:50:17Z", "hours": 1.1361, "text": "I started working on a new project today, an interactive bookshelf where i can share books I’ve read and my reviews. Today I got the project setup done, created the Github repo and finished the HTML layout. Tomorrow I’ll start working on CSS file and will start building the actual bookshelf and the first book. Hopefully I’ll have something to show tomorrow."}]...
|
Title: Koshi's Bookshelf by @koshi | Stardance Title: Koshi's Bookshelf by @koshi | Stardance
Devlogs:
I started working on a new project today, an interactive bookshelf where i can share books I’ve read and my reviews. Today I got the project setup done, created the Github repo and finished the HTML layout. Tomorrow I’ll start working on CSS file and will start building the actual bookshelf and the first book. Hopefully I’ll have something to show tomorrow.
The basic structure of my bookshelf along with some css styling is done, a lot of work is still left
i wanted to add this paper like texture in the books which took a lot of time, im thinking of changing the overall color palate of the website to make it look more vintage. also took a lot of time off, gotta continue working now.
i made a lot of progress last couple of days cleaning up my bookshelf code by moving the book generation logic into a new book.js file, which made it way easier to load real cover images directly from my JSON data. I had to use AI to figure out the 3D book animation because the math was really hard, but now the spine and cover finally open naturally without clipping through each other. To make the books look more realistic, I also blended the paper texture right into the cover art and added a crease shadow that fades in inside the spine when a book is clicked open. I wrapped it up by building a continuous hover-scroll loop for the navigation arrows, so the shelf just pans smoothly the whole time my mouse is resting on them.
I finally got all the real book covers rendering perfectly on the 3D shelf for Stardance Hack Club. I had a frustrating bug earlier where the whole shelf vanished because my JavaScript was trying to apply color math to the spine text before the text element even existed, but I reordered the logic and fixed the crash. I also stripped out the heavy CSS filters so the cover art looks exactly like the original image files now instead of being artificially darkened. Since I am manually coloring the spines in my JSON data, I wrote a quick script that calculates the brightness of those hex codes and automatically flips the title text to black or white so it never gets lost in the background. I wrapped it up by cleaning up the CSS for the metadata so the author and rating stats stay in a neat, straight line above the reviews.
today i worked on the ‘about me’ section and made it actually working also added my github link to the website and i gave it a dark mode too but it looking too empty so i added a sun and moon icon to change modes.
i also made a header logo for my wesite
I’ve added a few reviews some reviews are still left but my website is ready for shipping!!
I added more reviews, most of these books I read a long time ago so to write a review I had to go through them again that’s why it’s taking so much time, I also changed the color of the green sidebar a little.
more reviews added, more to go.
Ships:
I made my own Bookshelf, where I can keep track of the books I read and write down my thoughts about them. One of the things I really enjoyed working on was getting the book interactions and animations to work, because I wanted the website to feel alive rather than just look pretty. I’m really happy with how it turned out. Please try it out. (˶ᵔ ᵕ ᵔ˶)...
|
1793148615.9048555
|
1793235015.9048555
|
|
31098
|
egraich_dev by @egraich | Stardance
|
egraich
|
1
|
30.95
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T00:23:09Z", "hours": 25.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first website ever! It was so hard to understand the tag structure in html after the familiar function structure in my stack: Python & C++. I dreamed of having a personal website for a beautiful email address :) I made my site in a neon style and I like it. I googled some SVG icons for contact links and they look cool with the custom color style of my website.", "repo": "https://github.com/egraich/egraich_dev", "demo": "https://egraich.dev"}]...
|
[{"post_id": 40613, "ts": "202 [{"post_id": 40613, "ts": "2026-08-04T08:34:59Z", "hours": 5.9519, "text": "Haven’t dropped a devlog in a minute since I was taking a break, but I spent the last few days quietly cleaning up my backend setup. My website is now completely on Cloudflare Pages, hooked right into my DNS management. It’s way more convenient to have everything managed in a single place. Also set up a _redirects file. Now, instead of throwing around ugly, long links like: discord.com/users/1024683767488585819 I can literally just type egraich.dev/ds (or /discord ). Same goes for GitHub, Telegram, ORCID and the rest. To top it off, I enabled Cloudflare email forwarding. Any random mail sent to [email protected] goes straight to my personal Gmail. Boom, free professional email!"}, {"post_id": 26930, "ts": "2026-07-12T00:22:48Z", "hours": 0.5589, "text": "I’ve added my avatar as a favicon, but creating a custom vector logo sounds like a cool project for the future 🤔"}, {"post_id": 26915, "ts": "2026-07-11T23:45:10Z", "hours": 0.7536, "text": "I reworked README and add script fo automatic year-updates in copyright-footer. Now deployed! https://egraich.github.io/egraich_dev/"}, {"post_id": 26896, "ts": "2026-07-11T23:00:07Z", "hours": 23.3711, "text": "I Spent a lot of time to understand web sites structure after Python and C++ 😑"}]...
|
Title: egraich_dev by @egraich | Stardance
Devlog Title: egraich_dev by @egraich | Stardance
Devlogs:
I Spent a lot of time to understand web sites structure after Python and C++ 😑
I reworked README and add script fo automatic year-updates in copyright-footer. Now deployed! https://egraich.github.io/egraich_dev/
I’ve added my avatar as a favicon, but creating a custom vector logo sounds like a cool project for the future 🤔
Haven’t dropped a devlog in a minute since I was taking a break, but I spent the last few days quietly cleaning up my backend setup. My website is now completely on Cloudflare Pages, hooked right into my DNS management. It’s way more convenient to have everything managed in a single place. Also set up a _redirects file. Now, instead of throwing around ugly, long links like: discord.com/users/1024683767488585819 I can literally just type egraich.dev/ds (or /discord ). Same goes for GitHub, Telegram, ORCID and the rest. To top it off, I enabled Cloudflare email forwarding. Any random mail sent to [email protected] goes straight to my personal Gmail. Boom, free professional email!
Ships:
I made my first website ever! It was so hard to understand the tag structure in html after the familiar function structure in my stack: Python & C++. I dreamed of having a personal website for a beautiful email address :) I made my site in a neon style and I like it. I googled some SVG icons for contact links and they look cool with the custom color style of my website....
|
1793220757.77552
|
1793307157.77552
|
|
28690
|
PenguinoRunner by @Pixeleyesd | Stardance
|
Pixeleyesd
|
0
|
30.92
|
0
|
[]
|
[{"post_id": 67102, "ts": "202 [{"post_id": 67102, "ts": "2026-09-13T05:03:28Z", "hours": 3.1408, "text": "I made the sides big also theyre on a different layer cuz my laptop slowed down a bunch when i started editing the tiles on the main platform layer cuz there were so many tiles."}, {"post_id": 66223, "ts": "2026-09-11T22:13:36Z", "hours": 10.7814, "text": "Im tryna make an end to the game where if you touch this hitbox it counts as winning but im bad at coding and idk why it isnt working :/"}, {"post_id": 53542, "ts": "2026-08-24T04:15:30Z", "hours": 2.905, "text": "I made more platforms on the horizontal axis, ready to do some vertical ones now :)."}, {"post_id": 21032, "ts": "2026-07-02T20:07:29Z", "hours": 8.1472, "text": "I’ve done the main stuff with the level"}, {"post_id": 19083, "ts": "2026-06-30T08:54:21Z", "hours": 5.9411, "text": "I’m making a cool 2D platformer in Godot. I made a cool 3d title screen and placeholder buttons (the 3d assembly is what took so long lol). the player is in progress, and we are making tiles with kenney.nl assets (absolute GOAT btw)"}]...
|
Title: PenguinoRunner by @Pixeleyesd | Stardance
Title: PenguinoRunner by @Pixeleyesd | Stardance
Devlogs:
I’m making a cool 2D platformer in Godot. I made a cool 3d title screen and placeholder buttons (the 3d assembly is what took so long lol). the player is in progress, and we are making tiles with kenney.nl assets (absolute GOAT btw)
I’ve done the main stuff with the level
I made more platforms on the horizontal axis, ready to do some vertical ones now :).
Im tryna make an end to the game where if you touch this hitbox it counts as winning but im bad at coding and idk why it isnt working :/
I made the sides big also theyre on a different layer cuz my laptop slowed down a bunch when i started editing the tiles on the main platform layer cuz there were so many tiles....
|
1792738054.031157
|
1793602054.031157
|
|
26524
|
Rick Sanchez.Ai by @anujkishan918 | Stardance
|
anujkishan918
|
1
|
30.83
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-02T18:28:12Z", "hours": 27.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Quick heads up before anything else — this runs on the free tiers of both Gemini and Fish Audio, so there are limits. Gemini’s free API can get busy or rate-limited under load, and Fish Audio’s free tier will sometimes cut audio off mid-sentence once you hit its usage cap. If a reply feels slow or the voice stops abruptly, that’s almost always why — not a bug in the app itself. What I made Rick Sanchez.Ai — a single-file, Gemini-powered chatbot styled as Rick Sanchez from Rick and Morty, with a real-time animated CSS face that shifts expression (talking, angry, thinking, surprised, manic, disgust, exasperated, and more) based on the mood of his replies. It supports multi-chat history so you can run several conversations side by side, and has optional voice cloning through Fish Audio so Rick actually sounds like Rick instead of a generic TTS voice. No build step, no framework — just one HTML file plus a small Cloudflare Worker that proxies the Fish Audio requests so the API key never sits exposed in the browser. What was challenging Most of the real difficulty wasn’t the AI part — it was getting hosting and audio to behave. GitHub Pages deployments kept queuing and timing out, which turned out to be a GitHub-side incident rather than anything wrong with my config, so I moved hosting elsewhere rather than wait it out. Getting Fish Audio working reliably meant standing up a Cloudflare Worker as a proxy, since the API key can’t be trusted client-side and Fish’s endpoint doesn’t handle browser CORS on its own. On top of that, the audio kept getting silently blocked by the browser’s autoplay policy because playback was starting after an async fetch instead of directly inside a user’s click — and even after that was fixed, the reply text was popping up before the voice actually started, since Fish Audio’s real response time runs closer to 8 seconds and the original fallback timer only waited 6. What I’m proud of The face. Every expression is pure CSS — no sprite sheets, no images — just scaling and repositioning the eyes, unibrow, and mouth per mood state, with transitions handling the interpolation between them. Getting the mood to actually sync with what Rick is saying, and getting the voice to play in step with the text instead of racing ahead of it, took a lot of small timing fixes, and it finally feels right. What people should know to test it You’ll need your own free API keys — a Gemini API key is required to chat at all, and a Fish Audio key is optional if you want Rick to actually talk instead of just typing. Paste them into the app when prompted. If voice mode seems silent at first, click anywhere on the page once before sending a message — browsers block audio that hasn’t been unlocked by a real click. And if either API is slow or drops mid-response, that’s the free-tier limits mentioned up top, not a broken deploy.", "repo": "https://github.com/Anuj981-blip/Sanchez-AI", "demo": ""}]...
|
[{"post_id": 21463, "ts": "202 [{"post_id": 21463, "ts": "2026-07-03T12:50:18Z", "hours": 2.0972, "text": "Fully over hauled the UI and added a pixel art intro story."}, {"post_id": 21115, "ts": "2026-07-02T22:15:31Z", "hours": 1.7333, "text": "This phase added the startup mascot — got Rick & Morty standing above the portal in the intro screen using pure CSS. Experienced a little issue with the alignment which I discovered later. There was still a hanging translateX(-50%) that was pushing the mascot aside. Removed the line of code and got the exact alignment with the help of the sliders (X, Y, size). Got to the desired values translate(60px,-138px) scale(0.76) and removed them right away. Rewrote the intro animation logic as well — it automatically skips after some seconds, now it will play when loaded and wait for a tap to proceed. I have experimented with making a window similar to the macOs one (traffic lights and title bar) but did not get it in time, so I reverted it. The last part was related to the sidebar and its Pickle Rick icon. Made the sidebar collapsed into the narrow column with the rotating portal ring logo which opens and closes it. Updated the Pickle Rick image by making the design more precise (added his body, spots, teeth and tongue) and got the exact location using the same sliders technique. Made Rick’s face fade into the black instead of clashing. Last thing hooked it into the existing “annoyed” mood detection,"}, {"post_id": 20971, "ts": "2026-07-02T18:24:15Z", "hours": 5.8839, "text": "Phase 4 Devlog — Deployment & Voice Reliability Phase 4 was less about the face and more about getting the thing actually reachable and sounding right. Three separate problems, three separate fixes. 1) GitHub Pages was never going to work Deployments sat in deployment_queued and timed out, over and over, on totally unrelated repos. Turned out it wasn’t a config issue at all — GitHub’s status page had an active incident open the same day (“Incident with Pages,” degraded performance, investigating). No amount of poking at Settings → Pages or the Actions tab was going to fix an outage on their end. Moved hosting off Pages entirely rather than wait it out. 2) The Fish Audio proxy needed its own home The app calls out to Fish Audio for Rick’s voice, but the API key can’t be trusted client-side and Fish’s endpoint doesn’t play nice with browser CORS anyway. Solved both with a small Cloudflare Worker that does one job: accept a POST to /tts with fishKey , text , and a few optional params ( reference_id , format , model ), forward it to Fish Audio, and hand back the raw audio bytes. The frontend already had the right shape for this call, so it was mostly a matter of getting the Worker’s workers.dev subdomain toggled on — it silently doesn’t activate until there’s an actual deployed script behind it, which cost a bit of head-scratching before the first real deploy went through. 3) Voice playback was getting blocked, then falling out of sync Two separate bugs stacked on top of each other here. audio.play() was firing after an await fetch() , and by then Chrome no longer considered it tied to the user’s original click — so playback silently failed with a permission error. Fixed by unlocking the page’s audio system on the very first click/keypress/tap anywhere, which browsers treat as valid for the rest of the session regardless of how much async work happens in between. Once audio was actually playing, timing was off. There’s a fallback timer that force-reveals Rick’s reply text if the voice hasn’t started yet, originally set to 6 seconds. Fish Audio’s real-world response time runs closer to 8 seconds, so text was popping up two seconds before the voice caught up — reply and audio landing noticeably out of step. Bumped the fallback specifically for Fish voice mode to 15 seconds, leaving the faster browser-TTS and text-only modes untouched since they never had the delay problem to begin with. Net result The app deploys somewhere that isn’t at the mercy of a GitHub outage, the voice proxy has its own dedicated backend instead of leaking a key client-side, and audio no longer gets blocked or races ahead of the text it’s supposed to accompany."}, {"post_id": 19826, "ts": "2026-07-01T06:32:37Z", "hours": 8.88, "text": "Phase 3 Devlog — Face & Layout Polish Phase 3 added a handful of new facial states on top of the existing set (talking, angry, blink, thinking, sleep, surprised): manic, disgust, and exasperated. Each is just CSS — scaling the unibrow, eyes, and mouth per state and letting the existing transition properties handle the interpolation. They’re wired into guessMood(), so the reply text picks which one fires.The main bug was in the pupils. Bumping their size seemed trivial, but the original CSS used a multi-offset box-shadow to fake small catchlight dots around the pupil, and none of those shadow values had an explicit color. Browsers default an unset box-shadow color to currentColor, which here was the page’s neon-green text color. Scaling the pattern up didn’t just make the pupil bigger, it made a glowing green blob visible around it. Fixed by dropping the multi-dot trick for a single solid pupil with one inset highlight — simpler, and it scales cleanly.There was also a first pass that auto-cycled through every state on a timer so they’d show up without an API key connected. It conflicted with the actual reply-driven logic, so it got pulled — states now only ever fire off a real message, same as talking and surprised always did.A second bug turned up after that: the auto-blink loop was resetting the container’s full class list on every blink, which incidentally wiped out whatever mood state a reply had just set. Since blinks fire every 2–6 seconds, this meant states were getting cut short or skipped entirely. Fixed by having blink toggle its own class instead of resetting the container.Smaller changes: the chat history panel moved to the leftmost column, the unibrow got nudged up slightly to give the bigger pupils more room, and the inaccurate relative timestamps (“3m ago”) on chat list items were removed in favor of just showing message count."}, {"post_id": 18139, "ts": "2026-06-29T04:48:55Z", "hours": 5.0375, "text": "Phase 2 Devlog — Voice IntegrationPhase 2 was all about giving Rick his actual voice using Fish Audio, which hosts a Rick Sanchez voice clone model. The first problem hit immediately: Fish Audio had quietly updated their API. The old speech-1.5 model name passed inside the request body no longer worked — Fish Audio now expects the model as an HTTP header (model: s2.1-pro-free), and the model names themselves had changed entirely. Once we figured that out and stripped the invalid body parameters, the request was clean. But Rick still wasn’t speaking.The bigger wall was CORS. The moment a browser fetch() call sends an Authorization header to a third-party API, the browser fires a preflight check — and if the server doesn’t explicitly whitelist your origin, the request gets blocked before it even leaves the browser. Fish Audio’s API is designed for server-to-server use, so no frontend origin gets through, whether you’re on localhost or a real GitHub Pages domain. There’s no client-side fix for this. As a temporary workaround we wired in the browser’s built-in speechSynthesis API, tuning the pitch down and slowing the rate to approximate Rick’s drawl. It worked, but it obviously wasn’t Rick.The real fix was a Cloudflare Worker acting as a one-file serverless proxy. The insight is simple: CORS only applies to browser-to-server calls, not server-to-server. So the browser calls the Worker (which is on your own domain, no CORS issue), the Worker forwards the request to Fish Audio privately, and streams the audio blob back with open CORS headers. The whole proxy is about 60 lines of JavaScript, deploys in two minutes from the Cloudflare dashboard for free."}, {"post_id": 17009, "ts": "2026-06-27T16:34:32Z", "hours": 7.5361, "text": "Phase 1 is a fully functional browser-based AI chat interface that lets you have conversations with Rick Sanchez from Rick and Morty, built entirely as a single self-contained HTML file with no build tools, frameworks, or external dependencies beyond the APIs. The interface combines a pure CSS pixel-art Rick portrait—constructed entirely from positioned divs using borders, border-radius, transforms, and box shadows—with Google’s Gemini API to create a character that not only responds intelligently but visibly reacts to the conversation. Rick can talk, blink automatically, become angry, smirk, think, look surprised, or fall asleep, with each expression driven by smooth CSS transitions triggered by heuristic mood detection on his responses. When idle, he periodically delivers impatient one-liners that pause automatically while API requests are running. Every Gemini request includes a carefully crafted system prompt that keeps Rick in character, encouraging him to insult trivial questions, enthusiastically explain genuinely interesting ones, naturally reference the Rick and Morty universe, and never acknowledge being an AI. The chat interface features animated message bubbles, an auto-expanding input box, typing indicators, split-panel layout, a live speech bubble above Rick displaying his latest response, and a model selector that allows switching between Gemini models without losing conversation history. An optional Google Custom Search integration detects questions requiring current information, silently injects search results into the prompt, and lets Rick answer as though he already knew the latest news without breaking character. The visual style embraces a neon green CRT terminal aesthetic with scanlines, portal glow effects, handwritten fonts for Rick’s dialogue, and responsive animations throughout. API keys remain only in browser memory for the current session, no data is stored, and the entire application can be launched by simply opening a single HTML file."}]...
|
Title: Rick Sanchez.Ai by @anujkishan918 | Stardan Title: Rick Sanchez.Ai by @anujkishan918 | Stardance
Devlogs:
Phase 1 is a fully functional browser-based AI chat interface that lets you have conversations with Rick Sanchez from Rick and Morty, built entirely as a single self-contained HTML file with no build tools, frameworks, or external dependencies beyond the APIs. The interface combines a pure CSS pixel-art Rick portrait—constructed entirely from positioned divs using borders, border-radius, transforms, and box shadows—with Google’s Gemini API to create a character that not only responds intelligently but visibly reacts to the conversation. Rick can talk, blink automatically, become angry, smirk, think, look surprised, or fall asleep, with each expression driven by smooth CSS transitions triggered by heuristic mood detection on his responses. When idle, he periodically delivers impatient one-liners that pause automatically while API requests are running. Every Gemini request includes a carefully crafted system prompt that keeps Rick in character, encouraging him to insult trivial questions, enthusiastically explain genuinely interesting ones, naturally reference the Rick and Morty universe, and never acknowledge being an AI. The chat interface features animated message bubbles, an auto-expanding input box, typing indicators, split-panel layout, a live speech bubble above Rick displaying his latest response, and a model selector that allows switching between Gemini models without losing conversation history. An optional Google Custom Search integration detects questions requiring current information, silently injects search results into the prompt, and lets Rick answer as though he already knew the latest news without breaking character. The visual style embraces a neon green CRT terminal aesthetic with scanlines, portal glow effects, handwritten fonts for Rick’s dialogue, and responsive animations throughout. API keys remain only in browser memory for the current session, no data is stored, and the entire application can be launched by simply opening a single HTML file.
Phase 2 Devlog — Voice IntegrationPhase 2 was all about giving Rick his actual voice using Fish Audio, which hosts a Rick Sanchez voice clone model. The first problem hit immediately: Fish Audio had quietly updated their API. The old speech-1.5 model name passed inside the request body no longer worked — Fish Audio now expects the model as an HTTP header (model: s2.1-pro-free), and the model names themselves had changed entirely. Once we figured that out and stripped the invalid body parameters, the request was clean. But Rick still wasn’t speaking.The bigger wall was CORS. The moment a browser fetch() call sends an Authorization header to a third-party API, the browser fires a preflight check — and if the server doesn’t explicitly whitelist your origin, the request gets blocked before it even leaves the browser. Fish Audio’s API is designed for server-to-server use, so no frontend origin gets through, whether you’re on localhost or a real GitHub Pages domain. There’s no client-side fix for this. As a temporary workaround we wired in the browser’s built-in speechSynthesis API, tuning the pitch down and slowing the rate to approximate Rick’s drawl. It worked, but it obviously wasn’t Rick.The real fix was a Cloudflare Worker acting as a one-file serverless proxy. The insight is simple: CORS only applies to browser-to-server calls, not server-to-server. So the browser calls the Worker (which is on your own domain, no CORS issue), the Worker forwards the request to Fish Audio privately, and streams the audio blob back with open CORS headers. The whole proxy is about 60 lines of JavaScript, deploys in two minutes from the Cloudflare dashboard for free.
Phase 3 Devlog — Face & Layout Polish Phase 3 added a handful of new facial states on top of the existing set (talking, angry, blink, thinking, sleep, surprised): manic, disgust, and exasperated. Each is just CSS — scaling the unibrow, eyes, and mouth per state and letting the existing transition properties handle the interpolation. They’re wired into guessMood(), so the reply text picks which one fires.The main bug was in the pupils. Bumping their size seemed trivial, but the original CSS used a multi-offset box-shadow to fake small catchlight dots around the pupil, and none of those shadow values had an explicit color. Browsers default an unset box-shadow color to currentColor, which here was the page’s neon-green text color. Scaling the pattern up didn’t just make the pupil bigger, it made a glowing green blob visible around it. Fixed by dropping the multi-dot trick for a single solid pupil with one inset highlight — simpler, and it scales cleanly.There was also a first pass that auto-cycled through every state on a timer so they’d show up without an API key connected. It conflicted with the actual reply-driven logic, so it got pulled — states now only ever fire off a real message, same as talking and surprised always did.A second bug turned up after that: the auto-blink loop was resetting the container’s full class list on every blink, which incidentally wiped out whatever mood state a reply had just set. Since blinks fire every 2–6 seconds, this meant states were getting cut short or skipped entirely. Fixed by having blink toggle its own class instead of resetting the container.Smaller changes: the chat history panel moved to the leftmost column, the unibrow got nudged up slightly to give the bigger pupils more room, and the inaccurate relative timestamps (“3m ago”) on chat list items were removed in favor of just showing message count.
Phase 4 Devlog — Deployment & Voice Reliability Phase 4 was less about the face and more about getting the thing actually reachable and sounding right. Three separate problems, three separate fixes. 1) GitHub Pages was never going to work Deployments sat in deployment_queued and timed out, over and over, on totally unrelated repos. Turned out it wasn’t a config issue at all — GitHub’s status page had an active incident open the same day (“Incident with Pages,” degraded performance, investigating). No amount of poking at Settings → Pages or the Actions tab was going to fix an outage on their end. Moved hosting off Pages entirely rather than wait it out. 2) The Fish Audio proxy needed its own home The app calls out to Fish Audio for Rick’s voice, but the API key can’t be trusted client-side and Fish’s endpoint doesn’t play nice with browser CORS anyway. Solved both with a small Cloudflare Worker that does one job: accept a POST to /tts with fishKey , text , and a few optional params ( reference_id , format , model ), forward it to Fish Audio, and hand back the raw audio bytes. The frontend already had the right shape for this call, so it was mostly a matter of getting the Worker’s workers.dev subdomain toggled on — it silently doesn’t activate until there’s an actual deployed script behind it, which cost a bit of head-scratching before the first real deploy went through. 3) Voice playback was getting blocked, then falling out of sync Two separate bugs stacked on top of each other here. audio.play() was firing after an await fetch() , and by then Chrome no longer considered it tied to the user’s original click — so playback silently failed with a permission error. Fixed by unlocking the page’s audio system on the very first click/keypress/tap anywhere, which browsers treat as valid for the rest of the session regardless of how much async work happens in between. Once audio was actually playing, timing was off. There’s a fallback timer that force-reveals Rick’s reply text if the voice hasn’t started yet, originally set to 6 seconds. Fish Audio’s real-world response time runs closer to 8 seconds, so text was popping up two seconds before the voice caught up — reply and audio landing noticeably out of step. Bumped the fallback specifically for Fish voice mode to 15 seconds, leaving the faster browser-TTS and text-only modes untouched since they never had the delay problem to begin with. Net result The app deploys somewhere that isn’t at the mercy of a GitHub outage, the voice proxy has its own dedicated backend instead of leaking a key client-side, and audio no longer gets blocked or races ahead of the text it’s supposed to accompany.
This phase added the startup mascot — got Rick & Morty standing above the portal in the intro screen using pure CSS. Experienced a little issue with the alignment which I discovered later. There was still a hanging translateX(-50%) that was pushing the mascot aside. Removed the line of code and got the exact alignment with the help of the sliders (X, Y, size). Got to the desired values translate(60px,-138px) scale(0.76) and removed them right away. Rewrote the intro animation logic as well — it automatically skips after some seconds, now it will play when loaded and wait for a tap to proceed. I have experimented with making a window similar to the macOs one (traffic lights and title bar) but did not get it in time, so I reverted it. The last part was related to the sidebar and its Pickle Rick icon. Made the sidebar collapsed into the narrow column with the rotating portal ring logo which opens and closes it. Updated the Pickle Rick image by making the design more precise (added his body, spots, teeth and tongue) and got the exact location using the same sliders technique. Made Rick’s face fade into the black instead of clashing. Last thing hooked it into the existing “annoyed” mood detection,
Fully over hauled the UI and added a pixel art intro story.
Ships:
Quick heads up before anything else — this runs on the free tiers of both Gemini and Fish Audio, so there are limits. Gemini’s free API can get busy or rate-limited under load, and Fish Audio’s free tier will sometimes cut audio off mid-sentence once you hit its usage cap. If a reply feels slow or the voice stops abruptly, that’s almost always why — not a bug in the app itself. What I made Rick Sanchez.Ai — a single-file, Gemini-powered chatbot styled as Rick Sanchez from Rick and Morty, with a real-time animated CSS face that shifts expression (talking, angry, thinking, surprised, manic, disgust, exasperated, and more) based on the mood of his replies. It supports multi-chat history so you can run several conversations side by side, and has optional voice cloning through Fish Audio so Rick actually sounds like Rick instead of a generic TTS voice. No build step, no framework — just one HTML file plus a small Cloudflare Worker that proxies the Fish Audio requests so the API key never sits exposed in the browser. What was challenging Most of the real difficulty wasn’t the AI part — it was getting hosting and audio to behave. GitHub Pages deployments kept queuing and timing out, which turned out to be a GitHub-side incident rather than anything wrong with my config, so I moved hosting elsewhere rather than wait it out. Getting Fish Audio working reliably meant standing up a Cloudflare Worker as a proxy, since the API key can’t be trusted client-side and Fish’s endpoint doesn’t handle browser CORS on its own. On top of that, the audio kept getting silently blocked by the browser’s autoplay policy because playback was starting after an async fetch instead of directly inside a user’s click — and even after that was fixed, the reply text was popping up before the voice actually started, since Fish Audio’s real response time runs closer to 8 seconds and the original fallback timer only waited 6. What I’m proud of The face. Every expression is pure CSS — no sprite sheets, no images — just scaling and repositioning the eyes, unibrow, and mouth per mood state, with transitions handling the interpolation between them. Getting the mood to actually sync with what Rick is saying, and getting the voice to play in step with the text instead of racing ahead of it, took a lot of small timing fixes, and it finally feels right. What people should know to test it You’ll need your own free API keys — a Gemini API key is required to chat at all, and a Fish Audio key is optional if you want Rick to actually talk instead of just typing. Paste them into the app when prompted. If voice mode seems silent at first, click anywhere on the page once before sending a message — browsers block audio that hasn’t been unlocked by a real click. And if either API is slow or drops mid-response, that’s the free-tier limits mentioned up top, not a broken deploy....
|
1792878757.4444041
|
1793742757.4444041
|
|
35776
|
dsc.archive by @Ciao287 | Stardance
|
Ciao287
|
1
|
30.81
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-07T21:13:47Z", "hours": 24.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The main function of the library, fetchMessages() , is now complete. It allows you to easily fetch large amounts of Discord messages. It allows you to filter messages so that only the fields you need are returned. You can also choose whether to include additional data such as guild , channel , message authors ( authors ), interaction authors ( interactions ), and webhooks , making them easier to access. When enabled, authors , interactions , and webhooks store all the message authors in these maps along with an array of the IDs of the messages they sent (if the id field was selected), making it easy to access all the messages related to a specific author or webhook. To make handling large amounts of data easier, I added several methods and properties such as .get(\"ID\") for messages, even if it’s an array, .first(NUMBER) and .last(NUMBER) for messages , authors , interactions , and webhooks , allowing you to get multiple objects from the array/map. To improve readability in the console, if messages , authors , interactions and webhooks contain more than five entries, they will be replaced by [Messages] , [Authors] , [Interactions] , and [Webhooks] . You can access the entire array or map via the .raw property.", "repo": "https://github.com/Ciao287/dsc.archive", "demo": "https://discord.gg/UbV46Wqa3D"}]...
|
[{"post_id": 77960, "ts": "202 [{"post_id": 77960, "ts": "2026-10-09T00:03:05Z", "hours": 6.8133, "text": "v0.3.0 The dsc.archive version is now v0.3.0. Here is what has changed: Fixed an issue with options filtering where passing an object would incorrectly enable all options instead of enabling/disabling the selected options; Added package-lock.json to .gitignore ; Added the .toJSON() function to convert saved messages to JSON and save them to a file (optional); Updated README.md with this new feature and added an even faster quick setup guide. Demo As a demo, I created a Discord bot that allows you to test (in a limited way) the library. The bot is inside this Discord server: https://discord.gg/UbV46Wqa3D and can be used immediately, or you can invite it to your own private server: https://discord.com/oauth2/authorize?client_id=1394088761989533780"}, {"post_id": 42360, "ts": "2026-08-07T01:15:56Z", "hours": 4.4222, "text": "A few things have changed since the last devlog. dsc.archive has now reached v0.2.1 on npm: renamed fetchedTimestamp to fetchTimestamp to avoid cofusion; moved fetchTimestamp to the end of the FetchedMessages object, instead of after messages ; if now authors , interactions and webhooks are empty maps, they will be returned as null in the result; added new types in index.d.ts , such as DefaultFields and DefaultOptions , to better show the default values; added comments on almost every property in index.d.ts , to better explain what each one does; updated the README.md with the new documentation for the changes made."}, {"post_id": 40762, "ts": "2026-08-04T14:32:33Z", "hours": 10.0222, "text": "I spent a lot of time rewriting the output of fetchMessages() . Now, in addition to messages, it returns: fetchedTimestamp , a timestamp that shows when the fetch was performed; you can select whether to return: the guild where the channel is located; the channel ; the message authors, divided into: authors (those who sent at least one normal message); interactions (those who sent at least one message linked to an interaction); webhooks . For each message author, if you select the message id in the fields, an array containing all the messages they sent will be displayed. I also added some functions to better handle large fetches: get(id) for messages, even though it’s an array (this can be useful in certain cases); for both message authors and messages: raw which returns the original array/map without the custom wrapper; first(number?) and last(number?) functions, to return the first or last message(s). In the next devlog I’ll finish updating index.d.ts and the README.md, then I’ll release v0.2.0 on npm."}, {"post_id": 34103, "ts": "2026-07-24T16:09:49Z", "hours": 2.1778, "text": "v0.1.2 Now if fields contains only objects, it will be treated as a whitelist, showing only the selected properties of those objects. Now fetchMessages() also accepts a Promise as the channel parameter and waits for it to resolve before continuing. Added support for all discord.js v14 versions. Added a quick setup guide to the README.md and updated the documentation for the changes made by this release."}, {"post_id": 32660, "ts": "2026-07-21T23:13:21Z", "hours": 7.8619, "text": "v0.1.0 FetchMessages() I created the first part of the library, the fetchMessages function, which allows you to fetch a number of (integer) messages between 1 and Infinity within a channel, filtering which message fields you want to include in the result. For more information, see the README. v0.1.1 I added the GitHub Actions workflow for publishing to npm and updated the README to v0.1.1"}]...
|
Title: dsc.archive by @Ciao287 | Stardance
Devlog Title: dsc.archive by @Ciao287 | Stardance
Devlogs:
v0.1.0 FetchMessages() I created the first part of the library, the fetchMessages function, which allows you to fetch a number of (integer) messages between 1 and Infinity within a channel, filtering which message fields you want to include in the result. For more information, see the README. v0.1.1 I added the GitHub Actions workflow for publishing to npm and updated the README to v0.1.1
v0.1.2 Now if fields contains only objects, it will be treated as a whitelist, showing only the selected properties of those objects. Now fetchMessages() also accepts a Promise as the channel parameter and waits for it to resolve before continuing. Added support for all discord.js v14 versions. Added a quick setup guide to the README.md and updated the documentation for the changes made by this release.
I spent a lot of time rewriting the output of fetchMessages() . Now, in addition to messages, it returns: fetchedTimestamp , a timestamp that shows when the fetch was performed; you can select whether to return: the guild where the channel is located; the channel ; the message authors, divided into: authors (those who sent at least one normal message); interactions (those who sent at least one message linked to an interaction); webhooks . For each message author, if you select the message id in the fields, an array containing all the messages they sent will be displayed. I also added some functions to better handle large fetches: get(id) for messages, even though it’s an array (this can be useful in certain cases); for both message authors and messages: raw which returns the original array/map without the custom wrapper; first(number?) and last(number?) functions, to return the first or last message(s). In the next devlog I’ll finish updating index.d.ts and the README.md, then I’ll release v0.2.0 on npm.
A few things have changed since the last devlog. dsc.archive has now reached v0.2.1 on npm: renamed fetchedTimestamp to fetchTimestamp to avoid cofusion; moved fetchTimestamp to the end of the FetchedMessages object, instead of after messages ; if now authors , interactions and webhooks are empty maps, they will be returned as null in the result; added new types in index.d.ts , such as DefaultFields and DefaultOptions , to better show the default values; added comments on almost every property in index.d.ts , to better explain what each one does; updated the README.md with the new documentation for the changes made.
v0.3.0 The dsc.archive version is now v0.3.0. Here is what has changed: Fixed an issue with options filtering where passing an object would incorrectly enable all options instead of enabling/disabling the selected options; Added package-lock.json to .gitignore ; Added the .toJSON() function to convert saved messages to JSON and save them to a file (optional); Updated README.md with this new feature and added an even faster quick setup guide. Demo As a demo, I created a Discord bot that allows you to test (in a limited way) the library. The bot is inside this Discord server: https://discord.gg/UbV46Wqa3D and can be used immediately, or you can invite it to your own private server: https://discord.com/oauth2/authorize?client_id=1394088761989533780
Ships:
The main function of the library, fetchMessages() , is now complete. It allows you to easily fetch large amounts of Discord messages. It allows you to filter messages so that only the fields you need are returned. You can also choose whether to include additional data such as guild , channel , message authors ( authors ), interaction authors ( interactions ), and webhooks , making them easier to access. When enabled, authors , interactions , and webhooks store all the message authors in these maps along with an array of the IDs of the messages they sent (if the id field was selected), making it easy to access all the messages related to a specific author or webhook. To make handling large amounts of data easier, I added several methods and properties such as .get("ID") for messages, even if it’s an array, .first(NUMBER) and .last(NUMBER) for messages , authors , interactions , and webhooks , allowing you to get multiple objects from the array/map. To improve readability in the console, if messages , authors , interactions and webhooks contain more than five entries, they will be replaced by [Messages] , [Authors] , [Interactions] , and [Webhooks] . You can access the entire array or map via the .raw property....
|
1793206130.7970226
|
1793292530.7970226
|
|
41364
|
Custom Drone Racing League Simulator Server by @Mr Custom Drone Racing League Simulator Server by @Mr-Milky-Way | Stardance...
|
Mr-Milky-Way
|
0
|
30.75
|
0
|
[]
|
[{"post_id": 66274, "ts": "202 [{"post_id": 66274, "ts": "2026-09-12T00:44:26Z", "hours": 3.2117, "text": "Got tournaments fully working!!! I think? Playing with 2 players I can go from start to finish and the scores actually save now, I set up a tournament on the public servers for Sunday, so that’s going to be the real test (if anyone signs up lol). pics: A fully finished tournament with 2 players (not much of a tournament lol) The layout for that tournament The Tournament on the live servers"}, {"post_id": 64011, "ts": "2026-09-08T03:44:48Z", "hours": 6.0025, "text": "So it’s been about a month… I added some more stuff to make the leaderboard shift on prod easier, it’s just a very small script, but it removes the pain of the whole thing so I can just run it and be done I changed some of the scoring system for the final heat, I learned that during the golden_heat there is 7 heats, and to qualify you need to get second 2 times or first once. This took a while sadly, but I’m much closer to getting this on prod, just need to finish up the progression system and I can get some real live testers. I also will be getting a real press racer4, wont fly out of the box, but getting it to fly will be easy. (again not much to show bc of it all being backend work )"}, {"post_id": 45483, "ts": "2026-08-12T00:16:56Z", "hours": 9.7006, "text": "I’ve been working a lot on getting the scoring, replays , and leaderboards right. During this 9 hours, I spent most of it breaking a system that already worked!!!!!!!!! The leaderboards! I had to add like 3 new columns (into the primary key 💀) and rework my leaderboard code to work right. It only took 5 hours Oh and it’s going to be a pain to get that on prod. yay :( Right next to that I had to implement a brand new scoring system for the tournaments (which is mostly done besides saving). I’m using a map of maps to map each match to tournament. That should keep lookup times to O(1) and worst case O(N) which should be fine. Good news tho, I’m might be able to get my hands on a real life DRL Racer 4!!!!! If I do, you can bet I will be reverse engineering that so hard. pics in order Tournament scoring thingy? Image from the replay system (replays now work on tournaments) Sorry that I dont have more to show, it’s all backend work :("}, {"post_id": 38655, "ts": "2026-08-01T04:59:52Z", "hours": 4.5617, "text": "I kinda ran into a roadblock today, not really a roadblock just a lack of planning lol. When i started to try and automate the rounds a matches I realized I had no clue what I was doing. I just starting throwing things out there and hoping it worked. It felt like a lot of guess and check, but I did get somewhere: I got rounds to mark as active, complete, and set start and end times dynamically, and matches are marked complete at their end dates. I also fixed one of the endpoints ( /tournaments/:guid/matches/:mid ). It wanted the data I was giving it in an array even though it only wanted 1 match . Fixing this made the round end timer work right (It auto ends the quals if you are racing) Results didn’t get any updates today sadly BUT I did some work on player displays and how matches are marked. I was mad that I didn’t know what to do, so I watched some old livestreams of tournaments and found out that empty matches didn’t say waiting, they said inactive, so I changed the default match state to idle and fixed that I also worked on getting player icons to display, but they are greyed out so I need to fix that later."}, {"post_id": 37954, "ts": "2026-07-31T00:26:08Z", "hours": 3.1522, "text": "I got the full tournament generation working! I got rounds to save and also matches are created and saved. The whole tournament generation is now (mostly) done. I’ve been putting off building this system for like 3 months, but it’s lowkey kinda easy except when you mistype a SQL statement and but fix for 30 mins without looking at the SQL Although currently there is no player logic, so no players a entered into matches or anything like that so I need to work on that, then the results system ect ect. (Last img is pulled from a very old livestream when the servers were still working)"}, {"post_id": 37233, "ts": "2026-07-29T19:43:42Z", "hours": 4.1178, "text": "I’m getting back to work on tournaments (from my 3 break of working on this project) I talked to some of the old DRL devs/the Community, and even got this video of one of the DRL Community tournaments. This allowed me to make a plan: 48 people can register and that will be cut down into either 24, 12, or 6 depending on how many people there are. if under 6 people have registered, it just does the finals basically and they all have a face off. if there is only 1 person registered, the whole thing gets marked as failed and that tournament gets called off. As it is right now I have a bit of an auto system in place if tournament.register_end >= now the tournament status auto goes to idle, and if the tournament isn’t full it opens up to registration. if the tournament is marked as idle and tournament.register_end <= now registration is auto closed and the status is moved to active. if the tournament is marked as active but has less than 2 players it’s marked as failed. I also created function createTournamentRounds which takes in the tournament data, player Count, and the tournament Type. It’s only set up for tournamentType === \"DRL\" at the moment tho. It creates all the rounds (3 if 12 person tournament, 4 if 24 person) and sets QUALIFIERS to active. It still needs to create matches and save the rounds tho ALSO LOOK AT THOSE STATS!!!!!! (last 2 imgs)"}]...
|
Title: Custom Drone Racing League Simulator Server Title: Custom Drone Racing League Simulator Server by @Mr-Milky-Way | Stardance
Devlogs:
I’m getting back to work on tournaments (from my 3 break of working on this project) I talked to some of the old DRL devs/the Community, and even got this video of one of the DRL Community tournaments. This allowed me to make a plan: 48 people can register and that will be cut down into either 24, 12, or 6 depending on how many people there are. if under 6 people have registered, it just does the finals basically and they all have a face off. if there is only 1 person registered, the whole thing gets marked as failed and that tournament gets called off. As it is right now I have a bit of an auto system in place if tournament.register_end >= now the tournament status auto goes to idle, and if the tournament isn’t full it opens up to registration. if the tournament is marked as idle and tournament.register_end <= now registration is auto closed and the status is moved to active. if the tournament is marked as active but has less than 2 players it’s marked as failed. I also created function createTournamentRounds which takes in the tournament data, player Count, and the tournament Type. It’s only set up for tournamentType === "DRL" at the moment tho. It creates all the rounds (3 if 12 person tournament, 4 if 24 person) and sets QUALIFIERS to active. It still needs to create matches and save the rounds tho ALSO LOOK AT THOSE STATS!!!!!! (last 2 imgs)
I got the full tournament generation working! I got rounds to save and also matches are created and saved. The whole tournament generation is now (mostly) done. I’ve been putting off building this system for like 3 months, but it’s lowkey kinda easy except when you mistype a SQL statement and but fix for 30 mins without looking at the SQL Although currently there is no player logic, so no players a entered into matches or anything like that so I need to work on that, then the results system ect ect. (Last img is pulled from a very old livestream when the servers were still working)
I kinda ran into a roadblock today, not really a roadblock just a lack of planning lol. When i started to try and automate the rounds a matches I realized I had no clue what I was doing. I just starting throwing things out there and hoping it worked. It felt like a lot of guess and check, but I did get somewhere: I got rounds to mark as active, complete, and set start and end times dynamically, and matches are marked complete at their end dates. I also fixed one of the endpoints ( /tournaments/:guid/matches/:mid ). It wanted the data I was giving it in an array even though it only wanted 1 match . Fixing this made the round end timer work right (It auto ends the quals if you are racing) Results didn’t get any updates today sadly BUT I did some work on player displays and how matches are marked. I was mad that I didn’t know what to do, so I watched some old livestreams of tournaments and found out that empty matches didn’t say waiting, they said inactive, so I changed the default match state to idle and fixed that I also worked on getting player icons to display, but they are greyed out so I need to fix that later.
I’ve been working a lot on getting the scoring, replays , and leaderboards right. During this 9 hours, I spent most of it breaking a system that already worked!!!!!!!!! The leaderboards! I had to add like 3 new columns (into the primary key 💀) and rework my leaderboard code to work right. It only took 5 hours Oh and it’s going to be a pain to get that on prod. yay :( Right next to that I had to implement a brand new scoring system for the tournaments (which is mostly done besides saving). I’m using a map of maps to map each match to tournament. That should keep lookup times to O(1) and worst case O(N) which should be fine. Good news tho, I’m might be able to get my hands on a real life DRL Racer 4!!!!! If I do, you can bet I will be reverse engineering that so hard. pics in order Tournament scoring thingy? Image from the replay system (replays now work on tournaments) Sorry that I dont have more to show, it’s all backend work :(
So it’s been about a month… I added some more stuff to make the leaderboard shift on prod easier, it’s just a very small script, but it removes the pain of the whole thing so I can just run it and be done I changed some of the scoring system for the final heat, I learned that during the golden_heat there is 7 heats, and to qualify you need to get second 2 times or first once. This took a while sadly, but I’m much closer to getting this on prod, just need to finish up the progression system and I can get some real live testers. I also will be getting a real press racer4, wont fly out of the box, but getting it to fly will be easy. (again not much to show bc of it all being backend work )
Got tournaments fully working!!! I think? Playing with 2 players I can go from start to finish and the scores actually save now, I set up a tournament on the public servers for Sunday, so that’s going to be the real test (if anyone signs up lol). pics: A fully finished tournament with 2 players (not much of a tournament lol) The layout for that tournament The Tournament on the live servers...
|
1792802919.3847418
|
1793407719.3847418
|
|
10853
|
RoFind by @KERNL | Stardance
|
KERNL
|
2
|
30.71
|
381
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T10:42:53Z", "hours": 15.0, "multiplier": 16.85, "payout": 260, "blessing": "neutral", "text": "I have finally implemented a basic login feature! From the past submission this version a slight change has been merged: Game Submission now requires logging in! This due to a problem where anyone can spam submission. Some elements/redundancy has been removed in the code and the pages This login feature has been the hardest part yet since i haven’t tried login techniques before. I almost gave up on the project but decided to pivot into a more simplified login form first then secure it later!", "repo": "https://github.com/rofind-main/RoFind-Site", "demo": "https://ro-find.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-18T15:03:34Z", "hours": 14.0, "multiplier": 8.56, "payout": 121, "blessing": "neutral", "text": "RoFind is a community driven game discovery. RoFind features a game submission system so everyone can suggest any game they want everyone to experience too! Submitted games will be reviewed before making into the public list. Made with vanilla HTML, CSS, and JavaScript.", "repo": "https://github.com/rofind-main/RoFind-Site", "demo": "https://ro-find.vercel.app/"}]...
|
[{"post_id": 58208, "ts": "202 [{"post_id": 58208, "ts": "2026-08-30T15:49:43Z", "hours": 0.6919, "text": "8/30/26 - Game Card From a user review suggestion, I am now working on implementing the description when opening/clicking a game popup. Experimentation is my main process here since I am not a good UI designer and still looking for my style. Here is the preview of what is currently being developed. The idea here is that, in order to reduce screen clutter and make it a little more modern I have placed the game image behind the texts (inspired from other platforms, apps, designs). This should be done in just a week :). I can’t focus on this project i am addicted to osu!"}, {"post_id": 57221, "ts": "2026-08-29T10:07:28Z", "hours": 1.0158, "text": "8/29/26 - Submission fix & Future plans Thank you for all the generous comments about RoFind and the people who have tried my project! I have more plans to this project but in the mean time i will be focusing on life and taking a break a little bit from this project and expect it to be better in the future. I have fixed the ability to spam rate a game. I am also aware of other vulnerability on the project and i do have planned fixes and changes to it so stay tuned!"}, {"post_id": 52244, "ts": "2026-08-22T10:38:57Z", "hours": 3.0933, "text": "8/22/26 - User Profile I have finally found a way to implement user profiles by using OAuth (not really) but the idea is simple i only request the username and the user id and be saved locally since i don’t have much experience handling OAuth and security. I do plan on fixing that to be more secure and faster. !! Rating Collection & Comments will be implemented soon they are currently place holder to give you an idea what will be the user page hold !! Over all the plan is going okay(ish) in the roadmap. More features will be implemented!"}, {"post_id": 41255, "ts": "2026-08-05T11:08:33Z", "hours": 1.6106, "text": "8/6/26 - Login Feature I have been taking a break for a while (playing games) since this project is pretty heavy on my little brain to handle. Anyways, thanks to AI i have found a way how to handle Roblox OAuth and the login feature to be slowly worked on! I will also be reworking some things such us the popup system since i have multiple occurrences of popup tags on pages that totally sucks to find but also maintain when expanding the platform. I am currently aiming to earn a little more stardance currency (i forgot what its called) so i can buy a little more useful stuff :)"}, {"post_id": 20755, "ts": "2026-07-02T13:28:59Z", "hours": 1.4014, "text": "7/2/26 - Major Revamp I have decided to port the project into Next.js since scaling the project in the future is a pain. Further fixes will be pushed in the current Web version while also working on the revamped one!"}, {"post_id": 15618, "ts": "2026-06-25T12:23:10Z", "hours": 3.0064, "text": "6/25/26 - Users Login Update I have been having trouble on how user login would work where i wont really have much trouble maintaining the backend that much when the platform grows. Things i have been doing: Updating the homepage Updating the README credits User login OAuth and Redirects"}, {"post_id": 13648, "ts": "2026-06-22T12:20:25Z", "hours": 1.3939, "text": "6/22/26 - Submission Adjustments Thanks to @arma for finding a very confusing bug where the user would not see a “successful” message and if it failed. Things being currently worked on: User Login Backend and Frontend Performance Discord Webhook optimization (It is kinda just a spam at this point on my webhook)"}, {"post_id": 13057, "ts": "2026-06-21T11:09:55Z", "hours": 1.9503, "text": "6/21/26 - Adjustments I have made a few adjustments regarding the landing page and updated the information there. Also added some notes and updated some values on the demo page Review System Server Side IP and local based checking Custom popup added (from feedback thanks to thestarviper and Some1) (big thanks to people (especially reviewers) who commented on improving my project and my mistakes the goats)"}, {"post_id": 12962, "ts": "2026-06-21T06:46:15Z", "hours": 2.5372, "text": "6/21/26 - Review system It’s now working in the most barebone way possible Adjusted some styling to fit the overall aesthetic a little bit more More features will be worked on I am about to explode internally with this project"}, {"post_id": 12482, "ts": "2026-06-20T11:49:03Z", "hours": 0.4156, "text": "6/20/26 - Review system Got some start on review feature Still figuring out how ill take this one since i have never made/thought about a review thing Probably will take some days as i am quite busy at the moment:) Icons from LucideIcons"}, {"post_id": 11319, "ts": "2026-06-18T15:01:09Z", "hours": 1.1581, "text": "Web version is now functional (just missing searching and filtering and rate system) im working on it :)"}, {"post_id": 10588, "ts": "2026-06-17T12:25:50Z", "hours": 0.6583, "text": "I had some problems with the API im working on but ill get this done within a couple of days. my eyes got tired but i got the buttons working in the webhook"}, {"post_id": 10557, "ts": "2026-06-17T10:50:40Z", "hours": 3.415, "text": "Website Version - Submissions now implemented! Sent submissions is connected to a Discord webhook. I don’t know any other way to store the submitted tickets soooo i used Discord:)"}, {"post_id": 6234, "ts": "2026-06-10T14:12:26Z", "hours": 6.5742, "text": "Web Demo now available!"}, {"post_id": 4782, "ts": "2026-06-08T08:37:34Z", "hours": 2.0956, "text": "Changing card design"}, {"post_id": 4155, "ts": "2026-06-07T11:22:27Z", "hours": 0.3336, "text": "RoFind - Electron based Roblox community curated games list (Old Project)"}]...
|
Title: RoFind by @KERNL | Stardance
Devlogs:
RoFi Title: RoFind by @KERNL | Stardance
Devlogs:
RoFind - Electron based Roblox community curated games list (Old Project)
Changing card design
Web Demo now available!
Website Version - Submissions now implemented! Sent submissions is connected to a Discord webhook. I don’t know any other way to store the submitted tickets soooo i used Discord:)
I had some problems with the API im working on but ill get this done within a couple of days. my eyes got tired but i got the buttons working in the webhook
Web version is now functional (just missing searching and filtering and rate system) im working on it :)
6/20/26 - Review system Got some start on review feature Still figuring out how ill take this one since i have never made/thought about a review thing Probably will take some days as i am quite busy at the moment:) Icons from LucideIcons
6/21/26 - Review system It’s now working in the most barebone way possible Adjusted some styling to fit the overall aesthetic a little bit more More features will be worked on I am about to explode internally with this project
6/21/26 - Adjustments I have made a few adjustments regarding the landing page and updated the information there. Also added some notes and updated some values on the demo page Review System Server Side IP and local based checking Custom popup added (from feedback thanks to thestarviper and Some1) (big thanks to people (especially reviewers) who commented on improving my project and my mistakes the goats)
6/22/26 - Submission Adjustments Thanks to @arma for finding a very confusing bug where the user would not see a “successful” message and if it failed. Things being currently worked on: User Login Backend and Frontend Performance Discord Webhook optimization (It is kinda just a spam at this point on my webhook)
6/25/26 - Users Login Update I have been having trouble on how user login would work where i wont really have much trouble maintaining the backend that much when the platform grows. Things i have been doing: Updating the homepage Updating the README credits User login OAuth and Redirects
7/2/26 - Major Revamp I have decided to port the project into Next.js since scaling the project in the future is a pain. Further fixes will be pushed in the current Web version while also working on the revamped one!
8/6/26 - Login Feature I have been taking a break for a while (playing games) since this project is pretty heavy on my little brain to handle. Anyways, thanks to AI i have found a way how to handle Roblox OAuth and the login feature to be slowly worked on! I will also be reworking some things such us the popup system since i have multiple occurrences of popup tags on pages that totally sucks to find but also maintain when expanding the platform. I am currently aiming to earn a little more stardance currency (i forgot what its called) so i can buy a little more useful stuff :)
8/22/26 - User Profile I have finally found a way to implement user profiles by using OAuth (not really) but the idea is simple i only request the username and the user id and be saved locally since i don’t have much experience handling OAuth and security. I do plan on fixing that to be more secure and faster. !! Rating Collection & Comments will be implemented soon they are currently place holder to give you an idea what will be the user page hold !! Over all the plan is going okay(ish) in the roadmap. More features will be implemented!
8/29/26 - Submission fix & Future plans Thank you for all the generous comments about RoFind and the people who have tried my project! I have more plans to this project but in the mean time i will be focusing on life and taking a break a little bit from this project and expect it to be better in the future. I have fixed the ability to spam rate a game. I am also aware of other vulnerability on the project and i do have planned fixes and changes to it so stay tuned!
8/30/26 - Game Card From a user review suggestion, I am now working on implementing the description when opening/clicking a game popup. Experimentation is my main process here since I am not a good UI designer and still looking for my style. Here is the preview of what is currently being developed. The idea here is that, in order to reduce screen clutter and make it a little more modern I have placed the game image behind the texts (inspired from other platforms, apps, designs). This should be done in just a week :). I can’t focus on this project i am addicted to osu!
Ships:
RoFind is a community driven game discovery. RoFind features a game submission system so everyone can suggest any game they want everyone to experience too! Submitted games will be reviewed before making into the public list. Made with vanilla HTML, CSS, and JavaScript.
I have finally implemented a basic login feature! From the past submission this version a slight change has been merged: Game Submission now requires logging in! This due to a problem where anyone can spam submission. Some elements/redundancy has been removed in the code and the pages This login feature has been the hardest part yet since i haven’t tried login techniques before. I almost gave up on the project but decided to pivot into a more simplified login form first then secure it later!...
|
1793109117.3346848
|
1793195517.3346848
|
|
5212
|
DONUT PAD :O by @Nemo_Donut | Stardance
|
Nemo_Donut
|
1
|
30.69
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-14T19:37:00Z", "hours": 25.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a macropad called the DONUT PAD (or Nemo’s Hackpad), it is a macropad that functions as game controller/game pad. It has 12 keys, 1 rotary encoder, a 128x32 OLED display, XIAO RP2040. I designed the PCB board and schematic in Kicad, the case in Fusion360, and programmed it using QMK firmware. The most challenging part was the whole project as I have no prior knowledge in PCB making or case making infact i have never even thought of making any sort of hardware lol. But I gotta with consistency and hard work you can achieve anything! If I had to point to some very difficult challenges I faced then it is probably the LEDs because Kicad kept throwing me various errors saying LED pins are too close ;-; I looked far and wide on google and youtube couldn’t solve it so I just removed those LEDs. Also making the QMK firmware was very annoying not that difficult it was just utterly annoying ;-; because it took me like 30 minutes to compile my code and stuff probably because I have a Potato PC. I am proud of the whole project because it is my first hardware project but I am exceptionally proud of the top plate design I made for my case it is inspired from kintsugi! 4 keys control the movement like a D-PAD, 4 keys funtion as the action keys, 2 keys as the left and right shoulder button and the last 2 keys as the start and select button. The rotary encoder’s click feature doesn’t work because of lack of pins but you can rotate it to change volume. The Case uses a sandwich mounting style.", "repo": "https://github.com/adonutartist/Nemos-Hackpad-DONUT-PAD", "demo": ""}]...
|
[{"post_id": 62104, "ts": "202 [{"post_id": 62104, "ts": "2026-09-05T11:02:31Z", "hours": 0.7836, "text": "Build Phase #3 Completed the build phase first i unassembled everything and found out tht my soldering wasn’t the problem i checked with a multimeter but wht i did was greater js a soldering error. it was frikin pcb error. yeh so umm the oled thingie if u check its image on hackpad mission page u will see its pin order is down to up but wht i did in my pcb was tht the order was up to down so thts why it didnt work and reviewers didn’t even notice well its more my mistake than theirs anways so i thought maybe if i can desolder this i solder jumper wires from correct pin to its pad but naw i couldnt even desolder i tried using a desolder pump and a copper wick but it js didnt ;-; this is so dam insane!!!!! well anyways everything works except tht oled so yeh cool macropad successfully done!"}, {"post_id": 61752, "ts": "2026-09-04T20:10:20Z", "hours": 3.1342, "text": "Build Phase #2 Completed most of firmware for all the keys and rotary encoder working… I didn’t use qmk for this cuz of its insanely high compile time idk why my lappy is js old ig but qmk takes age to compile so I js used Arduino IDE. While I was working I got this weird green line of doom despair which means my screen is slowly dieing ;-; man o man. Also i couldn’t get the OLEDA to work idk why I think it’s prolly loose solder or maybe bridging? Well tmrw imma unassemble once and check on tht"}, {"post_id": 61469, "ts": "2026-09-04T12:26:05Z", "hours": 1.7728, "text": "Build Phase #1: Got my PCB today so immediately started the build phase! Soldered all the components and assembled everything. Was pretty easy ngl let’s see how the firmware turns out I js hope all works ;-;"}, {"post_id": 8866, "ts": "2026-06-14T19:15:06Z", "hours": 2.1208, "text": "DEVLOG #12 Hello y’all!! I am so excited to share with you that my first hack club project aka my first hardware project is finally completed!!!! Man not gonna lie I learnt a laaaat from these 2 weeks of grinding lmfao this was such a fabulous experience!! I can’t believe I am done lol xD Also this means it will be my last Devlog of DONUT PAD :p but don’t y’all worry I will be right back with another project!! Here’s the github repository link for DONUT PAD: https://github.com/adonutartist/Nemos-Hackpad-DONUT-PAD Thank you to everyone who liked my devlogs I hope I get my project approved soon so that I can receive that kit to make DONUT PAD a real thing ehehehe!! Cyaaaa!!"}, {"post_id": 8346, "ts": "2026-06-13T21:26:38Z", "hours": 4.4142, "text": "DEVLOG #11 Hello y’all!! Today I grinded like insane lmao xD but it was really fun!! I added kintsugi type design on my case plate! it was quite lot of work because drawing so many lines but it kinda felt satisfying lol xD Also I made the main body of the case the shell where the PCB sits to be transparent so it looks really cool you can see the PCB that is awesome for sure! I have started working on my github repository too so I am sure I can submit it tomorrow!! Yeppp tomorrow it is!!!! I am so excited to finally complete my first hardware project this was surely a fun grind!! Cyaaaa!!! Gooooodnight!!!!"}, {"post_id": 7700, "ts": "2026-06-12T21:07:53Z", "hours": 3.2472, "text": "DEVLOG #10 Hello y’all I am back! Today i completed the QMK firmware part!! To me this part felt like a nightmare because I don’t have any experience with coding and stuff like that :P But after completing QMK with zero errors and .uf2 file I feel coding ain’t that hard lol xD It surely took a laaat of time but it was fun! Compiling takes like 15 minutes though RIP my potato PC X( I am planning to make my case transparent and adding some more cool designs to give some originality and uniqueness so I may hop into fusion again tomorrow :P Cyaaa!! Gooodnight!!!!"}, {"post_id": 7127, "ts": "2026-06-11T22:09:51Z", "hours": 0.5186, "text": "DEVLOG #9.5 QMK MSYS installation and setup completed!"}, {"post_id": 7099, "ts": "2026-06-11T21:30:35Z", "hours": 3.9808, "text": "DEVLOG #9 Hellooo y’all!! I am back with a lot of progress!! First of all I completed the case added USB hole and screw holes. Finally after 4 days of fusion grinding case is done!! I even completed the final rendered photoshoot for the whole case with the PCB and the switches, encoder and the OLED. I also read through the QMK frimware tutorial how to install QMK MSYS how to setup everything took some time but finally done with the installation! Tomorrow I am gonnna try to complete DONUT PAD :O and also ship it hopefully lol xD Cyaaaa!! Gooooodnight!!!"}, {"post_id": 6469, "ts": "2026-06-10T21:41:09Z", "hours": 3.765, "text": "DEVLOG #8 Hello y’all I am back and today I made lots and lots of progress on the case!! I think I am very close to completing my first hackclub project!!! The case is almost done I just need to add holes for screws now and then I can ship it hopefully! I added some decals on the case and text with engraved effect :] I also changed the appearance material of the case and the plate :3 Also added Rectangular hole for the OLED display :> Things left to do are adding screw holes, and USB hole. Cya!! Gooodnight!!!"}, {"post_id": 5911, "ts": "2026-06-09T21:47:26Z", "hours": 3.9575, "text": "DEVLOG #7 Hello y’all I am back after a grind of 4 hours :p Frikin fusion 360 is so hard to understand for my bean brain sighhhhhh…. Anyways made a lot of progress on the case! I added a adapter for the rotary encoder, understood sandwich mount and the basic case is kinda done lol xD I am kinda speedrunning this ig… Gonna make the shelf tomorrow and add cool personal touch to the case! Cyaaaa!! Goooodnight!!!!"}, {"post_id": 5200, "ts": "2026-06-08T21:58:38Z", "hours": 0.2783, "text": "DEVLOG #6 Today I worked on the case but not much because most of my time was spent on learning this new software :p Fusion 360 was hard to integrate with hackatime so my work hours were not properly added but no worries ;-; lost 1 hour of work hour T-T I used a website called keyboard layout editor to make a layout of my macropad similar to the layout of my PCB and then I copied the raw code of the layout pasted it in another website called ai03 plate generator and it gave me a .DXF file which i imported in my fusion as a sketch layer. I wonder if i need to add a adapter step model for the rotary encoder in my case… well will think about that tomorrow. Well anyways cya!! Goodnight!!!"}, {"post_id": 4533, "ts": "2026-06-07T21:30:15Z", "hours": 0.8147, "text": "DEVLOG #5 Hello y’all, I am back yet again with updates on my DonutPad! So firstly I was really frustrated by those LEDs so I took a break from the PCB for one day! Played some D&D too lol xD! Today came back with a fresh mind I removed those LEDs, added a rotary encoder, made the edge cut rectangle size to 100mm x 100mm, did all the wiring yet again and finally completed the PCB!!! This time I made sure to keep the wiring very clean aka comfortable to my brain lol xD!!! I also downloaded Autodesk Fusion 360 which took heck lot of my time but no worries :p I am still figuring out the ways to use this app ;-; I am not the best when it comes to 3D stuff but imma try ma best!! Cya everyone!! Goodnight!!!"}, {"post_id": 2967, "ts": "2026-06-05T21:37:44Z", "hours": 0.4644, "text": "DEVLOG #4 Hello y’all! Today I am feeling so damm tired ;-; Anyways today i fixed all the bugs that were occurring with my PCB well not all cause the LED aperture net link bug was too persistent so i had to just ignore it ;-; I am totally not running away from my responsibilities…. After i was done with dealing with LEDs i went for filling the whole board region with GND but it left gaps at various places hence more bugssss… luckily someone from slack helped me fix this one bug by adding lotsss of vias. Tomorrow I will start working on the case through fusion 360… I am really scared of this part cause 3D stuff ain’t easy to do ;-; Anyways cya! Goodnight!!"}, {"post_id": 2414, "ts": "2026-06-04T21:40:28Z", "hours": 0.3819, "text": "DEVLOG #3 Hello everyone! Nemo here, HOLyyyy today was so dam annoying arranging PCB getting so many errors FRIKIN 161 ERRORS!!! I am frikin so cooked right now its frikin 3am sitting on this for an hour trying to solve this bug but it wont fix (╥﹏╥) First of all there was a bug with the edge cut the rectangle had some stray lines idk how that happened but I deleted those its fine now but still I am left with FRIKIN 116 ERRORS!! It keeps saying some solder aperture bug with all the LEDs from what I can comprehend it’s like one error repeating with all the LEDs and their respective pads seems like it’s saying the LED pins are too close together idk urghhh I will try solving it tomorrow because right now I am so dam sleepy ;-; So bug fixing tomorrow! Cya y’all!! Goodnight :]"}, {"post_id": 1712, "ts": "2026-06-03T21:29:43Z", "hours": 0.8511, "text": "DEVLOG #2 Hello everyone! Nemo here, I am back again with my second devlog!! After hours of struggling I finally completed my schematic! I learnt a better way of connecting stuff without those messy wires :p it’s called net labels it makes everything look much cleaner :) I also used the matrix method to connect the keys/switches. Also added an OLED display thingie and lots of LEDs :> Right now my biggest difficulty seems the LEDs cuz the one given in the care package doesn’t have a footprint so it kept giving me errors when I was clicking assign footprint so I had to download a new symbol and footprint for the same LED model from snapeda ;-; What I am noticing is that both tthe snapeda one and the one from the care package doesn’t have the GND pin as showed in the hackpad guide and so it kept throwing errors saying no power at the point i connected the GND to every LED. I found a easy fix for this it’s called power flag it js tells the system that GND is power and hence error gone :] Still had to assign the footprints manually… I hope it doesn’t cause any complications in the future ⊙﹏⊙ Tomorrow gonna work on the PCB :D cya for now! Goodnight!!!"}, {"post_id": 1030, "ts": "2026-06-02T20:27:31Z", "hours": 0.3864, "text": "DEVLOG #1 Hello everyone! Nemo here with my first ever Devlog :D I am working on one of the beginner course called the hackpad! Its going super smoothly as of now :3 I grasped the basics of PCB and Schematic making, it was hard at first because I didn’t knew the basics :p but i understood the concepts with lots of help from youtube and practice! The course feels easy to follow and I am having fun hiding secret messages on my PCB lol XD Tomorrow imma try to do some tinkering of my own like adding RGB LEDs maybe? It will be fun for sure! Cya for now!! Good Night :]"}]...
|
Title: DONUT PAD :O by @Nemo_Donut | Stardance
De Title: DONUT PAD :O by @Nemo_Donut | Stardance
Devlogs:
DEVLOG #1 Hello everyone! Nemo here with my first ever Devlog :D I am working on one of the beginner course called the hackpad! Its going super smoothly as of now :3 I grasped the basics of PCB and Schematic making, it was hard at first because I didn’t knew the basics :p but i understood the concepts with lots of help from youtube and practice! The course feels easy to follow and I am having fun hiding secret messages on my PCB lol XD Tomorrow imma try to do some tinkering of my own like adding RGB LEDs maybe? It will be fun for sure! Cya for now!! Good Night :]
DEVLOG #2 Hello everyone! Nemo here, I am back again with my second devlog!! After hours of struggling I finally completed my schematic! I learnt a better way of connecting stuff without those messy wires :p it’s called net labels it makes everything look much cleaner :) I also used the matrix method to connect the keys/switches. Also added an OLED display thingie and lots of LEDs :> Right now my biggest difficulty seems the LEDs cuz the one given in the care package doesn’t have a footprint so it kept giving me errors when I was clicking assign footprint so I had to download a new symbol and footprint for the same LED model from snapeda ;-; What I am noticing is that both tthe snapeda one and the one from the care package doesn’t have the GND pin as showed in the hackpad guide and so it kept throwing errors saying no power at the point i connected the GND to every LED. I found a easy fix for this it’s called power flag it js tells the system that GND is power and hence error gone :] Still had to assign the footprints manually… I hope it doesn’t cause any complications in the future ⊙﹏⊙ Tomorrow gonna work on the PCB :D cya for now! Goodnight!!!
DEVLOG #3 Hello everyone! Nemo here, HOLyyyy today was so dam annoying arranging PCB getting so many errors FRIKIN 161 ERRORS!!! I am frikin so cooked right now its frikin 3am sitting on this for an hour trying to solve this bug but it wont fix (╥﹏╥) First of all there was a bug with the edge cut the rectangle had some stray lines idk how that happened but I deleted those its fine now but still I am left with FRIKIN 116 ERRORS!! It keeps saying some solder aperture bug with all the LEDs from what I can comprehend it’s like one error repeating with all the LEDs and their respective pads seems like it’s saying the LED pins are too close together idk urghhh I will try solving it tomorrow because right now I am so dam sleepy ;-; So bug fixing tomorrow! Cya y’all!! Goodnight :]
DEVLOG #4 Hello y’all! Today I am feeling so damm tired ;-; Anyways today i fixed all the bugs that were occurring with my PCB well not all cause the LED aperture net link bug was too persistent so i had to just ignore it ;-; I am totally not running away from my responsibilities…. After i was done with dealing with LEDs i went for filling the whole board region with GND but it left gaps at various places hence more bugssss… luckily someone from slack helped me fix this one bug by adding lotsss of vias. Tomorrow I will start working on the case through fusion 360… I am really scared of this part cause 3D stuff ain’t easy to do ;-; Anyways cya! Goodnight!!
DEVLOG #5 Hello y’all, I am back yet again with updates on my DonutPad! So firstly I was really frustrated by those LEDs so I took a break from the PCB for one day! Played some D&D too lol xD! Today came back with a fresh mind I removed those LEDs, added a rotary encoder, made the edge cut rectangle size to 100mm x 100mm, did all the wiring yet again and finally completed the PCB!!! This time I made sure to keep the wiring very clean aka comfortable to my brain lol xD!!! I also downloaded Autodesk Fusion 360 which took heck lot of my time but no worries :p I am still figuring out the ways to use this app ;-; I am not the best when it comes to 3D stuff but imma try ma best!! Cya everyone!! Goodnight!!!
DEVLOG #6 Today I worked on the case but not much because most of my time was spent on learning this new software :p Fusion 360 was hard to integrate with hackatime so my work hours were not properly added but no worries ;-; lost 1 hour of work hour T-T I used a website called keyboard layout editor to make a layout of my macropad similar to the layout of my PCB and then I copied the raw code of the layout pasted it in another website called ai03 plate generator and it gave me a .DXF file which i imported in my fusion as a sketch layer. I wonder if i need to add a adapter step model for the rotary encoder in my case… well will think about that tomorrow. Well anyways cya!! Goodnight!!!
DEVLOG #7 Hello y’all I am back after a grind of 4 hours :p Frikin fusion 360 is so hard to understand for my bean brain sighhhhhh…. Anyways made a lot of progress on the case! I added a adapter for the rotary encoder, understood sandwich mount and the basic case is kinda done lol xD I am kinda speedrunning this ig… Gonna make the shelf tomorrow and add cool personal touch to the case! Cyaaaa!! Goooodnight!!!!
DEVLOG #8 Hello y’all I am back and today I made lots and lots of progress on the case!! I think I am very close to completing my first hackclub project!!! The case is almost done I just need to add holes for screws now and then I can ship it hopefully! I added some decals on the case and text with engraved effect :] I also changed the appearance material of the case and the plate :3 Also added Rectangular hole for the OLED display :> Things left to do are adding screw holes, and USB hole. Cya!! Gooodnight!!!
DEVLOG #9 Hellooo y’all!! I am back with a lot of progress!! First of all I completed the case added USB hole and screw holes. Finally after 4 days of fusion grinding case is done!! I even completed the final rendered photoshoot for the whole case with the PCB and the switches, encoder and the OLED. I also read through the QMK frimware tutorial how to install QMK MSYS how to setup everything took some time but finally done with the installation! Tomorrow I am gonnna try to complete DONUT PAD :O and also ship it hopefully lol xD Cyaaaa!! Gooooodnight!!!
DEVLOG #9.5 QMK MSYS installation and setup completed!
DEVLOG #10 Hello y’all I am back! Today i completed the QMK firmware part!! To me this part felt like a nightmare because I don’t have any experience with coding and stuff like that :P But after completing QMK with zero errors and .uf2 file I feel coding ain’t that hard lol xD It surely took a laaat of time but it was fun! Compiling takes like 15 minutes though RIP my potato PC X( I am planning to make my case transparent and adding some more cool designs to give some originality and uniqueness so I may hop into fusion again tomorrow :P Cyaaa!! Gooodnight!!!!
DEVLOG #11 Hello y’all!! Today I grinded like insane lmao xD but it was really fun!! I added kintsugi type design on my case plate! it was quite lot of work because drawing so many lines but it kinda felt satisfying lol xD Also I made the main body of the case the shell where the PCB sits to be transparent so it looks really cool you can see the PCB that is awesome for sure! I have started working on my github repository too so I am sure I can submit it tomorrow!! Yeppp tomorrow it is!!!! I am so excited to finally complete my first hardware project this was surely a fun grind!! Cyaaaa!!! Gooooodnight!!!!
DEVLOG #12 Hello y’all!! I am so excited to share with you that my first hack club project aka my first hardware project is finally completed!!!! Man not gonna lie I learnt a laaaat from these 2 weeks of grinding lmfao this was such a fabulous experience!! I can’t believe I am done lol xD Also this means it will be my last Devlog of DONUT PAD :p but don’t y’all worry I will be right back with another project!! Here’s the github repository link for DONUT PAD: https://github.com/adonutartist/Nemos-Hackpad-DONUT-PAD Thank you to everyone who liked my devlogs I hope I get my project approved soon so that I can receive that kit to make DONUT PAD a real thing ehehehe!! Cyaaaa!!
Build Phase #1: Got my PCB today so immediately started the build phase! Soldered all the components and assembled everything. Was pretty easy ngl let’s see how the firmware turns out I js hope all works ;-;
Build Phase #2 Completed most of firmware for all the keys and rotary encoder working… I didn’t use qmk for this cuz of its insanely high compile time idk why my lappy is js old ig but qmk takes age to compile so I js used Arduino IDE. While I was working I got this weird green line of doom despair which means my screen is slowly dieing ;-; man o man. Also i couldn’t get the OLEDA to work idk why I think it’s prolly loose solder or maybe bridging? Well tmrw imma unassemble once and check on tht
Build Phase #3 Completed the build phase first i unassembled everything and found out tht my soldering wasn’t the problem i checked with a multimeter but wht i did was greater js a soldering error. it was frikin pcb error. yeh so umm the oled thingie if u check its image on hackpad mission page u will see its pin order is down to up but wht i did in my pcb was tht the order was up to down so thts why it didnt work and reviewers didn’t even notice well its more my mistake than theirs anways so i thought maybe if i can desolder this i solder jumper wires from correct pin to its pad but naw i couldnt even desolder i tried using a desolder pump and a copper wick but it js didnt ;-; this is so dam insane!!!!! well anyways everything works except tht oled so yeh cool macropad successfully done!
Ships:
I made a macropad called the DONUT PAD (or Nemo’s Hackpad), it is a macropad that functions as game controller/game pad. It has 12 keys, 1 rotary encoder, a 128x32 OLED display, XIAO RP2040. I designed the PCB board and schematic in Kicad, the case in Fusion360, and programmed it using QMK firmware. The most challenging part was the whole project as I have no prior knowledge in PCB making or case making infact i have never even thought of making any sort of hardware lol. But I gotta with consistency and hard work you can achieve anything! If I had to point to some very difficult challenges I faced then it is probably the LEDs because Kicad kept throwing me various errors saying LED pins are too close ;-; I looked far and wide on google and youtube couldn’t solve it so I just removed those LEDs. Also making the QMK firmware was very annoying not that difficult it was just utterly annoying ;-; because it took me like 30 minutes to compile my code and stuff probably because I have a Potato PC. I am proud of the whole project because it is my first hardware project but I am exceptionally proud of the top plate design I made for my case it is inspired from kintsugi! 4 keys control the movement like a D-PAD, 4 keys funtion as the action keys, 2 keys as the left and right shoulder button and the last 2 keys as the start and select button. The rotary encoder’s click feature doesn’t work because of lack of pins but you can rotate it to change volume. The Case uses a sandwich mounting style....
|
1793238556.9150183
|
1793324956.9150183
|
|
29151
|
Circuit Bench by @Rayeet | Stardance
|
Rayeet
|
0
|
30.69
|
0
|
[]
|
[{"post_id": 19822, "ts": "202 [{"post_id": 19822, "ts": "2026-07-01T06:30:51Z", "hours": 30.6858, "text": "Circuit Bench I’ve made a website that has a bunch of different circuit simulations, if you are at all interested in circuits check it out its really user friendly! I want to eventually make a free super interactive course to teach anyone about electromagnetic physics/PCB’s, this is only the first step! That being said have fun with the simulations and give me any feedback! Website: https://circuit-bench.vercel.app/home.html Git: https://github.com/rayeedhoque-sudo/circuit-bench"}]...
|
Title: Circuit Bench by @Rayeet | Stardance
Devlo Title: Circuit Bench by @Rayeet | Stardance
Devlogs:
Circuit Bench I’ve made a website that has a bunch of different circuit simulations, if you are at all interested in circuits check it out its really user friendly! I want to eventually make a free super interactive course to teach anyone about electromagnetic physics/PCB’s, this is only the first step! That being said have fun with the simulations and give me any feedback! Website: https://circuit-bench.vercel.app/home.html Git: https://github.com/rayeedhoque-sudo/circuit-bench...
|
1792770501.9665346
|
1793375301.9665346
|
|
4450
|
JosdorOS by @dorian | Stardance
|
dorian
|
1
|
30.67
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T08:50:26Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "JosdorOS is an Operating System for Routers. Based on Debian and Rust. For the moment basic routing is working perfectly with API to interact with routerd. Routerd is a daemon built in JosdorOS that execute at the start of the System. For the moment it’s hard but not that much, it’s like learning a new language with this horrible Rust syntax", "repo": "https://github.com/Josdor-Org/JosdorOS", "demo": "https://github.com/Josdor-Org/JosdorOS/releases/tag/Alpha"}]...
|
[{"post_id": 55136, "ts": "202 [{"post_id": 55136, "ts": "2026-08-26T16:31:47Z", "hours": 9.6367, "text": "Progress on this project is improving. During development, I faced several issues with the operating system setup, so I completely revised the installation section. It was previously just a live image; now I have built an installation ISO with a process for hard drive installation. The installation functions for now, and I am still integrating the full sequence with the backend. Once everything works smoothly, I expect we will be ready for shipping ;)"}, {"post_id": 28136, "ts": "2026-07-14T07:25:16Z", "hours": 10.0308, "text": "Currently working on Vlans support for the router. For the moment nothing is working but it’s getting better. I would have preferred to do this develop later but I’m obliged to do it now as I’m already at 10 hours of working for this part. I’ve also implemented a firewall using notables"}, {"post_id": 13595, "ts": "2026-06-22T08:40:00Z", "hours": 4.1628, "text": "We can now use JosdorOS as an operating system -> ISO file avaible on Github -> Based on Debian Live ISO -> DHCP custom config ->minor Improvements"}, {"post_id": 9350, "ts": "2026-06-15T18:05:14Z", "hours": 6.5731, "text": "JosdorOS backend can now handle basic routing tasks Current features: → API endpoints to monitor backend health and configuration → Router network configuration through a POST request to /api/setup → WAN access for routed devices → Built-in DHCP server → Basic firewall configuration Still a lot to build, but the networking foundation is now working!"}]...
|
Title: JosdorOS by @dorian | Stardance
Devlogs:
J Title: JosdorOS by @dorian | Stardance
Devlogs:
JosdorOS backend can now handle basic routing tasks Current features: → API endpoints to monitor backend health and configuration → Router network configuration through a POST request to /api/setup → WAN access for routed devices → Built-in DHCP server → Basic firewall configuration Still a lot to build, but the networking foundation is now working!
We can now use JosdorOS as an operating system -> ISO file avaible on Github -> Based on Debian Live ISO -> DHCP custom config ->minor Improvements
Currently working on Vlans support for the router. For the moment nothing is working but it’s getting better. I would have preferred to do this develop later but I’m obliged to do it now as I’m already at 10 hours of working for this part. I’ve also implemented a firewall using notables
Progress on this project is improving. During development, I faced several issues with the operating system setup, so I completely revised the installation section. It was previously just a live image; now I have built an installation ISO with a process for hard drive installation. The installation functions for now, and I am still integrating the full sequence with the backend. Once everything works smoothly, I expect we will be ready for shipping ;)
Ships:
JosdorOS is an Operating System for Routers. Based on Debian and Rust. For the moment basic routing is working perfectly with API to interact with routerd. Routerd is a daemon built in JosdorOS that execute at the start of the System. For the moment it’s hard but not that much, it’s like learning a new language with this horrible Rust syntax...
|
1793224471.3529222
|
1793310871.3529222
|
|
50131
|
Vanguard SSA (Space Situational Awareness) by @Spa Vanguard SSA (Space Situational Awareness) by @SpaceRanger | Stardance...
|
SpaceRanger
|
0
|
30.61
|
0
|
[]
|
[{"post_id": 80681, "ts": "202 [{"post_id": 80681, "ts": "2026-10-18T14:11:49Z", "hours": 1.4303, "text": "Well, you can now choose your own time multiplier from between the Real world, and the app. This part was(Mostly) gemini code. I suck at math, so I had it do the calculations and stuff. I also tried to Make the earth also spin in relation to the satellites using Julian Time mathematical calculations, But i’ve not been able to achieve that. Changelog git commit -m “choose time multiplier plus earth rotation” ( a585661 ) choose time multiplier plus earth rotation ( eca1623 )"}, {"post_id": 76714, "ts": "2026-10-04T12:17:06Z", "hours": 1.9442, "text": "Changelog configured 2 way channel websocket broadcast. can now receive info from the frontend ( 2500f28 ) Yeah. That’s all. “THAT’S ALL YOU DID FOR 2 HOURS 🙆♀️”. Yeah. Keep judging. Until you try to code in RUST 😑🙂"}, {"post_id": 75998, "ts": "2026-10-01T23:58:50Z", "hours": 1.0653, "text": "Changelog Made the in App world go 60* faster than the normal time. ( be91922 ) Basically, 1 Normal second is 60 seconds in app. 1 Normal hour is 60 hours in app"}, {"post_id": 75991, "ts": "2026-10-01T21:38:25Z", "hours": 1.0053, "text": "Changelog Trajectory calculation Now uses universal timestamp ( c842228 ) Okay, Because Celestrak tracks and updates satellite data at different times, The data from the API doesn’t actually reflect the current coordinates of the satellites, especially when compared to one another. While the specific orbits were accurate, The timing was completely random, and so, if 2 satellites were recorded in the same position, 6 hours apart, My simulation will start them in the same coordinate. This is obviously dangerously inaccurate. Fix: I removed the simulated “timestep” entirely, and Built the whole thing to Check current time, Check time the satellite’s data was recorded, and Simulate Orbit/Calculate trajectory and coordinates based on that. Problem with that is, without the timestep, My previous calculation for How fast this thing can run in relation to real word time will be totally wrong. I’ll fix that next."}, {"post_id": 75982, "ts": "2026-10-01T20:30:22Z", "hours": 0.6856, "text": "Changelog Improve error handling for satellite and debris data fetching; adjust time step for simulation ( 7e7c487 ) Coming back to this after legit leaving it for One month 😭. Anyway, I fixed error handling for Cases where the user is not able to ping the Celestrak servers to get the data needed. Now It just falls back to the Cache. I also reduced the amount of time That goes by in app, to perfectly mirror the real world."}, {"post_id": 73015, "ts": "2026-09-24T07:04:21Z", "hours": 1.5769, "text": "A few different things have bugged me since last I Devlogged. For one, i’m not tntirely sure how to go on. What i need, to remove, and all. Secondly, everything is so Unorganized rn. So many debris and satellites Just swimming around in Orbit against a static Earth And everything doesn’t even scale properly. Lastly, I’ve tried to focus a bit more on Orging My own YSWS. Thank goodness stardance was extended(Expected, but thank goodness still)."}, {"post_id": 68568, "ts": "2026-09-15T10:28:11Z", "hours": 1.9689, "text": "Changelog tweaks and updates ( 7fc4786 ) Ported satellite data from backend, and introduced satellite component in frontend. ( b6b8e5d ) Meh. Frontend change. Not much."}, {"post_id": 64802, "ts": "2026-09-09T13:47:15Z", "hours": 1.9544, "text": "Changelog Updated program to include, and handle both satellite and debris Cache Data from Celestrak ( 1665273 ) Basically, Now I have 2 files of both Debris data and Satellite Data"}, {"post_id": 63937, "ts": "2026-09-08T00:39:47Z", "hours": 1.2925, "text": "Changelog Implement caching for live satellite data and adjust debris scaling for better visualization ( 0e71088 ) Okay, so remember in my last Devlog, i noted that Celestrak didn’t like me pinging their servers more than once every 2 hours, which crashes my RUST backend. So today i implemented Caching. Basically, How this works is, I check if there is a file named “active_satellites.txt”, if there is not, i go ahead and create one, and add all the satellite TLE data from Celestrak here. If there already was one, I check the MetaData for time modified, and if this is more than 2 hours, I ping Celestrak again, and Update the File with new data. If it is less than 2 hours tho, i go ahead and use the one i already HAD."}, {"post_id": 62528, "ts": "2026-09-05T23:06:15Z", "hours": 1.88, "text": "Changelog Changed from Static data to live data using celestrak Starlink APIs. ( 4a27c90 ) Okay, so i HAVE been able to Change from Static data to live data using Celestrak Starlink APIs. Doing this inSo many problems like Chunking, Parsing, RUST async/await, and doing all of that over 500 3d models without frying my CPU. Now, even tho i have been able to get it actually showing up, I need to deal with Celestrak Rate limiting, and Separating Debris from Satellites(Currently, One of the satellite is chosen to be the Satellite, and the rest are set to debris lol). I’ll fix all of this Tomorrow, FOR NOW I HAVE TO SLEEP(My girlfriend got Mad i was not sleeping enough lol 😭😂). Also fixing Scaling, as these should NOT be this big compared to the earth lol."}, {"post_id": 61809, "ts": "2026-09-04T21:53:45Z", "hours": 0.9103, "text": "Changelog Collision Detection now works on the frontend by changing to a red glow from a cyan glow. ( 81c0078 ) Okay, Massive W on this devlog. So I made collision detection show up on the frontend rather than just the Backend by enhancing my RUST functions to return a True or False value when collision is detected. I had some problems with that, cause RUST doesn’t do global variables, and trying to pass a variable from one function(The collision detector) To another(The trajectory calculation), to add a value to my struct was quite literally impossible. I had to delete one of my threads, and change my architecture from branching to linear. Oh, and I also changed the number of debris from 10 to 100, and the collision distance from 100km to 1000km to ensure collision will be detected lol."}, {"post_id": 61475, "ts": "2026-09-04T12:37:51Z", "hours": 0.7792, "text": "Changelog Add Asteroid component and GLB model for 3D visualization ( f92bbd9 ) Yay 🥳🎉. Finally have the debris models showing up. They’re really small tho, so can’t really be seennn. Lemme make them a bit bigger Done."}, {"post_id": 60702, "ts": "2026-09-03T07:58:01Z", "hours": 1.8011, "text": "Changelog Replaced 250 dynamic debris with 10 Static Debris. ( 10a6f0a ) Sighs. I promise this is not all i did for nearly 2 hours 😭🤧. I have been really battling with trying to render 3d Model Asteroids instead of red Meshes, and am having problems with Only accepting one unique item(Which means i’d have to load 10 different 4mb debris file 62 times every second PURELY ON THE FRONTEND, which would surely crash any browser in any computer lol. Severely Un-Optimised). Currently doing research On how to Handle that, Don’t wanna use gemini too much. Sadly, HackClub does not record time spent on research 😭"}, {"post_id": 60236, "ts": "2026-09-02T14:05:00Z", "hours": 2.1914, "text": "Changelog Add Debris component for visualizing debris in 3D space ( 20f3c78 ) Refactor collision detection to use dynamic debris field ( b07aa44 ) Added random coordinate generator for debris coordinates. ( 45ddcbf ) Basically, i have been working with generating debris coordinates, and Mesh visualizations for said Debris."}, {"post_id": 59950, "ts": "2026-09-02T00:43:08Z", "hours": 1.7517, "text": "Changelog Added 3d visualizations of the earth, and the ISS. ( 382c0e9 ) Basically, I Ditched the Nonsense Sphere Meshes, and added actual 3d models of the Earth and the ISS. I encountered several issues, Like scaling, and stuff. Had to make sure The ISS could be seen, While not being big enough to be a bother to the Earth. Ended up adding a glow to the satellite. Add 3D models for Earth and ISS with scaling logic"}, {"post_id": 59844, "ts": "2026-09-01T20:29:01Z", "hours": 1.5506, "text": "Changelog Added sattellite coordinates updates in the browser ( 81723a5 ) Init vanguard frontend with React and Vite setup ( a3f753c ) Started Adding the 3d implementation of a satellite(The ISS) orbiting the earth. For now, I have used Mesh spheres to test that my code works, before actually loading massive glb files. The Red satellite Mesh Sphere actually orbits the Blue Earth Mesh Sphere. THIS IS INTERESTING. NB: The prediction formula predicts the location of the ISS every second where one second is 90 seconds simulated."}, {"post_id": 59474, "ts": "2026-09-01T10:40:50Z", "hours": 0.7222, "text": "Changelog Implement WebSocket server for real-time trajectory updates. ( 6708b17 ) Basically, My RUST Program can now talk to my Browser console. It’s so cool. And it works over multiple Browsers Windows/Tabs too. Now I can add a frontend with those 3d models, and an infinite Zoomable Canvas. This is moving forward much faster than i thought."}, {"post_id": 59420, "ts": "2026-09-01T07:33:56Z", "hours": 0.9658, "text": "Changelog Added async support for frontend integration, And Used Tokio’s broadcast channel to pass messages between threads. ( daf47ad ) Okay, So…… I wanted a way to show my Output Outside if the terminal, and I chose to use a web browser, since I am already quite skilled in frontend web dev. Had to add 2 New crates. Tokio for Async/Await functions, and Axum for Web socket Functions. Had some fun reading through their documentations and Implementing Tokio’s Broadcast instead of mpsc ones. The reason i needed to change my broadcast method is cause mpsc is Single Consumer/Client, But multiple people might want to View the website at the same time"}, {"post_id": 59296, "ts": "2026-09-01T00:36:01Z", "hours": 0.6539, "text": "Changelog Implement collision detection in check_collision function using fake, Hardcoded debris coordinates ( 5b6b87f ) Okay, so I Hardcoded Debris Coordinates, and Compared it’s Predicted Coordinates to the Predicted Coordinates of My Sattelite. Cna now Predict Collision Chances, and Warn if They get too close. Also went on a Looking Spree, to Download 3d Models of Sattelites, Space Junk, and the Earth, To use in my Frontend, and Look at other Sites that do what I am aiming at like https://keeptrack.space , and https://cp4.rkas.net/?intldes=2007-012Q(Stuffin Space)."}, {"post_id": 59256, "ts": "2026-08-31T22:58:07Z", "hours": 0.3883, "text": "Changelog Added time tracking to the Telemetry state so the ISS can update coordinates based on time set. ( cf354ae ) Basically Made the Predicted Coordinates of the ISS change based on the amount of time that has passed(Simulates 90 minutes in 60 seconds)."}, {"post_id": 59133, "ts": "2026-08-31T19:18:10Z", "hours": 1.33, "text": "Changelog Add sgp4 and chrono dependencies; implement trajectory calculation for the ISS ( 4702ca4 ) Update telemetry handling and add orbital trajectory calculations ( 4cc8218 ) Basically, i can now track the Live position of the ISS, and Calculate/Predict it’s trajectory. Yay."}, {"post_id": 57691, "ts": "2026-08-29T22:39:05Z", "hours": 1.4156, "text": "Changelog Add telemetry models and refactor signal analysis and database saving functions ( 7aaf79a ) Threaded the analyse signal, and save to database functions too ( b37fc97 ) Added a thread to make sure the main loop runs without waiting for stuff… I guess ( 16c5881 ) Bad first commit. rectified ( 32b9e40 ) Basically Added Threading to the RUST Program to make sure stuff runs without waiting for something, And Multi File RUST Handling. Still only Infinitely Prints stuff to the terminal tho."}, {"post_id": 57359, "ts": "2026-08-29T14:15:58Z", "hours": 1.35, "text": "Changelog 4a6461d Basically, I wrote some functions, and a RUST struct with Mock telemetry data. Doesn’t do much rn, Just prints stuff to the terminal."}]...
|
Title: Vanguard SSA (Space Situational Awareness) Title: Vanguard SSA (Space Situational Awareness) by @SpaceRanger | Stardance
Devlogs:
Changelog 4a6461d Basically, I wrote some functions, and a RUST struct with Mock telemetry data. Doesn’t do much rn, Just prints stuff to the terminal.
Changelog Add telemetry models and refactor signal analysis and database saving functions ( 7aaf79a ) Threaded the analyse signal, and save to database functions too ( b37fc97 ) Added a thread to make sure the main loop runs without waiting for stuff… I guess ( 16c5881 ) Bad first commit. rectified ( 32b9e40 ) Basically Added Threading to the RUST Program to make sure stuff runs without waiting for something, And Multi File RUST Handling. Still only Infinitely Prints stuff to the terminal tho.
Changelog Add sgp4 and chrono dependencies; implement trajectory calculation for the ISS ( 4702ca4 ) Update telemetry handling and add orbital trajectory calculations ( 4cc8218 ) Basically, i can now track the Live position of the ISS, and Calculate/Predict it’s trajectory. Yay.
Changelog Added time tracking to the Telemetry state so the ISS can update coordinates based on time set. ( cf354ae ) Basically Made the Predicted Coordinates of the ISS change based on the amount of time that has passed(Simulates 90 minutes in 60 seconds).
Changelog Implement collision detection in check_collision function using fake, Hardcoded debris coordinates ( 5b6b87f ) Okay, so I Hardcoded Debris Coordinates, and Compared it’s Predicted Coordinates to the Predicted Coordinates of My Sattelite. Cna now Predict Collision Chances, and Warn if They get too close. Also went on a Looking Spree, to Download 3d Models of Sattelites, Space Junk, and the Earth, To use in my Frontend, and Look at other Sites that do what I am aiming at like https://keeptrack.space , and https://cp4.rkas.net/?intldes=2007-012Q(Stuffin Space).
Changelog Added async support for frontend integration, And Used Tokio’s broadcast channel to pass messages between threads. ( daf47ad ) Okay, So…… I wanted a way to show my Output Outside if the terminal, and I chose to use a web browser, since I am already quite skilled in frontend web dev. Had to add 2 New crates. Tokio for Async/Await functions, and Axum for Web socket Functions. Had some fun reading through their documentations and Implementing Tokio’s Broadcast instead of mpsc ones. The reason i needed to change my broadcast method is cause mpsc is Single Consumer/Client, But multiple people might want to View the website at the same time
Changelog Implement WebSocket server for real-time trajectory updates. ( 6708b17 ) Basically, My RUST Program can now talk to my Browser console. It’s so cool. And it works over multiple Browsers Windows/Tabs too. Now I can add a frontend with those 3d models, and an infinite Zoomable Canvas. This is moving forward much faster than i thought.
Changelog Added sattellite coordinates updates in the browser ( 81723a5 ) Init vanguard frontend with React and Vite setup ( a3f753c ) Started Adding the 3d implementation of a satellite(The ISS) orbiting the earth. For now, I have used Mesh spheres to test that my code works, before actually loading massive glb files. The Red satellite Mesh Sphere actually orbits the Blue Earth Mesh Sphere. THIS IS INTERESTING. NB: The prediction formula predicts the location of the ISS every second where one second is 90 seconds simulated.
Changelog Added 3d visualizations of the earth, and the ISS. ( 382c0e9 ) Basically, I Ditched the Nonsense Sphere Meshes, and added actual 3d models of the Earth and the ISS. I encountered several issues, Like scaling, and stuff. Had to make sure The ISS could be seen, While not being big enough to be a bother to the Earth. Ended up adding a glow to the satellite. Add 3D models for Earth and ISS with scaling logic
Changelog Add Debris component for visualizing debris in 3D space ( 20f3c78 ) Refactor collision detection to use dynamic debris field ( b07aa44 ) Added random coordinate generator for debris coordinates. ( 45ddcbf ) Basically, i have been working with generating debris coordinates, and Mesh visualizations for said Debris.
Changelog Replaced 250 dynamic debris with 10 Static Debris. ( 10a6f0a ) Sighs. I promise this is not all i did for nearly 2 hours 😭🤧. I have been really battling with trying to render 3d Model Asteroids instead of red Meshes, and am having problems with Only accepting one unique item(Which means i’d have to load 10 different 4mb debris file 62 times every second PURELY ON THE FRONTEND, which would surely crash any browser in any computer lol. Severely Un-Optimised). Currently doing research On how to Handle that, Don’t wanna use gemini too much. Sadly, HackClub does not record time spent on research 😭
Changelog Add Asteroid component and GLB model for 3D visualization ( f92bbd9 ) Yay 🥳🎉. Finally have the debris models showing up. They’re really small tho, so can’t really be seennn. Lemme make them a bit bigger Done.
Changelog Collision Detection now works on the frontend by changing to a red glow from a cyan glow. ( 81c0078 ) Okay, Massive W on this devlog. So I made collision detection show up on the frontend rather than just the Backend by enhancing my RUST functions to return a True or False value when collision is detected. I had some problems with that, cause RUST doesn’t do global variables, and trying to pass a variable from one function(The collision detector) To another(The trajectory calculation), to add a value to my struct was quite literally impossible. I had to delete one of my threads, and change my architecture from branching to linear. Oh, and I also changed the number of debris from 10 to 100, and the collision distance from 100km to 1000km to ensure collision will be detected lol.
Changelog Changed from Static data to live data using celestrak Starlink APIs. ( 4a27c90 ) Okay, so i HAVE been able to Change from Static data to live data using Celestrak Starlink APIs. Doing this inSo many problems like Chunking, Parsing, RUST async/await, and doing all of that over 500 3d models without frying my CPU. Now, even tho i have been able to get it actually showing up, I need to deal with Celestrak Rate limiting, and Separating Debris from Satellites(Currently, One of the satellite is chosen to be the Satellite, and the rest are set to debris lol). I’ll fix all of this Tomorrow, FOR NOW I HAVE TO SLEEP(My girlfriend got Mad i was not sleeping enough lol 😭😂). Also fixing Scaling, as these should NOT be this big compared to the earth lol.
Changelog Implement caching for live satellite data and adjust debris scaling for better visualization ( 0e71088 ) Okay, so remember in my last Devlog, i noted that Celestrak didn’t like me pinging their servers more than once every 2 hours, which crashes my RUST backend. So today i implemented Caching. Basically, How this works is, I check if there is a file named “active_satellites.txt”, if there is not, i go ahead and create one, and add all the satellite TLE data from Celestrak here. If there already was one, I check the MetaData for time modified, and if this is more than 2 hours, I ping Celestrak again, and Update the File with new data. If it is less than 2 hours tho, i go ahead and use the one i already HAD.
Changelog Updated program to include, and handle both satellite and debris Cache Data from Celestrak ( 1665273 ) Basically, Now I have 2 files of both Debris data and Satellite Data
Changelog tweaks and updates ( 7fc4786 ) Ported satellite data from backend, and introduced satellite component in frontend. ( b6b8e5d ) Meh. Frontend change. Not much.
A few different things have bugged me since last I Devlogged. For one, i’m not tntirely sure how to go on. What i need, to remove, and all. Secondly, everything is so Unorganized rn. So many debris and satellites Just swimming around in Orbit against a static Earth And everything doesn’t even scale properly. Lastly, I’ve tried to focus a bit more on Orging My own YSWS. Thank goodness stardance was extended(Expected, but thank goodness still).
Changelog Improve error handling for satellite and debris data fetching; adjust time step for simulation ( 7e7c487 ) Coming back to this after legit leaving it for One month 😭. Anyway, I fixed error handling for Cases where the user is not able to ping the Celestrak servers to get the data needed. Now It just falls back to the Cache. I also reduced the amount of time That goes by in app, to perfectly mirror the real world.
Changelog Trajectory calculation Now uses universal timestamp ( c842228 ) Okay, Because Celestrak tracks and updates satellite data at different times, The data from the API doesn’t actually reflect the current coordinates of the satellites, especially when compared to one another. While the specific orbits were accurate, The timing was completely random, and so, if 2 satellites were recorded in the same position, 6 hours apart, My simulation will start them in the same coordinate. This is obviously dangerously inaccurate. Fix: I removed the simulated “timestep” entirely, and Built the whole thing to Check current time, Check time the satellite’s data was recorded, and Simulate Orbit/Calculate trajectory and coordinates based on that. Problem with that is, without the timestep, My previous calculation for How fast this thing can run in relation to real word time will be totally wrong. I’ll fix that next.
Changelog Made the in App world go 60* faster than the normal time. ( be91922 ) Basically, 1 Normal second is 60 seconds in app. 1 Normal hour is 60 hours in app
Changelog configured 2 way channel websocket broadcast. can now receive info from the frontend ( 2500f28 ) Yeah. That’s all. “THAT’S ALL YOU DID FOR 2 HOURS 🙆♀️”. Yeah. Keep judging. Until you try to code in RUST 😑🙂
Well, you can now choose your own time multiplier from between the Real world, and the app. This part was(Mostly) gemini code. I suck at math, so I had it do the calculations and stuff. I also tried to Make the earth also spin in relation to the satellites using Julian Time mathematical calculations, But i’ve not been able to achieve that. Changelog git commit -m “choose time multiplier plus earth rotation” ( a585661 ) choose time multiplier plus earth rotation ( eca1623 )...
|
1792619376.7553356
|
1793224176.7553356
|
|
36441
|
Echoes of Ember by @arman | Stardance
|
arman
|
0
|
30.5
|
0
|
[]
|
[{"post_id": 67212, "ts": "202 [{"post_id": 67212, "ts": "2026-09-13T08:18:08Z", "hours": 6.2372, "text": "I MADE THE MOST ANNOYING MOB i though i should add some living mobs, started with this “moth”, which is an ememy mob. started with drawing and animation on Piskel lapse here then added it the game. i was just exaggerating that its annoying, its lowk cute but he’s supposed to be annoying and scare players 😈 along with that, i also polished the background mid-ruins asset to make the game look more alive lapse here whats next: idk js finish tutorial level asap"}, {"post_id": 58821, "ts": "2026-08-31T12:27:49Z", "hours": 8.5636, "text": "MY GAME KEEPS GETTING BETTER whats new created new roof tile asset so i can add cave sections in levels (it looks slightly off color, which i will be fixing later) As it will be for new section, there would be some hazards there too, so i came up with a water leaking tile which can certainly make the spark vanish if in contact. Drew the asset and wired up in codebase such that on every 3rd frame of hazard roof tile, a new droplet would spawn As this will be a level based game, a level selector screen was necessary. I made a rough version of it (reveal after done from my side ) Also polished some old assets watch art session: 1. Roof Tile + Droplet 2. Old assets polish whats next getting so many ideas lately but here’s what i will actually be doing: create 1 more hazard (enemy sprite) thinking of creating a sprite which will be guiding player as in beginning i wanted each level to leave something deeper in the player, like some life lesson etc. stuff, sounds amazing to add but gotta think about this more and finally once all assets in place and brainstorming done, i will be creating next levels"}, {"post_id": 55233, "ts": "2026-08-26T21:24:21Z", "hours": 4.3867, "text": "FINALLY BACK AFTER A MONTH whats new: updated menu and pause screen, highlight is that whimsical font that i got from Google Fonts (thanks to the creator) implemented level loader functionality to load level info from json file designed level 0 (0 bcz it will be tutorial level) drew frost hazard art watch art session: Frost Hazard Art what we do next: create a level selector scene which will be appearing after selecting start draw more necessary assets comlete tutorial level note: open to suggestions, pls tell in comments"}, {"post_id": 38175, "ts": "2026-07-31T13:12:25Z", "hours": 5.3581, "text": "IT DOES LOOK LIKE A GAME NOW!!! whats new: the biggest addition is the parallax background: drew 3 separate bg layers (sky, distant ruins and mid ruins). the layers repeat horizontally to create infinite loop until the max level width Watch art session here: Background Art then i drew the tiled floor art: it consists of 4 different frames placed in random order (so it doesnt look repetitive). it repeates too! Watch art session here: Foreground Art added necessary comments in the codebase files to improve readability what we do next: update the menu and pause screen draw player sprite without his hands out (for the winning state as then the fire reaches the lantern) add hazards, enemies and platforms polish the current assets (for later but yeah thats a must to-do) imp: watch the preview below and suggestions are appreciated!"}, {"post_id": 36223, "ts": "2026-07-28T05:04:10Z", "hours": 4.6917, "text": "TIME FOR BIG REVEAL!!! whats new: created the player sprite and the lantern sprite on PiskelApp watch art sessions: Player Sprite Session 1 Player Sprite Session 2 Lanten Sprite Session 1 Lantern Sprite Session 2 the fire on ember’s (player sprite) is animated, the walking animation is done too lantern stays unlit until ember interacts with it and lantern glowing animation is kinda done too implemented real platform collision and level geometry, but they need a big update!!! I used screen pixel size instead of world units, which means if my game is opened in different screen sizes, it would mess up the platforms as they position is calculated in pixels. THE FIX: Imma create my own unit for this world inside the game what we do next: Complete the art (bg, levels, hazards, platforms etc.) Re-design screens (menu screen, pause screen) heres the preview as of now:"}, {"post_id": 30647, "ts": "2026-07-18T12:02:46Z", "hours": 1.2592, "text": "I tried something different this time - Echoes of Ember what is it: an atmospheric 2D game built with Pygame CE what is the game about: still thinking about the story, but the core idea: you guide Ember, which is a spark, through shadow filled levels toward a lantern to progress. thinking of weaving in mini stories per level as it comes together. what is done till now: Initialized basic project structure Implemented a working scene manager (start, game, pause) Implemented a player block (can jump, move left and right with acceleration/friction for a smoother feel) All that wired up into main.py note: the attached clip looks choppy because it’s recorded at low FPS/resolution but the game itself runs at 60 FPS. what we do next: real platform collision and level geometry, then swapping these placeholder blocks for actual art."}]...
|
Title: Echoes of Ember by @arman | Stardance
Devl Title: Echoes of Ember by @arman | Stardance
Devlogs:
I tried something different this time - Echoes of Ember what is it: an atmospheric 2D game built with Pygame CE what is the game about: still thinking about the story, but the core idea: you guide Ember, which is a spark, through shadow filled levels toward a lantern to progress. thinking of weaving in mini stories per level as it comes together. what is done till now: Initialized basic project structure Implemented a working scene manager (start, game, pause) Implemented a player block (can jump, move left and right with acceleration/friction for a smoother feel) All that wired up into main.py note: the attached clip looks choppy because it’s recorded at low FPS/resolution but the game itself runs at 60 FPS. what we do next: real platform collision and level geometry, then swapping these placeholder blocks for actual art.
TIME FOR BIG REVEAL!!! whats new: created the player sprite and the lantern sprite on PiskelApp watch art sessions: Player Sprite Session 1 Player Sprite Session 2 Lanten Sprite Session 1 Lantern Sprite Session 2 the fire on ember’s (player sprite) is animated, the walking animation is done too lantern stays unlit until ember interacts with it and lantern glowing animation is kinda done too implemented real platform collision and level geometry, but they need a big update!!! I used screen pixel size instead of world units, which means if my game is opened in different screen sizes, it would mess up the platforms as they position is calculated in pixels. THE FIX: Imma create my own unit for this world inside the game what we do next: Complete the art (bg, levels, hazards, platforms etc.) Re-design screens (menu screen, pause screen) heres the preview as of now:
IT DOES LOOK LIKE A GAME NOW!!! whats new: the biggest addition is the parallax background: drew 3 separate bg layers (sky, distant ruins and mid ruins). the layers repeat horizontally to create infinite loop until the max level width Watch art session here: Background Art then i drew the tiled floor art: it consists of 4 different frames placed in random order (so it doesnt look repetitive). it repeates too! Watch art session here: Foreground Art added necessary comments in the codebase files to improve readability what we do next: update the menu and pause screen draw player sprite without his hands out (for the winning state as then the fire reaches the lantern) add hazards, enemies and platforms polish the current assets (for later but yeah thats a must to-do) imp: watch the preview below and suggestions are appreciated!
FINALLY BACK AFTER A MONTH whats new: updated menu and pause screen, highlight is that whimsical font that i got from Google Fonts (thanks to the creator) implemented level loader functionality to load level info from json file designed level 0 (0 bcz it will be tutorial level) drew frost hazard art watch art session: Frost Hazard Art what we do next: create a level selector scene which will be appearing after selecting start draw more necessary assets comlete tutorial level note: open to suggestions, pls tell in comments
MY GAME KEEPS GETTING BETTER whats new created new roof tile asset so i can add cave sections in levels (it looks slightly off color, which i will be fixing later) As it will be for new section, there would be some hazards there too, so i came up with a water leaking tile which can certainly make the spark vanish if in contact. Drew the asset and wired up in codebase such that on every 3rd frame of hazard roof tile, a new droplet would spawn As this will be a level based game, a level selector screen was necessary. I made a rough version of it (reveal after done from my side ) Also polished some old assets watch art session: 1. Roof Tile + Droplet 2. Old assets polish whats next getting so many ideas lately but here’s what i will actually be doing: create 1 more hazard (enemy sprite) thinking of creating a sprite which will be guiding player as in beginning i wanted each level to leave something deeper in the player, like some life lesson etc. stuff, sounds amazing to add but gotta think about this more and finally once all assets in place and brainstorming done, i will be creating next levels
I MADE THE MOST ANNOYING MOB i though i should add some living mobs, started with this “moth”, which is an ememy mob. started with drawing and animation on Piskel lapse here then added it the game. i was just exaggerating that its annoying, its lowk cute but he’s supposed to be annoying and scare players 😈 along with that, i also polished the background mid-ruins asset to make the game look more alive lapse here whats next: idk js finish tutorial level asap...
|
1793242462.0025613
|
1793847262.0025613
|
|
27764
|
my hyprland dots by @Kristiyan | Stardance
|
Kristiyan
|
1
|
30.47
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-17T20:31:15Z", "hours": 28.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "uhh, i just tried ricing hyprland, it includes for hyprland (ofc) swaync, waybar, fastfetch, kitty, rofi, starship, and wlogout, i dont know if the scripts work but i did mention i was bad at scripting, but to my knowledge the switcher.sh and install.sh(for arch users only my bad) should work fine but anyway yeah, that’s all i have for now", "repo": "https://github.com/KristiyanCodes/hyprland-dots", "demo": "https://raw.githubusercontent.com/KristiyanCodes/hyprland-dots/main/install.sh"}]...
|
[{"post_id": 75345, "ts": "202 [{"post_id": 75345, "ts": "2026-09-29T19:59:08Z", "hours": 2.4667, "text": "uhh so my ship got denied so i’m gonna just post this devlog real quick to say that i significantly improved the install.sh"}, {"post_id": 69803, "ts": "2026-09-17T20:19:46Z", "hours": 1.0989, "text": "added a simple waybar switcher, didnt manage to do mutch, im not good at scripting :("}, {"post_id": 65030, "ts": "2026-09-09T20:43:57Z", "hours": 2.2372, "text": "finished starship config, it definitely took me some time to understand at first, but in the end i thing i got it pretty clean next thing im gonna do is try to make a theme switcher and add themes to switch to though they might be generic(ofc)"}, {"post_id": 61043, "ts": "2026-09-03T19:09:18Z", "hours": 2.0, "text": "so i finished the kitty config, now i’m gonna tinker and mess around with starship until i get something i like, i don’t know how long it’ll take so if your actually following this (which i don’t really think anyone is for now) just have patience if i take long"}, {"post_id": 59808, "ts": "2026-09-01T19:17:48Z", "hours": 8.0606, "text": "finished fastfetch config, from a blank file because i don’t like the ones “fastfetch –gen-config” provides, i also made it fit in half a terminal also switched from alacritty to kitty, idk what else to say, i might add a a kitty config now"}, {"post_id": 46494, "ts": "2026-08-13T19:00:39Z", "hours": 11.0997, "text": "so i kind forgot to devlog but apart from that lets get into what changed, last devlog we were working on waybar, now waybar is fully finished, and we also added wlogout, swaync, rofi(i decided to switch from wofi to rofi), and alacritty configurations, i also added a install.sh which only works on arch for now(because im not that good at shell scripts) and my wallpaper, we also improved the README.md quite a bit (i think), and currently im working on the fastfetch configuration"}, {"post_id": 22810, "ts": "2026-07-05T12:14:37Z", "hours": 1.1997, "text": "worked on waybar’s style.css and made some changes to config.jsonc"}, {"post_id": 20407, "ts": "2026-07-02T00:21:12Z", "hours": 2.3508, "text": "mostly finished hyprland configs, all i plan to add in the future is wlogout, started working on waybar configs"}]...
|
Title: my hyprland dots by @Kristiyan | Stardance
Title: my hyprland dots by @Kristiyan | Stardance
Devlogs:
mostly finished hyprland configs, all i plan to add in the future is wlogout, started working on waybar configs
worked on waybar’s style.css and made some changes to config.jsonc
so i kind forgot to devlog but apart from that lets get into what changed, last devlog we were working on waybar, now waybar is fully finished, and we also added wlogout, swaync, rofi(i decided to switch from wofi to rofi), and alacritty configurations, i also added a install.sh which only works on arch for now(because im not that good at shell scripts) and my wallpaper, we also improved the README.md quite a bit (i think), and currently im working on the fastfetch configuration
finished fastfetch config, from a blank file because i don’t like the ones “fastfetch –gen-config” provides, i also made it fit in half a terminal also switched from alacritty to kitty, idk what else to say, i might add a a kitty config now
so i finished the kitty config, now i’m gonna tinker and mess around with starship until i get something i like, i don’t know how long it’ll take so if your actually following this (which i don’t really think anyone is for now) just have patience if i take long
finished starship config, it definitely took me some time to understand at first, but in the end i thing i got it pretty clean next thing im gonna do is try to make a theme switcher and add themes to switch to though they might be generic(ofc)
added a simple waybar switcher, didnt manage to do mutch, im not good at scripting :(
uhh so my ship got denied so i’m gonna just post this devlog real quick to say that i significantly improved the install.sh
Ships:
uhh, i just tried ricing hyprland, it includes for hyprland (ofc) swaync, waybar, fastfetch, kitty, rofi, starship, and wlogout, i dont know if the scripts work but i did mention i was bad at scripting, but to my knowledge the switcher.sh and install.sh(for arch users only my bad) should work fine but anyway yeah, that’s all i have for now...
|
1793152503.0650988
|
1793238903.0650988
|
|
2398
|
Dots by @Ivan | Stardance
|
Ivan
|
1
|
30.46
|
127
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T18:24:51Z", "hours": 28.0, "multiplier": 4.62, "payout": 127, "blessing": "neutral", "text": "I coded Dots, a paper-and-pen game that I loved playing as a kid! The game features several game modes including PvP and PvE. The game engine uses algorithms such as Minimax and Alpha-beta pruning that I learned from Sebastian Lague’s series on Chess programming.", "repo": "https://github.com/IvanMishin1/dots-pygame", "demo": "https://ivannn06.itch.io/dots"}]...
|
[{"post_id": 28326, "ts": "202 [{"post_id": 28326, "ts": "2026-07-14T14:40:14Z", "hours": 2.4639, "text": "I’ve been wanting to learn how to use Blender for quite a while which is why I decided to make an icon for Dots using this software. I found it quite complicated a first but quickly learnt the basics of how it works. Choosing the right shades of red and blue took quite a lot of time."}, {"post_id": 23001, "ts": "2026-07-05T18:16:59Z", "hours": 2.6153, "text": "Worked on the readme file and polished the game for its first ship!"}, {"post_id": 22819, "ts": "2026-07-05T12:35:52Z", "hours": 1.9203, "text": "Added a few menus to make launching the game more straightforward. Also included a short guide."}, {"post_id": 22736, "ts": "2026-07-05T09:57:45Z", "hours": 8.3325, "text": "I got inspired by Sebastian Lague’s series on Chess engines so I decided to create my own engine but for Dots. I implemented the Minimax algorithm with Alpha-beta pruning which is often used in Chess bots. It is worth mentioning that despite it’s simple nature, the computational complexity of a dots engine is WAY higher than that of a chess engine: there are about 10^40 possible positions in chess compared to 10^120 in Dots. Furthermore, there is very little documentation on Dots engines, except for one article from 2002. The image attached is a game between a depth 2 and a depth 4 engine."}, {"post_id": 5811, "ts": "2026-06-09T18:58:47Z", "hours": 2.1308, "text": "Implemented the ability to have more than 2 players! This is not part of the classical game rules but I found this variation to be very fun to play. Currently it supports up to 6 players. Implementing this functionality required me to change the way players are handled which made the code clearer."}, {"post_id": 3581, "ts": "2026-06-06T16:10:26Z", "hours": 2.8408, "text": "Fully separated the game logic from the Pygame graphical interface. I am now considering making a web version of the game using Django"}, {"post_id": 2333, "ts": "2026-06-04T19:27:44Z", "hours": 1.0664, "text": "Lost against my little sister TWICE"}, {"post_id": 2185, "ts": "2026-06-04T15:26:58Z", "hours": 1.8442, "text": "Significantly increased the precision of the dot-capturing algorithm and added a scoreboard."}, {"post_id": 1478, "ts": "2026-06-03T15:00:56Z", "hours": 5.3764, "text": "Implemented the dot-capturing algorithm. A dot is captured when it is completely surrounded by opponents’ dots. This turned out to be much more complicated than expected."}, {"post_id": 367, "ts": "2026-06-01T18:20:46Z", "hours": 1.4261, "text": "I decided to start off Stardance by coding a pen-and-paper strategy game that I loved playing as a child: Dots (aka Kropki or Tochki). First, I created a grid layout and implemented the ability to place dots."}]...
|
Title: Dots by @Ivan | Stardance
Devlogs:
I decid Title: Dots by @Ivan | Stardance
Devlogs:
I decided to start off Stardance by coding a pen-and-paper strategy game that I loved playing as a child: Dots (aka Kropki or Tochki). First, I created a grid layout and implemented the ability to place dots.
Implemented the dot-capturing algorithm. A dot is captured when it is completely surrounded by opponents’ dots. This turned out to be much more complicated than expected.
Significantly increased the precision of the dot-capturing algorithm and added a scoreboard.
Lost against my little sister TWICE
Fully separated the game logic from the Pygame graphical interface. I am now considering making a web version of the game using Django
Implemented the ability to have more than 2 players! This is not part of the classical game rules but I found this variation to be very fun to play. Currently it supports up to 6 players. Implementing this functionality required me to change the way players are handled which made the code clearer.
I got inspired by Sebastian Lague’s series on Chess engines so I decided to create my own engine but for Dots. I implemented the Minimax algorithm with Alpha-beta pruning which is often used in Chess bots. It is worth mentioning that despite it’s simple nature, the computational complexity of a dots engine is WAY higher than that of a chess engine: there are about 10^40 possible positions in chess compared to 10^120 in Dots. Furthermore, there is very little documentation on Dots engines, except for one article from 2002. The image attached is a game between a depth 2 and a depth 4 engine.
Added a few menus to make launching the game more straightforward. Also included a short guide.
Worked on the readme file and polished the game for its first ship!
I’ve been wanting to learn how to use Blender for quite a while which is why I decided to make an icon for Dots using this software. I found it quite complicated a first but quickly learnt the basics of how it works. Choosing the right shades of red and blue took quite a lot of time.
Ships:
I coded Dots, a paper-and-pen game that I loved playing as a kid! The game features several game modes including PvP and PvE. The game engine uses algorithms such as Minimax and Alpha-beta pruning that I learned from Sebastian Lague’s series on Chess programming....
|
1793109317.0699468
|
1793195717.0699468
|
|
43768
|
My awesome macropad! by @thaimin01 | Stardance
|
thaimin01
|
0
|
30.38
|
0
|
[]
|
[{"post_id": 65235, "ts": "202 [{"post_id": 65235, "ts": "2026-09-10T07:10:19Z", "hours": 1.3, "text": "So today i decided to fix the case bacaus ethe clearence between the keycaps and the lid is too small"}, {"post_id": 61376, "ts": "2026-09-04T08:07:13Z", "hours": 2.0167, "text": "THE GRAND OVERHAUL STATUS: COMPLETED So i completely remad the macropad from scratch and today, I am done with my cad It’s simple but its gonna get me to the victory The only guy with 30 hrs of working on the easiest challenge"}, {"post_id": 61274, "ts": "2026-09-04T03:55:41Z", "hours": 1.9, "text": "The only guy to spend almost 30 hours just to make the easiest thing in the world So, today i started cading, I got it almost finished It’s cool ig After that, i wiil claim my hackpad kit It’s like telling someone who’s never seen a dog before and tell them to draw it"}, {"post_id": 60775, "ts": "2026-09-03T11:26:43Z", "hours": 0.8667, "text": "TS gonna be long, I don’t like it here It’s like telling someone who’s lost, and then tell them to do it all over again So, I retraced because the pcb was too long, the trace was better than last one ans now it’s compact as hell 🥶🥶🥶"}, {"post_id": 60715, "ts": "2026-09-03T08:40:38Z", "hours": 3.15, "text": "No, not done yet Gng, I’m tired So, the fact that i underutilized the material had made me went on the computer and redesign everything myself, plus it is almost school time made it even more rush. But whatever, I got the pcb done and other stuff"}, {"post_id": 56427, "ts": "2026-08-28T06:03:28Z", "hours": 6.3169, "text": "Ah yes, I can finally post after it synced up So, yesterday, i finished my case, but I realized that the kit comes with M3 screw not M2 screw, the fact that they come with the seed instaed of the Waveshare Zero just made me think that My project is kinda underutilised. And the cad ? the pcb? I would have to source everything 😭😭😭😭😭😭 So pls before reviewing and accept it pls let me have one more chance to take full advantage of the material"}, {"post_id": 54410, "ts": "2026-08-25T12:39:40Z", "hours": 0.3333, "text": "EH EH EMERGENCY FIX !!!1111111!!! So apparently, I got the hotswap socket and the footprint being in the wrong way around so I have to fix it before someone review it. Dw guys, I fixed it, update the repo"}, {"post_id": 53579, "ts": "2026-08-24T05:37:47Z", "hours": 0.9667, "text": "Finished the case, update the readme, blah blah blah"}, {"post_id": 52090, "ts": "2026-08-22T05:02:28Z", "hours": 1.6, "text": "Started to design the case: Omg it’s laggy as hell bruh, Its half done Cant even find a way to make the usb port hole"}, {"post_id": 51452, "ts": "2026-08-21T05:28:57Z", "hours": 1.1833, "text": "Whatever this devlog is: so I added .stp file in my pcb and update the github repo before designing my case so it can be more accurate"}, {"post_id": 49366, "ts": "2026-08-18T04:36:45Z", "hours": 0.5167, "text": "tryna learn how to 3d design but too complicated ask my parents for a laptop but they disagree due to some unreasonable reason like: gaming all day, hard to manage. They dont understand me at all"}, {"post_id": 41795, "ts": "2026-08-06T06:35:01Z", "hours": 0.3228, "text": "dont do anything much, took a break"}, {"post_id": 41724, "ts": "2026-08-06T03:41:15Z", "hours": 1.4, "text": "Devlog 6: It’s ready for submit now ! thanks gemini for helping me with the code, and now its done"}, {"post_id": 41238, "ts": "2026-08-05T10:05:51Z", "hours": 2.2228, "text": "Devlog 5: my first prototype, though the code isnt finish yet but i built a base"}, {"post_id": 41169, "ts": "2026-08-05T06:26:42Z", "hours": 2.6333, "text": "Devlog 4: i decided to ditch the entire battery system since it is way more complicated than i thought, and there we go finished PCB"}, {"post_id": 40779, "ts": "2026-08-04T15:11:21Z", "hours": 2.2833, "text": "Devlog 3: a lot of problem but i have decide that i am going to use the Waveshare RP2040-Zero, few tired as hell"}, {"post_id": 40698, "ts": "2026-08-04T12:02:03Z", "hours": 0.4142, "text": "Devlog 2: finished schematic"}, {"post_id": 40682, "ts": "2026-08-04T11:29:32Z", "hours": 0.9547, "text": "Devlog 1: ooooh, its going great"}]...
|
Title: My awesome macropad! by @thaimin01 | Starda Title: My awesome macropad! by @thaimin01 | Stardance
Devlogs:
Devlog 1: ooooh, its going great
Devlog 2: finished schematic
Devlog 3: a lot of problem but i have decide that i am going to use the Waveshare RP2040-Zero, few tired as hell
Devlog 4: i decided to ditch the entire battery system since it is way more complicated than i thought, and there we go finished PCB
Devlog 5: my first prototype, though the code isnt finish yet but i built a base
Devlog 6: It’s ready for submit now ! thanks gemini for helping me with the code, and now its done
dont do anything much, took a break
tryna learn how to 3d design but too complicated ask my parents for a laptop but they disagree due to some unreasonable reason like: gaming all day, hard to manage. They dont understand me at all
Whatever this devlog is: so I added .stp file in my pcb and update the github repo before designing my case so it can be more accurate
Started to design the case: Omg it’s laggy as hell bruh, Its half done Cant even find a way to make the usb port hole
Finished the case, update the readme, blah blah blah
EH EH EMERGENCY FIX !!!1111111!!! So apparently, I got the hotswap socket and the footprint being in the wrong way around so I have to fix it before someone review it. Dw guys, I fixed it, update the repo
Ah yes, I can finally post after it synced up So, yesterday, i finished my case, but I realized that the kit comes with M3 screw not M2 screw, the fact that they come with the seed instaed of the Waveshare Zero just made me think that My project is kinda underutilised. And the cad ? the pcb? I would have to source everything 😭😭😭😭😭😭 So pls before reviewing and accept it pls let me have one more chance to take full advantage of the material
No, not done yet Gng, I’m tired So, the fact that i underutilized the material had made me went on the computer and redesign everything myself, plus it is almost school time made it even more rush. But whatever, I got the pcb done and other stuff
TS gonna be long, I don’t like it here It’s like telling someone who’s lost, and then tell them to do it all over again So, I retraced because the pcb was too long, the trace was better than last one ans now it’s compact as hell 🥶🥶🥶
The only guy to spend almost 30 hours just to make the easiest thing in the world So, today i started cading, I got it almost finished It’s cool ig After that, i wiil claim my hackpad kit It’s like telling someone who’s never seen a dog before and tell them to draw it
THE GRAND OVERHAUL STATUS: COMPLETED So i completely remad the macropad from scratch and today, I am done with my cad It’s simple but its gonna get me to the victory The only guy with 30 hrs of working on the easiest challenge
So today i decided to fix the case bacaus ethe clearence between the keycaps and the lid is too small...
|
1793238534.749003
|
1793843334.749003
|
|
42792
|
plantControl by @Kende | Stardance
|
Kende
|
0
|
30.37
|
0
|
[]
|
[{"post_id": 55409, "ts": "202 [{"post_id": 55409, "ts": "2026-08-27T06:56:54Z", "hours": 3.6319, "text": "devlog #9 - last steps of the designing Yesterday i finished the designing. This is what i done: add some silkscreen to the PCB so it will be easy to wire it written the README.md but that recording is lost in the shadowlands Programmed the main part of the firmware what i have to done today: program the screen submit the project for founding you can read the repo here: https://github.com/csuszcukk/plantcontrol/"}, {"post_id": 52251, "ts": "2026-08-22T10:53:28Z", "hours": 3.4683, "text": "Devlog #8 - Finishing the 3D modelling What I done: redesigned the main boards cover designed the water container designed a metal sheet for the LEDs so they can cool cleaned the repo What i have tho done in the future: make the usb-c on the main board to not be a separate module make the light, temp. and humidity sensor board to a different pcb write the firmware to the esp32 print the 3D models"}, {"post_id": 46554, "ts": "2026-08-13T21:30:32Z", "hours": 7.4989, "text": "Devlog #7 - Sufering with cad and redesigning the power input for the board So i started designing the container for the main board… At first i try to do a cirlular shape but after a hour of trying achive that the usb-c port is looking good from the outside i designed a rectegular shape for the main boards box what will be on the side of the pot. the pot will be allso square like because from now i hate circles. i think i will make the pot doubel layerd and in the inner air i can lead trouh the cabels. I think its enought for now because its half midnight."}, {"post_id": 45413, "ts": "2026-08-11T20:55:57Z", "hours": 2.2003, "text": "Devlog #7 - cleaning the pcb and suffering from cad i found some mistakes on the board so i cleaned it. i also added some silksrceen writhing to the screw terminals so everyone will know where to put the wires. I try to 3dprint the board but it fails because the filament don’t turned."}, {"post_id": 44498, "ts": "2026-08-10T09:29:35Z", "hours": 1.7833, "text": "devlog #6 - finished the pcb I added some graphics what i drew before. and started to writer the README i also wanted to 3d print the board so i can take the sizes easier."}, {"post_id": 44464, "ts": "2026-08-10T07:20:33Z", "hours": 4.9336, "text": "devlog #5 - Layout and some art I started designing the pcb layout. it was not that hard with 4 layers. I use the top and bottom layer for wires and the midel layers for power and Gnd so i can just place a via everywhere where i need power Or gnd. I also added v-cut to the light light and air temp. and humidity sensor it so i can simply break of this. I also started making some art to the pcb. i designed some electric flower and a robot arm what is watering a plant."}, {"post_id": 42047, "ts": "2026-08-06T16:35:47Z", "hours": 3.1167, "text": "devlog #4 - Finishing the shematic and the BOM That was a LOT of work but i done with it. firstly i redesigned the relay circuit because the replaced one was an ESP32 fryer machine because I just connect it directly to the soc i added a transistor and a diode for it. then i made the shematic hierarhic i don’t know at this point why I done it but the repo i now fatter than before. after that i designed a usb-c port for the power i still don’t know how i will power the pump. I added the partnumbers to the bom and the footprints. i still search for some parts but i dont hawe any more energy."}, {"post_id": 41827, "ts": "2026-08-06T08:57:10Z", "hours": 0.7167, "text": "devlog #3 - designing and finishing the shematic Yesterday i finished the shematic with the circuit of the MOSFET and merging it to the main branch. i want to make a devlog at that point but the time was under 15 minutes. Today i start to design the pot and started to thinking about a special sensor what measures the plants health with an infra led and receiver. I hope there will be an another devlog today but i don’t promise anything."}, {"post_id": 41208, "ts": "2026-08-05T09:06:45Z", "hours": 0.7167, "text": "Devlog #2 - cleaning and redesigning Yesterday I was thinking about how can i make the LEDs dim. the solution i came up with an idea to use a MOSFET. Most of the time i was searching for a circuit for the MOSFET. At the rest of the time I cleaned the shematic and i also want to start to add the MOSFET but i don’t have enough energy"}, {"post_id": 39657, "ts": "2026-08-02T19:40:43Z", "hours": 1.4167, "text": "devlog #1 - Designing the shematic I worked on the shematic of the controller board. I also find a good screen for the project so i can give a face to this smart plant pot what can display the data and and give it personality. the onli problem is that i only found an SPi one so i need to manage a lot of wires. i can’t do any good pics in this stage because there is only files about this projects so i just atached a picture of the shematic."}, {"post_id": 39439, "ts": "2026-08-02T12:04:26Z", "hours": 0.8833, "text": "planing and drafting - Devlog #0 Hi everyone! that is my first devlog for this project. To this point I: started planing in Canva made a BOM to write down what parts i need for it and what i need to put on the shematic in the futher start searching for the parts"}]...
|
Title: plantControl by @Kende | Stardance
Devlogs Title: plantControl by @Kende | Stardance
Devlogs:
planing and drafting - Devlog #0 Hi everyone! that is my first devlog for this project. To this point I: started planing in Canva made a BOM to write down what parts i need for it and what i need to put on the shematic in the futher start searching for the parts
devlog #1 - Designing the shematic I worked on the shematic of the controller board. I also find a good screen for the project so i can give a face to this smart plant pot what can display the data and and give it personality. the onli problem is that i only found an SPi one so i need to manage a lot of wires. i can’t do any good pics in this stage because there is only files about this projects so i just atached a picture of the shematic.
Devlog #2 - cleaning and redesigning Yesterday I was thinking about how can i make the LEDs dim. the solution i came up with an idea to use a MOSFET. Most of the time i was searching for a circuit for the MOSFET. At the rest of the time I cleaned the shematic and i also want to start to add the MOSFET but i don’t have enough energy
devlog #3 - designing and finishing the shematic Yesterday i finished the shematic with the circuit of the MOSFET and merging it to the main branch. i want to make a devlog at that point but the time was under 15 minutes. Today i start to design the pot and started to thinking about a special sensor what measures the plants health with an infra led and receiver. I hope there will be an another devlog today but i don’t promise anything.
devlog #4 - Finishing the shematic and the BOM That was a LOT of work but i done with it. firstly i redesigned the relay circuit because the replaced one was an ESP32 fryer machine because I just connect it directly to the soc i added a transistor and a diode for it. then i made the shematic hierarhic i don’t know at this point why I done it but the repo i now fatter than before. after that i designed a usb-c port for the power i still don’t know how i will power the pump. I added the partnumbers to the bom and the footprints. i still search for some parts but i dont hawe any more energy.
devlog #5 - Layout and some art I started designing the pcb layout. it was not that hard with 4 layers. I use the top and bottom layer for wires and the midel layers for power and Gnd so i can just place a via everywhere where i need power Or gnd. I also added v-cut to the light light and air temp. and humidity sensor it so i can simply break of this. I also started making some art to the pcb. i designed some electric flower and a robot arm what is watering a plant.
devlog #6 - finished the pcb I added some graphics what i drew before. and started to writer the README i also wanted to 3d print the board so i can take the sizes easier.
Devlog #7 - cleaning the pcb and suffering from cad i found some mistakes on the board so i cleaned it. i also added some silksrceen writhing to the screw terminals so everyone will know where to put the wires. I try to 3dprint the board but it fails because the filament don’t turned.
Devlog #7 - Sufering with cad and redesigning the power input for the board So i started designing the container for the main board… At first i try to do a cirlular shape but after a hour of trying achive that the usb-c port is looking good from the outside i designed a rectegular shape for the main boards box what will be on the side of the pot. the pot will be allso square like because from now i hate circles. i think i will make the pot doubel layerd and in the inner air i can lead trouh the cabels. I think its enought for now because its half midnight.
Devlog #8 - Finishing the 3D modelling What I done: redesigned the main boards cover designed the water container designed a metal sheet for the LEDs so they can cool cleaned the repo What i have tho done in the future: make the usb-c on the main board to not be a separate module make the light, temp. and humidity sensor board to a different pcb write the firmware to the esp32 print the 3D models
devlog #9 - last steps of the designing Yesterday i finished the designing. This is what i done: add some silkscreen to the PCB so it will be easy to wire it written the README.md but that recording is lost in the shadowlands Programmed the main part of the firmware what i have to done today: program the screen submit the project for founding you can read the repo here: https://github.com/csuszcukk/plantcontrol/...
|
1793188494.0657322
|
1793793294.0657322
|
|
53734
|
Colouto by @prakit | Stardance
|
|
1
|
30.37
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T09:58:28Z", "hours": 26.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A Krita plugin that pulls a color out of your artistic drawing!", "repo": "https://github.com/zenformality/colouto", "demo": "https://github.com/zenformality/colouto/releases/tag/1.0.3"}]...
|
[{"post_id": 59003, "ts": "202 [{"post_id": 59003, "ts": "2026-08-31T16:09:53Z", "hours": 0.5256, "text": "1/4th of the feature is complete !! winding up for today! new sneak peak –>"}, {"post_id": 58962, "ts": "2026-08-31T15:01:38Z", "hours": 0.8108, "text": "New features upcoming again!! its gonna be a lot sick this time cause it would a really useful feature for colouto that will also make it differ from the usual color palette gens !"}, {"post_id": 58131, "ts": "2026-08-30T14:19:22Z", "hours": 1.5175, "text": "Now colouto also has colour history, blend, sort, changelog, screenshot !! ( DEV LOG - 8)"}, {"post_id": 57959, "ts": "2026-08-30T09:19:48Z", "hours": 1.1664, "text": "New features incoming ( dev log 7)"}, {"post_id": 57305, "ts": "2026-08-29T12:46:35Z", "hours": 0.3536, "text": "implementing an advanced palette generation system ( trying to improve the accuracy)"}, {"post_id": 57202, "ts": "2026-08-29T09:48:14Z", "hours": 7.7511, "text": "made the ui animated + fixed minor bugs ( DEV LOG- 6)"}, {"post_id": 54333, "ts": "2026-08-25T09:10:24Z", "hours": 4.1569, "text": "fixed bugs in “pull from canvas” button ( DEV LOG 5) the functioning of the app is now almost perfect but the bug hunting would continue until i am satisfied. released the build in github - check it out."}, {"post_id": 54185, "ts": "2026-08-25T01:56:33Z", "hours": 5.7403, "text": "Fixed major bugs in the plugin ( DEVLOG - 4) includes even the ui design of the plugin ( fx.py )"}, {"post_id": 53858, "ts": "2026-08-24T15:45:55Z", "hours": 1.5611, "text": "Added some animations to the UI of the plugin and Also added an welcome + tutorial guide windows for new users ( DEVLOG - 3) it fully works on linux currently , windows is functionable as well , mac is still not confirmed Next step is to create a logo + a better functionality to the app ( make the codebase more clean)"}, {"post_id": 53773, "ts": "2026-08-24T13:49:31Z", "hours": 0.6431, "text": "Added installation scripts for windows and mac ( DEVLOG - 2) created two scripts installation.bat and installation.command for windows and mac The setup files for installing the extension is released in github for beta purposes , I would be grateful if you try it out and give me a feedback :) link -> colouto"}, {"post_id": 53756, "ts": "2026-08-24T13:07:44Z", "hours": 6.0639, "text": "Initialised the barebone ( working ) of the plugin. (DEVLOG - 1) Its basically a plugin which like pulls out a palette out of your painting or portrait -> it supports saving and loading of gimp ( gpl ) files currently. installation file ( install.sh) for linux!"}]...
|
Title: Colouto by @prakit | Stardance
Devlogs:
In Title: Colouto by @prakit | Stardance
Devlogs:
Initialised the barebone ( working ) of the plugin. (DEVLOG - 1) Its basically a plugin which like pulls out a palette out of your painting or portrait -> it supports saving and loading of gimp ( gpl ) files currently. installation file ( install.sh) for linux!
Added installation scripts for windows and mac ( DEVLOG - 2) created two scripts installation.bat and installation.command for windows and mac The setup files for installing the extension is released in github for beta purposes , I would be grateful if you try it out and give me a feedback :) link -> colouto
Added some animations to the UI of the plugin and Also added an welcome + tutorial guide windows for new users ( DEVLOG - 3) it fully works on linux currently , windows is functionable as well , mac is still not confirmed Next step is to create a logo + a better functionality to the app ( make the codebase more clean)
Fixed major bugs in the plugin ( DEVLOG - 4) includes even the ui design of the plugin ( fx.py )
fixed bugs in “pull from canvas” button ( DEV LOG 5) the functioning of the app is now almost perfect but the bug hunting would continue until i am satisfied. released the build in github - check it out.
made the ui animated + fixed minor bugs ( DEV LOG- 6)
implementing an advanced palette generation system ( trying to improve the accuracy)
New features incoming ( dev log 7)
Now colouto also has colour history, blend, sort, changelog, screenshot !! ( DEV LOG - 8)
New features upcoming again!! its gonna be a lot sick this time cause it would a really useful feature for colouto that will also make it differ from the usual color palette gens !
1/4th of the feature is complete !! winding up for today! new sneak peak –>
Ships:
A Krita plugin that pulls a color out of your artistic drawing!...
|
1792878824.4404273
|
1793742824.4404273
|
|
52554
|
Mini Humanoid Robot by @elliottn | Stardance
|
elliottn
|
0
|
30.33
|
0
|
[]
|
[{"post_id": 80739, "ts": "202 [{"post_id": 80739, "ts": "2026-10-18T17:37:22Z", "hours": 8.8961, "text": "Log #7 Worked more on robot movements to convert optimized RL sim movements to pre-programmed actions. Quickly built a vibe-coded website for the product."}, {"post_id": 76987, "ts": "2026-10-05T08:14:46Z", "hours": 3.7881, "text": "Log #6 I got my robot up and running in the simulator with a reinforcement learning algorithm from Claude. Hopefully I can have all functions be simulated and copied to the real world."}, {"post_id": 74585, "ts": "2026-09-27T17:55:45Z", "hours": 1.8083, "text": "Log #5 Got my URDF working in sim somewhat."}, {"post_id": 74255, "ts": "2026-09-27T02:35:34Z", "hours": 1.9289, "text": "Log #4 Finally got a URDF with the pieces in the right place, but its just really big when put into a web URDF viewer."}, {"post_id": 74227, "ts": "2026-09-27T00:09:17Z", "hours": 7.6606, "text": "Log #3 Even though the robot is completely built, I am still yet to figure out creating a URDF so I can simulate a physical environment on my computer. So, here’s a pic of the robot saying hi!"}, {"post_id": 59262, "ts": "2026-08-31T23:08:20Z", "hours": 5.2, "text": "Log #2 - Tried to make a URDF but failed. Only have a jointed model for now."}, {"post_id": 56902, "ts": "2026-08-28T22:20:22Z", "hours": 1.05, "text": "Log #1"}]...
|
Title: Mini Humanoid Robot by @elliottn | Stardanc Title: Mini Humanoid Robot by @elliottn | Stardance
Devlogs:
Log #1
Log #2 - Tried to make a URDF but failed. Only have a jointed model for now.
Log #3 Even though the robot is completely built, I am still yet to figure out creating a URDF so I can simulate a physical environment on my computer. So, here’s a pic of the robot saying hi!
Log #4 Finally got a URDF with the pieces in the right place, but its just really big when put into a web URDF viewer.
Log #5 Got my URDF working in sim somewhat.
Log #6 I got my robot up and running in the simulator with a reinforcement learning algorithm from Claude. Hopefully I can have all functions be simulated and copied to the real world.
Log #7 Worked more on robot movements to convert optimized RL sim movements to pre-programmed actions. Quickly built a vibe-coded website for the product....
|
1792713104.4769902
|
1793317904.4769902
|
|
23596
|
Chess.com Style Game Reviewer by @cziwu2010 | Star Chess.com Style Game Reviewer by @cziwu2010 | Stardance...
|
cziwu2010
|
1
|
30.32
|
159
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T10:24:39Z", "hours": 30.0, "multiplier": 6.32, "payout": 159, "blessing": "neutral", "text": "My attempt at building a chess.com style reviewer. It uses python for the backend and pyside6 for the frontend and Stockfish for the engine. The hardest part was learning the chess concepts and understanding chess computation. Also this is my first project with a frontend so I’m also looking forward to programme more apps with frontend. Just download and extract the zip file to run the application (Note that windows will pop up the “Windows protected your PC” window bcs I dont have a Code Signing Certificate, if that happens just click “Run Anyway”. Msg me on slack if you have feedback! (this is the only screenshot i have, so sry it looks all the same)", "repo": "https://github.com/cziwu12/chess.com-style-reviewer", "demo": "https://github.com/cziwu12/chess.com-style-reviewer/releases/tag/v1.0.0"}]...
|
[{"post_id": 31175, "ts": "202 [{"post_id": 31175, "ts": "2026-07-19T11:20:37Z", "hours": 0.3222, "text": "Ok so apparently I have to write a final devlog before shipping so here’s what my next steps for the reviewer. 1. Improve the Game Accuracy and Classification function. 2. Find critical moments/moves where it heavily affected the game’s outcome. As for the frontend: Add next and previous move buttons. Add an interactable chess board where the player can change a move to see the different outcome. Obviously there’s more but these are the step ill prob take next."}, {"post_id": 31153, "ts": "2026-07-19T10:13:41Z", "hours": 3.2336, "text": "Almost done! My attempt to program a chess.com style reviewer. It has the basic stats like evaluation, Classification, WDL and move accuracy. It also contains game accuracy and a SVG board where you can see your moves. It’s currently in its rawest form and I’ll improve the accuracy of the reviewer and add more useful feature to it."}, {"post_id": 29393, "ts": "2026-07-16T10:06:34Z", "hours": 2.7267, "text": "Frontend 90% done. Using PySide6"}, {"post_id": 28350, "ts": "2026-07-14T15:42:45Z", "hours": 1.0925, "text": "Last but not least, the UI. I’ll be coding it using PySide6. Im currently still learning how to use the language."}, {"post_id": 27660, "ts": "2026-07-13T12:59:03Z", "hours": 8.1008, "text": "Ok i dont really have a photo rn (using phone to type the devlog) but i’ve formatted, simplified and and created files to store all of the functions. All that’s left to do is add GUI. Ill prob add a photo tmr"}, {"post_id": 24450, "ts": "2026-07-08T00:38:44Z", "hours": 13.8867, "text": "I would say I’m 85% done with the backend of the chess reviewer. I added move and game accuracy, WDL (Win/Draw/Loss) probability and some tactics detection like hanging pieces, loose pieces, and pieces en prise. I even managed to find publicly available equations that yield results similar to Chess.com. My next steps would be adding the basic classifications and tactics detection before adding gui."}, {"post_id": 16315, "ts": "2026-06-26T15:29:56Z", "hours": 0.5181, "text": "in progress. Aiming to build a chess.com style reviewer. Using python-chess and stockfish to build this. Also any tutorials on the python chess lib other than the documentation? thanks"}]...
|
Title: Chess.com Style Game Reviewer by @cziwu2010 Title: Chess.com Style Game Reviewer by @cziwu2010 | Stardance
Devlogs:
in progress. Aiming to build a chess.com style reviewer. Using python-chess and stockfish to build this. Also any tutorials on the python chess lib other than the documentation? thanks
I would say I’m 85% done with the backend of the chess reviewer. I added move and game accuracy, WDL (Win/Draw/Loss) probability and some tactics detection like hanging pieces, loose pieces, and pieces en prise. I even managed to find publicly available equations that yield results similar to Chess.com. My next steps would be adding the basic classifications and tactics detection before adding gui.
Ok i dont really have a photo rn (using phone to type the devlog) but i’ve formatted, simplified and and created files to store all of the functions. All that’s left to do is add GUI. Ill prob add a photo tmr
Last but not least, the UI. I’ll be coding it using PySide6. Im currently still learning how to use the language.
Frontend 90% done. Using PySide6
Almost done! My attempt to program a chess.com style reviewer. It has the basic stats like evaluation, Classification, WDL and move accuracy. It also contains game accuracy and a SVG board where you can see your moves. It’s currently in its rawest form and I’ll improve the accuracy of the reviewer and add more useful feature to it.
Ok so apparently I have to write a final devlog before shipping so here’s what my next steps for the reviewer. 1. Improve the Game Accuracy and Classification function. 2. Find critical moments/moves where it heavily affected the game’s outcome. As for the frontend: Add next and previous move buttons. Add an interactable chess board where the player can change a move to see the different outcome. Obviously there’s more but these are the step ill prob take next.
Ships:
My attempt at building a chess.com style reviewer. It uses python for the backend and pyside6 for the frontend and Stockfish for the engine. The hardest part was learning the chess concepts and understanding chess computation. Also this is my first project with a frontend so I’m also looking forward to programme more apps with frontend. Just download and extract the zip file to run the application (Note that windows will pop up the “Windows protected your PC” window bcs I dont have a Code Signing Certificate, if that happens just click “Run Anyway”. Msg me on slack if you have feedback! (this is the only screenshot i have, so sry it looks all the same)...
|
1793220851.1575696
|
1793307251.1575696
|
|
70409
|
Everturn by @Leon_know | Stardance
|
Leon_know
|
0
|
30.29
|
0
|
[]
|
[{"post_id": 82864, "ts": "202 [{"post_id": 82864, "ts": "2026-10-26T03:08:09Z", "hours": 8.0781, "text": "Everturn Log 3 Finished the maze generation code, added scores and coins, increased the level speed over time, and started creating skins. Also, I need sleep, maybe."}, {"post_id": 82103, "ts": "2026-10-23T22:01:55Z", "hours": 5.6564, "text": "Everturn Log 3 Duck is moving in an infinite maze now! I just have to fine tune it."}, {"post_id": 81882, "ts": "2026-10-22T20:45:32Z", "hours": 5.7592, "text": "Everturn Log2 Today I implemented player movement, animation functions like panning and fading in/out, and screen locking. That’s about it."}, {"post_id": 81659, "ts": "2026-10-21T23:03:44Z", "hours": 5.3567, "text": "Everturn log1 I moved to Excel and VBA for the game, and I’m also using Aseprite to remake my assets. I’m still gathering ideas to make this game more interesting than just a simple maze solving game."}, {"post_id": 81045, "ts": "2026-10-19T17:27:53Z", "hours": 3.2508, "text": "Code I was trying to set up code in Figma, but it requires a premium plan or an AI agent, so I started manually creating each frame. After an hour, I’m still not finished with the first level, so I’m rethinking my software of choice."}, {"post_id": 80850, "ts": "2026-10-19T00:42:15Z", "hours": 2.1847, "text": "Duck? I didn’t sleep at all this night because I was making these handmade icons for a game I plan to finish tomorrow. How do you like them?"}]...
|
Title: Everturn by @Leon_know | Stardance
Devlogs Title: Everturn by @Leon_know | Stardance
Devlogs:
Duck? I didn’t sleep at all this night because I was making these handmade icons for a game I plan to finish tomorrow. How do you like them?
Code I was trying to set up code in Figma, but it requires a premium plan or an AI agent, so I started manually creating each frame. After an hour, I’m still not finished with the first level, so I’m rethinking my software of choice.
Everturn log1 I moved to Excel and VBA for the game, and I’m also using Aseprite to remake my assets. I’m still gathering ideas to make this game more interesting than just a simple maze solving game.
Everturn Log2 Today I implemented player movement, animation functions like panning and fading in/out, and screen locking. That’s about it.
Everturn Log 3 Duck is moving in an infinite maze now! I just have to fine tune it.
Everturn Log 3 Finished the maze generation code, added scores and coins, increased the level speed over time, and started creating skins. Also, I need sleep, maybe....
|
1793008417.3378868
|
1793613217.3378868
|
|
45483
|
Poc-mp3 by @thaimin01 | Stardance
|
thaimin01
|
0
|
30.28
|
0
|
[]
|
[{"post_id": 73903, "ts": "202 [{"post_id": 73903, "ts": "2026-09-26T09:18:25Z", "hours": 1.65, "text": "Did some tweaks to the BOM and the csv gosh i hate exceling"}, {"post_id": 72568, "ts": "2026-09-23T07:41:37Z", "hours": 1.2333, "text": "Man, all i did was bullshitting around for a whole hour"}, {"post_id": 72130, "ts": "2026-09-22T07:56:16Z", "hours": 1.0333, "text": "WTH AM I DOING So i decided to start coding today but it barely do anthing. All i did was #define the pins and.. ye thats it…."}, {"post_id": 71649, "ts": "2026-09-21T07:33:19Z", "hours": 0.6942, "text": "GUYS HELP So i started coding today, just for it to be empty AND WORSE I DONT KHOW HOW TO CODE"}, {"post_id": 71206, "ts": "2026-09-20T13:22:34Z", "hours": 1.9392, "text": "I FINISHED THE PCB HOORAY !!111! SPAGHETTI TRACING IMBALANCE TRACE VIAS SLOP AND NOT GOING TO PASS THE EMC TEST"}, {"post_id": 70462, "ts": "2026-09-19T07:31:22Z", "hours": 2.0333, "text": "uhhh, I dont really khow what to say but the pcb routing is almost finished"}, {"post_id": 69997, "ts": "2026-09-18T07:13:17Z", "hours": 1.9836, "text": "Welcome people To my high quality human slop Spaghetti tracing And i dont khow if it will work or not YAY !1!!!11!!11!"}, {"post_id": 69507, "ts": "2026-09-17T06:22:06Z", "hours": 0.9333, "text": "What the hell ??? Which component goes to which component ??? I am kirkenuienly confused 💀💀💀💀💀"}, {"post_id": 69021, "ts": "2026-09-16T07:11:50Z", "hours": 1.6833, "text": "So I got a simple PCB layout today and connect most of the GND, Well it just that’s it"}, {"post_id": 68481, "ts": "2026-09-15T06:18:19Z", "hours": 0.6667, "text": "I didnt do anything much today rather than adding the auto detection for the micro sd card, and assigning 3d model for the footprint"}, {"post_id": 67917, "ts": "2026-09-14T06:59:41Z", "hours": 1.7667, "text": "So today i finished assigning footprint, tommorow imma give the chematic and footprint one more review then i can route the pcb"}, {"post_id": 67086, "ts": "2026-09-13T04:20:57Z", "hours": 1.8167, "text": "Uh, so i decided to ditch the bluetooth featur, use the 1.8 inch screen instaed and uh ye down grade from SDMMC 4bit to SDMMC 1bit since it save me some GPIO and Still have that fast speed"}, {"post_id": 66423, "ts": "2026-09-12T07:39:20Z", "hours": 1.05, "text": "Pcb reviewing, added extra passive components and fixing error. Schematic almost done, boutta move to pcb designing"}, {"post_id": 65840, "ts": "2026-09-11T07:44:07Z", "hours": 2.7167, "text": "Hi there humans SO today i finished routing the audio system and misc and it almost done i am still having trouble finding screen that fits and comes with kicad asset"}, {"post_id": 64681, "ts": "2026-09-09T08:41:40Z", "hours": 2.7333, "text": "Don’t even joke lad So, today I finally and finally move onto the routing, It was an actual nightmare because the power system was not easy and even the datasheet missing component for the example circuit but luckily gemini cam in to save the day"}, {"post_id": 64106, "ts": "2026-09-08T09:34:02Z", "hours": 1.3333, "text": "So today i finished finding all the needed assets for the project, after that i organized evrything to prepare for the routing tomorrow"}, {"post_id": 63400, "ts": "2026-09-07T06:46:36Z", "hours": 0.6667, "text": "UGHH MY TOOTH IT HURTS I CANT WORK"}, {"post_id": 54308, "ts": "2026-08-25T08:09:46Z", "hours": 2.6167, "text": "Devlog 3: I have returned Today, i decided to do some research on the components and downloading Kicad assets, It’s mostly done so stay tune"}, {"post_id": 43649, "ts": "2026-08-09T01:12:49Z", "hours": 1.0833, "text": "Devlog 2: Today, finished my mind map and learn how to make a simple hotplate. Though it’s not relate to this project, But i think it’s going to be useful in the future"}, {"post_id": 43200, "ts": "2026-08-08T10:19:19Z", "hours": 0.65, "text": "i got my mind map going but because of some weird bug, my old recorded time lapse got linked to a deleted project, wasted like 1h30m of my life"}]...
|
Title: Poc-mp3 by @thaimin01 | Stardance
Devlogs: Title: Poc-mp3 by @thaimin01 | Stardance
Devlogs:
i got my mind map going but because of some weird bug, my old recorded time lapse got linked to a deleted project, wasted like 1h30m of my life
Devlog 2: Today, finished my mind map and learn how to make a simple hotplate. Though it’s not relate to this project, But i think it’s going to be useful in the future
Devlog 3: I have returned Today, i decided to do some research on the components and downloading Kicad assets, It’s mostly done so stay tune
UGHH MY TOOTH IT HURTS I CANT WORK
So today i finished finding all the needed assets for the project, after that i organized evrything to prepare for the routing tomorrow
Don’t even joke lad So, today I finally and finally move onto the routing, It was an actual nightmare because the power system was not easy and even the datasheet missing component for the example circuit but luckily gemini cam in to save the day
Hi there humans SO today i finished routing the audio system and misc and it almost done i am still having trouble finding screen that fits and comes with kicad asset
Pcb reviewing, added extra passive components and fixing error. Schematic almost done, boutta move to pcb designing
Uh, so i decided to ditch the bluetooth featur, use the 1.8 inch screen instaed and uh ye down grade from SDMMC 4bit to SDMMC 1bit since it save me some GPIO and Still have that fast speed
So today i finished assigning footprint, tommorow imma give the chematic and footprint one more review then i can route the pcb
I didnt do anything much today rather than adding the auto detection for the micro sd card, and assigning 3d model for the footprint
So I got a simple PCB layout today and connect most of the GND, Well it just that’s it
What the hell ??? Which component goes to which component ??? I am kirkenuienly confused 💀💀💀💀💀
Welcome people To my high quality human slop Spaghetti tracing And i dont khow if it will work or not YAY !1!!!11!!11!
uhhh, I dont really khow what to say but the pcb routing is almost finished
I FINISHED THE PCB HOORAY !!111! SPAGHETTI TRACING IMBALANCE TRACE VIAS SLOP AND NOT GOING TO PASS THE EMC TEST
GUYS HELP So i started coding today, just for it to be empty AND WORSE I DONT KHOW HOW TO CODE
WTH AM I DOING So i decided to start coding today but it barely do anthing. All i did was #define the pins and.. ye thats it….
Man, all i did was bullshitting around for a whole hour
Did some tweaks to the BOM and the csv gosh i hate exceling...
|
1792626566.705053
|
1793231366.705053
|
|
46272
|
FPV Drone Stack by @Triso01 | Stardance
|
Triso01
|
0
|
30.27
|
0
|
[]
|
[{"post_id": 69126, "ts": "202 [{"post_id": 69126, "ts": "2026-09-16T13:06:22Z", "hours": 2.0169, "text": "“Finishing” this project"}, {"post_id": 68234, "ts": "2026-09-14T19:06:22Z", "hours": 2.0506, "text": "Finished the ESC and the shematics of the “Middleboard”"}, {"post_id": 56860, "ts": "2026-08-28T20:33:07Z", "hours": 1.8533, "text": "The 4 in 1 ESC was to hard, i make 4 little ESCs now"}, {"post_id": 54724, "ts": "2026-08-25T20:03:08Z", "hours": 0.6167, "text": "Thought about giving up on the ESC, I just don´t know how to route this thing on a 4 Layer 2 oz outer and .5 oz inner copper weight"}, {"post_id": 54367, "ts": "2026-08-25T10:26:24Z", "hours": 1.5669, "text": "Still far from finishing"}, {"post_id": 54054, "ts": "2026-08-24T20:21:32Z", "hours": 3.5503, "text": "Finished the shematic and the layout, but not the PCB size"}, {"post_id": 53635, "ts": "2026-08-24T08:59:15Z", "hours": 6.0164, "text": "Still trying to layout the ESC, it doesnt work ;("}, {"post_id": 52605, "ts": "2026-08-22T20:12:15Z", "hours": 1.4833, "text": "Still on the shematic"}, {"post_id": 52115, "ts": "2026-08-22T06:15:38Z", "hours": 1.7167, "text": "Worked on the ESC shematic almost ready for layout"}, {"post_id": 51658, "ts": "2026-08-21T13:37:29Z", "hours": 0.9, "text": "Fixed some routing errors on FC nad began with the ESC"}, {"post_id": 49666, "ts": "2026-08-18T15:30:48Z", "hours": 1.2667, "text": "Fixed some errors on the FC"}, {"post_id": 49051, "ts": "2026-08-17T17:17:12Z", "hours": 1.2667, "text": "Finished the FC!!"}, {"post_id": 48984, "ts": "2026-08-17T15:56:12Z", "hours": 4.9003, "text": "Finished the shematics and the layout and started with the routing"}, {"post_id": 46878, "ts": "2026-08-14T12:44:26Z", "hours": 1.0669, "text": "Im working on the main parts of the flightstack (MCU, IMU…)"}]...
|
Title: FPV Drone Stack by @Triso01 | Stardance
De Title: FPV Drone Stack by @Triso01 | Stardance
Devlogs:
Im working on the main parts of the flightstack (MCU, IMU…)
Finished the shematics and the layout and started with the routing
Finished the FC!!
Fixed some errors on the FC
Fixed some routing errors on FC nad began with the ESC
Worked on the ESC shematic almost ready for layout
Still on the shematic
Still trying to layout the ESC, it doesnt work ;(
Finished the shematic and the layout, but not the PCB size
Still far from finishing
Thought about giving up on the ESC, I just don´t know how to route this thing on a 4 Layer 2 oz outer and .5 oz inner copper weight
The 4 in 1 ESC was to hard, i make 4 little ESCs now
Finished the ESC and the shematics of the “Middleboard”
“Finishing” this project...
|
1792658960.0710502
|
1793263760.0710502
|
|
269
|
School Manager by @xarber | Stardance
|
xarber
|
0
|
30.26
|
0
|
[]
|
[{"post_id": 50991, "ts": "202 [{"post_id": 50991, "ts": "2026-08-20T14:12:00Z", "hours": 1.1489, "text": "SideStore / LiveContainer source! Do you want to try School Manager yourself? You can now install the development builds through an AltSource, that you can add yourself from the School Manager github repo! You can also download the .ipa files manually from GitHub Releases. Just open the app and try it yourself!"}, {"post_id": 37594, "ts": "2026-07-30T13:03:30Z", "hours": 10.2097, "text": "Improved server-side security A few adjustments were made server-side: Tokens now expire much earlier, with a refresh token to keep users signed in. Other database endpoint updates were made to ensure safer data handling. Account security updates Together with the server side security enhancements, I also added a session management section in the Sign In & Security page: You can now manage your signed in devices, recognize them with their model or OS + browser, last seen date, and app version. You can easily sign out any of those devices, requiring another sign in. Passkey Renaming As mentioned in the previous devlog, I did add passkey renaming. Now passkeys detect the device you saved the passkey on to give a suggested name, which you can edit at any time. Fixed app themes For some reason app themes broke with an SDK update. I restored functionality, and extended it to the welcome screen. Multiple changes conventional commits I updated the workflow scripts to allow multiple changes inside of one commit: feat: Feature 1; fix: Fix 1; fix: Fix2 All inside of the same commit! These will then be parsed in the github release by the workflow. Switch app building to GitHub Actions server EAS Cloud was disabled. Now all app builds are ran through the GitHub Actions server. I also added an unsigned iOS build, which is installable with SideStore, LiveContainer, or any other similar sideloading app. The iOS builds are compiled with X-Code 27 beta, so the dynamic app resizing is enabled for iOS 27 (You can test by using iPhone mirroring, launching the sideloaded app, and trying to resize the window). Small reminder: You can either install the development build, OR, you can test the app by installing the PWA when opening the website version!"}, {"post_id": 32495, "ts": "2026-07-21T18:31:27Z", "hours": 4.8581, "text": "Passkeys are live! This took me a while to develop, but passkeys are finally live! There’s a passkey management screen in settings, with a list of all saved passkeys, when they were last used and when they were added. You can delete them, or add new ones using web authentication. This is a temporary workaround since Apple requires you to have a paid developer license to use passkeys in-app. What’s next? I’d like to add passkey renaming in settings (and regular passkey naming in the registration screen), OR a database with automatically detected names for each Passkey handler ID. I’m currently trying to get the app to build on X-Code 27 beta. This would use the new SDK and allow apps to dynamically resize when using iPhone mirroring or the xcode device hub. It would be a huge improvement for testing, since I would be able to test everything 100% from my mac without having an ipad simulator or have to bring a physical device around."}, {"post_id": 31140, "ts": "2026-07-19T09:45:17Z", "hours": 13.7719, "text": "Passkeys I’ve been working on this for a while. I’m currently adding passkeys and security keys support to the app! The app has been based on OTP codes since release, I’m also adding passkey support so that no waiting for emails is needed. You will still need a verified email in order to sign up, but you will be able to use passkeys for future authentications. I also think about adding an authenticator app OTP generator to replace email OTPs altogether (for added security in case of a stolen email account), but it’s a work in progress (PS: Again, you will still need a verified email address to sign up). GitHub Workflows! This took me ages to build. I implemented workflows and multiple branches: Master (Release) Beta Alpha Development Testing (no workflows here) On every push, two jobs run: One updates the website (only on master pushes), and also runs eas update to the specified update branch. The other job is the most interesting: It checks for version changes in the app.json file, and if the version changed, it starts building a new binary for the app: Signed iOS Simulator (.tar.gz app file), “Signed” Android APK (or AAB if the branch is Beta/Master), and unsigned iOS .ipa file (since I have no paid developer license yet). The first two are ran through EAS Cloud, and then downloaded by the workflow. The unsigned build runs directly on GitHub Actions’s servers. After having the artifacts, they get renamed to human readable names, and release notes are automatically generated with the adoption of conventional commits (fix: … | ci: … | feat: … | etc). The script later proceeds to create a release and a tag for said update, and draft it to the github repo. This means I no longer have to manage builds myself, which sometimes took several hours to fix environment issues and more. It also means that whenever I push an update, the app automatically reflects said update in an appropriate branch (we don’t like testing in production, right?)."}, {"post_id": 945, "ts": "2026-06-02T18:26:17Z", "hours": 0.2667, "text": "Now on Stardance! Hi everyone! Welcome to Stardance! I can’t wait to start seeing everyone’s amazing projects, and to start coding my own! I actually have a few ideas boiling in the pot, many of which I’ve already created projects for. Good coding to everyone! About School Manager The development of the app will be continued in Stardance! There aren’t many updates since the last devlog in Flavortown, I’m trying to organize my ideas and clean some code before continuing development. Have fun everyone!"}]...
|
Title: School Manager by @xarber | Stardance
Devl Title: School Manager by @xarber | Stardance
Devlogs:
Now on Stardance! Hi everyone! Welcome to Stardance! I can’t wait to start seeing everyone’s amazing projects, and to start coding my own! I actually have a few ideas boiling in the pot, many of which I’ve already created projects for. Good coding to everyone! About School Manager The development of the app will be continued in Stardance! There aren’t many updates since the last devlog in Flavortown, I’m trying to organize my ideas and clean some code before continuing development. Have fun everyone!
Passkeys I’ve been working on this for a while. I’m currently adding passkeys and security keys support to the app! The app has been based on OTP codes since release, I’m also adding passkey support so that no waiting for emails is needed. You will still need a verified email in order to sign up, but you will be able to use passkeys for future authentications. I also think about adding an authenticator app OTP generator to replace email OTPs altogether (for added security in case of a stolen email account), but it’s a work in progress (PS: Again, you will still need a verified email address to sign up). GitHub Workflows! This took me ages to build. I implemented workflows and multiple branches: Master (Release) Beta Alpha Development Testing (no workflows here) On every push, two jobs run: One updates the website (only on master pushes), and also runs eas update to the specified update branch. The other job is the most interesting: It checks for version changes in the app.json file, and if the version changed, it starts building a new binary for the app: Signed iOS Simulator (.tar.gz app file), “Signed” Android APK (or AAB if the branch is Beta/Master), and unsigned iOS .ipa file (since I have no paid developer license yet). The first two are ran through EAS Cloud, and then downloaded by the workflow. The unsigned build runs directly on GitHub Actions’s servers. After having the artifacts, they get renamed to human readable names, and release notes are automatically generated with the adoption of conventional commits (fix: … | ci: … | feat: … | etc). The script later proceeds to create a release and a tag for said update, and draft it to the github repo. This means I no longer have to manage builds myself, which sometimes took several hours to fix environment issues and more. It also means that whenever I push an update, the app automatically reflects said update in an appropriate branch (we don’t like testing in production, right?).
Passkeys are live! This took me a while to develop, but passkeys are finally live! There’s a passkey management screen in settings, with a list of all saved passkeys, when they were last used and when they were added. You can delete them, or add new ones using web authentication. This is a temporary workaround since Apple requires you to have a paid developer license to use passkeys in-app. What’s next? I’d like to add passkey renaming in settings (and regular passkey naming in the registration screen), OR a database with automatically detected names for each Passkey handler ID. I’m currently trying to get the app to build on X-Code 27 beta. This would use the new SDK and allow apps to dynamically resize when using iPhone mirroring or the xcode device hub. It would be a huge improvement for testing, since I would be able to test everything 100% from my mac without having an ipad simulator or have to bring a physical device around.
Improved server-side security A few adjustments were made server-side: Tokens now expire much earlier, with a refresh token to keep users signed in. Other database endpoint updates were made to ensure safer data handling. Account security updates Together with the server side security enhancements, I also added a session management section in the Sign In & Security page: You can now manage your signed in devices, recognize them with their model or OS + browser, last seen date, and app version. You can easily sign out any of those devices, requiring another sign in. Passkey Renaming As mentioned in the previous devlog, I did add passkey renaming. Now passkeys detect the device you saved the passkey on to give a suggested name, which you can edit at any time. Fixed app themes For some reason app themes broke with an SDK update. I restored functionality, and extended it to the welcome screen. Multiple changes conventional commits I updated the workflow scripts to allow multiple changes inside of one commit: feat: Feature 1; fix: Fix 1; fix: Fix2 All inside of the same commit! These will then be parsed in the github release by the workflow. Switch app building to GitHub Actions server EAS Cloud was disabled. Now all app builds are ran through the GitHub Actions server. I also added an unsigned iOS build, which is installable with SideStore, LiveContainer, or any other similar sideloading app. The iOS builds are compiled with X-Code 27 beta, so the dynamic app resizing is enabled for iOS 27 (You can test by using iPhone mirroring, launching the sideloaded app, and trying to resize the window). Small reminder: You can either install the development build, OR, you can test the app by installing the PWA when opening the website version!
SideStore / LiveContainer source! Do you want to try School Manager yourself? You can now install the development builds through an AltSource, that you can add yourself from the School Manager github repo! You can also download the .ipa files manually from GitHub Releases. Just open the app and try it yourself!...
|
1793177338.4349735
|
1793782138.4349735
|
|
56631
|
Dashboard Agent by @arushg | Stardance
|
arushg
|
0
|
30.26
|
0
|
[]
|
[{"post_id": 59834, "ts": "202 [{"post_id": 59834, "ts": "2026-09-01T20:12:27Z", "hours": 1.8525, "text": "Added dashboard side panel and wired chat messages to hit agent backend"}, {"post_id": 58683, "ts": "2026-08-31T06:05:13Z", "hours": 28.4108, "text": "Created a mock dashboard and the MCP backend (trust I did a lot more than build this simple dashboard in all that time)"}]...
|
Title: Dashboard Agent by @arushg | Stardance
Dev Title: Dashboard Agent by @arushg | Stardance
Devlogs:
Created a mock dashboard and the MCP backend (trust I did a lot more than build this simple dashboard in all that time)
Added dashboard side panel and wired chat messages to hit agent backend...
|
1792673308.2909064
|
1793278108.2909064
|
|
9406
|
MonkeySpeak by @hariharann | Stardance
|
hariharann
|
2
|
30.18
|
116
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T10:10:55Z", "hours": 12.0, "multiplier": 17.31, "payout": 63, "blessing": "neutral", "text": "monkeyspeak update is live 🙊 spoken monkeytype —> read prompts out loud, get scored on speed and clarity. v0 had the core loop. this ship adds the stuff that makes it feel like a real app. what’s new: leaderboard global board via supabase — nickname + emoji after a run, no signup home page 3-column layout with leaderboard, hero, and your personal best card your top score card still tracks local pb for the current duration, not whoever is #1 globally stats + profile /stats dashboard — streak, totals, recent runs, wpm charts, achievements profile hub drawer — activity heatmap, badges, lifetime stats everything uses the same minimal desk ui as home speech fixes try it: monkeyspeak-delta.vercel.app github.com/nothariharan/monkeyspeak", "repo": "https://github.com/nothariharan/monkeyspeak", "demo": "https://monkeyspeak-delta.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-08T05:14:08Z", "hours": 5.0, "multiplier": 15.16, "payout": 53, "blessing": "neutral", "text": "monkeyspeak v0 is live 🙊 been building this for a while — it’s the spoken equivalent of monkeytype. you get a prompt, hit the mic, read it out loud, and the app tracks how fast and how accurately you speak. what’s in v0: speed mode pick 15s, 30s, 60s, or 120s live net wpm (filler words like “um” and “uh” get stripped) sentences, numbers, or paste your own custom text words dissolve on screen as you nail them monkey mascot animates based on your speaking momentum personal bests per duration + prompt type clarity mode type or paste what you said word-level diff against the original prompt grades from s down to “needs work” practice mode that rebuilds a prompt from words you missed ui refresh new landing hero: “how fast⚡can you speak 🙊” the monkey mascot IS the start button now — click it to begin speech-themed doodles, clean flat design, no gradient bloat sprite animations via gsap under the hood next.js 14 + typescript + zustand web speech api by default (no api key needed) optional deepgram integration with server-side proxy (key never hits the browser) silero vad for voice activity detection try it: clone the repo, npm install, npm run dev, allow mic access, go. github.com/nothariharan/monkeyspeak", "repo": "https://github.com/nothariharan/monkeyspeak", "demo": "https://monkeyspeak-delta.vercel.app/"}]...
|
[{"post_id": 38169, "ts": "202 [{"post_id": 38169, "ts": "2026-07-31T12:59:08Z", "hours": 10.7647, "text": "CATCHUPPPP DEVLOG — i forgot to post so now u get EVERYTHING 🙊🗣️🗣️ ok so real talk i kinda… forgot to drop a proper stardance log for a while. hours kept stacking, i kept shipping, then the banner said “u hav 10h without a log” and im like oh. whole catchup dump. big one. sorry if i yap [ THE REASON FOR THIS WAS WAKATIME BTW it doesnt even properly update 🥀 sowwy i also lost like 1 more hr of time tho welp ] last time i teased something ghosty then went quiet. that ghosty thing shipped. clarity got ripped open and rebuilt. da engine board actually filters now. results dont look half done anymore. so thats where most of the hours went into. live: https://monkeyspeak-delta.vercel.app repo: https://github.com/nothariharan/monkeyspeak QUICK RECAP already shipped before this gap: spoken monkeytype core · deepgram on brave/edge · supabase speed board · /leaderboard hub + stats/profile · results rebuild. that thread is on the project page. this post is mainly everything after dat . THE ‘GHOSTYYYY’ ( finally ) last log said “something ghosty is next” then i disappeared lmao. ghost trace is live. u race a visual ghost that replays your own speed pb. not some random #1. just u vs past u. needs atleast one speed pb with a real timeline first. built: ghost mode next to speed/clarity · desk ui so it doesnt feel like another product · dual lanes that feel like a chase · local ghost race record · lean assets ( check the branches and prs for exact stuff ) go race yourself. weirdly motivational and slightly insulting when past-u is faster 👀👀 CLARITY GOT A WHOLE PERSONALITY NOW used to be the quiet sibling of speed. same desk family, placeholder vibes. scrapbook treatment later — now its actually fun to sit on. idle: 3-col scrapbook (engine board · center · side stack) · inspector monkey · legal pad prompt · privacy note that ur mic stays with the tool prompts that CYCLE: shuffle was cursed — sentences always “before you leave…”, twisters one fixed line. now ~30 curated pads across sentences/technical/tongue-twisters, scenes (office/clinic/travel/etc), signal chips, no instant repeat, custom still works. whole point is “can the tool hear the hard bits” engine board: config bar board prompt filters the left board. badge shows active filter. results: not just % + grade anymore — engine chip, correct/wrong/missed/extra, punctuation %, delta vs prior best, normal display font HOUSEKEEPING ( fr) pruned ~31mb orphan assets · slimmed sprite utils · typecheck · SESSION_SECRET same on vercel AND render or unset on both (one side = grants break quietly) · readme/comments less corporate. deployed. hard-refresh if cached. before → after last time clarity = paste + grade + sticky prompt + soft lock. now scrapbook + shuffle pads + board filters + current/top/tool + cancel + results that explain stuff. last time ghost = a wink. now u race past-u on the desk. so thats there. STILL COOKING 🍽️ harder clarity tiers · board rate limit if it gets silly · more ghost polish · daily clarity seed · kill leftover placeholder energy ok that was a lot of catchup for a monkey that just wants u to read words out loud. if ghost or clarity feels off lmk — especially brave ppl, i see u 🐒🐒🍌"}, {"post_id": 29280, "ts": "2026-07-16T02:57:57Z", "hours": 2.4197, "text": "da monkey upgradesss -> leaderboard + results shipped two big surface reworks this week. leaderboard got its own hub. rankings, filters, and personal stats live on one page now & ofc no more bouncing between /stats and a tiny home board. cleaner rows, mode/duration toggles, and your own numbers sitting under the global board. post-test results got rebuilt from scratch. one shared results view: wpm, accuracy, consistency, streak, and the session graph, instead of the old packed panel. same screen whether you just finished a run or are peeking at what a good score looks like. ( graph mite be reworked on again but eh ) mic still moves when you’re talking. words still have to earn their place. 👻 something ghosty is next. that’s all you’re getting its really cool trust 👀👀"}, {"post_id": 22028, "ts": "2026-07-04T08:41:44Z", "hours": 5.8111, "text": "UPDATEE:: — stats, brave stt actually works, hydration fix tl;dr deepgram stt works on brave now (and edge) — words dissolve, wpm moves, no more fake “google speech blocked” errors root cause: brave kills the vercel http audio bridge + we fell back to browser speech (which shields also blocks) fix: brave/edge → render websocket proxy ( wss://monkeyspeak.onrender.com/... ); chrome/firefox still use vercel bridge fixed utterance_end_ms=400 deepgram 400 spam (minimum is 1000 on live listen) fixed bridge sending keepalive json into the pcm stream (corrupted audio, empty transcripts) stats page + profile hub — streaks, achievements, session history, same minimal desk ui as home live: https://monkeyspeak-delta.vercel.app repo: https://github.com/nothariharan/monkeyspeak (commit might differ by the time u read — i keep pushing) CHANGES:: deepgram / stt (the painful part) routing by browser browser path brave / edge websocket → render proxy → deepgram chrome / firefox (prod) same-origin POST /api/deepgram/live bridge on vercel localhost ws://localhost:8080 when backend is up, else bridge 🐜🪲🐞 that made it look dead utterance_end_ms=400 — deepgram returns http 400 on live ws below 1000ms. was baked into client urls. clamped to 1000 everywhere (client, bridge, render backend, server.js) keepalive in pcm body — http bridge was writing {\"type\":\"KeepAlive\"} into the upload stream every 3s. deepgram got garbage bytes, transcripts stayed empty, no obvious error in ui brave + duplex fetch — bridge connects, mic on, waveform moving, but ndjson response never streams back. zero words dissolved bad fallback — deepgram fail → auto webspeech → brave shields block google → ui says google is blocked even though user picked deepgram. now we don’t fallback on brave/edge when deepgram is preferred other STT polish bridge waits for BridgeReady before marking session ok server-side keepalive via deepgram sdk on the bridge route (not in pcm stream) removed verbose [STT:deepgram] console spam from prod — debug only with NEXT_PUBLIC_DEBUG_STT=true gsap scale not eligible for reset warning fixed on momentum meter stats + profile new /stats dashboard — totals, streak, recent runs, wpm trend charts profile hub drawer — nickname, activity heatmap, achievement badges shared stats-* / desk css so stats doesn’t look like a different app achievements + streak logic with unit tests ( lib/achievements.ts , lib/stats/streak.ts ) UI / polish home + results + settings aligned to same minimal desk style daily challenge card, error/not-found pages match the rest monkey favicon + readme/docs polish Infra GET /api/deepgram/proxy-health — same-origin render health check (browser never hits render directly, no cors scream) render monkeyspeak-dg-proxy redeployed via render cli what actually happened on brave user picks deepgram → app tries vercel http bridge brave never delivers streaming ndjson reliably fallback kicks webspeech → shields block google ui shows “brave shields may be blocking google’s speech service” — confusing af because user didn’t pick browser mode fix was routing + stop lying via fallback. not more deepgram dashboard staring. what’s next (maybe) GHOST RACE — new mode where u speak against ur pb (most wanted) signed run tokens so leaderboard posts tie to a finished test shared rate limit (redis/kv) if leaderboard spam shows up vendor ort wasm properly so vad worker stops whining in console ok that was a lot of browser-specific nonsense for a monkey that just wants you to read words out loud 🐒🐒🍌"}, {"post_id": 7929, "ts": "2026-06-13T07:00:10Z", "hours": 2.9903, "text": "monkeyspeak devlog more fixes (leaderboard + home + cors bug) - ship soon trust .. tl;dr home page is a 3 column layout now — leaderboard on the left, hero in the middle, top score on the right global leaderboard via supabase — nickname + emoji after a run, no signup, same board for everyone on the site personal bests still local — top score card shows your best for the duration, not whoever is #1 globally supabase wired on vercel with service role key server side only ( /api/leaderboard get + post) cors scream from chrome fixed — browser no longer fetches render root directly for proxy health checks what i changed home page layout the thing ig what it does hero leaderboard duration tabs synced with config bar, crown svg for top spots, emoji avatars, your row pinned at the bottom even if you are not top 5 leaderboard save prompt pops after a speed run — pick name + icon (defaulted to hehe 🐵), saves to supabase, remembers name locally for next time top score card personal best for current duration + prompt type only visual cleanup removed hero doodles, tightened title spacing, consolidated duplicate hero css leaderboard rows used to live in zustand localStorage. ripped that out — supabase is source of truth now. name and emoji prefills still persist locally. global leaderboard backend new table leaderboard_entries in supabase (migration in supabase/migrations/001_leaderboard_entries.sql ) rls enabled, no anon policies — all reads/writes through next.js with SUPABASE_SERVICE_ROLE_KEY upsert rule matches old local behavior: same name + duration + prompt type (case insensitive) only updates if wpm goes up light rate limit on post (~30s per ip) — good enough for hobby scale, not fortress grade browser → GET/POST /api/leaderboard (vercel) ↓ service role supabase postgres render backend unchanged — still deepgram only, no db env vars there. cors fix (chrome (ofc brave as well) was mad again) production deepgram mode probes whether the render proxy is alive before connecting. that probe used to be a cross origin fetch at https://monkeyspeak.onrender.com/ from the vercel app. render cold starts and error pages often ship without cors headers even when express has origin: * — so chrome logged the whole blocked by cors policy thing and deepgram mode thought the proxy was dead. fix: new same origin route GET /api/deepgram/proxy-health on vercel. server checks render, browser never touches render over http cors. also slapped explicit options handling on the render backend for anything that still hits it directly. what’s next (maybe) signed run tokens so leaderboard posts are tied to an actual finished test shared rate limit (redis/kv) if spam shows up delete the testmonkey row sitting on prod from smoke testing render keep alive still on the list from v0.1 preview env on vercel for prs ok that was a lot of infra for a monkey with a crown svg but at least the board is real now. lmk in replies if you want the supabase dashboard walkthrough or the security fixes implemented properly."}, {"post_id": 6311, "ts": "2026-06-10T16:53:24Z", "hours": 2.9108, "text": "monkeyspeak final devlog before ship ( hopefully ) tl;dr so brave and edge broke everything ( ye read what broke for more info ) deepgram mode now transcribes live text again (words dissolve, wpm moves, momentum still reacts to your voice) brave and edge no longer hang for 25 seconds then fake a mic error production uses a render websocket proxy + vercel env, same path that worked locally github: nothariharan/monkeyspeak (commit 095b731 and earlier speech routing work on main ) live: monkeyspeak-delta.vercel.app what i changed speech routing (back to something that made sense) mode behavior browser web speech api only. no deepgram hijack on brave/edge mount. deepgram try deepgram first (proxy → bridge fallback on chrome only). if that fails, fall back to web speech with a clear error. the ui now shows errors for the provider that actually failed, not a generic “mic blocked” when stt died for other reasons. deepgram client hardening prefer var name ur wish websocket proxy over the vercel http bridge brave/edge without a reachable proxy: fail fast with a useful message (no 25s timeout) utterance_end_ms locked to 1000 everywhere (deepgram rejects live ws with 400 below that) bridge watchdog clears on BridgeReady , not on first random chunk server bridge waits for upstream deepgram before closing the socket the transcript fix (the big one) client parses deepgram json whether it arrives as a string , blob , or arraybuffer render proxy forwards deepgram replies as utf-8 text frames instead of opaque binary infra backend/ express + ws proxy deployable on render ( render.yaml included) set up env with ur var name at vercel redeployed frontend via vercel cli after env update small polish clearer vad fallback logs (worker load fail vs no voice detected vs timeout) config bar hint on brave/edge when browser mode is selected momentum sprites + gsap monkey states (from earlier in the sprint) what broke (and why it looked cursed) brave and edge block or mishandle the vercel http audio bridge (duplex fetch upload), so deepgram connections hung ~25s and never returned transcripts. those browsers also cannot open an authenticated websocket straight to api.deepgram.com , so they need the render ws proxy ( wss://…/api/deepgram/proxy ) instead of the chrome-friendly paths. even after the proxy worked, deepgram sent json in binary ws frames and the client ignored anything that was not a string, so words never updated until we parsed blob/arraybuffer payloads. what’s next (maybe) vendor ort wasm for vad so the worker stops complaining gsap scale split for clean console render keep-alive or paid instance if cold starts hurt demos preview env on vercel for pr deployments (production is wired today) sorry if i yapped a lot and the fixes where actually slighly more techy stuff so i didnt wanna yap abt that as wel so yeah if u want to know lmk in replies :)"}, {"post_id": 4727, "ts": "2026-06-08T05:13:13Z", "hours": 0.6281, "text": "reworked the ui and got monkeyspeak ready for v0 ship launch :)) it’s basically monkeytype but for your voice — read a prompt out loud, get scored on speed + clarity. features: speed mode: timed speaking tests (15s / 30s / 60s / 120s) with live wpm + word accuracy clarity mode: paste your transcript, get a word-by-word diff + letter grade click the monkey mascot to start (no separate mic button anymore lol) animated monkey companion that reacts to your speaking energy mid-test words dissolve on screen as you say them correctly personal bests saved locally browser speech api works out of the box, optional deepgram for better stt themes, accent colors, custom fonts keyboard shortcuts (enter to start, tab to reset, escape to stop) built with next.js, typescript, gsap, zustand. repo: github.com/nothariharan/monkeyspeak"}, {"post_id": 4678, "ts": "2026-06-08T02:28:55Z", "hours": 0.2814, "text": "made the ui more clean still settling the latency here and there current new approach i am building around is using the deepgram api key for initial purpose later trying to replicate what they do open to questions or recommendations for the whole stt etc."}, {"post_id": 4242, "ts": "2026-06-07T14:13:09Z", "hours": 0.8106, "text": "cooking up 🚀🔥 soon making it public just lots of latency issue in speaking to text conversion who knew it would be a pain but yeah let me know if u guys think of an alternative for it or anything at all thanks for reading :)"}, {"post_id": 4007, "ts": "2026-06-07T04:46:44Z", "hours": 2.0164, "text": "going with a much better ui soon launching :) 🚀 for yall to try it"}, {"post_id": 3451, "ts": "2026-06-06T12:11:33Z", "hours": 0.9194, "text": "built the first iteration of the website ! got lots of customizing options now i am working more towards reducing the latency between what u speak and what is being transcribed give me your opinions and recommendations :)"}]...
|
Title: MonkeySpeak by @hariharann | Stardance
Dev Title: MonkeySpeak by @hariharann | Stardance
Devlogs:
built the first iteration of the website ! got lots of customizing options now i am working more towards reducing the latency between what u speak and what is being transcribed give me your opinions and recommendations :)
going with a much better ui soon launching :) 🚀 for yall to try it
cooking up 🚀🔥 soon making it public just lots of latency issue in speaking to text conversion who knew it would be a pain but yeah let me know if u guys think of an alternative for it or anything at all thanks for reading :)
made the ui more clean still settling the latency here and there current new approach i am building around is using the deepgram api key for initial purpose later trying to replicate what they do open to questions or recommendations for the whole stt etc.
reworked the ui and got monkeyspeak ready for v0 ship launch :)) it’s basically monkeytype but for your voice — read a prompt out loud, get scored on speed + clarity. features: speed mode: timed speaking tests (15s / 30s / 60s / 120s) with live wpm + word accuracy clarity mode: paste your transcript, get a word-by-word diff + letter grade click the monkey mascot to start (no separate mic button anymore lol) animated monkey companion that reacts to your speaking energy mid-test words dissolve on screen as you say them correctly personal bests saved locally browser speech api works out of the box, optional deepgram for better stt themes, accent colors, custom fonts keyboard shortcuts (enter to start, tab to reset, escape to stop) built with next.js, typescript, gsap, zustand. repo: github.com/nothariharan/monkeyspeak
monkeyspeak final devlog before ship ( hopefully ) tl;dr so brave and edge broke everything ( ye read what broke for more info ) deepgram mode now transcribes live text again (words dissolve, wpm moves, momentum still reacts to your voice) brave and edge no longer hang for 25 seconds then fake a mic error production uses a render websocket proxy + vercel env, same path that worked locally github: nothariharan/monkeyspeak (commit 095b731 and earlier speech routing work on main ) live: monkeyspeak-delta.vercel.app what i changed speech routing (back to something that made sense) mode behavior browser web speech api only. no deepgram hijack on brave/edge mount. deepgram try deepgram first (proxy → bridge fallback on chrome only). if that fails, fall back to web speech with a clear error. the ui now shows errors for the provider that actually failed, not a generic “mic blocked” when stt died for other reasons. deepgram client hardening prefer var name ur wish websocket proxy over the vercel http bridge brave/edge without a reachable proxy: fail fast with a useful message (no 25s timeout) utterance_end_ms locked to 1000 everywhere (deepgram rejects live ws with 400 below that) bridge watchdog clears on BridgeReady , not on first random chunk server bridge waits for upstream deepgram before closing the socket the transcript fix (the big one) client parses deepgram json whether it arrives as a string , blob , or arraybuffer render proxy forwards deepgram replies as utf-8 text frames instead of opaque binary infra backend/ express + ws proxy deployable on render ( render.yaml included) set up env with ur var name at vercel redeployed frontend via vercel cli after env update small polish clearer vad fallback logs (worker load fail vs no voice detected vs timeout) config bar hint on brave/edge when browser mode is selected momentum sprites + gsap monkey states (from earlier in the sprint) what broke (and why it looked cursed) brave and edge block or mishandle the vercel http audio bridge (duplex fetch upload), so deepgram connections hung ~25s and never returned transcripts. those browsers also cannot open an authenticated websocket straight to api.deepgram.com , so they need the render ws proxy ( wss://…/api/deepgram/proxy ) instead of the chrome-friendly paths. even after the proxy worked, deepgram sent json in binary ws frames and the client ignored anything that was not a string, so words never updated until we parsed blob/arraybuffer payloads. what’s next (maybe) vendor ort wasm for vad so the worker stops complaining gsap scale split for clean console render keep-alive or paid instance if cold starts hurt demos preview env on vercel for pr deployments (production is wired today) sorry if i yapped a lot and the fixes where actually slighly more techy stuff so i didnt wanna yap abt that as wel so yeah if u want to know lmk in replies :)
monkeyspeak devlog more fixes (leaderboard + home + cors bug) - ship soon trust .. tl;dr home page is a 3 column layout now — leaderboard on the left, hero in the middle, top score on the right global leaderboard via supabase — nickname + emoji after a run, no signup, same board for everyone on the site personal bests still local — top score card shows your best for the duration, not whoever is #1 globally supabase wired on vercel with service role key server side only ( /api/leaderboard get + post) cors scream from chrome fixed — browser no longer fetches render root directly for proxy health checks what i changed home page layout the thing ig what it does hero leaderboard duration tabs synced with config bar, crown svg for top spots, emoji avatars, your row pinned at the bottom even if you are not top 5 leaderboard save prompt pops after a speed run — pick name + icon (defaulted to hehe 🐵), saves to supabase, remembers name locally for next time top score card personal best for current duration + prompt type only visual cleanup removed hero doodles, tightened title spacing, consolidated duplicate hero css leaderboard rows used to live in zustand localStorage. ripped that out — supabase is source of truth now. name and emoji prefills still persist locally. global leaderboard backend new table leaderboard_entries in supabase (migration in supabase/migrations/001_leaderboard_entries.sql ) rls enabled, no anon policies — all reads/writes through next.js with SUPABASE_SERVICE_ROLE_KEY upsert rule matches old local behavior: same name + duration + prompt type (case insensitive) only updates if wpm goes up light rate limit on post (~30s per ip) — good enough for hobby scale, not fortress grade browser → GET/POST /api/leaderboard (vercel) ↓ service role supabase postgres render backend unchanged — still deepgram only, no db env vars there. cors fix (chrome (ofc brave as well) was mad again) production deepgram mode probes whether the render proxy is alive before connecting. that probe used to be a cross origin fetch at https://monkeyspeak.onrender.com/ from the vercel app. render cold starts and error pages often ship without cors headers even when express has origin: * — so chrome logged the whole blocked by cors policy thing and deepgram mode thought the proxy was dead. fix: new same origin route GET /api/deepgram/proxy-health on vercel. server checks render, browser never touches render over http cors. also slapped explicit options handling on the render backend for anything that still hits it directly. what’s next (maybe) signed run tokens so leaderboard posts are tied to an actual finished test shared rate limit (redis/kv) if spam shows up delete the testmonkey row sitting on prod from smoke testing render keep alive still on the list from v0.1 preview env on vercel for prs ok that was a lot of infra for a monkey with a crown svg but at least the board is real now. lmk in replies if you want the supabase dashboard walkthrough or the security fixes implemented properly.
UPDATEE:: — stats, brave stt actually works, hydration fix tl;dr deepgram stt works on brave now (and edge) — words dissolve, wpm moves, no more fake “google speech blocked” errors root cause: brave kills the vercel http audio bridge + we fell back to browser speech (which shields also blocks) fix: brave/edge → render websocket proxy ( wss://monkeyspeak.onrender.com/... ); chrome/firefox still use vercel bridge fixed utterance_end_ms=400 deepgram 400 spam (minimum is 1000 on live listen) fixed bridge sending keepalive json into the pcm stream (corrupted audio, empty transcripts) stats page + profile hub — streaks, achievements, session history, same minimal desk ui as home live: https://monkeyspeak-delta.vercel.app repo: https://github.com/nothariharan/monkeyspeak (commit might differ by the time u read — i keep pushing) CHANGES:: deepgram / stt (the painful part) routing by browser browser path brave / edge websocket → render proxy → deepgram chrome / firefox (prod) same-origin POST /api/deepgram/live bridge on vercel localhost ws://localhost:8080 when backend is up, else bridge 🐜🪲🐞 that made it look dead utterance_end_ms=400 — deepgram returns http 400 on live ws below 1000ms. was baked into client urls. clamped to 1000 everywhere (client, bridge, render backend, server.js) keepalive in pcm body — http bridge was writing {"type":"KeepAlive"} into the upload stream every 3s. deepgram got garbage bytes, transcripts stayed empty, no obvious error in ui brave + duplex fetch — bridge connects, mic on, waveform moving, but ndjson response never streams back. zero words dissolved bad fallback — deepgram fail → auto webspeech → brave shields block google → ui says google is blocked even though user picked deepgram. now we don’t fallback on brave/edge when deepgram is preferred other STT polish bridge waits for BridgeReady before marking session ok server-side keepalive via deepgram sdk on the bridge route (not in pcm stream) removed verbose [STT:deepgram] console spam from prod — debug only with NEXT_PUBLIC_DEBUG_STT=true gsap scale not eligible for reset warning fixed on momentum meter stats + profile new /stats dashboard — totals, streak, recent runs, wpm trend charts profile hub drawer — nickname, activity heatmap, achievement badges shared stats-* / desk css so stats doesn’t look like a different app achievements + streak logic with unit tests ( lib/achievements.ts , lib/stats/streak.ts ) UI / polish home + results + settings aligned to same minimal desk style daily challenge card, error/not-found pages match the rest monkey favicon + readme/docs polish Infra GET /api/deepgram/proxy-health — same-origin render health check (browser never hits render directly, no cors scream) render monkeyspeak-dg-proxy redeployed via render cli what actually happened on brave user picks deepgram → app tries vercel http bridge brave never delivers streaming ndjson reliably fallback kicks webspeech → shields block google ui shows “brave shields may be blocking google’s speech service” — confusing af because user didn’t pick browser mode fix was routing + stop lying via fallback. not more deepgram dashboard staring. what’s next (maybe) GHOST RACE — new mode where u speak against ur pb (most wanted) signed run tokens so leaderboard posts tie to a finished test shared rate limit (redis/kv) if leaderboard spam shows up vendor ort wasm properly so vad worker stops whining in console ok that was a lot of browser-specific nonsense for a monkey that just wants you to read words out loud 🐒🐒🍌
da monkey upgradesss -> leaderboard + results shipped two big surface reworks this week. leaderboard got its own hub. rankings, filters, and personal stats live on one page now & ofc no more bouncing between /stats and a tiny home board. cleaner rows, mode/duration toggles, and your own numbers sitting under the global board. post-test results got rebuilt from scratch. one shared results view: wpm, accuracy, consistency, streak, and the session graph, instead of the old packed panel. same screen whether you just finished a run or are peeking at what a good score looks like. ( graph mite be reworked on again but eh ) mic still moves when you’re talking. words still have to earn their place. 👻 something ghosty is next. that’s all you’re getting its really cool trust 👀👀
CATCHUPPPP DEVLOG — i forgot to post so now u get EVERYTHING 🙊🗣️🗣️ ok so real talk i kinda… forgot to drop a proper stardance log for a while. hours kept stacking, i kept shipping, then the banner said “u hav 10h without a log” and im like oh. whole catchup dump. big one. sorry if i yap [ THE REASON FOR THIS WAS WAKATIME BTW it doesnt even properly update 🥀 sowwy i also lost like 1 more hr of time tho welp ] last time i teased something ghosty then went quiet. that ghosty thing shipped. clarity got ripped open and rebuilt. da engine board actually filters now. results dont look half done anymore. so thats where most of the hours went into. live: https://monkeyspeak-delta.vercel.app repo: https://github.com/nothariharan/monkeyspeak QUICK RECAP already shipped before this gap: spoken monkeytype core · deepgram on brave/edge · supabase speed board · /leaderboard hub + stats/profile · results rebuild. that thread is on the project page. this post is mainly everything after dat . THE ‘GHOSTYYYY’ ( finally ) last log said “something ghosty is next” then i disappeared lmao. ghost trace is live. u race a visual ghost that replays your own speed pb. not some random #1. just u vs past u. needs atleast one speed pb with a real timeline first. built: ghost mode next to speed/clarity · desk ui so it doesnt feel like another product · dual lanes that feel like a chase · local ghost race record · lean assets ( check the branches and prs for exact stuff ) go race yourself. weirdly motivational and slightly insulting when past-u is faster 👀👀 CLARITY GOT A WHOLE PERSONALITY NOW used to be the quiet sibling of speed. same desk family, placeholder vibes. scrapbook treatment later — now its actually fun to sit on. idle: 3-col scrapbook (engine board · center · side stack) · inspector monkey · legal pad prompt · privacy note that ur mic stays with the tool prompts that CYCLE: shuffle was cursed — sentences always “before you leave…”, twisters one fixed line. now ~30 curated pads across sentences/technical/tongue-twisters, scenes (office/clinic/travel/etc), signal chips, no instant repeat, custom still works. whole point is “can the tool hear the hard bits” engine board: config bar board prompt filters the left board. badge shows active filter. results: not just % + grade anymore — engine chip, correct/wrong/missed/extra, punctuation %, delta vs prior best, normal display font HOUSEKEEPING ( fr) pruned ~31mb orphan assets · slimmed sprite utils · typecheck · SESSION_SECRET same on vercel AND render or unset on both (one side = grants break quietly) · readme/comments less corporate. deployed. hard-refresh if cached. before → after last time clarity = paste + grade + sticky prompt + soft lock. now scrapbook + shuffle pads + board filters + current/top/tool + cancel + results that explain stuff. last time ghost = a wink. now u race past-u on the desk. so thats there. STILL COOKING 🍽️ harder clarity tiers · board rate limit if it gets silly · more ghost polish · daily clarity seed · kill leftover placeholder energy ok that was a lot of catchup for a monkey that just wants u to read words out loud. if ghost or clarity feels off lmk — especially brave ppl, i see u 🐒🐒🍌
Ships:
monkeyspeak v0 is live 🙊 been building this for a while — it’s the spoken equivalent of monkeytype. you get a prompt, hit the mic, read it out loud, and the app tracks how fast and how accurately you speak. what’s in v0: speed mode pick 15s, 30s, 60s, or 120s live net wpm (filler words like “um” and “uh” get stripped) sentences, numbers, or paste your own custom text words dissolve on screen as you nail them monkey mascot animates based on your speaking momentum personal bests per duration + prompt type clarity mode type or paste what you said word-level diff against the original prompt grades from s down to “needs work” practice mode that rebuilds a prompt from words you missed ui refresh new landing hero: “how fast⚡can you speak 🙊” the monkey mascot IS the start button now — click it to begin speech-themed doodles, clean flat design, no gradient bloat sprite animations via gsap under the hood next.js 14 + typescript + zustand web speech api by default (no api key needed) optional deepgram integration with server-side proxy (key never hits the browser) silero vad for voice activity detection try it: clone the repo, npm install, npm run dev, allow mic access, go. github.com/nothariharan/monkeyspeak
monkeyspeak update is live 🙊 spoken monkeytype —> read prompts out loud, get scored on speed and clarity. v0 had the core loop. this ship adds the stuff that makes it feel like a real app. what’s new: leaderboard global board via supabase — nickname + emoji after a run, no signup home page 3-column layout with leaderboard, hero, and your personal best card your top score card still tracks local pb for the current duration, not whoever is #1 globally stats + profile /stats dashboard — streak, totals, recent runs, wpm charts, achievements profile hub drawer — activity heatmap, badges, lifetime stats everything uses the same minimal desk ui as home speech fixes try it: monkeyspeak-delta.vercel.app github.com/nothariharan/monkeyspeak...
|
1793094624.7271302
|
1793181024.7271302
|
|
67794
|
TeenyTinyStories by @yf | Stardance
|
yf
|
0
|
30.16
|
0
|
[]
|
[{"post_id": 78495, "ts": "202 [{"post_id": 78495, "ts": "2026-10-10T23:27:58Z", "hours": 4.4483, "text": "Evals are done Finally, after two days of tweaking values and rewriting evaluation prompts, the eval is all done. As per the original paper I employed a GPT-Eval adjacent score (albeit with Ministral-14B) as the LLM judge) and an Elo system (with GPT 5.6 Luna as the judge). The results did significantly corroborate with each other, which validates our conclusion that TTS-1M did as well or exceeded (slightly) as TS-1M whilst TTS-33M was poorer in performance compared to TS-33M though still competitive. Both the 33M models significantly outcompeted the 1M models, as expected and serves as an auxiliary validation."}, {"post_id": 77963, "ts": "2026-10-09T00:54:28Z", "hours": 4.7397, "text": "While we’re waiting…"}, {"post_id": 77744, "ts": "2026-10-08T04:38:53Z", "hours": 4.0003, "text": "Models are finished The models have officially been fully trained and are ready for evaluation. I trained a 1M and a 33M (nominal) parameter model on the TTS dataset; at validation, shows much promise. I also drafted the Methods section and the Related Works section. I will continue to work on the evaluation section and the discussion section, before writing the final paper."}, {"post_id": 77443, "ts": "2026-10-07T00:58:48Z", "hours": 4.3611, "text": "On the Models The 1M model is finished training with tts 1.9870 / 7.29 (4.02M tok), ts_cap 2.3691 / 10.69, ts_full 2.3852 / 10.86 . It cost me around 10 USD but I am happy with its results. The 33M model is now undergoing training with ETA in around 10 hours. The models themselves use a GPT-Neo architecture with the EleutherAI/GPT-Neo-125M tokenizer, as per the original paper. I also worked on the paper, namely the methodology section. I don’t know if I can do the 3/9/28M models however due to budget constraints but I will try."}, {"post_id": 76948, "ts": "2026-10-05T05:10:19Z", "hours": 3.3178, "text": "Devlog 3 Full corpus generation finished ASAP on 4090. You can find the TTS corpus on ableian/teenytinystories on Huggingface. Now, I followed the architecture specified by Eldan and Li and started training the 1M/3M and 9M models. Will finish in 16 hours, so I’m excited!"}, {"post_id": 76665, "ts": "2026-10-04T09:26:41Z", "hours": 3.1161, "text": "Devlog 2 In here, I introduce you to the official generation pipeline.I used the TinyStories-Instruct-33M checkpoint as the progenitor model. It accepts a structured header as follows: Words: verb, noun, adjective Features: X, Y [optional] Story: The words were chosen from the original TS word list from TinyStories-Instruct-valid.txt . The features were derived from an optional feature set, sampled from the empirical distributions in the same TinyStories-Instruct data. Quality control was also enforced by rejecting incomplete stories and stories that were too long or too short. I wrote an .ipynb and began generating stories in batches of 1024 on a rented 4090 (CUDA) and my M1 MacBook Pro (MPS)! Should be ready in around 8 hours."}, {"post_id": 76587, "ts": "2026-10-04T02:34:54Z", "hours": 6.1778, "text": "1 On TinyStories TinyStories (Eldan & Li, 2023) represented a significant breakthrough in the field of language model training, providing evidence that an synthetic (i.e. LLM-generated) corpus could be used to efficiently train a Small Language Model (SLM) fluent in English and basic story generation. The pipeline is direct: Eldan and Li seeded ChatGPT (3.5 and 4) with story generation prompts, generating over 470 M tokens (~2.1 million stories), before training a 1, 3, 9, 28 and 33M SLM. Through a range of evaluation metrics, they demonstrated that these models could output fluent English, and for larger and more layered models, could generate semi-coherent stories. 2 On TeenyTinyStories Now, I propose a step further: what happens if we take the Instruct variant of the official checkpoint, TinyStories-Instruct-33M instead of a frontier model like the GPT series, to generate a new corpus of data and train the same models on this corpus instead? This is the core of this project.Note: I understand that this is fundamentally a research project rather than produce-a-usable-software type thing you see on Stardance, so I will produce a bunch of usables, including a conversation-tuned instruct variant of the 33M which you can chat with in your browser in the form of a website. The core results, however, will be in the form of an ArXiV preprint before I submit to NHSJS. What I did After I skimmed through the 2023 paper, I summarised their corpus generation pipeline as follows:The generator used GPT-3.5 and GPT-4 via the OpenAI APIPrompt composition composed of a list of required words (one verb, one noun, one adjective), and an (optional) story feature (i.e. dialogue, bad ending, moral value, plot twist…) to generate a story. Example: “Write a short story (3-5 paragraphs) which only uses very simple words that a 3 year old child would likely understand.The story should use the verb “decorate”,the noun “thunder”and the adjective “ancient”.The story should have the following features:the story should contain at least one dialogue,the story has a bad ending.Remember to only use simple words!”Accordingly, I wrote the draft introduction and the Related Works section, and planned the Methodology."}]...
|
Title: TeenyTinyStories by @yf | Stardance
Devlog Title: TeenyTinyStories by @yf | Stardance
Devlogs:
1 On TinyStories TinyStories (Eldan & Li, 2023) represented a significant breakthrough in the field of language model training, providing evidence that an synthetic (i.e. LLM-generated) corpus could be used to efficiently train a Small Language Model (SLM) fluent in English and basic story generation. The pipeline is direct: Eldan and Li seeded ChatGPT (3.5 and 4) with story generation prompts, generating over 470 M tokens (~2.1 million stories), before training a 1, 3, 9, 28 and 33M SLM. Through a range of evaluation metrics, they demonstrated that these models could output fluent English, and for larger and more layered models, could generate semi-coherent stories. 2 On TeenyTinyStories Now, I propose a step further: what happens if we take the Instruct variant of the official checkpoint, TinyStories-Instruct-33M instead of a frontier model like the GPT series, to generate a new corpus of data and train the same models on this corpus instead? This is the core of this project.Note: I understand that this is fundamentally a research project rather than produce-a-usable-software type thing you see on Stardance, so I will produce a bunch of usables, including a conversation-tuned instruct variant of the 33M which you can chat with in your browser in the form of a website. The core results, however, will be in the form of an ArXiV preprint before I submit to NHSJS. What I did After I skimmed through the 2023 paper, I summarised their corpus generation pipeline as follows:The generator used GPT-3.5 and GPT-4 via the OpenAI APIPrompt composition composed of a list of required words (one verb, one noun, one adjective), and an (optional) story feature (i.e. dialogue, bad ending, moral value, plot twist…) to generate a story. Example: “Write a short story (3-5 paragraphs) which only uses very simple words that a 3 year old child would likely understand.The story should use the verb “decorate”,the noun “thunder”and the adjective “ancient”.The story should have the following features:the story should contain at least one dialogue,the story has a bad ending.Remember to only use simple words!”Accordingly, I wrote the draft introduction and the Related Works section, and planned the Methodology.
Devlog 2 In here, I introduce you to the official generation pipeline.I used the TinyStories-Instruct-33M checkpoint as the progenitor model. It accepts a structured header as follows: Words: verb, noun, adjective Features: X, Y [optional] Story: The words were chosen from the original TS word list from TinyStories-Instruct-valid.txt . The features were derived from an optional feature set, sampled from the empirical distributions in the same TinyStories-Instruct data. Quality control was also enforced by rejecting incomplete stories and stories that were too long or too short. I wrote an .ipynb and began generating stories in batches of 1024 on a rented 4090 (CUDA) and my M1 MacBook Pro (MPS)! Should be ready in around 8 hours.
Devlog 3 Full corpus generation finished ASAP on 4090. You can find the TTS corpus on ableian/teenytinystories on Huggingface. Now, I followed the architecture specified by Eldan and Li and started training the 1M/3M and 9M models. Will finish in 16 hours, so I’m excited!
On the Models The 1M model is finished training with tts 1.9870 / 7.29 (4.02M tok), ts_cap 2.3691 / 10.69, ts_full 2.3852 / 10.86 . It cost me around 10 USD but I am happy with its results. The 33M model is now undergoing training with ETA in around 10 hours. The models themselves use a GPT-Neo architecture with the EleutherAI/GPT-Neo-125M tokenizer, as per the original paper. I also worked on the paper, namely the methodology section. I don’t know if I can do the 3/9/28M models however due to budget constraints but I will try.
Models are finished The models have officially been fully trained and are ready for evaluation. I trained a 1M and a 33M (nominal) parameter model on the TTS dataset; at validation, shows much promise. I also drafted the Methods section and the Related Works section. I will continue to work on the evaluation section and the discussion section, before writing the final paper.
While we’re waiting…
Evals are done Finally, after two days of tweaking values and rewriting evaluation prompts, the eval is all done. As per the original paper I employed a GPT-Eval adjacent score (albeit with Ministral-14B) as the LLM judge) and an Elo system (with GPT 5.6 Luna as the judge). The results did significantly corroborate with each other, which validates our conclusion that TTS-1M did as well or exceeded (slightly) as TS-1M whilst TTS-33M was poorer in performance compared to TS-33M though still competitive. Both the 33M models significantly outcompeted the 1M models, as expected and serves as an auxiliary validation....
|
1793116047.1217725
|
1793720847.1217725
|
|
53530
|
Robotic Arm by @tanayg | Stardance
|
tanayg
|
0
|
30.15
|
0
|
[]
|
[{"post_id": 65188, "ts": "202 [{"post_id": 65188, "ts": "2026-09-10T04:39:39Z", "hours": 6.2025, "text": "Polishing I worked on adding motor screws so I could mount all the motors to the 3d printed parts. For most of the motors this was pretty simple, but for some, mainly segment 4, I had to split the segment into two pieces so the screws would be accessible. This took a bunch of time, but worked out. Segment 5 was also time consuming because it didn’t have enough clearance for mounting the screws on the front, so I spent a while trying to think of solutions before discovering that there were mounting holes on the back of the motor as well. I used those for segment 5, but I have a feeling that the order of assembly is going to be very important for this to work. I also had to update the CAD of the motor to be more accurate instead of a box because I needed the geometry to be accurate in my tight spaces. Then I updated the end effectors to allow clearance for a washer which I needed for the driven gear. At this point I was feeling good about the CAD and felt it was finished, so I probably won’t work on it anymore until I actually build and test it. I also made a wiring diagram and finished up my BOM but forgot to record it. Anyway, now I am ready to publish everything into a Github Repository and submit for funding."}, {"post_id": 61856, "ts": "2026-09-04T23:49:41Z", "hours": 3.1661, "text": "Fixing Technical Issues I checked the CAD for completeness and making sure it was possible to assemble. I realized that there were no holes for accessing set screws for joint 3, so I added those. I also added a notch under the servo 3d printed shaft for a screw which goes under it. Additionally, I added a huge countersink in the bottom of the lid so that the screws I bought would actually fit. Then, I figured out where all the wires on the arm need to go and added slots to some segments so that I can zip tie the wire bundle to the arm. I still need to: Finalize the BOM Create a Github repo Make a full wiring schematic"}, {"post_id": 58614, "ts": "2026-08-31T02:55:01Z", "hours": 6.2783, "text": "Stabilizing Joints I realized that the motors powering joints 3 and 4 were very badly supported and also cantilevered, which would result in the motor’s internal bearing taking all the load and possibly breaking. I had to redo it, and the first change I made was adding a plum coupler to take the load off of the servo’s internal bearing. I then added 2 more bearings to actually support the load, but once I was done with the first version (see the second picture) I realized it was too big, which would increase the reach but significantly decrease the lifting capacity. So, I redesigned it to be offset from its pivot, which would allow the motor to be mounted on the other end of the pivot (see third picture) and also shorten the arm. I also had the same cantilever problem on joint 4 so I changed it to support the shaft from both sides (see fourth picture). I then assembled everything in CAD and it ended up weighing around 930 grams, which isn’t terrible. Anyway, next time I need to: Make sure everything can be physically assembled Make a wiring diagram Update the BOM with all the components for wiring and links Thanks for reading!"}, {"post_id": 56367, "ts": "2026-08-28T03:35:52Z", "hours": 6.2686, "text": "Today I worked on the base. When making the belt ratio, I accidentally flipped the pulley belts to make it a speed 2:1 instead of a torque 1:2, so I had to redo it which took a while. Once I was done with the base, I attached it to the rest of the arm and it looks good. However, I did realize that a cantilevered motor holding up the weight of the arm (the wrist rotate) is bound to break, so I have to find out how to add a bearing so it is at least supported better. Also it is currently using a plastic printed adapter so gotta fix that as well, I should find a metal adapter of some kind. Things left to do: Replace all the weak plastic adapters with a stronger material, probably metal Find a way to support the wrist rotate joint better with a bearing Make the claw a bit smaller so it is more compact Find out how and where to attach the camera Add some speakers for the audio triangulation feature I want to add (basically, it detects the difference in between the time audio signals are received and triangulates where the source of the sound is. Idrk if this is a thing but it would be cool if the robot could look at me when I start talking.)"}, {"post_id": 55235, "ts": "2026-08-26T21:28:08Z", "hours": 5.8258, "text": "Yesterday I worked on making the whole arm assembly by connecting the parts I had already made to the fasteners I am planning to buy. I had to fix a few compatibility issues but got the arm to look complete. After that, I compiled a full parts list so that I knew what I needed to order for the arm. Once that was done, I realized that the base was way too small and would tip over. It also did not have ay method of power, and because I want the arm to be easily portable, I want to put all the electronics and power in the base. So, I CADed the layout and made a simple electrical diagram in Canva, and using that I was able to figure out where everything should go. The first iteration of the base was WAY too big (400 x 200 mm) so I made it more compact by rotating the power supply and moving everything closer together. Also experimented with most compact arm orientation (see screenshot). I still need to: Figure out what camera I should use and where/how to mount it Make the lid Add cooling vents for the power supply/computer fans Figure out how I am going to gear/put a timing belt the base for more accuracy while still not losing much torque (like deciding ratio)"}, {"post_id": 53455, "ts": "2026-08-24T00:54:16Z", "hours": 2.4114, "text": "Today I worked on the end effector attachments for the arm. This included the simple drill end effector as well as the claw end effector. I already had prototype CADs of these, and I previously had redesigned the arm to make it lighter and improve the range of motion with better motor placement. So today, I adapted the end effectors to work with the new arm design. Things that still need to be worked on: Make the claw lighter and shorter Update the CAD with all the fasteners and other hardware Make the parts list for the arm"}]...
|
Title: Robotic Arm by @tanayg | Stardance
Devlogs Title: Robotic Arm by @tanayg | Stardance
Devlogs:
Today I worked on the end effector attachments for the arm. This included the simple drill end effector as well as the claw end effector. I already had prototype CADs of these, and I previously had redesigned the arm to make it lighter and improve the range of motion with better motor placement. So today, I adapted the end effectors to work with the new arm design. Things that still need to be worked on: Make the claw lighter and shorter Update the CAD with all the fasteners and other hardware Make the parts list for the arm
Yesterday I worked on making the whole arm assembly by connecting the parts I had already made to the fasteners I am planning to buy. I had to fix a few compatibility issues but got the arm to look complete. After that, I compiled a full parts list so that I knew what I needed to order for the arm. Once that was done, I realized that the base was way too small and would tip over. It also did not have ay method of power, and because I want the arm to be easily portable, I want to put all the electronics and power in the base. So, I CADed the layout and made a simple electrical diagram in Canva, and using that I was able to figure out where everything should go. The first iteration of the base was WAY too big (400 x 200 mm) so I made it more compact by rotating the power supply and moving everything closer together. Also experimented with most compact arm orientation (see screenshot). I still need to: Figure out what camera I should use and where/how to mount it Make the lid Add cooling vents for the power supply/computer fans Figure out how I am going to gear/put a timing belt the base for more accuracy while still not losing much torque (like deciding ratio)
Today I worked on the base. When making the belt ratio, I accidentally flipped the pulley belts to make it a speed 2:1 instead of a torque 1:2, so I had to redo it which took a while. Once I was done with the base, I attached it to the rest of the arm and it looks good. However, I did realize that a cantilevered motor holding up the weight of the arm (the wrist rotate) is bound to break, so I have to find out how to add a bearing so it is at least supported better. Also it is currently using a plastic printed adapter so gotta fix that as well, I should find a metal adapter of some kind. Things left to do: Replace all the weak plastic adapters with a stronger material, probably metal Find a way to support the wrist rotate joint better with a bearing Make the claw a bit smaller so it is more compact Find out how and where to attach the camera Add some speakers for the audio triangulation feature I want to add (basically, it detects the difference in between the time audio signals are received and triangulates where the source of the sound is. Idrk if this is a thing but it would be cool if the robot could look at me when I start talking.)
Stabilizing Joints I realized that the motors powering joints 3 and 4 were very badly supported and also cantilevered, which would result in the motor’s internal bearing taking all the load and possibly breaking. I had to redo it, and the first change I made was adding a plum coupler to take the load off of the servo’s internal bearing. I then added 2 more bearings to actually support the load, but once I was done with the first version (see the second picture) I realized it was too big, which would increase the reach but significantly decrease the lifting capacity. So, I redesigned it to be offset from its pivot, which would allow the motor to be mounted on the other end of the pivot (see third picture) and also shorten the arm. I also had the same cantilever problem on joint 4 so I changed it to support the shaft from both sides (see fourth picture). I then assembled everything in CAD and it ended up weighing around 930 grams, which isn’t terrible. Anyway, next time I need to: Make sure everything can be physically assembled Make a wiring diagram Update the BOM with all the components for wiring and links Thanks for reading!
Fixing Technical Issues I checked the CAD for completeness and making sure it was possible to assemble. I realized that there were no holes for accessing set screws for joint 3, so I added those. I also added a notch under the servo 3d printed shaft for a screw which goes under it. Additionally, I added a huge countersink in the bottom of the lid so that the screws I bought would actually fit. Then, I figured out where all the wires on the arm need to go and added slots to some segments so that I can zip tie the wire bundle to the arm. I still need to: Finalize the BOM Create a Github repo Make a full wiring schematic
Polishing I worked on adding motor screws so I could mount all the motors to the 3d printed parts. For most of the motors this was pretty simple, but for some, mainly segment 4, I had to split the segment into two pieces so the screws would be accessible. This took a bunch of time, but worked out. Segment 5 was also time consuming because it didn’t have enough clearance for mounting the screws on the front, so I spent a while trying to think of solutions before discovering that there were mounting holes on the back of the motor as well. I used those for segment 5, but I have a feeling that the order of assembly is going to be very important for this to work. I also had to update the CAD of the motor to be more accurate instead of a box because I needed the geometry to be accurate in my tight spaces. Then I updated the end effectors to allow clearance for a washer which I needed for the driven gear. At this point I was feeling good about the CAD and felt it was finished, so I probably won’t work on it anymore until I actually build and test it. I also made a wiring diagram and finished up my BOM but forgot to record it. Anyway, now I am ready to publish everything into a Github Repository and submit for funding....
|
1792752485.6729531
|
1793357285.6729531
|
|
33858
|
Tiny Jarvis by @louisd | Stardance
|
louisd
|
0
|
30.13
|
0
|
[]
|
[{"post_id": 65046, "ts": "202 [{"post_id": 65046, "ts": "2026-09-09T21:35:51Z", "hours": 2.1347, "text": "Added a Spotify waveform animation This will play on the OLED screen while the AI is speaking out loud. The waveform is generated in real time, randomly, by an algorithm, and displayed through the python library luma.oled Sadly, I still haven’t received funding and can’t continue with the hardware part of this project. I don’t know or understand why the funding keeps getting refused, even though I do all the right things as indicated everytime, and this is very frustratung because I literally went to the lengths of designing my own PCB from scratch, all of this to not get funded. I’m short of ideas for the software part now… still waiting for the funding (2 months btw, 22 demands)"}, {"post_id": 54709, "ts": "2026-08-25T19:42:51Z", "hours": 1.4408, "text": "“Hey Tiny Jarvis. where’d I put my keys again?” Tiny_Jarvis now has memory ! I’ve implemented a simple sqlite local database in Python to store every question the user asks. (first time doing this ! very satisifying) This means it can help you remember timings, dates, locations… anything! However, this also means that all these cumulatively added memories make the prompt for the AI longer and longer Which is why for the moment it only remembers the last 5 prompts. This may seem like a small amount, but for the most it is sufficient for remembering recent prompts. Should I make it remember more stuff? tell me"}, {"post_id": 52300, "ts": "2026-08-22T12:38:39Z", "hours": 2.8067, "text": "“Hey Tiny Jarvis, what’s going on in the world?” New feature: Tiny Jarvis automatically fetches the news from BBC World, chooses the most impactful headline, reads the articles and generates a summary! This happens in the background, every hour, to ensure that the news is recent. I discovered smth called RSS feeds, which is basically a tool that feeds website updates back to you in the form of XML files. Then I learnt about the feedparser python library, as well as trafilatura , for extracting text from HTML (for getting the text from the articles), which made the job ten times easier. However, this process does take some time: Step 1: script parses the BBC World feed Step 2: local AI chooses between the thirteen daily headlines Step 3: script fetches the associated articles text Step 4: local AI summarizes ALL THREE articles. On a Raspberry Pi 5, obviously, this can take at least 5 minutes. Now for the moment this is a bit biased, because I chose the “Technology” category for the RSS feed 😅 but i’ll add the option to change it later Is this a good feature? Please tell me"}, {"post_id": 51503, "ts": "2026-08-21T08:21:10Z", "hours": 2.5022, "text": "“Hey Tiny Jarvis, play Smooth Criminal” mopidy-youtube integrated! and it works! All you have to do is press the button, say out loud “Play (song) …” and it will search for it in Youtube music (FREE MUSIC!!!) and play it. You can then adjust the volume with the rotary encoder, which is satisfying asf. This was one hell of a debugging session, holy I had to search for forked repos on Github that fixed a obscure yt-dlp issue, and somehow it works. Anyways apart from that, i restructured the project code repo entirely, everything is now separated into different sections like firmware and pcb to distinguish hardware from software. New: the install.sh was finally tested and it works perfectly after a few tweaks! woohoo! Oh and finally: rewrote my README.md as recommended by the Stardance guides, and yh I agree it looks better Tell me if you have any other ideas of features to implement"}, {"post_id": 46357, "ts": "2026-08-13T15:06:41Z", "hours": 1.9442, "text": "Music handler + system metrics idle screen Time to make Tiny_Jarvis a little more like the real Jarvis…. SYSTEM METRICS SCREEN! Displays in real time: battery life, cpu temperature, current time on the OLED screen. Finished up the Mopidy part of the music player, can’t test it yet sadly (i don’t have access to my rpi5 right now) it was way more difficult than I thought AIM: “Play …” -> searches through free music online database like Youtube music for query and plays the music if it finds it. Added another quirky feature: flip a coin Tell me if you have ideas of other new useful features"}, {"post_id": 44309, "ts": "2026-08-09T23:46:42Z", "hours": 1.6589, "text": "New timer feature implemented, plus more Created a handle_prompt() function in main.py to handle any task-specific prompt given by the user. For example: if I say “Play …” or “Set a timer of …” then it will recognize this specific pattern and handle those actions perfectly, and if it’s something else than the AI will just answer it. It’s scalable, so I can add more features in the future, such as “Definition of” or idk (if you have any ideas lemme know in the comments) Created a timer.py file which handles the timer feature, which is sort of complicated but now works (it displays on-screen in real time, which is pretty cool) All in all, main.py is now very clean and readable."}, {"post_id": 42688, "ts": "2026-08-07T15:20:43Z", "hours": 1.0628, "text": "Cleaned up main.py and cooking_helper.py It’s been a while since I last worked on this project, I’m still waiting for my hardware funding request to be approved, which made me lose motivation. But I’m back, so here’s what’s new: I separated the main function in cooking_helper.py Unix-style, so that everything is cleaner and easier to debug or scale (in case the CSV file gets bigger) Now it doesn’t need to open the csv everytime, instead it just opens it once upon startup. In main.py , created an initialize() function which separates the tasks into an easier format. The AssistantDisplay class and the list of recipes is then passed onto the while True loop. The main() function is now much simpler: it calls the initialization function, then in the loop it checks whether there are new recordings thanks to an imported function, if there are not it waits 0.2 seconds before checking again, and if there is then it runs the process_recording() function. Very clean!"}, {"post_id": 34645, "ts": "2026-07-25T15:19:12Z", "hours": 1.0297, "text": "Upgraded the cooking helper + critical bug fixes Translated the recipes to english - will add more later Fixed a critical issue with initializing and importing different python files, now main.py has the real control of initialization thanks to a listener.init_listener() function. Added a speak(['Ingredients']) in main.py so Tiny_Jarvis will speak the ingredients of the chosen recipe out loud Switched from hardcoding random.randint(0,33) to random.choice(list) way simpler and easier to read, and created a format_cooking_sentence(recipe_object) function so that main.py doesn’t have to manage that, way better Future changes I might implement: apparently Raspberry Pi OS manages audio through the Advanced Linux Sound Architecture (ALSA) which is responsible for the hardware drivers, the audio routing and control, and the low-level utilities such as the commands I often use, such as alsamixer , aplay and arecord So when two python libraries that need to either record audio or output audio call ALSA to do so, it can lead to conflicts. In this case, sounddevice and pyaudio which are both wrappers of the C library PortAudio . So a future change would be only using sounddevice for example, or vice versa. This has another hidden advantage: removing a possibly finnicky dependency and making the whole process smoother, since compiling C on a Raspberry Pi can be difficult at times."}, {"post_id": 34096, "ts": "2026-07-24T16:00:12Z", "hours": 0.4331, "text": "Added a cool silkscreen logo Made an entry for the 23rd of July in JOURNAL.md Found and added this logo from The Noun Project . Really cool website btw. This icon clicked with me bc it really represents what Jarvis (or AI chatbots are in general) is, that being SIMULATED intelligence, and makes us remember that’s its all just complex math equations and not real intellect. Fixed some DFM issues, and rerouted a lot of traces, some were going over the mounting holes Tried to make more space for the logo but broke the whole thing and had to Ctrl+z my way out of there (help) Looks cool no?"}, {"post_id": 33554, "ts": "2026-07-23T16:16:59Z", "hours": 0.8894, "text": "PCB + updates on the cooking feature Wrote an entry in JOURNAL.md for today’s work Worked a lot on the PCB in EasyEDA Pro, mostly clearance issues but also a lot of struggling with the GND pour. Updates on the cooking feature: Thought it would be cool to be able to show the ingredients on the OLED screen So updated the AssistantDisplay class and created a neat function to show text using the python library luma.oled Problem is it would go off screen, so I implemented the built-in textwrap module and it can now display 5 lines. Will get to translating everything to english later, promised Anyways if anyone has any recommendations for the PCB don’t hesitate to leave a comment!"}, {"post_id": 32963, "ts": "2026-07-22T13:37:48Z", "hours": 1.3981, "text": "Added a cooking recipes feature for no reason Created a cooking_helper.py in a cooking/ folder OCR’d half of a cooking book with help from Gemini and put everything in a beautiful recipes.csv Used the csv.DictReader object to access the info and organize it into a list, very useful. Updated main.py so that when the user’s prompt starts with “Cooking”, it takes a random recipe from the csv file (using the random.randint(a, b) function) and returns a formatted sentence with all the info for cooking that recipe. Made this cos I’m really bad at cooking and it could also benefit others, you never know."}, {"post_id": 32400, "ts": "2026-07-21T15:40:27Z", "hours": 0.4131, "text": "Schematic and PCB tweaking Made an entry for today in JOURNAL.md I’ll keep this short, but basically: huge issues with my schematic, electrically incorrect for the most part, some useless components, which then translated into the actual PCB, having to rewire traces manually, making tons of mistakes along the way and spending waay too much time repairing them. Still waiting for the funding request to be approved before I can order these. Huge thanks to M-Mrk in the Slack electronics channel for all his help, he saved me"}, {"post_id": 31821, "ts": "2026-07-20T14:39:34Z", "hours": 1.0108, "text": "Error handling time! + bug and dependency fixing Now that I have a clean slate to test my project on, I ran python main.py and somwhow got three errors in a row. Spent an hour adding try s and except Exception as e everywhere to prevent this. Now debugging is way easier and more user-friendly. Fixed some bugs such as ssd1106 not being a real OLED screen part name As well as gpiozero missing the rpi-lgpio library, which needs system-wide packages swig and liblgpio-dev so yh dependency hell. Almost everything should be error-proof now. I tested it, and no errors popped up, just friendly reminders that I2C wasn’t enabled, or that my buttons weren’t detected, or no screen. Update install.sh with these changes, now works perfectly."}, {"post_id": 31697, "ts": "2026-07-20T09:51:03Z", "hours": 1.2397, "text": "RPI5 OS Switch + Tiny_Jarvis easier to put in place Worst day in my life. Tried to flash a Raspberry Pi OS Lite (64-bit) on the raspberry pi 5 (which btw has an NVMe SSD), and it did NOT go well: First flash using the Imager: didn’t work, nothing happened, the Pi started speaking in freaking morse code Spent an hour trying to decode that morse code according to documentation, thought it was an EEPROM bootloader issue, made a diagnostic card, made a factory reset card, nope. Realized I could plug it through HDMI to my projector; did that: it was asking me for a username. Didn’t have a USB keyboard so couldn’t type it in. Almost threw the Pi out of the window cos I configured all that in the fricking Imager. Realized I was using the Imager from Flathub and not rpi-imager Retried the whole thing with that Imager: still didn’t work. Spent two hours doing the same thing over and over: flashing the card with the Imager, going into the files, editing user-data , cloud-init-ouput.log , etc… realized the Imager wasn’t writing the information in those files but others, booting it up into HDMI, checking the logs, managing to bypass username but not keyboard layout, etc… I EVEN TRIED LEGACY VERSIONS OF THE OS AND CREATING A wpa_supplicant.conf . Atp I was going to crash out but then I checked my rpi-imager version (even though I had updated it) and turns out my laptop just couldn’t get the latest version : it was 1.8.0 , not 2.1.0 (the latest one). Downloaded the newest version, ran it, and it worked. I have officially lost faith in humanity. Anyways I read my README.md and decided that it was getting way too complicated (the installation part) so I pasted that whole part into Kimi K3 and he made me a install.sh which is basically fire since you just run chmod +x install.sh ./install.sh and the whole system-wide-packages-and-dependencies are all installed in the right order, easily. This is tested and proved (i did it with the newly flashed OS)."}, {"post_id": 30725, "ts": "2026-07-18T15:25:56Z", "hours": 1.0417, "text": "Major software update + PCB testing Found out yesterday that Ollama is just the whole UI and simplificator of use for the C library llama.cpp And turns out there’s a python wrapper for that library, llama-cpp-python , which has two advantages over Ollama: Faster Way more flexible, we can get every last bit of performance from the rpi5 So I updated ai.py with this new feature, there are more settings than Ollama for optimizing performance for CPU-only (4 cores) which is great, however I had to download a .gguf from Hugging Face and accidentally ended up being given access to a repository for the model?! so i can now propose changes to that repo, for some reason… Fixed a typo which would’ve raised a TypeError in main.py Made it so the second button shuts down the Pi safely Wrote another entry in JOURNAL.md , where I soldered and tested the prototype PCBs I ordered from JLCPCB"}, {"post_id": 30358, "ts": "2026-07-17T20:44:15Z", "hours": 0.6842, "text": "JOURNAL.md new entries! Added some entries for the 7th and 8th of July, where I delved into PCB making from scratch! As well as an entry for the 17th of July, when I received my first PCBs - spoiler alert: they do not work as intended Made a lot of mistakes, but managed to make a rather good first try, which will hopefully lead to a better final PCB (i’m working on that) This time I’ll check the DFM before ordering Hope you appreciate my storytelling!"}, {"post_id": 29013, "ts": "2026-07-15T17:41:24Z", "hours": 1.1994, "text": "JOURNAL.md started + Hardware time! Created a JOURNALmd file Documented everything I did on the 5th and 6th of July, with photos and some explanations as to what I was doing and trying to achieve To make it short: prototyping and creating some visuals for the OLED screen/UI, as well as assembling everything together. Connected README.md to JOURNAL.md You can read it here"}, {"post_id": 28941, "ts": "2026-07-15T15:42:24Z", "hours": 0.8244, "text": "Finishing up the software part Took on the task of making my code more readable, and as such easier to debug Created a AssistantDisplay class to better manage the OLED threads - way cleaner now Put sentence_buffer() in ai.py and get_lastest_recordings() in listener.py , now the only function in main.py is main() . Clean! Squeezed a bit more performance out of the faster-whisper model by setting cpu_threads to 4 and beam_size to 1, even if we’ll lose a tiny bit in quality. Still a good tradeoff Detected an avoided a critical issue: if glob detected the file while it was being written to and passed it on to faster-whisper , then it would be corrupted and be mashed garbage. So I read some documentation about the queue module and used that, it’s way better and easier in the end."}, {"post_id": 28791, "ts": "2026-07-15T09:10:34Z", "hours": 0.9594, "text": "Faster response speed thanks to streaming audio Ok so ollama ’s ChatResponse class allows, when creating an instance of it, to write stream = True . So I could stream the outputted response directly into Piper TTS and into the speakers. Except it would sound very weird, very robotic-like since the chatbot outputs tokens, not words. I then created a function called sentence_buffer() that seperates them into a list of words, that are then given to Piper TTS in speaker.py Then I used a library called pyaudio to stream the Piper TTS output into the speakers! it’s actually just a Python wrapper for a C library called portaudio , so I ran into a LOT of dependency issues, but that’s a battle for another day. Moved a few functions that were in main.py into other files for better management Other small modifications"}, {"post_id": 28461, "ts": "2026-07-14T18:30:50Z", "hours": 1.0342, "text": "Threading implementation for better speed Today I decided to learn about the python module threading , and realized it wasn’t that difficult to implement in my project. The issue was: when I ran oled(\"thinking_animation.gif\") it ran sequentially, so the whole script had to wait for the animation to finish, which obviously can’t happen. So I created different threads for each animation/png, and made a “switch”, better known as a threading.Event() which enabled me to manage the “workers” way better (sorry, i’m getting used to the vocabulary) Also I added comments everywhere in main.py for better explainability. Finally I adjusted the code in OLED.py with the switch implemented and added some small user-friendly checks throughout my project. Hopefully everything works! Note: sadly it will be difficult to use threads in the rest of the code, since the process is, at its core, sequential. Faster-whisper needs audio to proceed, the ollama AI chatbot needs a prompt to continue, etc…"}, {"post_id": 27948, "ts": "2026-07-13T21:51:29Z", "hours": 1.2056, "text": "README.md first commit Spent a LOT of time on the README.md, I want my project to be reusable so made a good How to install section, there are tons of different commands to run to ensure it works first try Didn’t write anything in the Hardware section, but will soon. (my first PCBs don’t work yet) In OLED.py : it now supports gifs, which is great because of Piskel which can turn simple animations into gifs. Made some visuals in Piskel for the screen ( thinking_animation.gif and button_pressed.gif ) Simplified drastically listener.py for future debugging. One of the biggest issues with this project so far: the difficulty to test it! I don’t have all the required materials yet. I might use the pytest module? we’ll see"}, {"post_id": 27692, "ts": "2026-07-13T14:03:16Z", "hours": 1.3119, "text": "Linking everything together Updated the project structure with more python scripts so that it now looks like this: Tiny_Jarvis/ ├── .venv/ ├── piper_voices/ ├── recordings/ # New ├── assets/ # New ├── ai.py ├── listener.py # New ├── main.py ├── OLED.py ├── speaker.py ├── transcriber.py # New ├── README.md └── requirements.txt What’s new: Added an assets/ folder for the OLED screen visuals Added a recordings/ folder for the audio captured by the mic when the user is speaking Created listener.py : actively listens for a button press; when pressed, records audio through the usb mic until the button is released, then that audio is sent to transcriber.py Created transcriber.py : takes that audio and passes it as input into faster-whisper to “translate” into text ! And finally, first time linking everything together in main.py : there is still a lot to be done if we are talking speed/efficiency, but the core pipeline is done. The user presses a button to talk, releases it when finished, the audio is captured and translated into text by faster-whisper , then that text is given as prompt to the AI chatbot (like Qwen3-0.6B . The response is then turned into a voice using Piper TTS and outputted through the speaker! Possible future implementation of the threading module to make it faster, even though I have no idea how it works."}, {"post_id": 27640, "ts": "2026-07-13T12:18:46Z", "hours": 1.9014, "text": "Initializing the project Created a virtual environment .venv/ so that all necessary python modules and packages are cleanly installed together. Created a requirements.txt , where I put all the python modules I import in the project so that people can reuse it. Created a piper_voices/ directory and downloaded a medium voice via python -m piper.download_voices en_US-lessac-medium Created 4 different files: Tiny_Jarvis/ ├── ai.py # the AI chatbot ├── main.py # the main script ├── OLED.py # The visuals! └── speaker.py # the audio Wrote the basic code for each of those files. For the moment, I concentrate on making importable functions that function indepedently, and will link them together in main.py later on. Created a README.md . It’s empty for now, will fill it in later."}]...
|
Title: Tiny Jarvis by @louisd | Stardance
Devlogs Title: Tiny Jarvis by @louisd | Stardance
Devlogs:
Initializing the project Created a virtual environment .venv/ so that all necessary python modules and packages are cleanly installed together. Created a requirements.txt , where I put all the python modules I import in the project so that people can reuse it. Created a piper_voices/ directory and downloaded a medium voice via python -m piper.download_voices en_US-lessac-medium Created 4 different files: Tiny_Jarvis/ ├── ai.py # the AI chatbot ├── main.py # the main script ├── OLED.py # The visuals! └── speaker.py # the audio Wrote the basic code for each of those files. For the moment, I concentrate on making importable functions that function indepedently, and will link them together in main.py later on. Created a README.md . It’s empty for now, will fill it in later.
Linking everything together Updated the project structure with more python scripts so that it now looks like this: Tiny_Jarvis/ ├── .venv/ ├── piper_voices/ ├── recordings/ # New ├── assets/ # New ├── ai.py ├── listener.py # New ├── main.py ├── OLED.py ├── speaker.py ├── transcriber.py # New ├── README.md └── requirements.txt What’s new: Added an assets/ folder for the OLED screen visuals Added a recordings/ folder for the audio captured by the mic when the user is speaking Created listener.py : actively listens for a button press; when pressed, records audio through the usb mic until the button is released, then that audio is sent to transcriber.py Created transcriber.py : takes that audio and passes it as input into faster-whisper to “translate” into text ! And finally, first time linking everything together in main.py : there is still a lot to be done if we are talking speed/efficiency, but the core pipeline is done. The user presses a button to talk, releases it when finished, the audio is captured and translated into text by faster-whisper , then that text is given as prompt to the AI chatbot (like Qwen3-0.6B . The response is then turned into a voice using Piper TTS and outputted through the speaker! Possible future implementation of the threading module to make it faster, even though I have no idea how it works.
README.md first commit Spent a LOT of time on the README.md, I want my project to be reusable so made a good How to install section, there are tons of different commands to run to ensure it works first try Didn’t write anything in the Hardware section, but will soon. (my first PCBs don’t work yet) In OLED.py : it now supports gifs, which is great because of Piskel which can turn simple animations into gifs. Made some visuals in Piskel for the screen ( thinking_animation.gif and button_pressed.gif ) Simplified drastically listener.py for future debugging. One of the biggest issues with this project so far: the difficulty to test it! I don’t have all the required materials yet. I might use the pytest module? we’ll see
Threading implementation for better speed Today I decided to learn about the python module threading , and realized it wasn’t that difficult to implement in my project. The issue was: when I ran oled("thinking_animation.gif") it ran sequentially, so the whole script had to wait for the animation to finish, which obviously can’t happen. So I created different threads for each animation/png, and made a “switch”, better known as a threading.Event() which enabled me to manage the “workers” way better (sorry, i’m getting used to the vocabulary) Also I added comments everywhere in main.py for better explainability. Finally I adjusted the code in OLED.py with the switch implemented and added some small user-friendly checks throughout my project. Hopefully everything works! Note: sadly it will be difficult to use threads in the rest of the code, since the process is, at its core, sequential. Faster-whisper needs audio to proceed, the ollama AI chatbot needs a prompt to continue, etc…
Faster response speed thanks to streaming audio Ok so ollama ’s ChatResponse class allows, when creating an instance of it, to write stream = True . So I could stream the outputted response directly into Piper TTS and into the speakers. Except it would sound very weird, very robotic-like since the chatbot outputs tokens, not words. I then created a function called sentence_buffer() that seperates them into a list of words, that are then given to Piper TTS in speaker.py Then I used a library called pyaudio to stream the Piper TTS output into the speakers! it’s actually just a Python wrapper for a C library called portaudio , so I ran into a LOT of dependency issues, but that’s a battle for another day. Moved a few functions that were in main.py into other files for better management Other small modifications
Finishing up the software part Took on the task of making my code more readable, and as such easier to debug Created a AssistantDisplay class to better manage the OLED threads - way cleaner now Put sentence_buffer() in ai.py and get_lastest_recordings() in listener.py , now the only function in main.py is main() . Clean! Squeezed a bit more performance out of the faster-whisper model by setting cpu_threads to 4 and beam_size to 1, even if we’ll lose a tiny bit in quality. Still a good tradeoff Detected an avoided a critical issue: if glob detected the file while it was being written to and passed it on to faster-whisper , then it would be corrupted and be mashed garbage. So I read some documentation about the queue module and used that, it’s way better and easier in the end.
JOURNAL.md started + Hardware time! Created a JOURNALmd file Documented everything I did on the 5th and 6th of July, with photos and some explanations as to what I was doing and trying to achieve To make it short: prototyping and creating some visuals for the OLED screen/UI, as well as assembling everything together. Connected README.md to JOURNAL.md You can read it here
JOURNAL.md new entries! Added some entries for the 7th and 8th of July, where I delved into PCB making from scratch! As well as an entry for the 17th of July, when I received my first PCBs - spoiler alert: they do not work as intended Made a lot of mistakes, but managed to make a rather good first try, which will hopefully lead to a better final PCB (i’m working on that) This time I’ll check the DFM before ordering Hope you appreciate my storytelling!
Major software update + PCB testing Found out yesterday that Ollama is just the whole UI and simplificator of use for the C library llama.cpp And turns out there’s a python wrapper for that library, llama-cpp-python , which has two advantages over Ollama: Faster Way more flexible, we can get every last bit of performance from the rpi5 So I updated ai.py with this new feature, there are more settings than Ollama for optimizing performance for CPU-only (4 cores) which is great, however I had to download a .gguf from Hugging Face and accidentally ended up being given access to a repository for the model?! so i can now propose changes to that repo, for some reason… Fixed a typo which would’ve raised a TypeError in main.py Made it so the second button shuts down the Pi safely Wrote another entry in JOURNAL.md , where I soldered and tested the prototype PCBs I ordered from JLCPCB
RPI5 OS Switch + Tiny_Jarvis easier to put in place Worst day in my life. Tried to flash a Raspberry Pi OS Lite (64-bit) on the raspberry pi 5 (which btw has an NVMe SSD), and it did NOT go well: First flash using the Imager: didn’t work, nothing happened, the Pi started speaking in freaking morse code Spent an hour trying to decode that morse code according to documentation, thought it was an EEPROM bootloader issue, made a diagnostic card, made a factory reset card, nope. Realized I could plug it through HDMI to my projector; did that: it was asking me for a username. Didn’t have a USB keyboard so couldn’t type it in. Almost threw the Pi out of the window cos I configured all that in the fricking Imager. Realized I was using the Imager from Flathub and not rpi-imager Retried the whole thing with that Imager: still didn’t work. Spent two hours doing the same thing over and over: flashing the card with the Imager, going into the files, editing user-data , cloud-init-ouput.log , etc… realized the Imager wasn’t writing the information in those files but others, booting it up into HDMI, checking the logs, managing to bypass username but not keyboard layout, etc… I EVEN TRIED LEGACY VERSIONS OF THE OS AND CREATING A wpa_supplicant.conf . Atp I was going to crash out but then I checked my rpi-imager version (even though I had updated it) and turns out my laptop just couldn’t get the latest version : it was 1.8.0 , not 2.1.0 (the latest one). Downloaded the newest version, ran it, and it worked. I have officially lost faith in humanity. Anyways I read my README.md and decided that it was getting way too complicated (the installation part) so I pasted that whole part into Kimi K3 and he made me a install.sh which is basically fire since you just run chmod +x install.sh ./install.sh and the whole system-wide-packages-and-dependencies are all installed in the right order, easily. This is tested and proved (i did it with the newly flashed OS).
Error handling time! + bug and dependency fixing Now that I have a clean slate to test my project on, I ran python main.py and somwhow got three errors in a row. Spent an hour adding try s and except Exception as e everywhere to prevent this. Now debugging is way easier and more user-friendly. Fixed some bugs such as ssd1106 not being a real OLED screen part name As well as gpiozero missing the rpi-lgpio library, which needs system-wide packages swig and liblgpio-dev so yh dependency hell. Almost everything should be error-proof now. I tested it, and no errors popped up, just friendly reminders that I2C wasn’t enabled, or that my buttons weren’t detected, or no screen. Update install.sh with these changes, now works perfectly.
Schematic and PCB tweaking Made an entry for today in JOURNAL.md I’ll keep this short, but basically: huge issues with my schematic, electrically incorrect for the most part, some useless components, which then translated into the actual PCB, having to rewire traces manually, making tons of mistakes along the way and spending waay too much time repairing them. Still waiting for the funding request to be approved before I can order these. Huge thanks to M-Mrk in the Slack electronics channel for all his help, he saved me
Added a cooking recipes feature for no reason Created a cooking_helper.py in a cooking/ folder OCR’d half of a cooking book with help from Gemini and put everything in a beautiful recipes.csv Used the csv.DictReader object to access the info and organize it into a list, very useful. Updated main.py so that when the user’s prompt starts with “Cooking”, it takes a random recipe from the csv file (using the random.randint(a, b) function) and returns a formatted sentence with all the info for cooking that recipe. Made this cos I’m really bad at cooking and it could also benefit others, you never know.
PCB + updates on the cooking feature Wrote an entry in JOURNAL.md for today’s work Worked a lot on the PCB in EasyEDA Pro, mostly clearance issues but also a lot of struggling with the GND pour. Updates on the cooking feature: Thought it would be cool to be able to show the ingredients on the OLED screen So updated the AssistantDisplay class and created a neat function to show text using the python library luma.oled Problem is it would go off screen, so I implemented the built-in textwrap module and it can now display 5 lines. Will get to translating everything to english later, promised Anyways if anyone has any recommendations for the PCB don’t hesitate to leave a comment!
Added a cool silkscreen logo Made an entry for the 23rd of July in JOURNAL.md Found and added this logo from The Noun Project . Really cool website btw. This icon clicked with me bc it really represents what Jarvis (or AI chatbots are in general) is, that being SIMULATED intelligence, and makes us remember that’s its all just complex math equations and not real intellect. Fixed some DFM issues, and rerouted a lot of traces, some were going over the mounting holes Tried to make more space for the logo but broke the whole thing and had to Ctrl+z my way out of there (help) Looks cool no?
Upgraded the cooking helper + critical bug fixes Translated the recipes to english - will add more later Fixed a critical issue with initializing and importing different python files, now main.py has the real control of initialization thanks to a listener.init_listener() function. Added a speak(['Ingredients']) in main.py so Tiny_Jarvis will speak the ingredients of the chosen recipe out loud Switched from hardcoding random.randint(0,33) to random.choice(list) way simpler and easier to read, and created a format_cooking_sentence(recipe_object) function so that main.py doesn’t have to manage that, way better Future changes I might implement: apparently Raspberry Pi OS manages audio through the Advanced Linux Sound Architecture (ALSA) which is responsible for the hardware drivers, the audio routing and control, and the low-level utilities such as the commands I often use, such as alsamixer , aplay and arecord So when two python libraries that need to either record audio or output audio call ALSA to do so, it can lead to conflicts. In this case, sounddevice and pyaudio which are both wrappers of the C library PortAudio . So a future change would be only using sounddevice for example, or vice versa. This has another hidden advantage: removing a possibly finnicky dependency and making the whole process smoother, since compiling C on a Raspberry Pi can be difficult at times.
Cleaned up main.py and cooking_helper.py It’s been a while since I last worked on this project, I’m still waiting for my hardware funding request to be approved, which made me lose motivation. But I’m back, so here’s what’s new: I separated the main function in cooking_helper.py Unix-style, so that everything is cleaner and easier to debug or scale (in case the CSV file gets bigger) Now it doesn’t need to open the csv everytime, instead it just opens it once upon startup. In main.py , created an initialize() function which separates the tasks into an easier format. The AssistantDisplay class and the list of recipes is then passed onto the while True loop. The main() function is now much simpler: it calls the initialization function, then in the loop it checks whether there are new recordings thanks to an imported function, if there are not it waits 0.2 seconds before checking again, and if there is then it runs the process_recording() function. Very clean!
New timer feature implemented, plus more Created a handle_prompt() function in main.py to handle any task-specific prompt given by the user. For example: if I say “Play …” or “Set a timer of …” then it will recognize this specific pattern and handle those actions perfectly, and if it’s something else than the AI will just answer it. It’s scalable, so I can add more features in the future, such as “Definition of” or idk (if you have any ideas lemme know in the comments) Created a timer.py file which handles the timer feature, which is sort of complicated but now works (it displays on-screen in real time, which is pretty cool) All in all, main.py is now very clean and readable.
Music handler + system metrics idle screen Time to make Tiny_Jarvis a little more like the real Jarvis…. SYSTEM METRICS SCREEN! Displays in real time: battery life, cpu temperature, current time on the OLED screen. Finished up the Mopidy part of the music player, can’t test it yet sadly (i don’t have access to my rpi5 right now) it was way more difficult than I thought AIM: “Play …” -> searches through free music online database like Youtube music for query and plays the music if it finds it. Added another quirky feature: flip a coin Tell me if you have ideas of other new useful features
“Hey Tiny Jarvis, play Smooth Criminal” mopidy-youtube integrated! and it works! All you have to do is press the button, say out loud “Play (song) …” and it will search for it in Youtube music (FREE MUSIC!!!) and play it. You can then adjust the volume with the rotary encoder, which is satisfying asf. This was one hell of a debugging session, holy I had to search for forked repos on Github that fixed a obscure yt-dlp issue, and somehow it works. Anyways apart from that, i restructured the project code repo entirely, everything is now separated into different sections like firmware and pcb to distinguish hardware from software. New: the install.sh was finally tested and it works perfectly after a few tweaks! woohoo! Oh and finally: rewrote my README.md as recommended by the Stardance guides, and yh I agree it looks better Tell me if you have any other ideas of features to implement
“Hey Tiny Jarvis, what’s going on in the world?” New feature: Tiny Jarvis automatically fetches the news from BBC World, chooses the most impactful headline, reads the articles and generates a summary! This happens in the background, every hour, to ensure that the news is recent. I discovered smth called RSS feeds, which is basically a tool that feeds website updates back to you in the form of XML files. Then I learnt about the feedparser python library, as well as trafilatura , for extracting text from HTML (for getting the text from the articles), which made the job ten times easier. However, this process does take some time: Step 1: script parses the BBC World feed Step 2: local AI chooses between the thirteen daily headlines Step 3: script fetches the associated articles text Step 4: local AI summarizes ALL THREE articles. On a Raspberry Pi 5, obviously, this can take at least 5 minutes. Now for the moment this is a bit biased, because I chose the “Technology” category for the RSS feed 😅 but i’ll add the option to change it later Is this a good feature? Please tell me
“Hey Tiny Jarvis. where’d I put my keys again?” Tiny_Jarvis now has memory ! I’ve implemented a simple sqlite local database in Python to store every question the user asks. (first time doing this ! very satisifying) This means it can help you remember timings, dates, locations… anything! However, this also means that all these cumulatively added memories make the prompt for the AI longer and longer Which is why for the moment it only remembers the last 5 prompts. This may seem like a small amount, but for the most it is sufficient for remembering recent prompts. Should I make it remember more stuff? tell me
Added a Spotify waveform animation This will play on the OLED screen while the AI is speaking out loud. The waveform is generated in real time, randomly, by an algorithm, and displayed through the python library luma.oled Sadly, I still haven’t received funding and can’t continue with the hardware part of this project. I don’t know or understand why the funding keeps getting refused, even though I do all the right things as indicated everytime, and this is very frustratung because I literally went to the lengths of designing my own PCB from scratch, all of this to not get funded. I’m short of ideas for the software part now… still waiting for the funding (2 months btw, 22 demands)...
|
1792666225.719769
|
1793271025.719769
|
|
992
|
Sleep Helper by @Manula | Stardance
|
Manula
|
0
|
30.07
|
0
|
[]
|
[{"post_id": 29374, "ts": "202 [{"post_id": 29374, "ts": "2026-07-16T09:00:52Z", "hours": 12.6847, "text": "Devlog3 - Sleep Helper What I did: Added a photoresistor for light levels + LED Added code to set an alarm + buzzer added a relay that would cause a motor to spin if the temperature got past ideal sleeping temps Added an extra button to stop/set alarm Added an ethernet shield because it has a microSD card slot Used microSD card to create a CSV file with timestamps, temp & humidity data, light etc. microSD card can then be removed from ethernet shield and opened to see data in an EXCEL spreadsheet (check how your sleeping environment was after waking up) added a capacitor to deal with voltage dips Debugged during Argentina vs England (🐐) Free up space for SRAM on Arduino UNO (this has taken too long.) MAJOR PROBLEMS: Arduino Uno doesn’t have enough SRAM to manage OLED, DHT and SD libraries at once and doesn’t have adequate space to Open a file on an SD card for a write function Moving forward: finding a solution to manage everything without voltage dips becoming an issue + managing SRAM adding motor Creating 3D printed housing Shipping"}, {"post_id": 26407, "ts": "2026-07-11T05:48:07Z", "hours": 17.3875, "text": "Sleep Helper Devlog 2 Can’t sleep? Well maybe the problem is your sleeping environment! I’m building an Arduino-powered sleep device that watches over my room while I sleep. Helping me improve my sleeping environment and get quality sleep. So far it tracks temperature, humidity and noise. Things I have done so far: Made an ‘Alarm Style’ clock setup Read temp and humidity Change between clock and temp modes Detect Loud sounds Next steps:| Adding more features Polishing off Arduino code Creating 3D printed housing I hope you all like it! :)"}]...
|
Title: Sleep Helper by @Manula | Stardance
Devlog Title: Sleep Helper by @Manula | Stardance
Devlogs:
Sleep Helper Devlog 2 Can’t sleep? Well maybe the problem is your sleeping environment! I’m building an Arduino-powered sleep device that watches over my room while I sleep. Helping me improve my sleeping environment and get quality sleep. So far it tracks temperature, humidity and noise. Things I have done so far: Made an ‘Alarm Style’ clock setup Read temp and humidity Change between clock and temp modes Detect Loud sounds Next steps:| Adding more features Polishing off Arduino code Creating 3D printed housing I hope you all like it! :)
Devlog3 - Sleep Helper What I did: Added a photoresistor for light levels + LED Added code to set an alarm + buzzer added a relay that would cause a motor to spin if the temperature got past ideal sleeping temps Added an extra button to stop/set alarm Added an ethernet shield because it has a microSD card slot Used microSD card to create a CSV file with timestamps, temp & humidity data, light etc. microSD card can then be removed from ethernet shield and opened to see data in an EXCEL spreadsheet (check how your sleeping environment was after waking up) added a capacitor to deal with voltage dips Debugged during Argentina vs England (🐐) Free up space for SRAM on Arduino UNO (this has taken too long.) MAJOR PROBLEMS: Arduino Uno doesn’t have enough SRAM to manage OLED, DHT and SD libraries at once and doesn’t have adequate space to Open a file on an SD card for a write function Moving forward: finding a solution to manage everything without voltage dips becoming an issue + managing SRAM adding motor Creating 3D printed housing Shipping...
|
1793181146.468443
|
1793785946.468443
|