|
10463
|
wordle by @anay_ | Stardance
|
anay_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wordle by @anay_ | Stardance
|
1792885875.0588372
|
1793749875.0588372
|
|
68079
|
wordle clone by @tanishka | Stardance
|
tanishka
|
0
|
0.95
|
0
|
[]
|
[{"post_id": 77138, "ts": "202 [{"post_id": 77138, "ts": "2026-10-05T19:08:42Z", "hours": 0.9544, "text": "wordle grid that looks super ugly D: it does somewhat work, it lets you type letters in a single row and enter to go to the next one :D"}]...
|
Title: wordle clone by @tanishka | Stardance
Devl Title: wordle clone by @tanishka | Stardance
Devlogs:
wordle grid that looks super ugly D: it does somewhat work, it lets you type letters in a single row and enter to go to the next one :D...
|
1792468494.2187295
|
1793073294.2187295
|
|
23427
|
words_of_wiser by @not-willem | Stardance
|
not-willem
|
1
|
1.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-22T20:33:59Z", "hours": 1.0, "multiplier": 2.57, "payout": 3, "blessing": "neutral", "text": "words_of_wiser I made a program that takes the lyrics of shape of you by Ed Sheeran and randomly pick them 20 times to make a sentence. this was genuinely so easy to make but it was really fun “Say on on lead the be on I baby I’m on something I’m oh my We my day not were” - Ed Sheeran, 2026", "repo": "https://github.com/not-willem/words_of_wiser", "demo": "https://not-willem.github.io/words_of_wiser/"}]...
|
[{"post_id": 13547, "ts": "202 [{"post_id": 13547, "ts": "2026-06-22T05:21:44Z", "hours": 0.9919, "text": "words_of_wiser from Ed Sheeran. most of my time was spent designing so i would appreciate feedback but right now it just takes the lyrics from shape of you, splits it up into words and then randomly picks them 20 times. Very fun to see what Ed has to say."}]...
|
Title: words_of_wiser by @not-willem | Stardance
Title: words_of_wiser by @not-willem | Stardance
Devlogs:
words_of_wiser from Ed Sheeran. most of my time was spent designing so i would appreciate feedback but right now it just takes the lyrics from shape of you, splits it up into words and then randomly picks them 20 times. Very fun to see what Ed has to say.
Ships:
words_of_wiser I made a program that takes the lyrics of shape of you by Ed Sheeran and randomly pick them 20 times to make a sentence. this was genuinely so easy to make but it was really fun “Say on on lead the be on I baby I’m on something I’m oh my We my day not were” - Ed Sheeran, 2026...
|
1792993961.4241269
|
1793080361.4241269
|
|
29434
|
work experience simulator by @shivaduttsing | Star work experience simulator by @shivaduttsing | Stardance...
|
shivaduttsing
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: work experience simulator by @shivaduttsing Title: work experience simulator by @shivaduttsing | Stardance...
|
1792507839.9771044
|
1793112639.9771044
|
|
57646
|
working WASD keyboard keychain by @Sparsh01 | Star working WASD keyboard keychain by @Sparsh01 | Stardance...
|
Sparsh01
|
0
|
0.73
|
0
|
[]
|
[{"post_id": 61575, "ts": "202 [{"post_id": 61575, "ts": "2026-09-04T15:34:42Z", "hours": 0.7297, "text": "Finnaly made a pcb after learning from youtube and chat gpt ,i have made 3d model from tinker lab bec it is the easiest"}]...
|
Title: working WASD keyboard keychain by @Sparsh01 Title: working WASD keyboard keychain by @Sparsh01 | Stardance
Devlogs:
Finnaly made a pcb after learning from youtube and chat gpt ,i have made 3d model from tinker lab bec it is the easiest...
|
1792929121.2776713
|
1793793121.2776713
|
|
71408
|
working pad by @genklmor | Stardance
|
genklmor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: working pad by @genklmor | Stardance
|
1792972041.585695
|
1793576841.585695
|
|
34321
|
world cup tracker by @millyrock | Stardance
|
millyrock
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: world cup tracker by @millyrock | Stardance
|
1792734686.1544313
|
1793339486.1544313
|
|
38624
|
worme by @Rounakcreates | Stardance
|
Rounakcreates
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: worme by @Rounakcreates | Stardance
|
1792734871.165722
|
1793339671.165722
|
|
11172
|
worst ui design by @ttiramisu | Stardance
|
ttiramisu
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T11:32:15Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website that contains some of the cursed UI/UX designs that possibly exists out there with source code and examples!", "repo": "https://github.com/ttiramisu/mesuem-of-worst-ui", "demo": "https://muesum.netlify.app"}]...
|
[{"post_id": 5545, "ts": "2026 [{"post_id": 5545, "ts": "2026-06-09T11:13:13Z", "hours": 1.0986, "text": "added some css! tailwind to be exact…"}, {"post_id": 5513, "ts": "2026-06-09T10:07:43Z", "hours": 1.5347, "text": "imma start work on the ui of the main site itself now…"}, {"post_id": 4300, "ts": "2026-06-07T15:42:55Z", "hours": 0.6619, "text": "added some of the uis….."}]...
|
Title: worst ui design by @ttiramisu | Stardance
Title: worst ui design by @ttiramisu | Stardance
Devlogs:
added some of the uis…..
imma start work on the ui of the main site itself now…
added some css! tailwind to be exact…
Ships:
I made a website that contains some of the cursed UI/UX designs that possibly exists out there with source code and examples!...
|
1792976177.2928374
|
1793062577.2928374
|
|
36939
|
worth the weight by @ccyaliyahh | Stardance
|
ccyaliyahh
|
1
|
30.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T17:03:50Z", "hours": 30.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a grade calculator website! it includes a final grade calculator, a course grade calculator, a gpa impact calculator, and a page with an interactive slider and graph to show you the minimum and maximum grade you can receive for a course. i was really proud of this project mainly because i’ve never built website by myself and have it work so well. i’m also really happy with how it turned out because i used adobe illustrator to design the graphic header, and i really like the aesthetic.", "repo": "https://github.com/ccyaliyahh/worththeweight", "demo": "https://ccyaliyahh.github.io/worththeweight/"}]...
|
[{"post_id": 30761, "ts": "202 [{"post_id": 30761, "ts": "2026-07-18T16:37:12Z", "hours": 30.0756, "text": "hiya! i made this project for another hack club program, so there’s only 1 devlog on here. might seem a little suspicious… lol if you go to this project’s repository, you can see all my commits and the process i went through creating this~ cheers! xxx liyah"}]...
|
Title: worth the weight by @ccyaliyahh | Stardance Title: worth the weight by @ccyaliyahh | Stardance
Devlogs:
hiya! i made this project for another hack club program, so there’s only 1 devlog on here. might seem a little suspicious… lol if you go to this project’s repository, you can see all my commits and the process i went through creating this~ cheers! xxx liyah
Ships:
i made a grade calculator website! it includes a final grade calculator, a course grade calculator, a gpa impact calculator, and a page with an interactive slider and graph to show you the minimum and maximum grade you can receive for a course. i was really proud of this project mainly because i’ve never built website by myself and have it work so well. i’m also really happy with how it turned out because i used adobe illustrator to design the graphic header, and i really like the aesthetic....
|
1792972421.0105078
|
1793058821.0105078
|
|
67386
|
wotcher by @Eucatastrophe | Stardance
|
Eucatastrophe
|
0
|
5.78
|
0
|
[]
|
[{"post_id": 77743, "ts": "202 [{"post_id": 77743, "ts": "2026-10-08T04:34:17Z", "hours": 2.6622, "text": "Finished wiring! Oh the horrors of 4-layer pcb. I fixed up an error with the accelerometer footprint and added a copper pour, so that should make the IS31 chip happy. Looks kinda like the night sky, which I like."}, {"post_id": 76956, "ts": "2026-10-05T06:16:26Z", "hours": 0.2589, "text": "Added these little guys (pioneer 9, pioneer 10, jupiter icy moons explorer) because there’s a webcomic that I like"}, {"post_id": 76557, "ts": "2026-10-03T23:07:58Z", "hours": 0.6308, "text": "I have to do my homework now xd I used the terminal easyeda2kicad to get 3D models and finally configured them right! dot wrl files don’t do well on KiCad. Also checked off the shipping reqs and filled out the BOM, so off we go"}, {"post_id": 76297, "ts": "2026-10-03T03:26:38Z", "hours": 2.2239, "text": "I hope this is right? I’ve never actually done circuitry that involved looking at and copying datasheet schematics before, so I hope that’s right. This is a watch! It uses a charlieplexed grid of LEDs, which means only one LED is on at a time, but human persistence of vision makes it look like many are on. There’s also a clock and an accelerometer, and the whole thing is run by an ATtiny. So I’ll have to go refresh c++ later."}]...
|
Title: wotcher by @Eucatastrophe | Stardance
Devl Title: wotcher by @Eucatastrophe | Stardance
Devlogs:
I hope this is right? I’ve never actually done circuitry that involved looking at and copying datasheet schematics before, so I hope that’s right. This is a watch! It uses a charlieplexed grid of LEDs, which means only one LED is on at a time, but human persistence of vision makes it look like many are on. There’s also a clock and an accelerometer, and the whole thing is run by an ATtiny. So I’ll have to go refresh c++ later.
I have to do my homework now xd I used the terminal easyeda2kicad to get 3D models and finally configured them right! dot wrl files don’t do well on KiCad. Also checked off the shipping reqs and filled out the BOM, so off we go
Added these little guys (pioneer 9, pioneer 10, jupiter icy moons explorer) because there’s a webcomic that I like
Finished wiring! Oh the horrors of 4-layer pcb. I fixed up an error with the accelerometer footprint and added a copper pour, so that should make the IS31 chip happy. Looks kinda like the night sky, which I like....
|
1792464842.0084152
|
1793069642.0084152
|
|
66527
|
wow by @0ceanmp4 | Stardance
|
0ceanmp4
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wow by @0ceanmp4 | Stardance
|
1792461048.046783
|
1793065848.046783
|
|
625
|
wowie hackpad by @hannahlivingfield | Stardance
|
hannahlivingfield
|
0
|
0.52
|
0
|
[]
|
[{"post_id": 1136, "ts": "2026 [{"post_id": 1136, "ts": "2026-06-02T23:41:09Z", "hours": 0.5169, "text": "Schematic for my hackpad pcb wowie its a schematic so cool :o uhh yeah i had to stop bc i went to sleep and i forgot to devlog till now lol"}]...
|
Title: wowie hackpad by @hannahlivingfield | Stard Title: wowie hackpad by @hannahlivingfield | Stardance
Devlogs:
Schematic for my hackpad pcb wowie its a schematic so cool :o uhh yeah i had to stop bc i went to sleep and i forgot to devlog till now lol...
|
1792615691.1172745
|
1793220491.1172745
|
|
66528
|
wowowwoo by @0ceanmp4 | Stardance
|
0ceanmp4
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wowowwoo by @0ceanmp4 | Stardance
|
1792461048.8818972
|
1793065848.8818972
|
|
68867
|
wqertasdf by @Fo0d | Stardance
|
Fo0d
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wqertasdf by @Fo0d | Stardance
|
1792475376.1761906
|
1793080176.1761906
|
|
56932
|
wranglin' by @sevennn_39 | Stardance
|
sevennn_39
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wranglin' by @sevennn_39 | Stardance
|
1792684419.3553338
|
1793289219.3553338
|
|
52865
|
wriowargame by @hamd | Stardance
|
hamd
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wriowargame by @hamd | Stardance
|
1792727521.0325403
|
1793332321.0325403
|
|
63853
|
wrqf by @JacobNavaratne | Stardance
|
JacobNavaratne
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wrqf by @JacobNavaratne | Stardance
|
1792443202.0678449
|
1793048002.0678449
|
|
4287
|
wsb tracker by @cookie | Stardance
|
cookie
|
0
|
5.37
|
0
|
[]
|
[{"post_id": 2484, "ts": "2026 [{"post_id": 2484, "ts": "2026-06-05T00:10:48Z", "hours": 1.3375, "text": "spent a while today trying to actually apply and get a reddit api key (harder than i expected)"}, {"post_id": 1623, "ts": "2026-06-03T19:14:13Z", "hours": 4.0328, "text": "started working on learning the api :)"}]...
|
Title: wsb tracker by @cookie | Stardance
Devlogs Title: wsb tracker by @cookie | Stardance
Devlogs:
started working on learning the api :)
spent a while today trying to actually apply and get a reddit api key (harder than i expected)...
|
1792655370.8457673
|
1793260170.8457673
|
|
56105
|
ww by @suitduck1 | Stardance
|
suitduck1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ww by @suitduck1 | Stardance
|
1792648261.677779
|
1793253061.677779
|
|
49955
|
ww game by @Riyangupta | Stardance
|
Riyangupta
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ww game by @Riyangupta | Stardance
|
1792612317.1666775
|
1793217117.1666775
|
|
42137
|
www.seti.com by @seti | Stardance
|
seti
|
1
|
10.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T22:09:10Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my personal website, and my second time building a website from scratch! I had so much fun making it. -the html+css is by me, but the javascript for the music player is from a tutorial. This was my first time using javascript. -the site originally had a message box, which I spent a lot of time trying to create but eventually scratched since I don’t know php. But once I learn it, this will definitely be a future update Overall, I learned soo much from this project. It was my first project in visual studio code and before starting it, I had no idea how to use vsc, connect github + vsc, publish to github, and so on … I wonder if it’ll be possible to learn this much in a future project? :)", "repo": "https://github.com/voyage-sans-retour/seti.com", "demo": "https://voyage-sans-retour.github.io/seti.com/"}]...
|
[{"post_id": 47732, "ts": "202 [{"post_id": 47732, "ts": "2026-08-15T20:56:14Z", "hours": 0.6042, "text": "Devlog #5: Made a ReadMe. Also moved the music player upward to make the play button accessible after discovering chrome blocks autoplay."}, {"post_id": 47011, "ts": "2026-08-14T16:19:39Z", "hours": 2.6389, "text": "Devlog #4: Almost done… spent hours trying to figure out how to make the message box work, just to delete it in the end. I need to learn more before I try it :’)"}, {"post_id": 42758, "ts": "2026-08-07T17:13:08Z", "hours": 3.1431, "text": "Devlog #3: Added a music player to my website by following a javascript tutorial. it was my first time using javascript for a project, so it took a while to figure out and debug. i also learned how to add assets in visual studio code which i’d never tried before"}, {"post_id": 41099, "ts": "2026-08-05T02:42:19Z", "hours": 2.0147, "text": "Devlog #2 Completely changed the layout i was going for after seeing an inspiring website today. im also playing around with :hover and dropdowns to make my site somewhat interactive without javascript ^^"}, {"post_id": 40326, "ts": "2026-08-03T19:25:04Z", "hours": 1.2108, "text": "Todays work: figured out how to open github repository in vsc (╺﹏╺) , laid the backbones of my site!"}]...
|
Title: www.seti.com by @seti | Stardance
Devlogs: Title: www.seti.com by @seti | Stardance
Devlogs:
Todays work: figured out how to open github repository in vsc (╺﹏╺) , laid the backbones of my site!
Devlog #2 Completely changed the layout i was going for after seeing an inspiring website today. im also playing around with :hover and dropdowns to make my site somewhat interactive without javascript ^^
Devlog #3: Added a music player to my website by following a javascript tutorial. it was my first time using javascript for a project, so it took a while to figure out and debug. i also learned how to add assets in visual studio code which i’d never tried before
Devlog #4: Almost done… spent hours trying to figure out how to make the message box work, just to delete it in the end. I need to learn more before I try it :’)
Devlog #5: Made a ReadMe. Also moved the music player upward to make the play button accessible after discovering chrome blocks autoplay.
Ships:
This is my personal website, and my second time building a website from scratch! I had so much fun making it. -the html+css is by me, but the javascript for the music player is from a tutorial. This was my first time using javascript. -the site originally had a message box, which I spent a lot of time trying to create but eventually scratched since I don’t know php. But once I learn it, this will definitely be a future update Overall, I learned soo much from this project. It was my first project in visual studio code and before starting it, I had no idea how to use vsc, connect github + vsc, publish to github, and so on … I wonder if it’ll be possible to learn this much in a future project? :)...
|
1793000883.5958579
|
1793087283.5958579
|
|
46910
|
wyd rn? by @Orangecup | Stardance
|
Orangecup
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: wyd rn? by @Orangecup | Stardance
|
1792493581.5306811
|
1793098381.5306811
|
|
7457
|
x by @Nancy | Stardance
|
Nancy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: x by @Nancy | Stardance
|
1792734522.8072312
|
1793339322.8072312
|
|
9254
|
x by @WilliamAlexakis | Stardance
|
WilliamAlexakis
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: x by @WilliamAlexakis | Stardance
|
1792788705.2186055
|
1793393505.2186055
|
|
3369
|
x by @abby_g009 | Stardance
|
abby_g009
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: x by @abby_g009 | Stardance
|
1792666497.5991476
|
1793271297.5991476
|
|
42972
|
x00 by @not-willem | Stardance
|
not-willem
|
0
|
4.11
|
0
|
[]
|
[{"post_id": 57849, "ts": "202 [{"post_id": 57849, "ts": "2026-08-30T04:51:10Z", "hours": 0.7836, "text": "i am messing around with transistors oh yeah"}, {"post_id": 43728, "ts": "2026-08-09T04:16:33Z", "hours": 1.05, "text": "ok so i started working on the GEPU which is basically just almost all the components of an x86 emulator but just in 1 more usable chip. started simulating it but spent a while trying to find a good program to use but tinkercad is good. i have a bit more information on this project here anyway im just doing keyboard emulation with the microcontroller, i’ll implement some USB stuff maybe later have a good day everyone! also i didn’t misclick on the image this time hooray everyone cheer"}, {"post_id": 41757, "ts": "2026-08-06T04:44:57Z", "hours": 0.6336, "text": "guys i did more writing"}, {"post_id": 39924, "ts": "2026-08-03T07:37:00Z", "hours": 0.7833, "text": "did more plannaing for the filesystem, boot, bios etc guys i think im cookedddd"}, {"post_id": 39875, "ts": "2026-08-03T04:28:15Z", "hours": 0.8639, "text": "HELLO AGAIN EVERY ONE you are so happy i know you all missed me so much so i am starting work on my own custom architecture, like x86 but x00. There are quite a few features that are different from other computers but i’m hoping to make it so easy to build a computer that if you know how to use the architecture you can build a computer easily. of course this is a huge project and I will probably keep going on this until i can build one x00 computer that runs custom hardware, software and custom OS for x00. this also means that because i’m building it myself it’s gonna be hella easy to build your own OS for it and it might use something like python if i feel so inclined but it’ll be super cool Anyway i’ll attach my notes and the canva whiteboard that i have so far after 50 minutes of planning but i hope everyone has a good day!! (also YEAH it only uses one chip for most of the computer, im a simpleton, alright? also i will make it easy to replace but yeah)"}]...
|
Title: x00 by @not-willem | Stardance
Devlogs:
HE Title: x00 by @not-willem | Stardance
Devlogs:
HELLO AGAIN EVERY ONE you are so happy i know you all missed me so much so i am starting work on my own custom architecture, like x86 but x00. There are quite a few features that are different from other computers but i’m hoping to make it so easy to build a computer that if you know how to use the architecture you can build a computer easily. of course this is a huge project and I will probably keep going on this until i can build one x00 computer that runs custom hardware, software and custom OS for x00. this also means that because i’m building it myself it’s gonna be hella easy to build your own OS for it and it might use something like python if i feel so inclined but it’ll be super cool Anyway i’ll attach my notes and the canva whiteboard that i have so far after 50 minutes of planning but i hope everyone has a good day!! (also YEAH it only uses one chip for most of the computer, im a simpleton, alright? also i will make it easy to replace but yeah)
did more plannaing for the filesystem, boot, bios etc guys i think im cookedddd
guys i did more writing
ok so i started working on the GEPU which is basically just almost all the components of an x86 emulator but just in 1 more usable chip. started simulating it but spent a while trying to find a good program to use but tinkercad is good. i have a bit more information on this project here anyway im just doing keyboard emulation with the microcontroller, i’ll implement some USB stuff maybe later have a good day everyone! also i didn’t misclick on the image this time hooray everyone cheer
i am messing around with transistors oh yeah...
|
1792529526.5428164
|
1793134326.5428164
|
|
30005
|
x3 Camera Rocket by @lando | Stardance
|
lando
|
0
|
20.58
|
0
|
[]
|
[{"post_id": 44823, "ts": "202 [{"post_id": 44823, "ts": "2026-08-10T20:59:39Z", "hours": 1.3278, "text": "Been a loooong time since I’ve updated on this, I’ve done little pieces here and there but not enough where I start lookout. For the time I’ve logged I finally finished v1 but I am about to test it on hardware (wish me luck, not feeling lucky). I also tried to fix my 3d printer with different slicer settings. After TONS of troubleshooting one day it just started working. I think something was stuck in the nozzle that got unclogged. Apart from the logs I’ve printed out all of the pieces and done some general troubleshooting on the avionics. To solve the power I got a boost converter to take 3.3v to 5v, and it works. One big transition I’m making with the project is if after testing the camera resolution switch is ineffective I’m gonna reduce the scope of this project and just do one resolution to make it more reliable. I’m gonna LOCK IN over the next week and get it done"}, {"post_id": 30899, "ts": "2026-07-18T21:30:23Z", "hours": 1.4, "text": "Got the camera working, and added the camera logic to the main program. This photo is just from the example sketch that comes with it but next goal is to find a way to reliably power the hardware so I can test the code. It does compile without errors, but I’m not feeling very lucky about it actually interfacing right. The way it works is once the sensor core detects apogee it switches from a high frame rate video, to high quality video so it can get cool shots on the way down. Instead of fully re initializing the camera though, I just initialized it at the higher quality but used the low resolution. The only thing I need to do for the logic now is get the array of sensor readings and save it to sd after the video stops recording."}, {"post_id": 30526, "ts": "2026-07-18T05:35:36Z", "hours": 3.5167, "text": "First time using freeRTOS, this is some intense stuff, but I finally got it set up where one core handles the sensors and state machine logic, and the other one handles the camera, and saving the frames to storage. Today, I basically fully finished the sensor core, adding detection for when it launches, when it passes apogee, and when it has landed. I also created a struct that saves alt, pres, temp, and time, to psram. I decided to migrate the project over to platformIO, and since I was switching I decided I would improve the logic, and also use two cores. Previously I used the average alt within a second, then fully delete that array and create a new one. Now it uses a rolling array. The launch and apogee detection is pretty simple, if the average now is higher or lower by a certain threshold boom detected, but for the landing I decided to make it so that it has to stay within a certain threshold for 5 seconds, and if it breaks it once it resets. Next I need to setup the camera logic (not excited)"}, {"post_id": 29768, "ts": "2026-07-16T21:22:03Z", "hours": 4.0689, "text": "Been a couple days, but I’m getting back into it. I got the hardware assembled, with one problem being my power situation. I originally planned to use a 2s lipo, but it does not have enough cooling to deal with that. It was my first time using perfboard, so it took me a long time, but I got it done. The hardware slid into the printed bay perfectly, but it needs a few fixes, which include, higher placed camera mount, slightly larger launch lug hole, and fix my printer from stringing. I also finished adding landing detection to my logic. One part of me is considering switching the landing detection to a more robust system, but I’m not sure yet. Any suggestions for apogee and landing detection from altitude data is very welcome!"}, {"post_id": 25129, "ts": "2026-07-09T04:29:15Z", "hours": 1.8444, "text": "Yo yo, after many toils, I managed to get the bmp280 sensor to FINALLY interface with my esp32 (i had scl and sda swapped :(, and I took the example sketches for the sensor, and rewrote some parts and stripped out what wasn’t necessary until I had what I needed. Next I changed the fins from elliptical to cool swept-back trapezoidal fins, 1 because they look cooler, and 2 they offer similar performance but give less spin to the rocket, which is important for filming. The rest of the hardware arrives TOMORROW, i have been waiting a long time for this, so I am also gonna be doing some assembly tomorrow. Next plan for the project is gonna be some esp code, that detects different stages of flight with the altimeter. yo yo out"}, {"post_id": 23896, "ts": "2026-07-07T03:10:44Z", "hours": 1.9, "text": "Today I worked on fixing the camera mount, making it much more aerodynamic and also getting a wiring diagram done. On the ESPcam, only 1 pin is available while it is in 4 bit mode, so I need to use RX0 and TX0 and reassign them as i2c pins to interface with the bmp280. I also added many small features to the 3d model, such as vent holes for the electronics, launch lugs, and dowel holes to hold the motor in after it is inserted. Now I need to start figuring out the code, as the ESPcam and perfboard are arriving soon."}, {"post_id": 21815, "ts": "2026-07-03T22:59:15Z", "hours": 2.3431, "text": "x3 - Today I mainly worked on the motor mount, such as adding fins, and struggling to add the mesh that would be in the motor mount. I also added the mount in the body and the electronics bay (it will separate between green and yellow. Originally I wanted to do a body mount just through a rod straight down the middle, but I decided to push it to one side to make it stronger, and make it easier to print. I am still working on the camera mount and I am about to start on v3. v1 was too simple and didn’t allow the camera to tilt 45 degrees down, which is the goal. v2 was over complicated and had horrible airflow that would pull the rocket to one side. After working on the camera mount I need to start working on the wiring and code for the camera!"}, {"post_id": 21314, "ts": "2026-07-03T05:31:04Z", "hours": 2.3833, "text": "x3 - Today I worked on the electronics bay, mainly how the stack would slide into the yellow bay, then how the nose cone shoulder would also slide into it and lock it in. I also worked on getting the assemblies setup, and got a basic fin can started. I think I am going to do elliptical fins, usually I don’t because I think they are ugly, but with the newer rounded nose cone, I’m gonna try it because they apparently go the highest. It’s gonna use an E12-4 motor, and I’m hoping for it to go 1250 feet. The next thing I need to work on is the fins, and getting places to mount the parachute. Thanks for reading!"}, {"post_id": 21177, "ts": "2026-07-02T23:59:09Z", "hours": 1.8003, "text": "FIRST DEVLOOOG - The main goal of this project is to build a rocket that can capture sick video for as cheap as possible, and make it possible for others to make through 3d printing (i am broke). Today I mainly worked on establishing the rough shape of my rocket, then I imported all of the electronics I will be using, and arranged them in an assembly. After sizing, it should be able to fit in a 35mm wide body, with the battery (2s lipo) above in the nose cone. Visit my github for the goals and hardware I’ll be using."}]...
|
Title: x3 Camera Rocket by @lando | Stardance
Dev Title: x3 Camera Rocket by @lando | Stardance
Devlogs:
FIRST DEVLOOOG - The main goal of this project is to build a rocket that can capture sick video for as cheap as possible, and make it possible for others to make through 3d printing (i am broke). Today I mainly worked on establishing the rough shape of my rocket, then I imported all of the electronics I will be using, and arranged them in an assembly. After sizing, it should be able to fit in a 35mm wide body, with the battery (2s lipo) above in the nose cone. Visit my github for the goals and hardware I’ll be using.
x3 - Today I worked on the electronics bay, mainly how the stack would slide into the yellow bay, then how the nose cone shoulder would also slide into it and lock it in. I also worked on getting the assemblies setup, and got a basic fin can started. I think I am going to do elliptical fins, usually I don’t because I think they are ugly, but with the newer rounded nose cone, I’m gonna try it because they apparently go the highest. It’s gonna use an E12-4 motor, and I’m hoping for it to go 1250 feet. The next thing I need to work on is the fins, and getting places to mount the parachute. Thanks for reading!
x3 - Today I mainly worked on the motor mount, such as adding fins, and struggling to add the mesh that would be in the motor mount. I also added the mount in the body and the electronics bay (it will separate between green and yellow. Originally I wanted to do a body mount just through a rod straight down the middle, but I decided to push it to one side to make it stronger, and make it easier to print. I am still working on the camera mount and I am about to start on v3. v1 was too simple and didn’t allow the camera to tilt 45 degrees down, which is the goal. v2 was over complicated and had horrible airflow that would pull the rocket to one side. After working on the camera mount I need to start working on the wiring and code for the camera!
Today I worked on fixing the camera mount, making it much more aerodynamic and also getting a wiring diagram done. On the ESPcam, only 1 pin is available while it is in 4 bit mode, so I need to use RX0 and TX0 and reassign them as i2c pins to interface with the bmp280. I also added many small features to the 3d model, such as vent holes for the electronics, launch lugs, and dowel holes to hold the motor in after it is inserted. Now I need to start figuring out the code, as the ESPcam and perfboard are arriving soon.
Yo yo, after many toils, I managed to get the bmp280 sensor to FINALLY interface with my esp32 (i had scl and sda swapped :(, and I took the example sketches for the sensor, and rewrote some parts and stripped out what wasn’t necessary until I had what I needed. Next I changed the fins from elliptical to cool swept-back trapezoidal fins, 1 because they look cooler, and 2 they offer similar performance but give less spin to the rocket, which is important for filming. The rest of the hardware arrives TOMORROW, i have been waiting a long time for this, so I am also gonna be doing some assembly tomorrow. Next plan for the project is gonna be some esp code, that detects different stages of flight with the altimeter. yo yo out
Been a couple days, but I’m getting back into it. I got the hardware assembled, with one problem being my power situation. I originally planned to use a 2s lipo, but it does not have enough cooling to deal with that. It was my first time using perfboard, so it took me a long time, but I got it done. The hardware slid into the printed bay perfectly, but it needs a few fixes, which include, higher placed camera mount, slightly larger launch lug hole, and fix my printer from stringing. I also finished adding landing detection to my logic. One part of me is considering switching the landing detection to a more robust system, but I’m not sure yet. Any suggestions for apogee and landing detection from altitude data is very welcome!
First time using freeRTOS, this is some intense stuff, but I finally got it set up where one core handles the sensors and state machine logic, and the other one handles the camera, and saving the frames to storage. Today, I basically fully finished the sensor core, adding detection for when it launches, when it passes apogee, and when it has landed. I also created a struct that saves alt, pres, temp, and time, to psram. I decided to migrate the project over to platformIO, and since I was switching I decided I would improve the logic, and also use two cores. Previously I used the average alt within a second, then fully delete that array and create a new one. Now it uses a rolling array. The launch and apogee detection is pretty simple, if the average now is higher or lower by a certain threshold boom detected, but for the landing I decided to make it so that it has to stay within a certain threshold for 5 seconds, and if it breaks it once it resets. Next I need to setup the camera logic (not excited)
Got the camera working, and added the camera logic to the main program. This photo is just from the example sketch that comes with it but next goal is to find a way to reliably power the hardware so I can test the code. It does compile without errors, but I’m not feeling very lucky about it actually interfacing right. The way it works is once the sensor core detects apogee it switches from a high frame rate video, to high quality video so it can get cool shots on the way down. Instead of fully re initializing the camera though, I just initialized it at the higher quality but used the low resolution. The only thing I need to do for the logic now is get the array of sensor readings and save it to sd after the video stops recording.
Been a loooong time since I’ve updated on this, I’ve done little pieces here and there but not enough where I start lookout. For the time I’ve logged I finally finished v1 but I am about to test it on hardware (wish me luck, not feeling lucky). I also tried to fix my 3d printer with different slicer settings. After TONS of troubleshooting one day it just started working. I think something was stuck in the nozzle that got unclogged. Apart from the logs I’ve printed out all of the pieces and done some general troubleshooting on the avionics. To solve the power I got a boost converter to take 3.3v to 5v, and it works. One big transition I’m making with the project is if after testing the camera resolution switch is ineffective I’m gonna reduce the scope of this project and just do one resolution to make it more reliable. I’m gonna LOCK IN over the next week and get it done...
|
1792551274.1510687
|
1793156074.1510687
|
|
13849
|
x3x1 by @Leah | Stardance
|
Leah
|
0
|
1.22
|
0
|
[]
|
[{"post_id": 6544, "ts": "2026 [{"post_id": 6544, "ts": "2026-06-11T00:04:36Z", "hours": 1.2208, "text": "Added initial commands and tested it works!"}]...
|
Title: x3x1 by @Leah | Stardance
Devlogs:
Added i Title: x3x1 by @Leah | Stardance
Devlogs:
Added initial commands and tested it works!...
|
1792594081.112288
|
1793198881.112288
|
|
7860
|
x44 by @heisenberg | Stardance
|
heisenberg
|
0
|
44.8
|
0
|
[]
|
[{"post_id": 60229, "ts": "202 [{"post_id": 60229, "ts": "2026-09-02T13:51:16Z", "hours": 11.7039, "text": "Devlog 6 Continuing x44 after 2 months. I was very busy with school work. Coming back to it after a long time, i am seeing that my initial design had the Rust build worker doing too much. The CF Worker pushed a job to a queue and sent a ping to the VPS over HTTP. The Rust build worker then had to authenticate against CF’s REST API, pull the queue message, execute the build, upload artifacts to R2, and acknowledge the message. This over complicated the system. The Architectural Change Instead of the rust build worker pulling jobs queues after the ping, I made the control-plane worker both queue producer and queue consumer. Now the Pipeline Looks like this:- When a project is created or a git push occurs the Worker records a queued row in D1 and pushes the build configuration into the queue. The Worker then takes 1 job from the queue and send the build configuration to the Rust build worker, If a build is running CF natively waits for it to be acknowledged-no custom logic for it Then the Rust build worker finally runs the build and upload the build output to R2.[I acknowledge the job even if the build fails to prevent retry loops] No frontend changes, see my IDE"}, {"post_id": 30109, "ts": "2026-07-17T12:54:56Z", "hours": 5.2083, "text": "Devlog 5 I finished the /new-project page and wrote some types. While testing I found a major bug, that if a build request comes to the build-worker while a build is running then the output files gets overwritten, resulting in a broken deployment. I could fix it by having the outputs of the build on separate folders and uploading them one by one. But this approach wasn’t utilising the queues. I will change the structure to something like this, [Github Webhook/Initial Deploy] -> [Control-plane] -> [Cloudflare Queue] -> [control-plane queue handler] -> this sends the build details to the build-worker after building it will update the status of the deployment. This was i don’t have to manage concurrency my self I am spending a lot of time in styling. hope it looks good :?) Nexxt Building what I just explained. Improve the bland dashboard."}, {"post_id": 27080, "ts": "2026-07-12T10:00:23Z", "hours": 10.2703, "text": "Devlog 4 - Build the structure of the dashboard Just build the layout of the dashboard and created a new page for creating new projects[design inspired by cloudflare]. You might be thinking that this should not take 10 hours and you are right. My first thought was to not to create a new page but a dialog box. But the combobox I used for selecting repo was not registering the clicks, i was working with keyboard tho. After trying to debug a lot, I asked AI why it was not working as intended. Because I had both base-ui and radix-ui wasted 4 hours on it and ended up creating a new page altogether Next: Complete the /new-project page Connect the builder with the backend Add a detail page for projects"}, {"post_id": 20740, "ts": "2026-07-02T13:01:51Z", "hours": 9.2825, "text": "Devlog #3 Changes Made the landing page for x44. Tho it was mostly generated by AI, I did the authentication and styling for the button. Set-up drizzle orm and wrote the schema for the database. Authentication(used better-auth) The problems I faced I tried to make my own authentication system, and realised after more than two hours of work that there is still a lot of work to be done to make it secure. And i can use that time to add more features. So I switched to better-auth it was a great decision according to me. And if you are in search of an authentication framework I recommend you to check better-auth once them have amazing documentation. To initialise better-auth in cf worker, I first needed to initialse drizzle and it requires a D1 instance which in only available in the context of a request. So I made a getAuth function const getAuth = ( ctx : Context ) => { const db = drizzle ( ctx . env . DB , { schema }) const auth = betterAuth ({ database : drizzleAdapter ( db , { provider : \" sqlite \" , schema })}) return auth } Currently working on dashboard(this is not by AI) If you have any suggestion please comment, and you can view the system architecture in the previous devlog[i am not yet sure about the subdomain routing part, so that is not drawn]. ✌️"}, {"post_id": 13592, "ts": "2026-06-22T08:32:27Z", "hours": 4.3369, "text": "This commit was a big one. The build-worker finally got a proper API layer, added Axum with an auth middleware so only authorized clients can trigger builds. The whole flow is now queue-driven: the worker pulls jobs from Cloudflare Queues, runs the Docker build, uploads output to R2, and acknowledges the message. Feels way more production ready. Also spun up the monorepo structure properly. Added apps/control-plane (Cloudflare Worker), apps/website (Vite frontend), and packages/db-schema for shared types. pnpm workspaces are configured, root package.json has a dev:backend script. Basic .gitignore in place. The most frustrating thing was that the Cloudflare Queue send function is not working. I’ve spent hours trying to debug it, messages aren’t showing up on the CF dashboard at all. The pull/ack endpoints seem fine, but pushing messages into the queue is a dead end. Hoping that actually deploying the control-plane worker might fix it,maybe it’s a local dev environment issue with wrangler. Either way, this is the main blocker right now. If anyone has hit this, I’d love to hear how you solved it. Git commit: https://github.com/xxeisenberg/x44/commit/9b1669bd7e935043367ba32c2abadc1428f80596"}, {"post_id": 5363, "ts": "2026-06-09T03:11:41Z", "hours": 3.995, "text": "I have built the docker image that will build the code and a rust program that will run the docker container and upload the build output to Cloudflare R2."}]...
|
Title: x44 by @heisenberg | Stardance
Devlogs:
I Title: x44 by @heisenberg | Stardance
Devlogs:
I have built the docker image that will build the code and a rust program that will run the docker container and upload the build output to Cloudflare R2.
This commit was a big one. The build-worker finally got a proper API layer, added Axum with an auth middleware so only authorized clients can trigger builds. The whole flow is now queue-driven: the worker pulls jobs from Cloudflare Queues, runs the Docker build, uploads output to R2, and acknowledges the message. Feels way more production ready. Also spun up the monorepo structure properly. Added apps/control-plane (Cloudflare Worker), apps/website (Vite frontend), and packages/db-schema for shared types. pnpm workspaces are configured, root package.json has a dev:backend script. Basic .gitignore in place. The most frustrating thing was that the Cloudflare Queue send function is not working. I’ve spent hours trying to debug it, messages aren’t showing up on the CF dashboard at all. The pull/ack endpoints seem fine, but pushing messages into the queue is a dead end. Hoping that actually deploying the control-plane worker might fix it,maybe it’s a local dev environment issue with wrangler. Either way, this is the main blocker right now. If anyone has hit this, I’d love to hear how you solved it. Git commit: https://github.com/xxeisenberg/x44/commit/9b1669bd7e935043367ba32c2abadc1428f80596
Devlog #3 Changes Made the landing page for x44. Tho it was mostly generated by AI, I did the authentication and styling for the button. Set-up drizzle orm and wrote the schema for the database. Authentication(used better-auth) The problems I faced I tried to make my own authentication system, and realised after more than two hours of work that there is still a lot of work to be done to make it secure. And i can use that time to add more features. So I switched to better-auth it was a great decision according to me. And if you are in search of an authentication framework I recommend you to check better-auth once them have amazing documentation. To initialise better-auth in cf worker, I first needed to initialse drizzle and it requires a D1 instance which in only available in the context of a request. So I made a getAuth function const getAuth = ( ctx : Context ) => { const db = drizzle ( ctx . env . DB , { schema }) const auth = betterAuth ({ database : drizzleAdapter ( db , { provider : " sqlite " , schema })}) return auth } Currently working on dashboard(this is not by AI) If you have any suggestion please comment, and you can view the system architecture in the previous devlog[i am not yet sure about the subdomain routing part, so that is not drawn]. ✌️
Devlog 4 - Build the structure of the dashboard Just build the layout of the dashboard and created a new page for creating new projects[design inspired by cloudflare]. You might be thinking that this should not take 10 hours and you are right. My first thought was to not to create a new page but a dialog box. But the combobox I used for selecting repo was not registering the clicks, i was working with keyboard tho. After trying to debug a lot, I asked AI why it was not working as intended. Because I had both base-ui and radix-ui wasted 4 hours on it and ended up creating a new page altogether Next: Complete the /new-project page Connect the builder with the backend Add a detail page for projects
Devlog 5 I finished the /new-project page and wrote some types. While testing I found a major bug, that if a build request comes to the build-worker while a build is running then the output files gets overwritten, resulting in a broken deployment. I could fix it by having the outputs of the build on separate folders and uploading them one by one. But this approach wasn’t utilising the queues. I will change the structure to something like this, [Github Webhook/Initial Deploy] -> [Control-plane] -> [Cloudflare Queue] -> [control-plane queue handler] -> this sends the build details to the build-worker after building it will update the status of the deployment. This was i don’t have to manage concurrency my self I am spending a lot of time in styling. hope it looks good :?) Nexxt Building what I just explained. Improve the bland dashboard.
Devlog 6 Continuing x44 after 2 months. I was very busy with school work. Coming back to it after a long time, i am seeing that my initial design had the Rust build worker doing too much. The CF Worker pushed a job to a queue and sent a ping to the VPS over HTTP. The Rust build worker then had to authenticate against CF’s REST API, pull the queue message, execute the build, upload artifacts to R2, and acknowledge the message. This over complicated the system. The Architectural Change Instead of the rust build worker pulling jobs queues after the ping, I made the control-plane worker both queue producer and queue consumer. Now the Pipeline Looks like this:- When a project is created or a git push occurs the Worker records a queued row in D1 and pushes the build configuration into the queue. The Worker then takes 1 job from the queue and send the build configuration to the Rust build worker, If a build is running CF natively waits for it to be acknowledged-no custom logic for it Then the Rust build worker finally runs the build and upload the build output to R2.[I acknowledge the job even if the build fails to prevent retry loops] No frontend changes, see my IDE...
|
1792637657.8521173
|
1793242457.8521173
|
|
13855
|
xOrbita by @Mnguyen | Stardance
|
Mnguyen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xOrbita by @Mnguyen | Stardance
|
1792792348.0977688
|
1793397148.0977688
|
|
66458
|
xX_Magicn't_Xx by @Asta_does_stuff | Stardance
|
Asta_does_stuff
|
0
|
4.21
|
0
|
[]
|
[{"post_id": 75480, "ts": "202 [{"post_id": 75480, "ts": "2026-09-30T06:33:37Z", "hours": 1.0303, "text": "Case Made a case for my hackpad, also, I added a space to contain the magic elixir that will be harnessed by the hackpad (I jus remembered to add space for LiPo whilst writing this…)"}, {"post_id": 75461, "ts": "2026-09-30T04:59:50Z", "hours": 0.5003, "text": "Adding action buttons The default key will be WASD, QE and 1234 That way I can control my future project with this"}, {"post_id": 75442, "ts": "2026-09-30T03:37:04Z", "hours": 0.6, "text": "Designing another Magicn’t object (Hackpad) So you might be wondering, isn’t this two project in a project?, well yes, but this is a series of communication device, the hackpad will be some kind of magical artifact that have buttons, and the wand is voice input So this project is a universal control unit, that I can link with my other projects in the future, but I’m still wondering of what magical object/items that I can design the hackpad from"}, {"post_id": 75149, "ts": "2026-09-29T09:22:22Z", "hours": 2.0811, "text": "Magicn’t concept (ALSO ONSHAPE HAVE DARK MODE NOW) I will be using an INMP441 with ESP32S3 local AI keywords catcher embedded in it, the base concept is for it to control an rgb led that goes ON when I say “Lumos” and OFF when I say “Nox” Also I’m thinking of two option, the top one have a small flask that have an LED that I’m gonna filled with blue glitterry water and connecting false cable to show that I’m harnessing magic with science, and the bottom one is just a transluscent without that cool flask Also, the flask is supossed to be on the handle, but it takes too much electronic space, and the wooden part only have one cable to light up the LED at the tip (see the other image) Also this thing took me two hours due to the top wooden part that are SO tricky to make, and overall, modelling the sides of cylinder is not my expertise (I’m learning tho)"}]...
|
Title: xX_Magicn't_Xx by @Asta_does_stuff | St Title: xX_Magicn't_Xx by @Asta_does_stuff | Stardance
Devlogs:
Magicn’t concept (ALSO ONSHAPE HAVE DARK MODE NOW) I will be using an INMP441 with ESP32S3 local AI keywords catcher embedded in it, the base concept is for it to control an rgb led that goes ON when I say “Lumos” and OFF when I say “Nox” Also I’m thinking of two option, the top one have a small flask that have an LED that I’m gonna filled with blue glitterry water and connecting false cable to show that I’m harnessing magic with science, and the bottom one is just a transluscent without that cool flask Also, the flask is supossed to be on the handle, but it takes too much electronic space, and the wooden part only have one cable to light up the LED at the tip (see the other image) Also this thing took me two hours due to the top wooden part that are SO tricky to make, and overall, modelling the sides of cylinder is not my expertise (I’m learning tho)
Designing another Magicn’t object (Hackpad) So you might be wondering, isn’t this two project in a project?, well yes, but this is a series of communication device, the hackpad will be some kind of magical artifact that have buttons, and the wand is voice input So this project is a universal control unit, that I can link with my other projects in the future, but I’m still wondering of what magical object/items that I can design the hackpad from
Adding action buttons The default key will be WASD, QE and 1234 That way I can control my future project with this
Case Made a case for my hackpad, also, I added a space to contain the magic elixir that will be harnessed by the hackpad (I jus remembered to add space for LiPo whilst writing this…)...
|
1792460992.659098
|
1793065792.659098
|
|
65944
|
xX_Obsolete_Sky_Lab_Xx by @Asta_does_stuff | Stard xX_Obsolete_Sky_Lab_Xx by @Asta_does_stuff | Stardance...
|
Asta_does_stuff
|
1
|
8.5
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T03:48:12Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Its the starting point of a big software project which showcase NASA’s old instrument or the one that is still running This devlog I just add essential stuff like funcitons! (open/close, minimize, footer, header) Currently it only have 2 apps (calculator and welcome page) Feel free to suggest other related app! I’m planning to give users the ability to open NASA’s instrument 3D model, their history, missions and other data", "repo": "https://github.com/aryasatyaardy-cell/xX_Obsolete_Sky_Lab_Xx", "demo": "https://obsolete-skylab.netlify.app/"}]...
|
[{"post_id": 78310, "ts": "202 [{"post_id": 78310, "ts": "2026-10-10T11:51:30Z", "hours": 0.4361, "text": "Fixing buggy app"}, {"post_id": 76351, "ts": "2026-10-03T08:44:47Z", "hours": 1.6631, "text": "Changed almost everything So the old one is just hide and set a style of a div to “open” and “close” it, this one actually open it By opening it, js copy and delete it, and js reopen it when a button pressed"}, {"post_id": 76314, "ts": "2026-10-03T05:12:43Z", "hours": 2.3989, "text": "Added and fixed an app Added credits and filling the “about this site”"}, {"post_id": 74274, "ts": "2026-09-27T03:33:57Z", "hours": 1.2556, "text": "Finished WebOS 1 Added a working calculator app (cba to code it so I use Iframe) Added a footer to preview minimized tab"}, {"post_id": 74224, "ts": "2026-09-26T23:35:34Z", "hours": 0.7764, "text": "What I’ve added Welcome loading screen in 8 different langguages (if I’m not mistaken) A tab that is draggable and can be closed and opened"}, {"post_id": 74021, "ts": "2026-09-26T15:24:57Z", "hours": 0.6806, "text": "added window"}, {"post_id": 73997, "ts": "2026-09-26T14:28:12Z", "hours": 0.3311, "text": "Added a cool transition when pressing space"}, {"post_id": 73921, "ts": "2026-09-26T10:15:29Z", "hours": 0.5672, "text": "Made the header lol"}]...
|
Title: xX_Obsolete_Sky_Lab_Xx by @Asta_does_stuff Title: xX_Obsolete_Sky_Lab_Xx by @Asta_does_stuff | Stardance
Devlogs:
Made the header lol
Added a cool transition when pressing space
added window
What I’ve added Welcome loading screen in 8 different langguages (if I’m not mistaken) A tab that is draggable and can be closed and opened
Finished WebOS 1 Added a working calculator app (cba to code it so I use Iframe) Added a footer to preview minimized tab
Added and fixed an app Added credits and filling the “about this site”
Changed almost everything So the old one is just hide and set a style of a div to “open” and “close” it, this one actually open it By opening it, js copy and delete it, and js reopen it when a button pressed
Fixing buggy app
Ships:
Its the starting point of a big software project which showcase NASA’s old instrument or the one that is still running This devlog I just add essential stuff like funcitons! (open/close, minimize, footer, header) Currently it only have 2 apps (calculator and welcome page) Feel free to suggest other related app! I’m planning to give users the ability to open NASA’s instrument 3D model, their history, missions and other data...
|
1792965210.7773502
|
1793051610.7773502
|
|
56281
|
xX_Shadow_Hunter_Xx by @Asta_does_stuff | Stardanc xX_Shadow_Hunter_Xx by @Asta_does_stuff | Stardance...
|
Asta_does_stuff
|
1
|
34.63
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-26T08:14:34Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "xX_Shadow_Hunter_Xx is a silly robot name made and designed by me, well for know, the only function it does (for now) is the sound sensor which I won’t showcase in this ship What I want to showcase is the website control pannel Everything you need to know is in the readme file in this projects github repo This is the youtube link for this projects introduction (but sadly I’ve got no time to continue YouTube serously) https://youtu.be/HKpWddRkjdQ?si=jfRWhwc86oJqWMqU", "repo": "https://github.com/aryasatyaardy-cell/xX_Shadow_Hunter_Xx", "demo": ""}]...
|
[{"post_id": 80539, "ts": "202 [{"post_id": 80539, "ts": "2026-10-18T03:47:06Z", "hours": 6.0067, "text": "ALL WORKDDEJIAFIAWNCWANAWUIBVHAHAHAHAH every sensor work but it get too big to handle when i activate 4 of them simoultaneously"}, {"post_id": 79459, "ts": "2026-10-14T03:37:57Z", "hours": 0.785, "text": "Organizing Just putting vibration sensing codes in their designated files"}, {"post_id": 79002, "ts": "2026-10-12T09:40:53Z", "hours": 0.5564, "text": "#YAYA it works"}, {"post_id": 78984, "ts": "2026-10-12T08:00:56Z", "hours": 1.6869, "text": "Codes for vibration sensor"}, {"post_id": 78648, "ts": "2026-10-11T05:08:36Z", "hours": 2.0417, "text": "2 DoF Inverse Kinematics tried it, theoretically works, practically nope"}, {"post_id": 78239, "ts": "2026-10-10T02:45:32Z", "hours": 9.7806, "text": "assembling charger module and gluing all the parts"}, {"post_id": 75880, "ts": "2026-10-01T13:42:26Z", "hours": 0.9022, "text": "idk whats wrong I was trying to code DHT22 (temp) but INMP441 (audio) just suddenly stop working, like, all of the sudden, I’m gonna go back to square one in weekend, and try to build it from beginning…"}, {"post_id": 75807, "ts": "2026-10-01T06:37:25Z", "hours": 2.2919, "text": "Correcting the size of ESP32S3 slot I also added space for INMP441, DHT22, and MQ-135"}, {"post_id": 74739, "ts": "2026-09-28T03:14:47Z", "hours": 1.68, "text": "Configuring sound data to my webb I first added an averaging function but I found that deleting data from x to -x works better in stabilizing data given x = Real number"}, {"post_id": 74485, "ts": "2026-09-27T14:19:46Z", "hours": 0.4442, "text": "Not resolved yet. Soooooooooooo basically I know that its delivering a set of data… empty data…. It’s late now, imma do it tomorrow (no school in monday due to mid-term test has finished for my year lol)"}, {"post_id": 74451, "ts": "2026-09-27T12:18:04Z", "hours": 0.4578, "text": "ERORRRRRRRRRRRRRS"}, {"post_id": 74370, "ts": "2026-09-27T08:13:08Z", "hours": 1.0003, "text": "Configuring the web and it worked! I used my ancient code from old project… I called it ancient because I’ve forgotten how it works"}, {"post_id": 73882, "ts": "2026-09-26T07:51:20Z", "hours": 0.4169, "text": "Collecting and compressing shadow hunter’s body part I know it sounds bizzare, but I want to keep all of its past developement and share it with you guys, as a token of appreacitaion to my old self, to prove him that our CAD skill is improving"}, {"post_id": 73876, "ts": "2026-09-26T07:22:30Z", "hours": 0.6336, "text": "Finished writing readme with all I’ve done for this project"}, {"post_id": 73841, "ts": "2026-09-26T04:40:56Z", "hours": 0.8719, "text": "Web control is finished I will ship this project as now theres something for you guys to try out (I need to write the readme first) I’ve fixed the charts so now they update independantly, but I haven’t make it pretty tho, its red and looks like an error occured all the time lol imma eat my lunch first"}, {"post_id": 73513, "ts": "2026-09-25T08:47:10Z", "hours": 0.6667, "text": "Added a button to download the log Also the button call different function to esp32 (haven’t tested it yet but it’s there)"}, {"post_id": 73367, "ts": "2026-09-25T00:27:00Z", "hours": 0.805, "text": "Lil’ Update Before Exam (yes, its 2 min before todays mid-term exam lol) I added Button flipflop si it change color corresponding to its state for ALL 4 BUTTONS Made it so that when you hover over an important div it zoomed out so its easier to read and make the background more opaque"}, {"post_id": 73116, "ts": "2026-09-24T12:48:25Z", "hours": 1.5989, "text": "I can smell this project being shipped (still a wip tho) I finished adding hologram effect that highlight the when you hover your cursor over, also a button that delete the logged report and its also becomes red when you hover over it!"}, {"post_id": 73051, "ts": "2026-09-24T08:48:54Z", "hours": 1.3989, "text": "Making the web pretty I was devastated that stardance is ending, but glad they extend it by a month, I’m tellin you, I’ll get that 30hrs certificate In the meantime, here’s the updated web interface"}, {"post_id": 72148, "ts": "2026-09-22T10:07:02Z", "hours": 0.7014, "text": "Designing the Web I’m tidying up the website code, and re-designing it (still a sketch for now)"}, {"post_id": 70504, "ts": "2026-09-19T09:11:23Z", "hours": 0.9617, "text": "Minor missalignment fixing and major reinforcement Finished adding reinforcement and added teeth/ridges and increasing the surface area of its toe so it grasp the ground better ^^"}, {"post_id": 70424, "ts": "2026-09-19T05:09:43Z", "hours": 1.0456, "text": "Colouring! Cried my self to sleep last night to relieve my stress! I’m fine now lol I’ve tested the colour my manufacturer can print (like I said on my last devlog) and added some reinforcement to the side and the top body part because I can only make it 3mm height"}, {"post_id": 69641, "ts": "2026-09-17T13:57:28Z", "hours": 0.6864, "text": "Brute fixing V5 I know what’s wrong but I have school stuff in due soon, I’m stressed out, just got back from school trip, I’m going insane, I can’t do this anymore, I wanna give up school altogether, I have remedials to do, assignment to complete, exams next week, I wanna throw up So I’m brute fixing this version after assessing the printed V4 (It’s done and can be tested, only some minor bugs, also ignore the colors, I’m testing it)"}, {"post_id": 67161, "ts": "2026-09-13T07:22:14Z", "hours": 0.7939, "text": "Made a Circuit Plan First picture is the one I’ve worked out on Second pic is the whole circuit plan Third pic is the simplified servo/leg circuit"}, {"post_id": 67132, "ts": "2026-09-13T06:07:25Z", "hours": 0.7392, "text": "Added DHT22 Temperature and Humidity Reading Well, this lines is unable to plot the data to the website hust yet, as I’m just trialing if its actually readable as a bare code with no pretty-ness"}, {"post_id": 66594, "ts": "2026-09-12T13:20:34Z", "hours": 0.8753, "text": "Updating Shadow’s Model So an alternative popped in my head when I was praying for its half a leg mode lol Since folding its calf to its tigh won’t work proportionally as it require the calf to be shorter than the thigh, then I made it close up just like my initial idea but its not 100% folded inside I can see the vision where it’ll be more stable when idle such as in its monitoring/sleeping mode because its wider, and have a larger feet surface area touching the ground But to test this out, means I have to make sure a single leg is functional, so this mode will be tested in some later time In the meantime, I’ll order a print of a single leg to test it directly"}, {"post_id": 66541, "ts": "2026-09-12T11:56:46Z", "hours": 0.3242, "text": "First time using arduino IDE with hackatime This is my first time using Arduino IDE with hackatime and I’m just seeing if its work, also because its my praying time rn lol, also, I relocate files in this timelapse because when I first join stardance, I thought it doesn’t support arduino IDE time track in ubuntu And turns out, hackatime does have an extension for arduino ide in ubuntu, so now I’m relocating the file into ide that had been relocated from ide to vscode I preffer to use arduino ide as I find vscode’s AI being too helpful cus everytime I type, the AI reccomend me lines of codes and I find it hard to sharpen my coding or debugging No hate to vscode users but I just find arduino ide is less helping me and what doesn’t kill you make you stronger right?"}, {"post_id": 66277, "ts": "2026-09-12T00:47:47Z", "hours": 0.3003, "text": "Shadow’s design process before I join stardance! I included spider’s background research and what drive me into making this project :D ──────────────────────────────────────────────── Full document https://canva.link/e4f69aawnli16qy"}, {"post_id": 65989, "ts": "2026-09-11T14:33:12Z", "hours": 1.4019, "text": "Finishing Shadow’s model During simulation (the CAD version), all parts work as intended, and the measurements is right, ill order a 3d print of this model (only one of its leg cus its cheaper) and test it with real servo :D Parts used Body V3.4 Upper body V1.4 Thigh V1.3 Calf V2.1 Hex V1.2"}, {"post_id": 65854, "ts": "2026-09-11T08:50:18Z", "hours": 0.3003, "text": "Shadow Hunter report you can see the update on this link and comment any suggestion! Also, I’m working on a separate docs as the Indonesian version is for an ongoing competition (it is stated that all rights to my work is still mine), and because I don’t want to disturb the competition version with the English one, I separate the docs. Here I attached the proof of working on my Indonesian docs and my translated docs that you can read and comment on! ──────────────────────────────────────────────── Shadow’s report link https://docs.google.com/document/d/1Cm4hbkKl3CnUX5Tc_nzmHTw8mYc46gp4ql9gRl0hm7w/edit?usp=sharing"}, {"post_id": 65367, "ts": "2026-09-10T13:42:38Z", "hours": 1.3903, "text": "Translating Shadow’s report basically, its a detailed explanation of my project (Shadow Hunter) Here’s the list of detailed explanation (still on going) Background Initial idea Purpose and its benefit Limitations Target audience Part & tools that I use Implemented concept Designing and prototyping Testing Documentation It is not fully finished as I prewrite some of this in my own langguage and then translate it to English and also I still need to add some stuff"}, {"post_id": 64824, "ts": "2026-09-09T14:36:05Z", "hours": 0.8414, "text": "Tried to fix the missalignment but it won’t go away, but atleast now i know where’s the error"}, {"post_id": 60007, "ts": "2026-09-02T03:11:32Z", "hours": 1.0306, "text": "First devlog! Since this is my first devlog, i’ll give an update of what this project is, because I’ve started this project a month before stardance, basically, this is for an IoT competition and I wanted to get feedback and share my work with everyone as this is my bigest project yet Initial idea: xX_Shadow_Hunter_Xx or Shadow Hunter is an internet of things (IoT) based data gathering device that is designed to gather environmental data wirelessly in post disastrous areas that are dangerous to approach and have limited energy supply. This project is based on climate disaster mitigation technology, aimed towards post-earthquake disaster. First devlog: Fixing the shoulder part for my spider robot, idk if this is final as there are some errors that I’m not sure if it fixed or not lol ──────────────────────────────────────────────── Timelapse link: https://lapse.hackclub.com/timelapse/MShPOLWQmNkO"}]...
|
Title: xX_Shadow_Hunter_Xx by @Asta_does_stuff | S Title: xX_Shadow_Hunter_Xx by @Asta_does_stuff | Stardance
Devlogs:
First devlog! Since this is my first devlog, i’ll give an update of what this project is, because I’ve started this project a month before stardance, basically, this is for an IoT competition and I wanted to get feedback and share my work with everyone as this is my bigest project yet Initial idea: xX_Shadow_Hunter_Xx or Shadow Hunter is an internet of things (IoT) based data gathering device that is designed to gather environmental data wirelessly in post disastrous areas that are dangerous to approach and have limited energy supply. This project is based on climate disaster mitigation technology, aimed towards post-earthquake disaster. First devlog: Fixing the shoulder part for my spider robot, idk if this is final as there are some errors that I’m not sure if it fixed or not lol ──────────────────────────────────────────────── Timelapse link: https://lapse.hackclub.com/timelapse/MShPOLWQmNkO
Tried to fix the missalignment but it won’t go away, but atleast now i know where’s the error
Translating Shadow’s report basically, its a detailed explanation of my project (Shadow Hunter) Here’s the list of detailed explanation (still on going) Background Initial idea Purpose and its benefit Limitations Target audience Part & tools that I use Implemented concept Designing and prototyping Testing Documentation It is not fully finished as I prewrite some of this in my own langguage and then translate it to English and also I still need to add some stuff
Shadow Hunter report you can see the update on this link and comment any suggestion! Also, I’m working on a separate docs as the Indonesian version is for an ongoing competition (it is stated that all rights to my work is still mine), and because I don’t want to disturb the competition version with the English one, I separate the docs. Here I attached the proof of working on my Indonesian docs and my translated docs that you can read and comment on! ──────────────────────────────────────────────── Shadow’s report link https://docs.google.com/document/d/1Cm4hbkKl3CnUX5Tc_nzmHTw8mYc46gp4ql9gRl0hm7w/edit?usp=sharing
Finishing Shadow’s model During simulation (the CAD version), all parts work as intended, and the measurements is right, ill order a 3d print of this model (only one of its leg cus its cheaper) and test it with real servo :D Parts used Body V3.4 Upper body V1.4 Thigh V1.3 Calf V2.1 Hex V1.2
Shadow’s design process before I join stardance! I included spider’s background research and what drive me into making this project :D ──────────────────────────────────────────────── Full document https://canva.link/e4f69aawnli16qy
First time using arduino IDE with hackatime This is my first time using Arduino IDE with hackatime and I’m just seeing if its work, also because its my praying time rn lol, also, I relocate files in this timelapse because when I first join stardance, I thought it doesn’t support arduino IDE time track in ubuntu And turns out, hackatime does have an extension for arduino ide in ubuntu, so now I’m relocating the file into ide that had been relocated from ide to vscode I preffer to use arduino ide as I find vscode’s AI being too helpful cus everytime I type, the AI reccomend me lines of codes and I find it hard to sharpen my coding or debugging No hate to vscode users but I just find arduino ide is less helping me and what doesn’t kill you make you stronger right?
Updating Shadow’s Model So an alternative popped in my head when I was praying for its half a leg mode lol Since folding its calf to its tigh won’t work proportionally as it require the calf to be shorter than the thigh, then I made it close up just like my initial idea but its not 100% folded inside I can see the vision where it’ll be more stable when idle such as in its monitoring/sleeping mode because its wider, and have a larger feet surface area touching the ground But to test this out, means I have to make sure a single leg is functional, so this mode will be tested in some later time In the meantime, I’ll order a print of a single leg to test it directly
Added DHT22 Temperature and Humidity Reading Well, this lines is unable to plot the data to the website hust yet, as I’m just trialing if its actually readable as a bare code with no pretty-ness
Made a Circuit Plan First picture is the one I’ve worked out on Second pic is the whole circuit plan Third pic is the simplified servo/leg circuit
Brute fixing V5 I know what’s wrong but I have school stuff in due soon, I’m stressed out, just got back from school trip, I’m going insane, I can’t do this anymore, I wanna give up school altogether, I have remedials to do, assignment to complete, exams next week, I wanna throw up So I’m brute fixing this version after assessing the printed V4 (It’s done and can be tested, only some minor bugs, also ignore the colors, I’m testing it)
Colouring! Cried my self to sleep last night to relieve my stress! I’m fine now lol I’ve tested the colour my manufacturer can print (like I said on my last devlog) and added some reinforcement to the side and the top body part because I can only make it 3mm height
Minor missalignment fixing and major reinforcement Finished adding reinforcement and added teeth/ridges and increasing the surface area of its toe so it grasp the ground better ^^
Designing the Web I’m tidying up the website code, and re-designing it (still a sketch for now)
Making the web pretty I was devastated that stardance is ending, but glad they extend it by a month, I’m tellin you, I’ll get that 30hrs certificate In the meantime, here’s the updated web interface
I can smell this project being shipped (still a wip tho) I finished adding hologram effect that highlight the when you hover your cursor over, also a button that delete the logged report and its also becomes red when you hover over it!
Lil’ Update Before Exam (yes, its 2 min before todays mid-term exam lol) I added Button flipflop si it change color corresponding to its state for ALL 4 BUTTONS Made it so that when you hover over an important div it zoomed out so its easier to read and make the background more opaque
Added a button to download the log Also the button call different function to esp32 (haven’t tested it yet but it’s there)
Web control is finished I will ship this project as now theres something for you guys to try out (I need to write the readme first) I’ve fixed the charts so now they update independantly, but I haven’t make it pretty tho, its red and looks like an error occured all the time lol imma eat my lunch first
Finished writing readme with all I’ve done for this project
Collecting and compressing shadow hunter’s body part I know it sounds bizzare, but I want to keep all of its past developement and share it with you guys, as a token of appreacitaion to my old self, to prove him that our CAD skill is improving
Configuring the web and it worked! I used my ancient code from old project… I called it ancient because I’ve forgotten how it works
ERORRRRRRRRRRRRRS
Not resolved yet. Soooooooooooo basically I know that its delivering a set of data… empty data…. It’s late now, imma do it tomorrow (no school in monday due to mid-term test has finished for my year lol)
Configuring sound data to my webb I first added an averaging function but I found that deleting data from x to -x works better in stabilizing data given x = Real number
Correcting the size of ESP32S3 slot I also added space for INMP441, DHT22, and MQ-135
idk whats wrong I was trying to code DHT22 (temp) but INMP441 (audio) just suddenly stop working, like, all of the sudden, I’m gonna go back to square one in weekend, and try to build it from beginning…
assembling charger module and gluing all the parts
2 DoF Inverse Kinematics tried it, theoretically works, practically nope
Codes for vibration sensor
#YAYA it works
Organizing Just putting vibration sensing codes in their designated files
ALL WORKDDEJIAFIAWNCWANAWUIBVHAHAHAHAH every sensor work but it get too big to handle when i activate 4 of them simoultaneously
Ships:
xX_Shadow_Hunter_Xx is a silly robot name made and designed by me, well for know, the only function it does (for now) is the sound sensor which I won’t showcase in this ship What I want to showcase is the website control pannel Everything you need to know is in the readme file in this projects github repo This is the youtube link for this projects introduction (but sadly I’ve got no time to continue YouTube serously) https://youtu.be/HKpWddRkjdQ?si=jfRWhwc86oJqWMqU...
|
1792853688.7551243
|
1792940088.7551243
|
|
60890
|
x_on_wheels photography by @xmuncey | Stardance
|
xmuncey
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: x_on_wheels photography by @xmuncey | Stard Title: x_on_wheels photography by @xmuncey | Stardance...
|
1792428720.4705439
|
1793033520.4705439
|
|
55611
|
xanderrrr by @xanderr | Stardance
|
xanderr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xanderrrr by @xanderr | Stardance
|
1792504217.435137
|
1793109017.435137
|
|
24208
|
xbServerHub by @xb | Stardance
|
xb
|
0
|
7.57
|
0
|
[]
|
[{"post_id": 16473, "ts": "202 [{"post_id": 16473, "ts": "2026-06-26T20:23:23Z", "hours": 3.2156, "text": "Devlog: Real-Time Server Metrics with Glances and SignalR In this update, I added live server monitoring to xbServerHub . The goal was to collect system metrics (CPU, memory, network) from a Glances instance running in Docker, and stream them to the frontend in real time using SignalR — all while keeping the backend organized around Clean Architecture (Domain, Application, Persistence, API). What Was Done 1. Metrics Collection via Glances Glances exposes a REST API with system stats. I added a GlancesClient in the Persistence layer that polls the /cpu , /mem , and /network endpoints in parallel and maps the raw JSON responses into clean domain models ( ServerMetrics , CpuStats , MemoryStats , NetworkInterfaceStats ). A BackgroundService using PeriodicTimer polls Glances every 2 seconds and passes the result to a handler ( CollectSystemMetricsHandler ) in the Application layer, which doesn’t know or care that the data originally came from an HTTP call to Glances — it just receives a ServerMetrics object. 2. Broadcasting Metrics with SignalR To get this data to the frontend without constant polling from the client, I introduced an IMetricsBroadcaster interface in Application. This follows the same pattern as IGlancesClient : Application defines what it needs (a way to send metrics somewhere), without knowing how that’s actually done. The implementation, SignalRMetricsBroadcaster , lives in the API layer and uses a MetricsHub to push data to all connected clients via Clients.All.SendAsync . The handler now calls both the Glances client and the broadcaster on every tick, so every 2 seconds connected clients get a fresh snapshot pushed to them automatically. 3. Securing the Hub and Fixing Auth Routes Since metrics shouldn’t be visible to anyone who isn’t logged in, I added [Authorize] to MetricsHub . Because the app uses cookie-based authentication ( SignInManager ), this works without needing any token handling on the SignalR connection — the existing session cookie is enough, as long as the connection is treated as same-origin. This is also where I cleaned up and reorganized the authentication API routes to make sure they’re consistent with how the frontend (and now SignalR) expects to reach them, and wired up the Hub endpoint ( MapHub ) alongside the rest of the API configuration. Current State The backend now collects CPU, memory, and network stats every 2 seconds and pushes them live to any authenticated, connected client. The frontend isn’t consuming this yet — that’s the next step, along with finalizing the dev proxy setup so cookies and WebSocket connections behave the same in development as they will once frontend and backend are deployed together in a single container."}, {"post_id": 14534, "ts": "2026-06-23T17:56:51Z", "hours": 3.0894, "text": "Devlog: Frontend Login Flow and Session Handling with Cookies In this update, I built the entire frontend authentication flow for xbServerHub in React. The main goals were to handle regular login, two-factor authentication (2FA), and secure session persistence using cookies from the ASP.NET Core Identity backend. What Was Done 1. Project Structure and Clean Components Instead of keeping all the code in one giant file, I split the authentication page into smaller, reusable components: AuthPage.tsx – Manages which form to show. LoginForm.tsx – Handles the initial email and password submission. TwoFactorForm.tsx – Handles the 2FA code verification if required by the backend. 2. React Router and Route Protection I installed react-router-dom and configured the routing for the app: Public route: /auth for logging in. Protected route: /dashboard which can only be accessed by authenticated users. If an unauthenticated user tries to visit it, they are automatically redirected to login. 3. Axios Client and Cookie Sessions Since the ASP.NET backend uses cookie-based authentication, I set up an Axios instance with withCredentials: true . This ensures that the browser automatically stores and sends the session cookie with every single request. 4. Session Persistence (No Logout on Refresh) To fix the issue where refreshing the page logs the user out, I added an initialization check in App.tsx . When the app loads, it sends a quick request to GET user/me . If the server responds with success, the user stays logged in and lands straight on the dashboard. Code Reference: authService.ts Here is the complete service managing the API calls using Axios: import api from \" ./api \" ; import { AxiosError } from \" axios \" ; export interface LoginDto { email : string ; password : string ; } export interface AuthResult { isSuccess : boolean ; message : string ; requiresTwoFactor : boolean ; } export interface LoginWith2FADto { code : string ; rememberDevice : boolean ; } export const loginUser = async ( credentials : LoginDto ): Promise < AuthResult > => { try { const response = await api . post ( \" auth/login \" , credentials ); return response . data as AuthResult ; } catch ( error : unknown ) { let errorMessage = \" An error occurred during login. \" ; if (( error as AxiosError )?. response ?. data ) { errorMessage = ( error as AxiosError ). response ! . data as string ; } return { isSuccess : false , message : errorMessage , requiresTwoFactor : false , }; } } export const loginWith2FA = async ( data : LoginWith2FADto ): Promise < AuthResult > => { try { const response = await api . post ( \" auth/login-with-authenticator \" , data ); return response . data as AuthResult ; } catch ( error : unknown ) { let errorMessage = \" An error occurred during 2FA login. \" ; if (( error as AxiosError )?. response ?. data ) { errorMessage = ( error as AxiosError ). response ! . data as string ; } return { isSuccess : false , message : errorMessage , requiresTwoFactor : false , }; } } export const checkAuthStatus = async (): Promise < boolean > => { try { await api . get ( \" user/me \" ); return true ; } catch { return false ; } } export const logoutUser = async (): Promise < void > => { await api . post ( \" auth/logout \" ); }"}, {"post_id": 14246, "ts": "2026-06-23T08:23:51Z", "hours": 1.2658, "text": "Devlog: Implementing 2FA (TOTP) Authentication in ASP.NET This update focuses on authentication security. The core login flow has been refactored, and full support for Two-Factor Authentication (2FA) using authenticator apps (TOTP) has been implemented. The entire feature has been split into a business logic layer ( AuthService ) and an API layer ( AuthController ) using ASP.NET Core Identity. Architecture and Implementation Details 1. Updated Login Flow The standard login mechanism now detects whether a user has enabled two-factor authentication. If 2FA is active, the API blocks immediate access and returns a response containing RequiresTwoFactor = true , signaling that further verification is required. 2. QR Code Secret Generation To allow users to enable 2FA, the system securely generates a shared secret key and formats it into an industry-standard otpauth:// URI. This URI includes the issuer name ( xbServerHub ) and the user’s email, making it ready to be converted into a QR code on the frontend. 3. Input Sanitization Users often format verification codes with spaces or hyphens. To prevent validation failures due to formatting, the service automatically sanitizes the input string using .Replace(\" \", string.Empty).Replace(\"-\", string.Empty) before passing it to the token provider. 4. Account Management Enforced by Authorization New endpoints have been exposed to allow users to manually enable, verify, and disable their authenticator settings. All management endpoints are protected by the [Authorize] attribute, ensuring that only authenticated users can modify their security preferences. Code Reference: Verification and Activation The following method handles the final verification step. It cleans the user input, validates the token against the ASP.NET Identity token provider, and toggles the TwoFactorEnabled flag on the user record. public async Task < VerifyAuthenticatorResponseDto > VerifyAuthenticatorAsync ( string userId , string code ) { var user = await userManager . FindByIdAsync ( userId ); if ( user is null ) { return new () { IsSuccess = false , Message = \"User not found\" }; } var sanitizedCode = code . Replace ( \" \" , string . Empty ). Replace ( \"-\" , string . Empty ); var isValid = await userManager . VerifyTwoFactorTokenAsync ( user , userManager . Options . Tokens . AuthenticatorTokenProvider , sanitizedCode ); if (! isValid ) { _logger . LogWarning ( \"Invalid authenticator code for user: {UserId}\" , userId ); return new () { IsSuccess = false , Message = \"Invalid authenticator code\" }; } var enableResult = await userManager . SetTwoFactorEnabledAsync ( user , true ); if (! enableResult . Succeeded ) { _logger . LogWarning ( \"Failed to enable 2FA for user {UserId}: {Errors}\" , userId , string . Join ( \", \" , enableResult . Errors . Select ( e => e . Description ))); return new () { IsSuccess = false , Message = \"Failed to enable 2FA\" }; } _logger . LogInformation ( \"2FA enabled successfully for user: {UserId}\" , userId ); return new () { IsSuccess = true , Message = \"2FA enabled successfully\" }; }"}]...
|
Title: xbServerHub by @xb | Stardance
Devlogs:
De Title: xbServerHub by @xb | Stardance
Devlogs:
Devlog: Implementing 2FA (TOTP) Authentication in ASP.NET This update focuses on authentication security. The core login flow has been refactored, and full support for Two-Factor Authentication (2FA) using authenticator apps (TOTP) has been implemented. The entire feature has been split into a business logic layer ( AuthService ) and an API layer ( AuthController ) using ASP.NET Core Identity. Architecture and Implementation Details 1. Updated Login Flow The standard login mechanism now detects whether a user has enabled two-factor authentication. If 2FA is active, the API blocks immediate access and returns a response containing RequiresTwoFactor = true , signaling that further verification is required. 2. QR Code Secret Generation To allow users to enable 2FA, the system securely generates a shared secret key and formats it into an industry-standard otpauth:// URI. This URI includes the issuer name ( xbServerHub ) and the user’s email, making it ready to be converted into a QR code on the frontend. 3. Input Sanitization Users often format verification codes with spaces or hyphens. To prevent validation failures due to formatting, the service automatically sanitizes the input string using .Replace(" ", string.Empty).Replace("-", string.Empty) before passing it to the token provider. 4. Account Management Enforced by Authorization New endpoints have been exposed to allow users to manually enable, verify, and disable their authenticator settings. All management endpoints are protected by the [Authorize] attribute, ensuring that only authenticated users can modify their security preferences. Code Reference: Verification and Activation The following method handles the final verification step. It cleans the user input, validates the token against the ASP.NET Identity token provider, and toggles the TwoFactorEnabled flag on the user record. public async Task < VerifyAuthenticatorResponseDto > VerifyAuthenticatorAsync ( string userId , string code ) { var user = await userManager . FindByIdAsync ( userId ); if ( user is null ) { return new () { IsSuccess = false , Message = "User not found" }; } var sanitizedCode = code . Replace ( " " , string . Empty ). Replace ( "-" , string . Empty ); var isValid = await userManager . VerifyTwoFactorTokenAsync ( user , userManager . Options . Tokens . AuthenticatorTokenProvider , sanitizedCode ); if (! isValid ) { _logger . LogWarning ( "Invalid authenticator code for user: {UserId}" , userId ); return new () { IsSuccess = false , Message = "Invalid authenticator code" }; } var enableResult = await userManager . SetTwoFactorEnabledAsync ( user , true ); if (! enableResult . Succeeded ) { _logger . LogWarning ( "Failed to enable 2FA for user {UserId}: {Errors}" , userId , string . Join ( ", " , enableResult . Errors . Select ( e => e . Description ))); return new () { IsSuccess = false , Message = "Failed to enable 2FA" }; } _logger . LogInformation ( "2FA enabled successfully for user: {UserId}" , userId ); return new () { IsSuccess = true , Message = "2FA enabled successfully" }; }
Devlog: Frontend Login Flow and Session Handling with Cookies In this update, I built the entire frontend authentication flow for xbServerHub in React. The main goals were to handle regular login, two-factor authentication (2FA), and secure session persistence using cookies from the ASP.NET Core Identity backend. What Was Done 1. Project Structure and Clean Components Instead of keeping all the code in one giant file, I split the authentication page into smaller, reusable components: AuthPage.tsx – Manages which form to show. LoginForm.tsx – Handles the initial email and password submission. TwoFactorForm.tsx – Handles the 2FA code verification if required by the backend. 2. React Router and Route Protection I installed react-router-dom and configured the routing for the app: Public route: /auth for logging in. Protected route: /dashboard which can only be accessed by authenticated users. If an unauthenticated user tries to visit it, they are automatically redirected to login. 3. Axios Client and Cookie Sessions Since the ASP.NET backend uses cookie-based authentication, I set up an Axios instance with withCredentials: true . This ensures that the browser automatically stores and sends the session cookie with every single request. 4. Session Persistence (No Logout on Refresh) To fix the issue where refreshing the page logs the user out, I added an initialization check in App.tsx . When the app loads, it sends a quick request to GET user/me . If the server responds with success, the user stays logged in and lands straight on the dashboard. Code Reference: authService.ts Here is the complete service managing the API calls using Axios: import api from " ./api " ; import { AxiosError } from " axios " ; export interface LoginDto { email : string ; password : string ; } export interface AuthResult { isSuccess : boolean ; message : string ; requiresTwoFactor : boolean ; } export interface LoginWith2FADto { code : string ; rememberDevice : boolean ; } export const loginUser = async ( credentials : LoginDto ): Promise < AuthResult > => { try { const response = await api . post ( " auth/login " , credentials ); return response . data as AuthResult ; } catch ( error : unknown ) { let errorMessage = " An error occurred during login. " ; if (( error as AxiosError )?. response ?. data ) { errorMessage = ( error as AxiosError ). response ! . data as string ; } return { isSuccess : false , message : errorMessage , requiresTwoFactor : false , }; } } export const loginWith2FA = async ( data : LoginWith2FADto ): Promise < AuthResult > => { try { const response = await api . post ( " auth/login-with-authenticator " , data ); return response . data as AuthResult ; } catch ( error : unknown ) { let errorMessage = " An error occurred during 2FA login. " ; if (( error as AxiosError )?. response ?. data ) { errorMessage = ( error as AxiosError ). response ! . data as string ; } return { isSuccess : false , message : errorMessage , requiresTwoFactor : false , }; } } export const checkAuthStatus = async (): Promise < boolean > => { try { await api . get ( " user/me " ); return true ; } catch { return false ; } } export const logoutUser = async (): Promise < void > => { await api . post ( " auth/logout " ); }
Devlog: Real-Time Server Metrics with Glances and SignalR In this update, I added live server monitoring to xbServerHub . The goal was to collect system metrics (CPU, memory, network) from a Glances instance running in Docker, and stream them to the frontend in real time using SignalR — all while keeping the backend organized around Clean Architecture (Domain, Application, Persistence, API). What Was Done 1. Metrics Collection via Glances Glances exposes a REST API with system stats. I added a GlancesClient in the Persistence layer that polls the /cpu , /mem , and /network endpoints in parallel and maps the raw JSON responses into clean domain models ( ServerMetrics , CpuStats , MemoryStats , NetworkInterfaceStats ). A BackgroundService using PeriodicTimer polls Glances every 2 seconds and passes the result to a handler ( CollectSystemMetricsHandler ) in the Application layer, which doesn’t know or care that the data originally came from an HTTP call to Glances — it just receives a ServerMetrics object. 2. Broadcasting Metrics with SignalR To get this data to the frontend without constant polling from the client, I introduced an IMetricsBroadcaster interface in Application. This follows the same pattern as IGlancesClient : Application defines what it needs (a way to send metrics somewhere), without knowing how that’s actually done. The implementation, SignalRMetricsBroadcaster , lives in the API layer and uses a MetricsHub to push data to all connected clients via Clients.All.SendAsync . The handler now calls both the Glances client and the broadcaster on every tick, so every 2 seconds connected clients get a fresh snapshot pushed to them automatically. 3. Securing the Hub and Fixing Auth Routes Since metrics shouldn’t be visible to anyone who isn’t logged in, I added [Authorize] to MetricsHub . Because the app uses cookie-based authentication ( SignInManager ), this works without needing any token handling on the SignalR connection — the existing session cookie is enough, as long as the connection is treated as same-origin. This is also where I cleaned up and reorganized the authentication API routes to make sure they’re consistent with how the frontend (and now SignalR) expects to reach them, and wired up the Hub endpoint ( MapHub ) alongside the rest of the API configuration. Current State The backend now collects CPU, memory, and network stats every 2 seconds and pushes them live to any authenticated, connected client. The frontend isn’t consuming this yet — that’s the next step, along with finalizing the dev proxy setup so cookies and WebSocket connections behave the same in development as they will once frontend and backend are deployed together in a single container....
|
1792806824.6704295
|
1793411624.6704295
|
|
51744
|
xbox 360 rechargeable battery by @rickmick | Stard xbox 360 rechargeable battery by @rickmick | Stardance...
|
rickmick
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xbox 360 rechargeable battery by @rickmick Title: xbox 360 rechargeable battery by @rickmick | Stardance...
|
1792680916.6236923
|
1793285716.6236923
|
|
34120
|
xbox for blinds by @alazarferhan | Stardance
|
alazarferhan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xbox for blinds by @alazarferhan | Stardanc Title: xbox for blinds by @alazarferhan | Stardance...
|
1792536634.622242
|
1793141434.622242
|
|
70862
|
xbox store mockup by @xm7md | Stardance
|
xm7md
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xbox store mockup by @xm7md | Stardance
|
1792615638.2631288
|
1793220438.2631288
|
|
45447
|
xdna.cpp by @satvikhardat | Stardance
|
|
1
|
87.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T15:45:47Z", "hours": 87.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Run GGUF quantized models directly on AMD XDNA1 NPUs (Ryzen AI 7040 / 8040 series) with llama.cpp its a fork or bettter said plugin of llama.cpp specially made to run models using amd NPUs Using AMD’s hawkpoint NPUs to run LLMs!! its a llama.cpp plugin not a standalone runtime to ensure supporting most models, but it has a few cool kernels targeted at the the xdna1 arch bcs as it turns out, the support for xdna1 NPUs is like really dead everyones like xdna2 yay, but i hv a xdna1 CPU so ima use every bit of it ig lol", "repo": "https://github.com/random-unknown-username/xdna.cpp", "demo": "https://github.com/random-unknown-username/xdna.cpp/releases/tag/v1.0.0"}]...
|
[{"post_id": 58984, "ts": "202 [{"post_id": 58984, "ts": "2026-08-31T15:43:02Z", "hours": 7.7858, "text": "Devlog 08 — Aug 31: The Crossover Spectrum & v1.0 Ship Finished multi-model crossover validation across three scales (0.5B, 3B, 27B): // Adaptive Heterogeneous Scheduling if ( N <= 256 ) { // Tiny matrices (<60 KB) run on CPU SIMD to avoid driver dispatch overhead cpu_engine -> run ( weights , weight_bytes , N , K , act , out ); } else { // Medium/Large matrices stream to 16 AIE2 compute tiles xdna_engine -> run ( weights , weight_bytes , N , K , act , out ); } Measured Crossover Scoreboard Qwen2.5-0.5B (403 MB) : CPU favored (106.5 t/s vs 72.6 t/s XDNA hybrid) due to small 60 KB payloads. Qwen2.5-3B (1.86 GB) : XDNA wins decisively: 16.5 tok/s vs 9.8 tok/s CPU (+68.8% / 1.69× speedup) . Qwen3.8-27B (15.2 GB) : XDNA sustains 1.72 tok/s streaming 12.6 GiB smoothly on a 32 GB laptop. Numerical Quality : Verified 100% Top-1 token match across all 3 scales. Shipped v1.0.0 with standalone binaries and clean architecture docs!"}, {"post_id": 57796, "ts": "2026-08-30T02:55:21Z", "hours": 12.8164, "text": "Devlog 07: Bounded 128MB Staging Ring & The 11.5x Recovery Architected the fix for the 27B memory collapse: a bounded double-buffered staging ring in src/xdna-gemv-engine.cpp . // Allocate exactly two 64 MB host-only staging buffers (128 MB total pinned memory) static constexpr size_t STAGING_BO_SIZE = 64 * 1024 * 1024 ; bo_staging [ 0 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); bo_staging [ 1 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); // Double-buffered stream from mmap page cache size_t stage_idx = current_op % 2 ; std :: memcpy ( bo_staging_map [ stage_idx ], mmap_weight_ptr , weight_bytes ); kernel_dpu -> operator ()(..., * bo_staging [ stage_idx ], ...); flags::host_only : Limits pinned kernel memory strictly to $2 \\times 64\\text{ MB} = \\mathbf{128\\text{ MB}}$. mmap_weight_ptr : Weights stay in standard page cache ( MAP_SHARED ), freely managed by Linux VM. Result: pgmajfault and swap dropped to 0 . 27B decode speed jumped from 0.15 tok/s to 1.72 tok/s —an 11.5× end-to-end recovery ."}, {"post_id": 54488, "ts": "2026-08-25T14:40:48Z", "hours": 12.2272, "text": "Devlog 06 The 27B Disaster & 12.6 GB Unevictable BO Crisis Tried loading Qwen3.8-27B-Q4_0 (15.2 GB). Everything collapsed: token speed plummeted to 0.15 tok/s (6.67 seconds/token) . Ran /proc/meminfo and /proc/vmstat diffs during decode to find the bottleneck: /proc/meminfo during 27B crash: MemTotal: 31,842 MB Unevictable: 12,640 MB <-- 369 persistent XRT BOs locked in RAM! pgmajfault: 520,118 <-- 520k disk page reads PER TOKEN pswpout: 18,400 <-- active swap storm The bug: Allocating persistent xrt::bo objects for all 369 model tensors pinned 12.6 GB into Unevictable kernel memory . The result: On a 32 GB laptop with OS and KV cache, Linux was starved of clean page cache. Every layer forced synchronous swap-outs and major page faults to disk. Persistent BO allocation for large models is fundamentally broken on consumer RAM."}, {"post_id": 50947, "ts": "2026-08-20T12:42:25Z", "hours": 9.7175, "text": "Devlog 05: Standalone GEMV Ceiling: Sustaining 38.5 GB/s Built tools/bench-aie-gemv-standalone.cpp to measure pure hardware DMA bandwidth without graph scheduler overhead. auto t0 = std :: chrono :: high_resolution_clock :: now (); bo_weights -> sync ( XCL_BO_SYNC_BO_TO_DEVICE ); kernel_run . wait (); auto t1 = std :: chrono :: high_resolution_clock :: now (); double gb_s = ( bytes / ( dt_ns * 1e-9 )) / 1e9 ; sync(TO_DEVICE) : Flushes dirty CPU lines and triggers DMA transport. kernel_run.wait() : Waits for AIE vector compute completion. Tested synthetic matrix sizes out to 1 GB ($K=5120$): 16 MB: 31.87 GB/s (0.53 ms) 128 MB: 34.27 GB/s (3.92 ms) 1024 MB: 38.57 GB/s (27.84 ms) Linear fit: $T(\\text{bytes}) \\approx 0.15\\text{ ms} + \\frac{\\text{bytes}}{38.5\\text{ GB/s}}$. The ~150 µs startup overhead gets amortized as matrix size grows."}, {"post_id": 47977, "ts": "2026-08-16T07:59:35Z", "hours": 11.2086, "text": "Devlog 04: 4-Column Planar Prepacking & First Real AIE Run Standard GGUF interleaves nibbles row-by-row. But AIE2 vector tiles need weights split into 4 independent planar column channels aligned to 64-byte boundaries. Wrote xdna-q4-prepack.cpp to deinterleave GGUF Q4 weights: // 4-Column Planar Deinterleaving for ( size_t col = 0 ; col < 4 ; ++ col ) { uint8_t * dst_col = packed_out + col * col_bytes ; for ( size_t row = 0 ; row < N ; ++ row ) { const uint8_t * src_nibbles = src_weights + row * row_stride + col * ( K / 4 ) / 2 ; deinterleave_and_align64 ( src_nibbles , dst_col + row * 64 , K / 4 ); } } col * (K / 4) : Strips matrix columns across the 4 independent NPU memory tiles. 64-byte alignment : Direct DMA streaming into tile L1 SRAM without unaligned stalls. Inside AIE: aie::unpack converts uint4 to BF16, scales, and computes fused vector MACs. First interactive generation on physical NPU! Cosine similarity against CPU FP32 oracle: 0.9999 ."}, {"post_id": 46963, "ts": "2026-08-14T15:29:37Z", "hours": 13.0922, "text": "Devlog 03: The CPU Baseline (AVX2 / FMA Golden Oracle) Before writing custom AIE kernels, we needed an unyielding golden oracle to check numerical correctness and see how fast the host CPU is. Wrote an unrolled AVX2/FMA Q4_0 vector engine in src/cpu-q4-gemv-engine.cpp : const __m256i raw = _mm256_loadu_si256 ( reinterpret_cast < const __m256i *> ( w_ptr )); const __m256i lo_nibbles = _mm256_and_si256 ( raw , _mm256_set1_epi8 ( 0x0F )); const __m256 w_f32 = _mm256_cvtepi32_ps ( _mm256_sub_epi32 ( lo_nibbles , _mm256_set1_epi32 ( 8 ))); acc = _mm256_fmadd_ps ( _mm256_mul_ps ( w_f32 , scale_vec ), act_vec , acc ); _mm256_and_si256(..., 0x0F) : Masks out the low 4-bit nibbles from 32 packed weights. _mm256_sub_epi32(..., 8) : Subtracts the Q4_0 symmetric offset (8). _mm256_fmadd_ps : Fused multiply-accumulate with FP32 activations in single-cycle throughput. Benchmarked Qwen2.5-0.5B on CPU: 106.5 tok/s (9.38 ms/tok) on 8 threads. Modern Zen 4 AVX2 is blazing fast on small models, so the NPU has a high bar to clear."}, {"post_id": 44511, "ts": "2026-08-10T09:54:07Z", "hours": 8.0289, "text": "Devlog 02: Hardware Smoke Tests & The 14ms Trap why have random shi like gate-1? bcs xdna1 is the worst supported from amd, idk their docs are incomplete im like testing and figuring stuff out Gate 1 milestone: getting real AIE execution contexts spinning via AMD XRT. Initial prototype had a huge bug: we were creating an xrt::hw_context and reloading the .xclbin bitstream inside the operator compute loop. Profiling showed this added ~14 ms of pure driver overhead per tensor dispatch —which murdered performance before we even started doing math. Fixed it by making the context a persistent backend singleton: // Initialize context & load bitstream ONCE at startup device = std :: make_unique < xrt :: device > ( device_index ); xrt :: uuid uuid = device -> register_xclbin ( xclbin_img ); hw_ctx = std :: make_unique < xrt :: hw_context > ( * device , uuid ); xrt :: module mod ( elf_img ); kernel_dpu = std :: make_unique < xrt :: kernel > ( xrt :: ext :: kernel ( * hw_ctx , mod , \"DPU\" )); device->register_xclbin : Flashes the DPU bitstream once into the NPU fabric. hw_ctx : Persistent hardware context reused across all tensor iterations. Dispatch overhead instantly dropped from 14 ms down to ~38 µs."}, {"post_id": 43766, "ts": "2026-08-09T05:55:28Z", "hours": 12.0031, "text": "Devlog 01: Talking to the Silicon (DRM & Phoenix Discovery) So the plan is simple: get GGUF models running straight on the Ryzen AI NPU without touching bloated ONNX or Vitis runtimes. First step was checking if we could even talk to /dev/accel/accel0 directly without root. Wrote a quick probe calling the kernel’s amdxdna DRM driver ioctls: struct amdxdna_drm_get_info info {}; info . param = DRM_AMDXDNA_GET_INFO_TOPOLOGY ; ioctl ( fd , DRM_IOCTL_AMDXDNA_GET_INFO , & info ); DRM_IOCTL_AMDXDNA_GET_INFO : Queries the hardware directly from the kernel. info.param = TOPOLOGY : Confirmed our Phoenix chip has 4 columns × 4 compute rows = 16 AIE2 tiles. Instead of dragging in a 10 GB SDK, we wrote our own include/xdna/amdxdna_uapi.h directly matching the kernel driver structs. Zero bloat, instant builds."}]...
|
Title: xdna.cpp by @satvikhardat | Stardance
Devl Title: xdna.cpp by @satvikhardat | Stardance
Devlogs:
Devlog 01: Talking to the Silicon (DRM & Phoenix Discovery) So the plan is simple: get GGUF models running straight on the Ryzen AI NPU without touching bloated ONNX or Vitis runtimes. First step was checking if we could even talk to /dev/accel/accel0 directly without root. Wrote a quick probe calling the kernel’s amdxdna DRM driver ioctls: struct amdxdna_drm_get_info info {}; info . param = DRM_AMDXDNA_GET_INFO_TOPOLOGY ; ioctl ( fd , DRM_IOCTL_AMDXDNA_GET_INFO , & info ); DRM_IOCTL_AMDXDNA_GET_INFO : Queries the hardware directly from the kernel. info.param = TOPOLOGY : Confirmed our Phoenix chip has 4 columns × 4 compute rows = 16 AIE2 tiles. Instead of dragging in a 10 GB SDK, we wrote our own include/xdna/amdxdna_uapi.h directly matching the kernel driver structs. Zero bloat, instant builds.
Devlog 02: Hardware Smoke Tests & The 14ms Trap why have random shi like gate-1? bcs xdna1 is the worst supported from amd, idk their docs are incomplete im like testing and figuring stuff out Gate 1 milestone: getting real AIE execution contexts spinning via AMD XRT. Initial prototype had a huge bug: we were creating an xrt::hw_context and reloading the .xclbin bitstream inside the operator compute loop. Profiling showed this added ~14 ms of pure driver overhead per tensor dispatch —which murdered performance before we even started doing math. Fixed it by making the context a persistent backend singleton: // Initialize context & load bitstream ONCE at startup device = std :: make_unique < xrt :: device > ( device_index ); xrt :: uuid uuid = device -> register_xclbin ( xclbin_img ); hw_ctx = std :: make_unique < xrt :: hw_context > ( * device , uuid ); xrt :: module mod ( elf_img ); kernel_dpu = std :: make_unique < xrt :: kernel > ( xrt :: ext :: kernel ( * hw_ctx , mod , "DPU" )); device->register_xclbin : Flashes the DPU bitstream once into the NPU fabric. hw_ctx : Persistent hardware context reused across all tensor iterations. Dispatch overhead instantly dropped from 14 ms down to ~38 µs.
Devlog 03: The CPU Baseline (AVX2 / FMA Golden Oracle) Before writing custom AIE kernels, we needed an unyielding golden oracle to check numerical correctness and see how fast the host CPU is. Wrote an unrolled AVX2/FMA Q4_0 vector engine in src/cpu-q4-gemv-engine.cpp : const __m256i raw = _mm256_loadu_si256 ( reinterpret_cast < const __m256i *> ( w_ptr )); const __m256i lo_nibbles = _mm256_and_si256 ( raw , _mm256_set1_epi8 ( 0x0F )); const __m256 w_f32 = _mm256_cvtepi32_ps ( _mm256_sub_epi32 ( lo_nibbles , _mm256_set1_epi32 ( 8 ))); acc = _mm256_fmadd_ps ( _mm256_mul_ps ( w_f32 , scale_vec ), act_vec , acc ); _mm256_and_si256(..., 0x0F) : Masks out the low 4-bit nibbles from 32 packed weights. _mm256_sub_epi32(..., 8) : Subtracts the Q4_0 symmetric offset (8). _mm256_fmadd_ps : Fused multiply-accumulate with FP32 activations in single-cycle throughput. Benchmarked Qwen2.5-0.5B on CPU: 106.5 tok/s (9.38 ms/tok) on 8 threads. Modern Zen 4 AVX2 is blazing fast on small models, so the NPU has a high bar to clear.
Devlog 04: 4-Column Planar Prepacking & First Real AIE Run Standard GGUF interleaves nibbles row-by-row. But AIE2 vector tiles need weights split into 4 independent planar column channels aligned to 64-byte boundaries. Wrote xdna-q4-prepack.cpp to deinterleave GGUF Q4 weights: // 4-Column Planar Deinterleaving for ( size_t col = 0 ; col < 4 ; ++ col ) { uint8_t * dst_col = packed_out + col * col_bytes ; for ( size_t row = 0 ; row < N ; ++ row ) { const uint8_t * src_nibbles = src_weights + row * row_stride + col * ( K / 4 ) / 2 ; deinterleave_and_align64 ( src_nibbles , dst_col + row * 64 , K / 4 ); } } col * (K / 4) : Strips matrix columns across the 4 independent NPU memory tiles. 64-byte alignment : Direct DMA streaming into tile L1 SRAM without unaligned stalls. Inside AIE: aie::unpack converts uint4 to BF16, scales, and computes fused vector MACs. First interactive generation on physical NPU! Cosine similarity against CPU FP32 oracle: 0.9999 .
Devlog 05: Standalone GEMV Ceiling: Sustaining 38.5 GB/s Built tools/bench-aie-gemv-standalone.cpp to measure pure hardware DMA bandwidth without graph scheduler overhead. auto t0 = std :: chrono :: high_resolution_clock :: now (); bo_weights -> sync ( XCL_BO_SYNC_BO_TO_DEVICE ); kernel_run . wait (); auto t1 = std :: chrono :: high_resolution_clock :: now (); double gb_s = ( bytes / ( dt_ns * 1e-9 )) / 1e9 ; sync(TO_DEVICE) : Flushes dirty CPU lines and triggers DMA transport. kernel_run.wait() : Waits for AIE vector compute completion. Tested synthetic matrix sizes out to 1 GB ($K=5120$): 16 MB: 31.87 GB/s (0.53 ms) 128 MB: 34.27 GB/s (3.92 ms) 1024 MB: 38.57 GB/s (27.84 ms) Linear fit: $T(\text{bytes}) \approx 0.15\text{ ms} + \frac{\text{bytes}}{38.5\text{ GB/s}}$. The ~150 µs startup overhead gets amortized as matrix size grows.
Devlog 06 The 27B Disaster & 12.6 GB Unevictable BO Crisis Tried loading Qwen3.8-27B-Q4_0 (15.2 GB). Everything collapsed: token speed plummeted to 0.15 tok/s (6.67 seconds/token) . Ran /proc/meminfo and /proc/vmstat diffs during decode to find the bottleneck: /proc/meminfo during 27B crash: MemTotal: 31,842 MB Unevictable: 12,640 MB <-- 369 persistent XRT BOs locked in RAM! pgmajfault: 520,118 <-- 520k disk page reads PER TOKEN pswpout: 18,400 <-- active swap storm The bug: Allocating persistent xrt::bo objects for all 369 model tensors pinned 12.6 GB into Unevictable kernel memory . The result: On a 32 GB laptop with OS and KV cache, Linux was starved of clean page cache. Every layer forced synchronous swap-outs and major page faults to disk. Persistent BO allocation for large models is fundamentally broken on consumer RAM.
Devlog 07: Bounded 128MB Staging Ring & The 11.5x Recovery Architected the fix for the 27B memory collapse: a bounded double-buffered staging ring in src/xdna-gemv-engine.cpp . // Allocate exactly two 64 MB host-only staging buffers (128 MB total pinned memory) static constexpr size_t STAGING_BO_SIZE = 64 * 1024 * 1024 ; bo_staging [ 0 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); bo_staging [ 1 ] = std :: make_unique < xrt :: bo > ( * device , STAGING_BO_SIZE , xrt :: bo :: flags :: host_only , 0 ); // Double-buffered stream from mmap page cache size_t stage_idx = current_op % 2 ; std :: memcpy ( bo_staging_map [ stage_idx ], mmap_weight_ptr , weight_bytes ); kernel_dpu -> operator ()(..., * bo_staging [ stage_idx ], ...); flags::host_only : Limits pinned kernel memory strictly to $2 \times 64\text{ MB} = \mathbf{128\text{ MB}}$. mmap_weight_ptr : Weights stay in standard page cache ( MAP_SHARED ), freely managed by Linux VM. Result: pgmajfault and swap dropped to 0 . 27B decode speed jumped from 0.15 tok/s to 1.72 tok/s —an 11.5× end-to-end recovery .
Devlog 08 — Aug 31: The Crossover Spectrum & v1.0 Ship Finished multi-model crossover validation across three scales (0.5B, 3B, 27B): // Adaptive Heterogeneous Scheduling if ( N <= 256 ) { // Tiny matrices (<60 KB) run on CPU SIMD to avoid driver dispatch overhead cpu_engine -> run ( weights , weight_bytes , N , K , act , out ); } else { // Medium/Large matrices stream to 16 AIE2 compute tiles xdna_engine -> run ( weights , weight_bytes , N , K , act , out ); } Measured Crossover Scoreboard Qwen2.5-0.5B (403 MB) : CPU favored (106.5 t/s vs 72.6 t/s XDNA hybrid) due to small 60 KB payloads. Qwen2.5-3B (1.86 GB) : XDNA wins decisively: 16.5 tok/s vs 9.8 tok/s CPU (+68.8% / 1.69× speedup) . Qwen3.8-27B (15.2 GB) : XDNA sustains 1.72 tok/s streaming 12.6 GiB smoothly on a 32 GB laptop. Numerical Quality : Verified 100% Top-1 token match across all 3 scales. Shipped v1.0.0 with standalone binaries and clean architecture docs!
Ships:
Run GGUF quantized models directly on AMD XDNA1 NPUs (Ryzen AI 7040 / 8040 series) with llama.cpp its a fork or bettter said plugin of llama.cpp specially made to run models using amd NPUs Using AMD’s hawkpoint NPUs to run LLMs!! its a llama.cpp plugin not a standalone runtime to ensure supporting most models, but it has a few cool kernels targeted at the the xdna1 arch bcs as it turns out, the support for xdna1 NPUs is like really dead everyones like xdna2 yay, but i hv a xdna1 CPU so ima use every bit of it ig lol...
|
1792994012.2205985
|
1793080412.2205985
|
|
1251
|
xezel by @transdryad | Stardance
|
transdryad
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xezel by @transdryad | Stardance
|
1792518605.27325
|
1793123405.27325
|
|
4128
|
xfffs by @toponerld | Stardance
|
toponerld
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xfffs by @toponerld | Stardance
|
1792929133.307572
|
1793793133.307572
|
|
47724
|
xixi by @wangcihua | Stardance
|
wangcihua
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xixi by @wangcihua | Stardance
|
1792525998.9291954
|
1793130798.9291954
|
|
986
|
xp95 Atari by @xp95codes | Stardance
|
xp95codes
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xp95 Atari by @xp95codes | Stardance
|
1792526137.9359877
|
1793130937.9359877
|
|
38046
|
xsxdfcgvh by @mccoy24601 | Stardance
|
mccoy24601
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xsxdfcgvh by @mccoy24601 | Stardance
|
1792767178.300507
|
1793371978.300507
|
|
56220
|
xvcf.dev - my personal site! by @xvcf | Stardance
|
xvcf
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-08T14:10:50Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a new version of my personal website! It includes a section about the music I make, a section about my coding projects, as well as a footer with contact information. It also features two SoundCloud widgets, as well as a typewriter animation for the text. My CSS uses a custom font!", "repo": "https://github.com/RafaeloxMC/xvcf.dev-v5", "demo": "https://xvcf.dev"}]...
|
[{"post_id": 64223, "ts": "202 [{"post_id": 64223, "ts": "2026-09-08T14:04:15Z", "hours": 0.26, "text": "README and more URLs! Heya! Really short devlog, but it’s worth mentioning! I have made my README.md file for my GitHub repo, and I have added two more URLs to the projects section of the site! One is currently commented out in the code, due to the project still being in review on Modrinth. That’s it already!"}, {"post_id": 63195, "ts": "2026-09-06T21:17:05Z", "hours": 2.3881, "text": "Made the base site! This is the base site I made! I personally really like the design. It features a music section, as well as a code projects section. I also added a footer with a spam trap email (because bots kept spamming my old email )"}]...
|
Title: xvcf.dev - my personal site! by @xvcf | Sta Title: xvcf.dev - my personal site! by @xvcf | Stardance
Devlogs:
Made the base site! This is the base site I made! I personally really like the design. It features a music section, as well as a code projects section. I also added a footer with a spam trap email (because bots kept spamming my old email )
README and more URLs! Heya! Really short devlog, but it’s worth mentioning! I have made my README.md file for my GitHub repo, and I have added two more URLs to the projects section of the site! One is currently commented out in the code, due to the project still being in review on Modrinth. That’s it already!
Ships:
I made a new version of my personal website! It includes a section about the music I make, a section about my coding projects, as well as a footer with contact information. It also features two SoundCloud widgets, as well as a typewriter animation for the text. My CSS uses a custom font!...
|
1792986685.6943114
|
1793073085.6943114
|
|
59100
|
xxx by @petr_kazi2012 | Stardance
|
petr_kazi2012
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xxx by @petr_kazi2012 | Stardance
|
1792784930.3664315
|
1793389730.3664315
|
|
46741
|
xyz os by @Jacopo | Stardance
|
Jacopo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xyz os by @Jacopo | Stardance
|
1792486205.5214996
|
1793091005.5214996
|
|
68416
|
xyz project by @Harshkp | Stardance
|
Harshkp
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: xyz project by @Harshkp | Stardance
|
1792471870.7214549
|
1793076670.7214549
|