|
71307
|
lightwieght debian 13 xfce rice by @thomasmatthews lightwieght debian 13 xfce rice by @thomasmatthews | Stardance...
|
thomasmatthews
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lightwieght debian 13 xfce rice by @thomasm Title: lightwieght debian 13 xfce rice by @thomasmatthews | Stardance...
|
1793598582.0979998
|
1794203382.0979998
|
|
30985
|
lightweight NAS by @Nasser | Stardance
|
Nasser
|
1
|
34.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T01:43:39Z", "hours": 34.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "About this project a NAS ( Network Attached Storage ) Which is basically a storage system that gets attached to your network, so you can manage your memory card (a real NAS usually uses hard drives) files, upload, download, delete, and so on, without any need for a physical connection. All of it is done over the network, so you won’t need to open and reopen your SIM slot to get or insert the memory card, and use the USB card adapter every time you need to transfer some files from your phone to your laptop when Bluetooth fails, or the file is too large. Now, there’s no need for all this chaos, because this device is now accessible from almost any device you have, as long as it’s on the same network. For more about getting started with this, please check my GitHub repository. Well, you might say, “He ended up spending 34 hours solving a 10-minute problem.” Well, maybe yes, but the difference becomes much more evident when you’re in a rush and Bluetooth just refuses to pair, or the connection fails for some unknown reason. Then you’ve got to sit there and spend a few nice hours trying to figure out where the problem is. Time is gold, buddy. Well, again, this project was challenging, from creating each of the backend modules, managing storage and the FileService , to the HTTP server, which was one of the hardest parts to debug after the JavaScript issues. But the hardest part revolved around making all the modules work together, the frontend and the backend, to display the right values. I’m proud of myself because I fixed a lot of issues and learned a lot of new things about project and code management. That’s it for this version. If you want to know how to use it, please check my README. Thank you, and always remember: “The devotion of the greatest is to encounter danger, and play dice for death.”", "repo": "https://github.com/karimsm16/a-lightweight-NAS", "demo": "https://youtu.be/0M4kWjUGIP0"}]...
|
[{"post_id": 40467, "ts": "202 [{"post_id": 40467, "ts": "2026-08-04T00:44:51Z", "hours": 1.1742, "text": "I created the ReadME , and completed the project info implementation"}, {"post_id": 40180, "ts": "2026-08-03T16:12:08Z", "hours": 5.2442, "text": "Devlog Since the last devlog, I completed the remaining work needed to finish the first milestone of the ESP32 NAS project (Mayby the first and the last ) . On the backend, I added the missing HTTP API endpoints for storage information, file listing, downloading, uploading, deleting, renaming, and creating folders, along with their corresponding request handlers. The FileService was also extended to support multiple missions (it will be long so I will not cover them here). On the frontend, I finished the JavaScript logic by implementing storage usage monitoring with a live progress bar, storage statistics in both the dashboard and footer, file upload, download, delete, rename, and folder creation, client-side search (still working o it), automatic refresh of file and storage information, and proper initialization when the page loads. With these additions and fixes, this milestone is now complete. I tried it , and it’s fully functional , The ESP32 NAS now provides a smooth web interface with complete file management capabilities and live storage monitoring. well, it was a fasciniting project , and I really learned a lot, I ’m proud of it .(yeah,after I get a headache during debugging ) ."}, {"post_id": 39527, "ts": "2026-08-02T15:18:20Z", "hours": 4.2222, "text": "since the last time , I tried to turn the interface to a multi-page interface that contains the 3 main sections files , Network , Settings and I tried to integrate java script navigation , between pages and itms , and during this I got some javascript issues ,because the javascript file refused loadeding , but I fixed it later , after completing the navigation process I created an /api/network endpoint that returns live Wi-Fi information from the ESP32, and connected the Network page,I also implemented the /api/files API in the HTTP server, which converts the FileService output into JSON, then I started laying the foundation for folder navigation , which will allow the browser to navigate directories just like a desktop file explorer.**important note :**the data in the screenshot is fake because I run UI files in the live server , not yet to the esp32"}, {"post_id": 38881, "ts": "2026-08-01T13:26:44Z", "hours": 11.205, "text": "DEVLOG (3)This week I focused on improving both the backend architecture and the web interface of the ESP32 NAS.I finished refactoring the FileService and HttpServer classes . I also implemented the first HTTP API endpoints that will allow the frontend to communicate with the ESP32, I really struggled to make the HTTP server work .On the frontend, I redesigned the HTML layout, cleaned up the structure, fixed some dumb problems , and introduced dedicated pages for Files , Network , and Settings . for the actual moment the backend is ready , and the same thing for the frontend (I will improve it later) , now I have to connect them all through JavaScript and the REST API.well I come along a hard way to this , but it deserves it"}, {"post_id": 36096, "ts": "2026-07-27T23:37:26Z", "hours": 4.6772, "text": "DEVLOG (3) BEHOLD!!!!! Today’s session was all about strengthening the software architecture of the ESP32 NAS. Completed Finished the SDManager module. Successfully initialized and tested the SD card. Built the WiFiManager module and established a successful Wi-Fi connection. Started developing the FileService module. Implemented the following file operations: exists() createFolder() deleteFile() deleteFolder() rename() fileSize() copyFile() moveFile() Resolved multiple compilation and IntelliSense issues while improving the project structure. ’The next ’milestone is integrating these modules with the web server and building the NAS interface. Stay tuned."}, {"post_id": 35350, "ts": "2026-07-26T17:56:07Z", "hours": 4.3428, "text": "DEVLOG (1) BEHOLD!!!!! Today I finished one of the core modules of the ESP32 NAS project: SDManager . The pupose of this module is simple: make the SD card completely independent from the rest of the project. From now on, no other class will communicate directly with SD.h ; everything goes through SDManager . Implemented features SD card initialization Card mounting status Total storage capacity Used storage Free storage Card type detection (SDSC / SDHC / SDXC) File existence check Open files Create folders Rename files and folders Delete files Debug information through the Serial Monitor I also spent a good amount of time debugging the module. Most of the issues were caused by mismatched function declarations, missing braces, incorrect return types, and a few IntelliSense false positives. After fixing them one by one, the project finally compiled successfully. Finally, I connected the SD card to the ESP32 and verified that everything works correctly. The board successfully detects the SD card and prints its information, including storage capacity and available space. With the storage layer now complete, the foundation of the project is becoming much stronger. Next step: build the WiFiManager module and add mDNS support so the NAS can be accessed using a hostname"}, {"post_id": 33993, "ts": "2026-07-24T11:56:35Z", "hours": 3.5872, "text": "The Story Behind This Project One day, I wanted to transfer some files from the SD card in my phone to my desktop. I thought it would be easy—just send them over Bluetooth. Well… that’s not what happened. I tried transferring the files using Bluetooth, but every single time the connection failed. Then I had to pair the two devices again, only for the transfer to fail once more. I kept thinking, “Come on, it shouldn’t be this hard.” After wasting almost an hour of my precious time (and remember, 1 hour of my precious time = $100 ), I looked at my second option. Remove the SIM tray. Take out the SD card. Put it into a USB card reader. Plug it into the computer. Transfer the files. Remove the card again. Open the SIM tray again. Put the SD card back. Nope. I really dislike opening and reopening the SIM tray every time I need to transfer a few files. So there I was, stuck between two terrible options: Bluetooth ( damn BLE ). USB card reader ( damn that too ). Then I remembered something… or maybe I just invented it. “When you have two bad options, don’t choose either of them. Make a third one.” I don’t even know if SpongeBob ever said that. Probably not. But it sounded meaningful enough to me. So I rolled up my sleeves and decided to build something that would solve the problem once and for all. Something fast. Something reliable. Something that uses Wi-Fi instead of Bluetooth . After a lot of thinking… and thinking… and more thinking (okay, and not that much research >-<), I finally decided to build a lightweight NAS powered by an ESP32. So I started sketching the web interface and began coding it. Right now, it’s a little rough around the edges (okay… maybe more than a little >_<), but that’s completely fine. My goal isn’t to make it perfect on day one—it’s to build a solid foundation first and improve the design as the project evolves. Moral of the story: Always listen to SpongeBob. Thanks, Bob."}]...
|
Title: lightweight NAS by @Nasser | Stardance
Dev Title: lightweight NAS by @Nasser | Stardance
Devlogs:
The Story Behind This Project One day, I wanted to transfer some files from the SD card in my phone to my desktop. I thought it would be easy—just send them over Bluetooth. Well… that’s not what happened. I tried transferring the files using Bluetooth, but every single time the connection failed. Then I had to pair the two devices again, only for the transfer to fail once more. I kept thinking, “Come on, it shouldn’t be this hard.” After wasting almost an hour of my precious time (and remember, 1 hour of my precious time = $100 ), I looked at my second option. Remove the SIM tray. Take out the SD card. Put it into a USB card reader. Plug it into the computer. Transfer the files. Remove the card again. Open the SIM tray again. Put the SD card back. Nope. I really dislike opening and reopening the SIM tray every time I need to transfer a few files. So there I was, stuck between two terrible options: Bluetooth ( damn BLE ). USB card reader ( damn that too ). Then I remembered something… or maybe I just invented it. “When you have two bad options, don’t choose either of them. Make a third one.” I don’t even know if SpongeBob ever said that. Probably not. But it sounded meaningful enough to me. So I rolled up my sleeves and decided to build something that would solve the problem once and for all. Something fast. Something reliable. Something that uses Wi-Fi instead of Bluetooth . After a lot of thinking… and thinking… and more thinking (okay, and not that much research >-<), I finally decided to build a lightweight NAS powered by an ESP32. So I started sketching the web interface and began coding it. Right now, it’s a little rough around the edges (okay… maybe more than a little >_<), but that’s completely fine. My goal isn’t to make it perfect on day one—it’s to build a solid foundation first and improve the design as the project evolves. Moral of the story: Always listen to SpongeBob. Thanks, Bob.
DEVLOG (1) BEHOLD!!!!! Today I finished one of the core modules of the ESP32 NAS project: SDManager . The pupose of this module is simple: make the SD card completely independent from the rest of the project. From now on, no other class will communicate directly with SD.h ; everything goes through SDManager . Implemented features SD card initialization Card mounting status Total storage capacity Used storage Free storage Card type detection (SDSC / SDHC / SDXC) File existence check Open files Create folders Rename files and folders Delete files Debug information through the Serial Monitor I also spent a good amount of time debugging the module. Most of the issues were caused by mismatched function declarations, missing braces, incorrect return types, and a few IntelliSense false positives. After fixing them one by one, the project finally compiled successfully. Finally, I connected the SD card to the ESP32 and verified that everything works correctly. The board successfully detects the SD card and prints its information, including storage capacity and available space. With the storage layer now complete, the foundation of the project is becoming much stronger. Next step: build the WiFiManager module and add mDNS support so the NAS can be accessed using a hostname
DEVLOG (3) BEHOLD!!!!! Today’s session was all about strengthening the software architecture of the ESP32 NAS. Completed Finished the SDManager module. Successfully initialized and tested the SD card. Built the WiFiManager module and established a successful Wi-Fi connection. Started developing the FileService module. Implemented the following file operations: exists() createFolder() deleteFile() deleteFolder() rename() fileSize() copyFile() moveFile() Resolved multiple compilation and IntelliSense issues while improving the project structure. ’The next ’milestone is integrating these modules with the web server and building the NAS interface. Stay tuned.
DEVLOG (3)This week I focused on improving both the backend architecture and the web interface of the ESP32 NAS.I finished refactoring the FileService and HttpServer classes . I also implemented the first HTTP API endpoints that will allow the frontend to communicate with the ESP32, I really struggled to make the HTTP server work .On the frontend, I redesigned the HTML layout, cleaned up the structure, fixed some dumb problems , and introduced dedicated pages for Files , Network , and Settings . for the actual moment the backend is ready , and the same thing for the frontend (I will improve it later) , now I have to connect them all through JavaScript and the REST API.well I come along a hard way to this , but it deserves it
since the last time , I tried to turn the interface to a multi-page interface that contains the 3 main sections files , Network , Settings and I tried to integrate java script navigation , between pages and itms , and during this I got some javascript issues ,because the javascript file refused loadeding , but I fixed it later , after completing the navigation process I created an /api/network endpoint that returns live Wi-Fi information from the ESP32, and connected the Network page,I also implemented the /api/files API in the HTTP server, which converts the FileService output into JSON, then I started laying the foundation for folder navigation , which will allow the browser to navigate directories just like a desktop file explorer.**important note :**the data in the screenshot is fake because I run UI files in the live server , not yet to the esp32
Devlog Since the last devlog, I completed the remaining work needed to finish the first milestone of the ESP32 NAS project (Mayby the first and the last ) . On the backend, I added the missing HTTP API endpoints for storage information, file listing, downloading, uploading, deleting, renaming, and creating folders, along with their corresponding request handlers. The FileService was also extended to support multiple missions (it will be long so I will not cover them here). On the frontend, I finished the JavaScript logic by implementing storage usage monitoring with a live progress bar, storage statistics in both the dashboard and footer, file upload, download, delete, rename, and folder creation, client-side search (still working o it), automatic refresh of file and storage information, and proper initialization when the page loads. With these additions and fixes, this milestone is now complete. I tried it , and it’s fully functional , The ESP32 NAS now provides a smooth web interface with complete file management capabilities and live storage monitoring. well, it was a fasciniting project , and I really learned a lot, I ’m proud of it .(yeah,after I get a headache during debugging ) .
I created the ReadME , and completed the project info implementation
Ships:
About this project a NAS ( Network Attached Storage ) Which is basically a storage system that gets attached to your network, so you can manage your memory card (a real NAS usually uses hard drives) files, upload, download, delete, and so on, without any need for a physical connection. All of it is done over the network, so you won’t need to open and reopen your SIM slot to get or insert the memory card, and use the USB card adapter every time you need to transfer some files from your phone to your laptop when Bluetooth fails, or the file is too large. Now, there’s no need for all this chaos, because this device is now accessible from almost any device you have, as long as it’s on the same network. For more about getting started with this, please check my GitHub repository. Well, you might say, “He ended up spending 34 hours solving a 10-minute problem.” Well, maybe yes, but the difference becomes much more evident when you’re in a rush and Bluetooth just refuses to pair, or the connection fails for some unknown reason. Then you’ve got to sit there and spend a few nice hours trying to figure out where the problem is. Time is gold, buddy. Well, again, this project was challenging, from creating each of the backend modules, managing storage and the FileService , to the HTTP server, which was one of the hardest parts to debug after the JavaScript issues. But the hardest part revolved around making all the modules work together, the frontend and the backend, to display the right values. I’m proud of myself because I fixed a lot of issues and learned a lot of new things about project and code management. That’s it for this version. If you want to know how to use it, please check my README. Thank you, and always remember: “The devotion of the greatest is to encounter danger, and play dice for death.”...
|
1793623925.513008
|
1793710325.513008
|
|
52617
|
lightshell by @kerlo | Stardance
|
kerlo
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T22:45:37Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "lightshell My own UNIX shell written in C++. It’s fast and lightweight and I’m trying to implement every useful shell function that I need!", "repo": "https://github.com/Kerlooo/lightshell", "demo": "https://github.com/Kerlooo/lightshell/blob/main/main.cpp"}]...
|
[{"post_id": 53396, "ts": "202 [{"post_id": 53396, "ts": "2026-08-23T22:40:06Z", "hours": 0.5514, "text": "Project update Now I created my makefile to build the project with some optimizations compiler flags! I also updated README.md and created a function to delete the history commands."}, {"post_id": 52022, "ts": "2026-08-22T01:52:57Z", "hours": 1.6469, "text": "Hello everyone! After a long time, I finally started programming again! Today I wanted to try to create a shell because… why not? So I present to you lightshell, my own unix shell written in C++. The size of the compiled source is WAY LESS than 1MB and I’m working hard to understand all the C++ libraries that I need. Let me know if you’d like some new features!"}]...
|
Title: lightshell by @kerlo | Stardance
Devlogs:
Title: lightshell by @kerlo | Stardance
Devlogs:
Hello everyone! After a long time, I finally started programming again! Today I wanted to try to create a shell because… why not? So I present to you lightshell, my own unix shell written in C++. The size of the compiled source is WAY LESS than 1MB and I’m working hard to understand all the C++ libraries that I need. Let me know if you’d like some new features!
Project update Now I created my makefile to build the project with some optimizations compiler flags! I also updated README.md and created a function to delete the history commands.
Ships:
lightshell My own UNIX shell written in C++. It’s fast and lightweight and I’m trying to implement every useful shell function that I need!...
|
1793609486.8300939
|
1793695886.8300939
|
|
50957
|
lightning detector by @SohamKaran | Stardance
|
SohamKaran
|
0
|
8.3
|
0
|
[]
|
[{"post_id": 59710, "ts": "202 [{"post_id": 59710, "ts": "2026-09-01T17:11:06Z", "hours": 8.2989, "text": "yesterday I faced some such lightning strikes so from this I decided to build a detector that can detect lightning strikes so after finding proper parts for this project I started drawing the SCH and after that I designed the PCB and also write the code which take me some time but I done that and at the end I made the repo and create the BOM and add al the parts include buy links and after all this I am ready to upload this project to get funding"}]...
|
Title: lightning detector by @SohamKaran | Stardan Title: lightning detector by @SohamKaran | Stardance
Devlogs:
yesterday I faced some such lightning strikes so from this I decided to build a detector that can detect lightning strikes so after finding proper parts for this project I started drawing the SCH and after that I designed the PCB and also write the code which take me some time but I done that and at the end I made the repo and create the BOM and add al the parts include buy links and after all this I am ready to upload this project to get funding...
|
1793368547.0300975
|
1793973347.0300975
|
|
25127
|
lighthouse-v1 by @yanhee | Stardance
|
yanhee
|
0
|
1.06
|
0
|
[]
|
[{"post_id": 15659, "ts": "202 [{"post_id": 15659, "ts": "2026-06-25T13:51:42Z", "hours": 1.0592, "text": "hii its my first devlog posted on stardust, and the project im working on is actually a web game, based on javascript. so the game requires u to keep spinning, like a radar, to identify zombies around, and click to shoot. i plan to have three modes in the future, but unfortunately its still under development, so we only hv one mode, which is infinite (endless) mode for now. but i’ll keep developing until im satisfied with it!"}]...
|
Title: lighthouse-v1 by @yanhee | Stardance
Devlo Title: lighthouse-v1 by @yanhee | Stardance
Devlogs:
hii its my first devlog posted on stardust, and the project im working on is actually a web game, based on javascript. so the game requires u to keep spinning, like a radar, to identify zombies around, and click to shoot. i plan to have three modes in the future, but unfortunately its still under development, so we only hv one mode, which is infinite (endless) mode for now. but i’ll keep developing until im satisfied with it!...
|
1793537839.868198
|
1794142639.868198
|
|
60350
|
lighthing chaos by @Joely | Stardance
|
Joely
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lighthing chaos by @Joely | Stardance
|
1793641889.6131237
|
1794246689.6131237
|
|
20411
|
light timer by @nluca2k12 | Stardance
|
nluca2k12
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: light timer by @nluca2k12 | Stardance
|
1793256791.4954827
|
1793861591.4954827
|
|
21991
|
light source simulator by @Voidlace | Stardance
|
Voidlace
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: light source simulator by @Voidlace | Stard Title: light source simulator by @Voidlace | Stardance...
|
1793386255.9085586
|
1793991055.9085586
|
|
59790
|
liftED by @elizabethwanjiku83924 | Stardance
|
elizabethwanjiku83924
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: liftED by @elizabethwanjiku83924 | Stardanc Title: liftED by @elizabethwanjiku83924 | Stardance...
|
1793638346.636273
|
1794243146.636273
|
|
11267
|
lift by @fabianbuthere | Stardance
|
fabianbuthere
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-13T13:07:44Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A simple CLI-tool to share data quickly, without needing to trust external servers with your data. I spend lots of time transferring video and audio files from my main PC to my or to my audio workstation PC. This meant uploading my file to some drive, just so I can download it again. And doing that on 20Mbit/s is less than great. After recently having learnt Rust’s async and networking functionalities, I thought, why not make a tool for that? So I wrote lift, which allows me to send files between my devices at atleast twice the speed of using a drive, because the files are never uploaded to anywhere. It’s also more secure, because you don’t have to trust Google, Microsoft, Dropbox, Limewire or anyone else with your files. It also makes your files accessible even from outside your network using your generated link with bore. But, if having an external server potentially knowing the route to your file already seems too sketchy for you, you can just configure another bore server. If you just need to share files within your own network you can use local mode, which will make the file accessible only on your LAN, stripping the need for a bore server. If you want to be 1000% sure, you can also encrypt the file using your own or a randomly generated passphrase, which the receiving device can decrypt with the age CLI utility.", "repo": "https://github.com/Fabian2611/lift", "demo": "https://crates.io/crates/lifter"}]...
|
[{"post_id": 27652, "ts": "202 [{"post_id": 27652, "ts": "2026-07-13T12:45:49Z", "hours": 1.3117, "text": "Implemented local and encrypted modes, ready for v1.4.0 which will be shipped! Lift can now: encrypt files using a custom or random passphrase using age open files only for access on the local network, if no outside communication is needed (also stripping the need for an external bore server)"}, {"post_id": 5056, "ts": "2026-06-08T18:37:36Z", "hours": 2.5522, "text": "v1.3.0 just shipped! I switched from warp to axum to use async streams, which ensure that the TCP stream is held until the download is finished - which enables sharing of bigger files, even on slow internet connections. I’m really proud of the small methods for optimisation I could find - and that I managed to build without a single clippy-all warning! The next step is encryption, to ward against man-in-the-middle attacks - although it’s already really difficult to get a hold of any data transmitted over lift. Install it now via cargo install lifter :3"}]...
|
Title: lift by @fabianbuthere | Stardance
Devlogs Title: lift by @fabianbuthere | Stardance
Devlogs:
v1.3.0 just shipped! I switched from warp to axum to use async streams, which ensure that the TCP stream is held until the download is finished - which enables sharing of bigger files, even on slow internet connections. I’m really proud of the small methods for optimisation I could find - and that I managed to build without a single clippy-all warning! The next step is encryption, to ward against man-in-the-middle attacks - although it’s already really difficult to get a hold of any data transmitted over lift. Install it now via cargo install lifter :3
Implemented local and encrypted modes, ready for v1.4.0 which will be shipped! Lift can now: encrypt files using a custom or random passphrase using age open files only for access on the local network, if no outside communication is needed (also stripping the need for an external bore server)
Ships:
A simple CLI-tool to share data quickly, without needing to trust external servers with your data. I spend lots of time transferring video and audio files from my main PC to my or to my audio workstation PC. This meant uploading my file to some drive, just so I can download it again. And doing that on 20Mbit/s is less than great. After recently having learnt Rust’s async and networking functionalities, I thought, why not make a tool for that? So I wrote lift, which allows me to send files between my devices at atleast twice the speed of using a drive, because the files are never uploaded to anywhere. It’s also more secure, because you don’t have to trust Google, Microsoft, Dropbox, Limewire or anyone else with your files. It also makes your files accessible even from outside your network using your generated link with bore. But, if having an external server potentially knowing the route to your file already seems too sketchy for you, you can just configure another bore server. If you just need to share files within your own network you can use local mode, which will make the file accessible only on your LAN, stripping the need for a bore server. If you want to be 1000% sure, you can also encrypt the file using your own or a randomly generated passphrase, which the receiving device can decrypt with the age CLI utility....
|
1793616766.0347693
|
1793703166.0347693
|
|
30472
|
life on mars by @aiza_asad | Stardance
|
aiza_asad
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: life on mars by @aiza_asad | Stardance
|
1792907414.6272578
|
1793771414.6272578
|
|
68496
|
life by @Allura | Stardance
|
Allura
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: life by @Allura | Stardance
|
1793123310.7877095
|
1793728110.7877095
|
|
59683
|
lidar scan project by @mach_speed | Stardance
|
mach_speed
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lidar scan project by @mach_speed | Stardan Title: lidar scan project by @mach_speed | Stardance...
|
1793638038.0030246
|
1794242838.0030246
|
|
6028
|
licorice by @q | Stardance
|
q
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: licorice by @q | Stardance
|
1793426175.7524548
|
1794030975.7524548
|
|
22375
|
libspacetime by @jpeisach | Stardance
|
jpeisach
|
0
|
59.7
|
0
|
[]
|
[{"post_id": 34364, "ts": "202 [{"post_id": 34364, "ts": "2026-07-25T00:32:21Z", "hours": 8.3572, "text": "again idk if I will be doing sd instead of macondo but anyways, been doing documentation :) I also fixed ammarstime and did bindings to other langs."}, {"post_id": 27142, "ts": "2026-07-12T12:59:18Z", "hours": 9.5753, "text": "Again, in case I switch back from Macondo. More fighting with leap years - I’ll have to use AI for help. In the meantime I created a marsdate program, and did wcsfmarstime (analogous to wcsftime). I also created some initial Rust bindings :)"}, {"post_id": 25052, "ts": "2026-07-09T00:28:55Z", "hours": 18.6614, "text": "Devlog now in case I switch from Macondo to Stardance. In the event that I need to, I will edit this with more details. Basically, I managed to work on strfmarstime, strpmarstime, ammarstime, and I’ve been drilling testcases."}, {"post_id": 20036, "ts": "2026-07-01T15:17:21Z", "hours": 1.8528, "text": "strfmarstime testing - week numbers Nothing crazy to report for the current testsuite and implementation verification I’ve been doing. Basically same thing as I did before I took a break for strpmarstime. For some formats, it will literally print anything (if it’s invalid), which appears to be normal in Glibc, so it’s normal to me. Some locale work too on AM/PM formatting and time formatting - some do “AM”, some do “am”, Spain does “a.m.”. The big thing is: Week Numbers Okay, so there are three different definitions of week numbers: %U: The first day of week 1 is on Sunday. Range 00 (because sometimes in January we don’t get to Sunday for a few days), up until 53 (sometimes we actually get 53 weeks due to day placement.) %V: ISO 8601, which has week 1 as the first week with at least 4 days in the new year. Range 01 to 53. (Week 0 would be represented by 52, in my testing) %W: The first day of week 1 is on Monday. But, here is the key thing about the Darian calendar: Each month resets the week. This is actually one of the things about the Gregorian Calendar some people don’t like-how the # of the day is on inconsistent weekdays. The Darian Calendar has a neat 28 days for each month, so with 7 days a week, this isn’t a problem. And since each week is guaranteed to have four days, we can just take the number of days and divide by 7. For %W, shift by 1, because Monday (Lunae) is not the first day of the week. However.. every 6th month is the end of a season, and it has 27 days. So we need to, in our calculations, which must go based off the nth day of the year, make sure we reset, otherwise we will lose our day alignment (because again, the week resets). So we need to realign every 167 days, and also check how many seasons passed and use that to get the amount of prior weeks we are skipping when we have modulated. As for the leap day: It divides perfectly by 7 and 167, so it gets its own if statement case (otherwise it would read “97”). Experience I knew this would be weird to figure out, and challenging, but I actually had a lot of fun doing it. It kept my brain working, I stayed energetic, and I managed to have fun, which is the most important thing! So after my long Pomodoro break, I’ll verify %W (since %U and %V are thee same), and then %w, %x, %X, %y and %Y and that will be it, since for an initial ship I don’t plan to do timezones."}, {"post_id": 19959, "ts": "2026-07-01T12:47:21Z", "hours": 1.3667, "text": "strpmarstime - basic implementation complete Using musl as a reference, I’ve completed an.. implementation, of strpmarstime. Yesterday I must’ve placed my energy wrong because I just wasn’t super motivated and didn’t do as much coding. Anyway: strpmarstime is the inverse of strfmarstime, taking a date-time formatted string and given its format, entering those values into a mars_tm struct. Everything made sense, mostly. There are still some areas of code I need to comment and reread to make sure I understand what is going on. But after strfmarstime, it isn’t too crazy. As usual, it does the things for string parsing, like str++ to move to the rest of the string’s characters, then it parses by item. In order to find values, I think that the calculations sort of estimate the character location of the number range, and then we import it. Challenges nl_langinfo Once again, I found myself in a situation where musl can lookup strings to match values like day and month names via numerical item addresses with nl_langinfo, but I cannot (as this is not a “standard” item index). Musl is able to use this item address to iterate through the list of potential matches, which is easy to do in common goto routines. For me, I had to basically make a pointer to an array of char* (so I had char**, once I figured it out), that was the “iteration_array”. Depending on the format, it would check the array for the match. The main confusing thing was really just the pointers. Spent about 10 minutes fighting with compiler errors until I figured it out with the help of stackoverflow and Google’s AI. By the way, using nl_langinfo_l, which I did in strfmarstime, does not exist in locale.h by default on macOS, it’s in xlocale.h, so I made a small configure define this morning to take care of that. The vague formats There are several ways of determining what # week of year we are in. One format says it’s the week with at least four days, and starts indexing at like, 1 I think? And then there are a few others? I can’t remember off the top of my head. Because there are no clear answers, I (and musl) have left these formats as “parse only”. This really impacts week number formats, which, I guess makes sense, because if you only have that, who knows what year you are in, and how many days are in the first full “week”, however you define that. Timezones Skipped for now, as I have yet to take care of this, and I think some proposed timekeeping systems actually don’t do the standard one-hour intervals.. I need to look into it. Future Welp, it’s off to testing and verification. Yay!"}, {"post_id": 19165, "ts": "2026-06-30T12:40:21Z", "hours": 1.7647, "text": "strpmarstime I took a break from validating strfmarstime because.. well I needed it. So I started doing the function that does the opposite, takes a string, parses into into a mars_tm structure. I am taking the same approach as musl, and enjoying myself, as in, because musl is able to lookup string matches by locale (because there is a fixed offset for dates), but I can’t, I have to manually search. But instead of copy pasting code I’m trying to setup a pointer to an array to check in a common code routine. And now I’m getting memory issues. Yay!"}, {"post_id": 18437, "ts": "2026-06-29T16:21:21Z", "hours": 1.5994, "text": "strfmarstime testing and verification - date time format locales The %c format specifier checks the system locale for how to format the date and time. Of course, it’s a good idea to test this. It took me a while.. unfortunately I don’t have a way of checking in test configuration if one of the formats is installed on the host system (see https://en.wikipedia.org/wiki/List_of_date_formats_by_country ). I also don’t really have a nice way (as far as I know) to set test environment variables. So what I ended on was in the test setup, just passing the LC_ALL environment variable. But this was broken for some reason? Ah, it turns out that my logic in strfmarstime to get the locale was incorrect. For some reason, setlocale ( LC_ALL , NULL ); does not work, and you have to use “”. My guess is that NULL goes to system default, and “” will read from environment variables. Yay! While Day-Month-Year format is straight forward, the few countries that use Year-Month-Day are driving me insane, like Hungary, because their formats have like, dots in them, and I’m not seeing much consistency across the other country’s formats that also have Year-Month-Day formatting. I’ll come back to it later. It’s actually broken anyway, because my week number representations are still wrong."}, {"post_id": 18310, "ts": "2026-06-29T12:44:15Z", "hours": 1.5208, "text": "strfmarstime - ~80% complete After about 6 hrs total, the strfmarstime function is complete, using musl as a reference, except: %E (era based format) %k (hour as a decimal, but including padding 0s, probably this will be a quick fix %O (modifier symbols?) %P (lowercase version of “am” and “pm” - need to find a good way to run tolower on a const char*) All week numbering formats, because there are different standards on when the week “starts” and “how many weeks we are into the year” (e.g. first 4 days of year, vs. whether week starts on Sunday vs. Monday) %z, %Z (Timezones, not implemented yet) This was quite the grind, having strftime docs open on one screen, musl’s implementation on another, and trying to go through each format while documenting and understanding how the formatting is being processed, one by one. I also did some slight restructuring: the __mars_tm_to_secs function exists. It is basically what mkmarstime did. I would have it not subtract by epoch, but it was causing tests to fail. Technically the strftime docs say that %s, which uses it, calls the function anyways, so it may be pointless but whatever. Oh, speaking of %s: That is seconds since the Unix epoch. Who knows how useful that will be when this calendar implementation starts at MSD 0 (like, 1873). Also, it’s martian seconds instead of Earth seconds. Fun shoutout to “%%”, “%t”, and “%n”, which required nothing, just setting the length of the item to “1” and returning the actual formatting character. Lol. Welp, now it’s time to test and drill this function into oblivion."}, {"post_id": 17044, "ts": "2026-06-27T17:47:07Z", "hours": 3.7639, "text": "strfmarstime progress I think it is warranted, otherwise I will forget later. This is part 1 of many on the journey to the strfmarstime function - which returns a formatted string of a broken down mars time structure. This was my first time ever recreating a string formatting function - especially in C, so I learned some things along the way. Basing off of musl After some attempts, it became pretty clear that, although string formatting functions may seem easy, when you need to support width and padding specifiers, things get complicated. Since I had to learn this, I decided to save time by basically recreating musl’s strftime implementation side by side. I would comment and give details on what is happening so I learned how it worked while also getting the result I need to, without just blatantly copying and pasting without giving credit. This took about an hour since some of the variable names in musl’s implementation are like, ‘l’, ‘f’, and I had to keep it straight. I actually am writing this devlog after I spent 30+ minutes debugging some stack smashing that was happening, as a result of me putting in the wrong variable for string length into memcpy. How it works Basically, strftime/strfmarstime will first collect information needed for each format specifier, like if there is a character requesting padding. Then it will do each item at a time, with the given padding and width. Here’s a fun thing I learned: There is a lot of “format++”. But format is a char*. How does that make sense? Well, format++ actually is basically the same as doing .substring(1, format.length()) in other languages. I guess it makes sense if you think about a list of characters, and you are progressing to the next character. (Like a “cdr” of a “cons” box in functional programming). So that helped. Locales, locales I wanted to come back to this later, especially because I will eventually need translations. But the %c specifier actually refers to the system locale’s date and time format. This required some hacking that came around the time I was stuck with that stack smashing. So seriously, I was stuck . musl has it easy, it can tell by its own thread what the locale is. Here, we need to initialize locales (setlocale), and then make a locale_t object we can use with newlocale. Then we free it at the end. Where I am now Since the locale’s DT formatting is really just a shorthand for other specifiers, it returns “-” in its place. But as I continue forward, it will work."}, {"post_id": 16257, "ts": "2026-06-26T13:02:44Z", "hours": 0.9283, "text": "libspacetime - preparing for localization Nothing really crazy, but I ran gettextize, looked at as much docs as I could (the website is unreachable at the moment), and other project examples to create a basic localization setup. This will allow for localization of day and month names."}, {"post_id": 15962, "ts": "2026-06-25T22:28:30Z", "hours": 2.7319, "text": "Darian Calendar C Library: ammarstime Probably the hurdle that will be the second hardest part of the entire libspacetime library is ammarstime. It is the same as the C stdlib’s “gmtime”, which, from a timestamp, returns a broken down time structure (struct tm) of the date/time info of that timestamp (the human readable info like day, month, year, etc.) This is actually difficult. Seconds just count up, and you have to go backwards. You can try to divide by the amount of seconds in a year, but what about leap years? Honestly, the math is too weird, even for me. Some parts make sense, but the rest, eh… I referred to musl’s “secs_to_tm” function for how it did the calculations. This is what mostly guided my work, with a few pieces of calculation and numbers help from Google AI search results. I didn’t write a test suite for this function, because I think it will be easier to do once I knock down what will be the hardest kinds of functions: *string manipulation *(e.g. strftime) But now that I have a way to convert seconds to a mars_tm struct, it should make everything else somewhat easier. Hopefully."}, {"post_id": 13897, "ts": "2026-06-22T19:40:18Z", "hours": 4.1111, "text": "AI vs Debugging I added some tests for Y2038, before, and after, because, of course, that could be an issue. It turned out that Darian timestamps on non-leap years (even-numbered years) were incorrect. But they were correct in leap years. So… what gives? Manual Looking I thought it could be the result of the calendar epoch being incorrect (it did end up being slightly incorrect) - but I tried using other dates on non-leap years, and couldn’t find a consistent offset that all the dates were off by. This was.. really weird. I also tried setting the year to calculate the year before - no dice. Taking out the AI Eventually, I decided, “screw it”, so I took GPT-5 mini and asked it to try to figure out what was happening. Spoiler alert: It did eventually figure everything out.. but it was.. quite the process to watch it do so. It detected that the sols-passed-at-the-start-of-month table was actually missing the value for the 8th month. Of course, adjusting this caused tests to fail, so I was hesitant to trust it. It also suggested subtracting 1 from the day count when multiplying by 86400 seconds per day. This was bogus. Asking it to make a diff I asked it to make a .patch or a .diff I could apply - and it didn’t work. Missing headers or invalid patch data, whatever it was, it can’t generate a .patch file. Which is kind of hilarious. It also didn’t look back at my codebase when I applied some of it’s suggestions, so it would be making patches that refer to deleted lines that didn’t exist anymore. Could just be a skill issue. Figure it out, man I told it to figure out what was wrong. It spent the next ~16 mins, making a “debug mkmarstime” script, and a bunch of other small scripts like “probe_unix”, “probe_y2038” - in some cases, it was just going around in a circle - making changes that only resulted in the same prior status. I thought it was hallucinating at first, especially with the compiler errors it got. Eventually I’ll look back at the thread and it’s thinking, because like, in some ways, it was stupid, but in some ways it was smart. I don’t know if the method to debug everything was the most efficient - but it eventually worked. Probably trying to fix the epoch, and also fix the leap years, and also fix the month - all at the same time - overwhelmed it, and my guess is there was no confidence in itself. I’m talking too much about the AI here for code I didn’t do in a dev log. But anyway, it brute forced tested leap year handling, (it also mentioned “leap seconds” which I’m not dealing with.. so I’m not sure what the heck it’s doing), but eventually all the testcases did past. Some helpful tidbits It also did suggest using llround to fix some precision issues, like sometimes conversions being off by 1 second. This is actually not a terrible idea, and I may make a build-time config option for this. Since it was successful, I also asked it to import all its scripts in a test suite - which it wasn’t going anywhere for, so I decided to stop wasting energy and stop it there. Eventually I may come back to it. Overall thoughts So it spent at 187K tokens - and even though it did seem to go nowhere, it eventually kind of.. worked? And mkmarstime behaves properly now. I was worried the AI would just try to focus on “solution that solves testcases” instead of “solution that does actual behavior”, but the resulting diff is justified (I even had it check that the output produced was the same in its loop vs closed form intercalation). Vibe coding, no. But vibe debugging? Well, maybe there is something to be said about it.."}, {"post_id": 13192, "ts": "2026-06-21T16:27:46Z", "hours": 1.755, "text": "libspacetime - mkmarstime function Wow, what a sprint! Part of the C date and time functions is mktime. It takes a struct tm object (which is a “broken down” time structure), and converts it into the time_t format (seconds since 1970). For libspacetime and the Darian Calendar, we need mkmarstime to track time on Mars. In some ways, this ended up not being harder than I thought it was, and in some ways it did. Leap Years In the Gregorian Calendar, we have leap years every 4 years - except when the year is divisible by 100, unless divisible by 400. Yeah, it’s confusing. The Darian Calendar, in it’s wording from the website and also Wikipedia confused me. I thought Intercalation was the length of a year, but no, it’s actually just getting the # of leap years that have passed at a given year number. Darian Calendar rules are actually, every odd numbered year is a yeap lear, except for decades (10, 20, 30). Exception to that is if the year is divisible by 100, and again for divisible by 1000. In the commented code, you can see how I put down my train of thought, but ended up coming to what the actual source was anyway. Basically, you find the number of leap years, multiply by 669 days, then non-leap years, multiply by 668. Fun fact: Glibc in its tm structures, according to POSIX specs, starts the year at 0. I believe it is because it could make those numbers fit in a smaller data structure. For us, the Darian year is 221. I guess I could maybe try to shave it down? But these are things I’ll have to decide before any release. Months Every month has 28 days, except for the last month in each “quarter”, which has 27. You could calculate this, but Glibc, for the Gregorian Calendar actually has a static table that lists the amount of days since each month starts. This way it doesn’t have to do the multiplication every time. I was doing it manually, and I was going to write out the expressions - 28 1, 28 2, etc. but it got complicated when also having to add like, 28 7 + (27 1) and I didn’t know which I was on track for. By using the example website, I got the numbers by manual conversion. Leap Days The table makes sense in Glibc for another reason: The leap day in the Gregorian Calendar is so early in the year, it shifts every day forward by one. In the Darian Calendar, the leap day is actually at the end of the last month of the year. So we don’t need to store duplicate entries, or actually really worry about it for this function. (Not sure whether it is my job to handle invalid values). But basically if the current year is a leap year, we can still work as normal, and then just add on the day as requested. Nice! The rest Days, hours, minutes, seconds are all as normal. The epoch The Darian Calendar epoch actually begins in 1609. But.. the Mars Sol Date, which is unofficial but even used in NASA’s Mars24 program, has its “0” date at Dec 29 1873. So we need to subtract to make up for the difference. If you use dates before MSD 0, you get negative mars_time_t values. I couldn’t figure out what the epoch meant, until I realized it was just MSD 0. I also found that marsclock.com’s “midday” is actually off by about 177 seconds. But I calculated MSD 0 to be what you see in the code (I need to save characters so I can submit this), and off I went. Testcases Yeah, this needs tests. Even more than what I put in for this devlog (MSD 0 and Unix Epoch 0). Unfortunately in Mars -> Earth time, I am losing about an Earth second in conversion. I’ll try to debug this now. But it causes some tests, like the epoch to be incorrect - it returns a mars_time_t of what would be unix epoch -1. Overall thoughts The genius of how Glibc handles the months was probably the coolest part. Most challenging, the leap year intercalation for sure. Now, onto more test suites, and more functions."}, {"post_id": 12526, "ts": "2026-06-20T13:29:31Z", "hours": 0.3856, "text": "Earth Timekeeping to Mars Timekeeping Conversions Because I’m going out to see family today - might as well get something done. I was going to add “mktime” but I realized that I’ve done Mars to Earth but not vice versa. Besides, I need an “epoch” to start time from. Technically, I already had done this with mars_time(), I just needed to do it with any timestamp. I did “0” (January 1, 1970, midnight) locally to verify, then chose the Mariner 9 enter orbit as a testcase. I will note, Wikipedia shows MSD (Mars Sol Date) but also Mars Julian Sol. I wonder if I’ll have to do that later. I also will probably need to organize my tests/Makefile.am for further testcases. It will grow once I start adding time tests and not just MSD."}, {"post_id": 12506, "ts": "2026-06-20T13:02:00Z", "hours": 1.3219, "text": "libspacetime - creating a testsuite But first, pre-stardance talk I’ve known the Darian Calendar existed, and my goal is to spend my time over the summer to try to make it as close to system level support as possible. This includes trying to get it at kernel-level - which is another project. Anyways, libspacetime is basically time.h but for other planets. I want it to be portable and work on as many systems as possible. For this reason I setup a GNU Autotools project (autoconf, automake, that fun stuff). Now, the Darian calendar is not standard, but C date and time functions are. Also, timekeeping is actually complicated. So I’m kind of.. mimicking the standards, and I may not get there in terms of implementation for a while, but I try my best. Using some sites: Wikipedia “timekeeping on mars” article https://ops-alaska.com/time/gangale_converter/calendar_clock.htm https://marsclock.com/ And after fighting with type versions, I eventually got a current unix time, represented in Martian seconds, in a way that you can get to the current Mars Sol Date (MSD). Uh.. I’m not a mathematician. How does the timekeeping and conversions work, I honestly don’t know off hand. This will prove to continue being a challenge… especially because like, “ok, so what is our “epoch” for mars? Still Jan 1 1970 on Earth? But the existing proposed calendar conversions use this date instead?” - lots of fun in the future. Okay, basically pre stardance was just mars_time and the initial project. Creating the testsuite For test runners, there are options - TAP, DejaGNU, etc. But this isn’t Meson where you can setup test targets. Autotest is kind of weird (that seems to be the general consensus). If you are testing executable programs, it’s great, because you can get a fixed output. But at the base level, it’s really just a bunch of shell scripts. So in test “setup”, I want to compile my “tests”. But a user building the library may not have libspacetime headers or library installed, so we need to not only build a C target (which in itself is weird, the GNU Autotools docs for test suites doesn’t suggest this as far as I know), but we need to link against the library built in the src folder of the project and also include its headers. Kinda janky. The lack of useful documentation examples is what I spent a lot of time on. There is also the thing with atlocal, which I think is like.. empty? But docs suggest it should be generated? package.m4 files exist now, which I did a great job filling out now that I look back at it -_- when it comes to actual test checks (testsuite.at), apparently it compares output, not status code.. so I have to like, verbatim tell “I expect this output”. So there goes printing out the status of the current times I am testing. Also it is so specific, like I can’t use a newline character in the printf in the test executable. The print is useful because a round conversion from Earth -> Martian -> Earth results in a one earth second loss. I don’t know if it’s because of floating point precision or because of the time it takes to execute the conversion from the processor. Ideally, the application can ask the kernel for the time and it uses its own clocks - which can use a counter chip, and using the amount of increases per a set of time, can figure out how long a “cycle” is and keep time that way. That was sort of the goal of my kernel “spacetime” support, but I wanted it to show up in lsclocks, and after all clocksource is like, a hardware abstraction, not an actual clock. Idealy a clocksource could just have a lower multiplier, but the kernel still uses the best clocksource which certainly won’t be the martian one. Anyways, use janky tools (Autotest framework), get janky results. Cheers to more date and time functions and tests."}]...
|
Title: libspacetime by @jpeisach | Stardance
Devl Title: libspacetime by @jpeisach | Stardance
Devlogs:
libspacetime - creating a testsuite But first, pre-stardance talk I’ve known the Darian Calendar existed, and my goal is to spend my time over the summer to try to make it as close to system level support as possible. This includes trying to get it at kernel-level - which is another project. Anyways, libspacetime is basically time.h but for other planets. I want it to be portable and work on as many systems as possible. For this reason I setup a GNU Autotools project (autoconf, automake, that fun stuff). Now, the Darian calendar is not standard, but C date and time functions are. Also, timekeeping is actually complicated. So I’m kind of.. mimicking the standards, and I may not get there in terms of implementation for a while, but I try my best. Using some sites: Wikipedia “timekeeping on mars” article https://ops-alaska.com/time/gangale_converter/calendar_clock.htm https://marsclock.com/ And after fighting with type versions, I eventually got a current unix time, represented in Martian seconds, in a way that you can get to the current Mars Sol Date (MSD). Uh.. I’m not a mathematician. How does the timekeeping and conversions work, I honestly don’t know off hand. This will prove to continue being a challenge… especially because like, “ok, so what is our “epoch” for mars? Still Jan 1 1970 on Earth? But the existing proposed calendar conversions use this date instead?” - lots of fun in the future. Okay, basically pre stardance was just mars_time and the initial project. Creating the testsuite For test runners, there are options - TAP, DejaGNU, etc. But this isn’t Meson where you can setup test targets. Autotest is kind of weird (that seems to be the general consensus). If you are testing executable programs, it’s great, because you can get a fixed output. But at the base level, it’s really just a bunch of shell scripts. So in test “setup”, I want to compile my “tests”. But a user building the library may not have libspacetime headers or library installed, so we need to not only build a C target (which in itself is weird, the GNU Autotools docs for test suites doesn’t suggest this as far as I know), but we need to link against the library built in the src folder of the project and also include its headers. Kinda janky. The lack of useful documentation examples is what I spent a lot of time on. There is also the thing with atlocal, which I think is like.. empty? But docs suggest it should be generated? package.m4 files exist now, which I did a great job filling out now that I look back at it -_- when it comes to actual test checks (testsuite.at), apparently it compares output, not status code.. so I have to like, verbatim tell “I expect this output”. So there goes printing out the status of the current times I am testing. Also it is so specific, like I can’t use a newline character in the printf in the test executable. The print is useful because a round conversion from Earth -> Martian -> Earth results in a one earth second loss. I don’t know if it’s because of floating point precision or because of the time it takes to execute the conversion from the processor. Ideally, the application can ask the kernel for the time and it uses its own clocks - which can use a counter chip, and using the amount of increases per a set of time, can figure out how long a “cycle” is and keep time that way. That was sort of the goal of my kernel “spacetime” support, but I wanted it to show up in lsclocks, and after all clocksource is like, a hardware abstraction, not an actual clock. Idealy a clocksource could just have a lower multiplier, but the kernel still uses the best clocksource which certainly won’t be the martian one. Anyways, use janky tools (Autotest framework), get janky results. Cheers to more date and time functions and tests.
Earth Timekeeping to Mars Timekeeping Conversions Because I’m going out to see family today - might as well get something done. I was going to add “mktime” but I realized that I’ve done Mars to Earth but not vice versa. Besides, I need an “epoch” to start time from. Technically, I already had done this with mars_time(), I just needed to do it with any timestamp. I did “0” (January 1, 1970, midnight) locally to verify, then chose the Mariner 9 enter orbit as a testcase. I will note, Wikipedia shows MSD (Mars Sol Date) but also Mars Julian Sol. I wonder if I’ll have to do that later. I also will probably need to organize my tests/Makefile.am for further testcases. It will grow once I start adding time tests and not just MSD.
libspacetime - mkmarstime function Wow, what a sprint! Part of the C date and time functions is mktime. It takes a struct tm object (which is a “broken down” time structure), and converts it into the time_t format (seconds since 1970). For libspacetime and the Darian Calendar, we need mkmarstime to track time on Mars. In some ways, this ended up not being harder than I thought it was, and in some ways it did. Leap Years In the Gregorian Calendar, we have leap years every 4 years - except when the year is divisible by 100, unless divisible by 400. Yeah, it’s confusing. The Darian Calendar, in it’s wording from the website and also Wikipedia confused me. I thought Intercalation was the length of a year, but no, it’s actually just getting the # of leap years that have passed at a given year number. Darian Calendar rules are actually, every odd numbered year is a yeap lear, except for decades (10, 20, 30). Exception to that is if the year is divisible by 100, and again for divisible by 1000. In the commented code, you can see how I put down my train of thought, but ended up coming to what the actual source was anyway. Basically, you find the number of leap years, multiply by 669 days, then non-leap years, multiply by 668. Fun fact: Glibc in its tm structures, according to POSIX specs, starts the year at 0. I believe it is because it could make those numbers fit in a smaller data structure. For us, the Darian year is 221. I guess I could maybe try to shave it down? But these are things I’ll have to decide before any release. Months Every month has 28 days, except for the last month in each “quarter”, which has 27. You could calculate this, but Glibc, for the Gregorian Calendar actually has a static table that lists the amount of days since each month starts. This way it doesn’t have to do the multiplication every time. I was doing it manually, and I was going to write out the expressions - 28 1, 28 2, etc. but it got complicated when also having to add like, 28 7 + (27 1) and I didn’t know which I was on track for. By using the example website, I got the numbers by manual conversion. Leap Days The table makes sense in Glibc for another reason: The leap day in the Gregorian Calendar is so early in the year, it shifts every day forward by one. In the Darian Calendar, the leap day is actually at the end of the last month of the year. So we don’t need to store duplicate entries, or actually really worry about it for this function. (Not sure whether it is my job to handle invalid values). But basically if the current year is a leap year, we can still work as normal, and then just add on the day as requested. Nice! The rest Days, hours, minutes, seconds are all as normal. The epoch The Darian Calendar epoch actually begins in 1609. But.. the Mars Sol Date, which is unofficial but even used in NASA’s Mars24 program, has its “0” date at Dec 29 1873. So we need to subtract to make up for the difference. If you use dates before MSD 0, you get negative mars_time_t values. I couldn’t figure out what the epoch meant, until I realized it was just MSD 0. I also found that marsclock.com’s “midday” is actually off by about 177 seconds. But I calculated MSD 0 to be what you see in the code (I need to save characters so I can submit this), and off I went. Testcases Yeah, this needs tests. Even more than what I put in for this devlog (MSD 0 and Unix Epoch 0). Unfortunately in Mars -> Earth time, I am losing about an Earth second in conversion. I’ll try to debug this now. But it causes some tests, like the epoch to be incorrect - it returns a mars_time_t of what would be unix epoch -1. Overall thoughts The genius of how Glibc handles the months was probably the coolest part. Most challenging, the leap year intercalation for sure. Now, onto more test suites, and more functions.
AI vs Debugging I added some tests for Y2038, before, and after, because, of course, that could be an issue. It turned out that Darian timestamps on non-leap years (even-numbered years) were incorrect. But they were correct in leap years. So… what gives? Manual Looking I thought it could be the result of the calendar epoch being incorrect (it did end up being slightly incorrect) - but I tried using other dates on non-leap years, and couldn’t find a consistent offset that all the dates were off by. This was.. really weird. I also tried setting the year to calculate the year before - no dice. Taking out the AI Eventually, I decided, “screw it”, so I took GPT-5 mini and asked it to try to figure out what was happening. Spoiler alert: It did eventually figure everything out.. but it was.. quite the process to watch it do so. It detected that the sols-passed-at-the-start-of-month table was actually missing the value for the 8th month. Of course, adjusting this caused tests to fail, so I was hesitant to trust it. It also suggested subtracting 1 from the day count when multiplying by 86400 seconds per day. This was bogus. Asking it to make a diff I asked it to make a .patch or a .diff I could apply - and it didn’t work. Missing headers or invalid patch data, whatever it was, it can’t generate a .patch file. Which is kind of hilarious. It also didn’t look back at my codebase when I applied some of it’s suggestions, so it would be making patches that refer to deleted lines that didn’t exist anymore. Could just be a skill issue. Figure it out, man I told it to figure out what was wrong. It spent the next ~16 mins, making a “debug mkmarstime” script, and a bunch of other small scripts like “probe_unix”, “probe_y2038” - in some cases, it was just going around in a circle - making changes that only resulted in the same prior status. I thought it was hallucinating at first, especially with the compiler errors it got. Eventually I’ll look back at the thread and it’s thinking, because like, in some ways, it was stupid, but in some ways it was smart. I don’t know if the method to debug everything was the most efficient - but it eventually worked. Probably trying to fix the epoch, and also fix the leap years, and also fix the month - all at the same time - overwhelmed it, and my guess is there was no confidence in itself. I’m talking too much about the AI here for code I didn’t do in a dev log. But anyway, it brute forced tested leap year handling, (it also mentioned “leap seconds” which I’m not dealing with.. so I’m not sure what the heck it’s doing), but eventually all the testcases did past. Some helpful tidbits It also did suggest using llround to fix some precision issues, like sometimes conversions being off by 1 second. This is actually not a terrible idea, and I may make a build-time config option for this. Since it was successful, I also asked it to import all its scripts in a test suite - which it wasn’t going anywhere for, so I decided to stop wasting energy and stop it there. Eventually I may come back to it. Overall thoughts So it spent at 187K tokens - and even though it did seem to go nowhere, it eventually kind of.. worked? And mkmarstime behaves properly now. I was worried the AI would just try to focus on “solution that solves testcases” instead of “solution that does actual behavior”, but the resulting diff is justified (I even had it check that the output produced was the same in its loop vs closed form intercalation). Vibe coding, no. But vibe debugging? Well, maybe there is something to be said about it..
Darian Calendar C Library: ammarstime Probably the hurdle that will be the second hardest part of the entire libspacetime library is ammarstime. It is the same as the C stdlib’s “gmtime”, which, from a timestamp, returns a broken down time structure (struct tm) of the date/time info of that timestamp (the human readable info like day, month, year, etc.) This is actually difficult. Seconds just count up, and you have to go backwards. You can try to divide by the amount of seconds in a year, but what about leap years? Honestly, the math is too weird, even for me. Some parts make sense, but the rest, eh… I referred to musl’s “secs_to_tm” function for how it did the calculations. This is what mostly guided my work, with a few pieces of calculation and numbers help from Google AI search results. I didn’t write a test suite for this function, because I think it will be easier to do once I knock down what will be the hardest kinds of functions: *string manipulation *(e.g. strftime) But now that I have a way to convert seconds to a mars_tm struct, it should make everything else somewhat easier. Hopefully.
libspacetime - preparing for localization Nothing really crazy, but I ran gettextize, looked at as much docs as I could (the website is unreachable at the moment), and other project examples to create a basic localization setup. This will allow for localization of day and month names.
strfmarstime progress I think it is warranted, otherwise I will forget later. This is part 1 of many on the journey to the strfmarstime function - which returns a formatted string of a broken down mars time structure. This was my first time ever recreating a string formatting function - especially in C, so I learned some things along the way. Basing off of musl After some attempts, it became pretty clear that, although string formatting functions may seem easy, when you need to support width and padding specifiers, things get complicated. Since I had to learn this, I decided to save time by basically recreating musl’s strftime implementation side by side. I would comment and give details on what is happening so I learned how it worked while also getting the result I need to, without just blatantly copying and pasting without giving credit. This took about an hour since some of the variable names in musl’s implementation are like, ‘l’, ‘f’, and I had to keep it straight. I actually am writing this devlog after I spent 30+ minutes debugging some stack smashing that was happening, as a result of me putting in the wrong variable for string length into memcpy. How it works Basically, strftime/strfmarstime will first collect information needed for each format specifier, like if there is a character requesting padding. Then it will do each item at a time, with the given padding and width. Here’s a fun thing I learned: There is a lot of “format++”. But format is a char*. How does that make sense? Well, format++ actually is basically the same as doing .substring(1, format.length()) in other languages. I guess it makes sense if you think about a list of characters, and you are progressing to the next character. (Like a “cdr” of a “cons” box in functional programming). So that helped. Locales, locales I wanted to come back to this later, especially because I will eventually need translations. But the %c specifier actually refers to the system locale’s date and time format. This required some hacking that came around the time I was stuck with that stack smashing. So seriously, I was stuck . musl has it easy, it can tell by its own thread what the locale is. Here, we need to initialize locales (setlocale), and then make a locale_t object we can use with newlocale. Then we free it at the end. Where I am now Since the locale’s DT formatting is really just a shorthand for other specifiers, it returns “-” in its place. But as I continue forward, it will work.
strfmarstime - ~80% complete After about 6 hrs total, the strfmarstime function is complete, using musl as a reference, except: %E (era based format) %k (hour as a decimal, but including padding 0s, probably this will be a quick fix %O (modifier symbols?) %P (lowercase version of “am” and “pm” - need to find a good way to run tolower on a const char*) All week numbering formats, because there are different standards on when the week “starts” and “how many weeks we are into the year” (e.g. first 4 days of year, vs. whether week starts on Sunday vs. Monday) %z, %Z (Timezones, not implemented yet) This was quite the grind, having strftime docs open on one screen, musl’s implementation on another, and trying to go through each format while documenting and understanding how the formatting is being processed, one by one. I also did some slight restructuring: the __mars_tm_to_secs function exists. It is basically what mkmarstime did. I would have it not subtract by epoch, but it was causing tests to fail. Technically the strftime docs say that %s, which uses it, calls the function anyways, so it may be pointless but whatever. Oh, speaking of %s: That is seconds since the Unix epoch. Who knows how useful that will be when this calendar implementation starts at MSD 0 (like, 1873). Also, it’s martian seconds instead of Earth seconds. Fun shoutout to “%%”, “%t”, and “%n”, which required nothing, just setting the length of the item to “1” and returning the actual formatting character. Lol. Welp, now it’s time to test and drill this function into oblivion.
strfmarstime testing and verification - date time format locales The %c format specifier checks the system locale for how to format the date and time. Of course, it’s a good idea to test this. It took me a while.. unfortunately I don’t have a way of checking in test configuration if one of the formats is installed on the host system (see https://en.wikipedia.org/wiki/List_of_date_formats_by_country ). I also don’t really have a nice way (as far as I know) to set test environment variables. So what I ended on was in the test setup, just passing the LC_ALL environment variable. But this was broken for some reason? Ah, it turns out that my logic in strfmarstime to get the locale was incorrect. For some reason, setlocale ( LC_ALL , NULL ); does not work, and you have to use “”. My guess is that NULL goes to system default, and “” will read from environment variables. Yay! While Day-Month-Year format is straight forward, the few countries that use Year-Month-Day are driving me insane, like Hungary, because their formats have like, dots in them, and I’m not seeing much consistency across the other country’s formats that also have Year-Month-Day formatting. I’ll come back to it later. It’s actually broken anyway, because my week number representations are still wrong.
strpmarstime I took a break from validating strfmarstime because.. well I needed it. So I started doing the function that does the opposite, takes a string, parses into into a mars_tm structure. I am taking the same approach as musl, and enjoying myself, as in, because musl is able to lookup string matches by locale (because there is a fixed offset for dates), but I can’t, I have to manually search. But instead of copy pasting code I’m trying to setup a pointer to an array to check in a common code routine. And now I’m getting memory issues. Yay!
strpmarstime - basic implementation complete Using musl as a reference, I’ve completed an.. implementation, of strpmarstime. Yesterday I must’ve placed my energy wrong because I just wasn’t super motivated and didn’t do as much coding. Anyway: strpmarstime is the inverse of strfmarstime, taking a date-time formatted string and given its format, entering those values into a mars_tm struct. Everything made sense, mostly. There are still some areas of code I need to comment and reread to make sure I understand what is going on. But after strfmarstime, it isn’t too crazy. As usual, it does the things for string parsing, like str++ to move to the rest of the string’s characters, then it parses by item. In order to find values, I think that the calculations sort of estimate the character location of the number range, and then we import it. Challenges nl_langinfo Once again, I found myself in a situation where musl can lookup strings to match values like day and month names via numerical item addresses with nl_langinfo, but I cannot (as this is not a “standard” item index). Musl is able to use this item address to iterate through the list of potential matches, which is easy to do in common goto routines. For me, I had to basically make a pointer to an array of char* (so I had char**, once I figured it out), that was the “iteration_array”. Depending on the format, it would check the array for the match. The main confusing thing was really just the pointers. Spent about 10 minutes fighting with compiler errors until I figured it out with the help of stackoverflow and Google’s AI. By the way, using nl_langinfo_l, which I did in strfmarstime, does not exist in locale.h by default on macOS, it’s in xlocale.h, so I made a small configure define this morning to take care of that. The vague formats There are several ways of determining what # week of year we are in. One format says it’s the week with at least four days, and starts indexing at like, 1 I think? And then there are a few others? I can’t remember off the top of my head. Because there are no clear answers, I (and musl) have left these formats as “parse only”. This really impacts week number formats, which, I guess makes sense, because if you only have that, who knows what year you are in, and how many days are in the first full “week”, however you define that. Timezones Skipped for now, as I have yet to take care of this, and I think some proposed timekeeping systems actually don’t do the standard one-hour intervals.. I need to look into it. Future Welp, it’s off to testing and verification. Yay!
strfmarstime testing - week numbers Nothing crazy to report for the current testsuite and implementation verification I’ve been doing. Basically same thing as I did before I took a break for strpmarstime. For some formats, it will literally print anything (if it’s invalid), which appears to be normal in Glibc, so it’s normal to me. Some locale work too on AM/PM formatting and time formatting - some do “AM”, some do “am”, Spain does “a.m.”. The big thing is: Week Numbers Okay, so there are three different definitions of week numbers: %U: The first day of week 1 is on Sunday. Range 00 (because sometimes in January we don’t get to Sunday for a few days), up until 53 (sometimes we actually get 53 weeks due to day placement.) %V: ISO 8601, which has week 1 as the first week with at least 4 days in the new year. Range 01 to 53. (Week 0 would be represented by 52, in my testing) %W: The first day of week 1 is on Monday. But, here is the key thing about the Darian calendar: Each month resets the week. This is actually one of the things about the Gregorian Calendar some people don’t like-how the # of the day is on inconsistent weekdays. The Darian Calendar has a neat 28 days for each month, so with 7 days a week, this isn’t a problem. And since each week is guaranteed to have four days, we can just take the number of days and divide by 7. For %W, shift by 1, because Monday (Lunae) is not the first day of the week. However.. every 6th month is the end of a season, and it has 27 days. So we need to, in our calculations, which must go based off the nth day of the year, make sure we reset, otherwise we will lose our day alignment (because again, the week resets). So we need to realign every 167 days, and also check how many seasons passed and use that to get the amount of prior weeks we are skipping when we have modulated. As for the leap day: It divides perfectly by 7 and 167, so it gets its own if statement case (otherwise it would read “97”). Experience I knew this would be weird to figure out, and challenging, but I actually had a lot of fun doing it. It kept my brain working, I stayed energetic, and I managed to have fun, which is the most important thing! So after my long Pomodoro break, I’ll verify %W (since %U and %V are thee same), and then %w, %x, %X, %y and %Y and that will be it, since for an initial ship I don’t plan to do timezones.
Devlog now in case I switch from Macondo to Stardance. In the event that I need to, I will edit this with more details. Basically, I managed to work on strfmarstime, strpmarstime, ammarstime, and I’ve been drilling testcases.
Again, in case I switch back from Macondo. More fighting with leap years - I’ll have to use AI for help. In the meantime I created a marsdate program, and did wcsfmarstime (analogous to wcsftime). I also created some initial Rust bindings :)
again idk if I will be doing sd instead of macondo but anyways, been doing documentation :) I also fixed ammarstime and did bindings to other langs....
|
1793321304.5075936
|
1793926104.5075936
|
|
5334
|
libimportx by @lilyy | Stardance
|
lilyy
|
0
|
1.98
|
0
|
[]
|
[{"post_id": 2720, "ts": "2026 [{"post_id": 2720, "ts": "2026-06-05T13:34:11Z", "hours": 0.7214, "text": "Made the JS version work on windows and documented the new API it did not take me 6 attempts but my entire windows VM broke after i exited and threw an error which did not do anything (the library was still fully functional). im gonna fix this error Changelog in libimportx-js : update version number add windows support hopefully first try this time? in libimportx : Add support in the spec for TCP sockets Make the examples actually work in libimportx-redirector : it now works on windows"}, {"post_id": 2202, "ts": "2026-06-04T15:52:43Z", "hours": 0.8836, "text": "Got the Python version to work on windows FINALLLYYY!!! windows is such a terrible OS it took me SIX ATTEMPTS to get it working Changelog in libimportx-python (i didnt do it for JS yet nor did i document the spec yet) WINDOWS FINALLY WORKED now update version number Attempt 6 at making windows work Attempt 5 at making windows work Attempt 4 at making windows work Attempt 3 to make windows support work fix tempdir thing Add gitignore to ignore pyc files Add gitignore to ignore pyc files Add windows support… hopefully?"}, {"post_id": 2025, "ts": "2026-06-04T09:39:54Z", "hours": 0.3794, "text": "Add user guide now there is a user guide with examples! Changelog in libimportx , the repo with the spec and user guide: Add installation Add user guide in libimportx-redirector , the repo i made because you can’t add more than one repo to stardance: thingy link to userguide fixes"}]...
|
Title: libimportx by @lilyy | Stardance
Devlogs:
Title: libimportx by @lilyy | Stardance
Devlogs:
Add user guide now there is a user guide with examples! Changelog in libimportx , the repo with the spec and user guide: Add installation Add user guide in libimportx-redirector , the repo i made because you can’t add more than one repo to stardance: thingy link to userguide fixes
Got the Python version to work on windows FINALLLYYY!!! windows is such a terrible OS it took me SIX ATTEMPTS to get it working Changelog in libimportx-python (i didnt do it for JS yet nor did i document the spec yet) WINDOWS FINALLY WORKED now update version number Attempt 6 at making windows work Attempt 5 at making windows work Attempt 4 at making windows work Attempt 3 to make windows support work fix tempdir thing Add gitignore to ignore pyc files Add gitignore to ignore pyc files Add windows support… hopefully?
Made the JS version work on windows and documented the new API it did not take me 6 attempts but my entire windows VM broke after i exited and threw an error which did not do anything (the library was still fully functional). im gonna fix this error Changelog in libimportx-js : update version number add windows support hopefully first try this time? in libimportx : Add support in the spec for TCP sockets Make the examples actually work in libimportx-redirector : it now works on windows...
|
1793404372.202038
|
1794009172.202038
|
|
28079
|
lexie ai by @Adrian_mwangi | Stardance
|
Adrian_mwangi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lexie ai by @Adrian_mwangi | Stardance
|
1793332173.105901
|
1793936973.105901
|
|
59545
|
lexi OS by @IcedThrower_95 | Stardance
|
IcedThrower_95
|
1
|
12.51
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T13:29:36Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "A desktop envirinment which runs in your browser. Features: Windowing System: Features multiple fully draggable, stackable windows which are designed to open only one Instance. Dock: a macOS-style bottom dock with an open app indicator and smooth animations while opening the app Top bar: displays the clock, the OS name and just icons of internet, battery and sound Apps: 1.About Me - A little breif about myself and my social links - email, slack and github 2. Music Player - comes with 9 preloaded track and support to upload own tracks and support for tracks in queue -a special feature where it auto mixes tracks in queue one after the other evrytime a preloaded track is clicked it is added in the queue which might not be visible when selecting the tracks 3.Notes - Text editor where you can link your notes to have more reference or relationship (needs a little more work on the design part) 4.Calculator - a fully functional calculator app 5. Currency Converter - An app where you can convert currency to and from - USD, GBP ,EUR INR, JPY ,CNY ,AUD 6. Translator - An which transaltes to and from languages - English, Hindi, Telugu ,Spanish, French, German 7. Browser - An app that links to Google (don’t have enough experience to build a browser in an environment yet. 8. WallPapers - An app which has preloaded system wallpapers and also the power to add custom desktop wallpapers", "repo": "https://github.com/IcedThrower95/Lexi-OS", "demo": "https://lexi-os-virid.vercel.app/"}]...
|
[{"post_id": 86268, "ts": "202 [{"post_id": 86268, "ts": "2026-11-01T05:19:27Z", "hours": 0.5133, "text": "worked on code optimisation"}, {"post_id": 84291, "ts": "2026-10-29T12:32:28Z", "hours": 8.8894, "text": "I have finally completed my lexi os added a few more apps and polished off the entire site to match the theme of the entire desktop. about me app custom boot sequence a new clock and calender widget inspired from Mewo OS 4.also made a simple app Wallpaper - with four preloaded wallpapers which i love 5.fixed all the bugs which were popping up while building the os I also wrote the ReadMe for my project in my web browser and lapsed it so that my project doesn’t get rejected based on AI usage in ReadMe"}, {"post_id": 81545, "ts": "2026-10-21T17:08:54Z", "hours": 3.1431, "text": "In the 3 hours I worked, I built four apps A very simple wallpaper storage app Next, I made a notes app - I first built simple notes in the notes app, then I realised, why don’t we add relationships between each node like in an artificial neural network, so I did, for which I took help from AI I built a translator app which converts select languages for now. The final one is a currency converter, which as of now has 5 currencies. Tomorrow I will be working on improving these apps, this is just the first iteration hehehe"}, {"post_id": 71816, "ts": "2026-09-21T16:30:34Z", "hours": 0.0, "text": "#devlog 3 , I just fiddled around with the music player adding more features to it making it a unique player out there in a webos"}, {"post_id": 71327, "ts": "2026-09-20T17:08:03Z", "hours": 0.0, "text": "last two days, i spent my time building the apps calculator and the music player and fiddling with the styling of the apps, still a little confused in my head. any suggestion on what amount of blur is ideal is much appreciated"}, {"post_id": 70179, "ts": "2026-09-18T17:04:03Z", "hours": 0.0, "text": "#devlog1 today i spent time working and learning to implement the dock and the mouse movements for the draggable windows, for now i am using the the mac os style, after developing my own UI in figma I hope to change it. The style i am is a blend of GlassMorphism and Neumorphism. And also i develop the icon is figma but i wasn’t quite able to fit them properly, will look into it tomorrow. For now thats it guys"}]...
|
Title: lexi OS by @IcedThrower_95 | Stardance
Dev Title: lexi OS by @IcedThrower_95 | Stardance
Devlogs:
#devlog1 today i spent time working and learning to implement the dock and the mouse movements for the draggable windows, for now i am using the the mac os style, after developing my own UI in figma I hope to change it. The style i am is a blend of GlassMorphism and Neumorphism. And also i develop the icon is figma but i wasn’t quite able to fit them properly, will look into it tomorrow. For now thats it guys
last two days, i spent my time building the apps calculator and the music player and fiddling with the styling of the apps, still a little confused in my head. any suggestion on what amount of blur is ideal is much appreciated
#devlog 3 , I just fiddled around with the music player adding more features to it making it a unique player out there in a webos
In the 3 hours I worked, I built four apps A very simple wallpaper storage app Next, I made a notes app - I first built simple notes in the notes app, then I realised, why don’t we add relationships between each node like in an artificial neural network, so I did, for which I took help from AI I built a translator app which converts select languages for now. The final one is a currency converter, which as of now has 5 currencies. Tomorrow I will be working on improving these apps, this is just the first iteration hehehe
I have finally completed my lexi os added a few more apps and polished off the entire site to match the theme of the entire desktop. about me app custom boot sequence a new clock and calender widget inspired from Mewo OS 4.also made a simple app Wallpaper - with four preloaded wallpapers which i love 5.fixed all the bugs which were popping up while building the os I also wrote the ReadMe for my project in my web browser and lapsed it so that my project doesn’t get rejected based on AI usage in ReadMe
worked on code optimisation
Ships:
A desktop envirinment which runs in your browser. Features: Windowing System: Features multiple fully draggable, stackable windows which are designed to open only one Instance. Dock: a macOS-style bottom dock with an open app indicator and smooth animations while opening the app Top bar: displays the clock, the OS name and just icons of internet, battery and sound Apps: 1.About Me - A little breif about myself and my social links - email, slack and github 2. Music Player - comes with 9 preloaded track and support to upload own tracks and support for tracks in queue -a special feature where it auto mixes tracks in queue one after the other evrytime a preloaded track is clicked it is added in the queue which might not be visible when selecting the tracks 3.Notes - Text editor where you can link your notes to have more reference or relationship (needs a little more work on the design part) 4.Calculator - a fully functional calculator app 5. Currency Converter - An app where you can convert currency to and from - USD, GBP ,EUR INR, JPY ,CNY ,AUD 6. Translator - An which transaltes to and from languages - English, Hindi, Telugu ,Spanish, French, German 7. Browser - An app that links to Google (don’t have enough experience to build a browser in an environment yet. 8. WallPapers - An app which has preloaded system wallpapers and also the power to add custom desktop wallpapers...
|
1793656344.6307962
|
1793742744.6307962
|
|
49309
|
leviathan-osint-spider by @Dakshu | Stardance
|
Dakshu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: leviathan-osint-spider by @Dakshu | Stardan Title: leviathan-osint-spider by @Dakshu | Stardance...
|
1793278050.7232642
|
1793882850.7232642
|
|
51966
|
leveler-tool by @Hackerskills | Stardance
|
Hackerskills
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: leveler-tool by @Hackerskills | Stardance
|
1792889477.9783475
|
1793753477.9783475
|
|
62701
|
letter_for_you by @kobyte | Stardance
|
kobyte
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: letter_for_you by @kobyte | Stardance
|
1793656414.8946476
|
1794261214.8946476
|
|
67585
|
lets do smth by @aryamann_reet | Stardance
|
aryamann_reet
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lets do smth by @aryamann_reet | Stardance
|
1793112653.220696
|
1793717453.220696
|
|
57074
|
let's go gambling by @pentaberry | Stardance
|
pentaberry
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: let's go gambling by @pentaberry | Star Title: let's go gambling by @pentaberry | Stardance...
|
1793415109.7699363
|
1794019909.7699363
|
|
70351
|
let me think by @anumodhdevpg | Stardance
|
anumodhdevpg
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: let me think by @anumodhdevpg | Stardance
|
1793620167.3584487
|
1794224967.3584487
|
|
67485
|
lesssfun thing by @sumedhisweird | Stardance
|
sumedhisweird
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lesssfun thing by @sumedhisweird | Stardanc Title: lesssfun thing by @sumedhisweird | Stardance...
|
1793109310.485996
|
1793714110.485996
|
|
8401
|
less go by @janishab1704 | Stardance
|
janishab1704
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: less go by @janishab1704 | Stardance
|
1793141581.7047927
|
1793746381.7047927
|
|
69021
|
lesgu by @Rits | Stardance
|
Rits
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lesgu by @Rits | Stardance
|
1793127371.4664807
|
1793732171.4664807
|
|
36149
|
lego sorting machine hardware by @legolucas | Star lego sorting machine hardware by @legolucas | Stardance...
|
legolucas
|
0
|
7.88
|
0
|
[]
|
[{"post_id": 62350, "ts": "202 [{"post_id": 62350, "ts": "2026-09-05T17:52:36Z", "hours": 1.6503, "text": "hi this is devolg 3 hi today i build the small sized basket with a place to put the image of the brick with titel and i also made rails and a system for multiple basket abbove each other i hope you like it look at the images"}, {"post_id": 62031, "ts": "2026-09-05T07:49:12Z", "hours": 4.7503, "text": "hi guys this is devlog 2 today i finished my c channel that singulates the pieces i am done for now i will make the bulk bucket later but it works now hopefully and is lego competible i am now starting on the lift and distribution system"}, {"post_id": 58756, "ts": "2026-08-31T10:03:28Z", "hours": 1.4833, "text": "hi guys this is devlog one i changed my orginal file so it fits 2x8 bricks with a marge and i made sure all the mesure ments of the lego axel fit ments where right and i scaled everything up etc"}]...
|
Title: lego sorting machine hardware by @legolucas Title: lego sorting machine hardware by @legolucas | Stardance
Devlogs:
hi guys this is devlog one i changed my orginal file so it fits 2x8 bricks with a marge and i made sure all the mesure ments of the lego axel fit ments where right and i scaled everything up etc
hi guys this is devlog 2 today i finished my c channel that singulates the pieces i am done for now i will make the bulk bucket later but it works now hopefully and is lego competible i am now starting on the lift and distribution system
hi this is devolg 3 hi today i build the small sized basket with a place to put the image of the brick with titel and i also made rails and a system for multiple basket abbove each other i hope you like it look at the images...
|
1793350574.2370536
|
1793955374.2370536
|
|
24195
|
lego soda can holder by @gimmebambuprinterplease | lego soda can holder by @gimmebambuprinterplease | Stardance...
|
gimmebambuprinterplease
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: lego soda can holder by @gimmebambuprinterp Title: lego soda can holder by @gimmebambuprinterplease | Stardance...
|
1793357743.9346414
|
1793962543.9346414
|
|
31516
|
lego control system by @kasper | Stardance
|
kasper
|
0
|
1.93
|
0
|
[]
|
[{"post_id": 24744, "ts": "202 [{"post_id": 24744, "ts": "2026-07-08T14:58:15Z", "hours": 1.6, "text": "I looked up some things and upgraded my PCBs that I already made before I found Hack Club. I made an online test now, but I’m waiting to test it because the servers are full, so that will take a while. Next time I’m going to work on the code for the main board, and after that I’m going to start improving the PCBs that I’ve already been working on for 12 hours before I found Hack Club. But they still need to be adjusted now because they don’t match anymore. Just a few small adjustments, and then I’m going to work on the Lego train swap module to build that code and improve it, and eventually turn out those two modules. After that, I want to make a light module for the houses to control them remotely and make them look nice. I also want to make a nice design for the screen so I can clearly see which module is on and at what position the servo is. So that is my plan for the coming weekend, and I’m going to work on this. by building"}, {"post_id": 23737, "ts": "2026-07-06T21:08:37Z", "hours": 0.3333, "text": "I did a bit of research into a few things for the Lego controller to get the screen right."}]...
|
Title: lego control system by @kasper | Stardance
Title: lego control system by @kasper | Stardance
Devlogs:
I did a bit of research into a few things for the Lego controller to get the screen right.
I looked up some things and upgraded my PCBs that I already made before I found Hack Club. I made an online test now, but I’m waiting to test it because the servers are full, so that will take a while. Next time I’m going to work on the code for the main board, and after that I’m going to start improving the PCBs that I’ve already been working on for 12 hours before I found Hack Club. But they still need to be adjusted now because they don’t match anymore. Just a few small adjustments, and then I’m going to work on the Lego train swap module to build that code and improve it, and eventually turn out those two modules. After that, I want to make a light module for the houses to control them remotely and make them look nice. I also want to make a nice design for the screen so I can clearly see which module is on and at what position the servo is. So that is my plan for the coming weekend, and I’m going to work on this. by building...
|
1793440154.4455822
|
1794044954.4455822
|
|
65465
|
legion bot by @MomoMcDonkey | Stardance
|
MomoMcDonkey
|
0
|
0.87
|
0
|
[]
|
[{"post_id": 73581, "ts": "202 [{"post_id": 73581, "ts": "2026-09-25T13:03:17Z", "hours": 0.8667, "text": "working on making my bot hosted locally!"}]...
|
Title: legion bot by @MomoMcDonkey | Stardance
De Title: legion bot by @MomoMcDonkey | Stardance
Devlogs:
working on making my bot hosted locally!...
|
1793087526.4105492
|
1793692326.4105492
|
|
43891
|
legally distinct wario ware by @project516 | Stard legally distinct wario ware by @project516 | Stardance...
|
project516
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: legally distinct wario ware by @project516 Title: legally distinct wario ware by @project516 | Stardance...
|
1793242295.2973356
|
1793847095.2973356
|
|
10947
|
legacytide by @simonproyt | Stardance
|
simonproyt
|
1
|
3.2
|
7
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-07T19:54:49Z", "hours": 2.0, "multiplier": 3.47, "payout": 7, "blessing": "neutral", "text": "I made a tidal client for legacy android devices. It was hard because old android and by extension blackberry 10 do not support modern tls libraries and they need to be backported.", "repo": "https://github.com/simonproyt/legacytide", "demo": "https://user-cdn.hackclub-assets.com/019f2493-4118-7486-9d28-6df0569ba19e/PXL_20260607_154311711%20(1).mp4"}]...
|
[{"post_id": 4948, "ts": "2026 [{"post_id": 4948, "ts": "2026-06-08T16:06:20Z", "hours": 0.9003, "text": "We added a download queue system to the app for better dl management"}, {"post_id": 4522, "ts": "2026-06-07T21:14:29Z", "hours": 0.2953, "text": "I added the queue system now and moved on to adding offline playback support"}, {"post_id": 4465, "ts": "2026-06-07T19:51:49Z", "hours": 1.7022, "text": "We managed to make playback home screen and most of the other stuff hooked up"}, {"post_id": 4191, "ts": "2026-06-07T12:40:45Z", "hours": 0.3592, "text": "I got TLS 1.3 finally working on android 4.3"}]...
|
Title: legacytide by @simonproyt | Stardance
Devl Title: legacytide by @simonproyt | Stardance
Devlogs:
I got TLS 1.3 finally working on android 4.3
We managed to make playback home screen and most of the other stuff hooked up
I added the queue system now and moved on to adding offline playback support
We added a download queue system to the app for better dl management
Ships:
I made a tidal client for legacy android devices. It was hard because old android and by extension blackberry 10 do not support modern tls libraries and they need to be backported....
|
1793616916.2526207
|
1793703316.2526207
|
|
40892
|
legacysignal by @simonproyt | Stardance
|
simonproyt
|
1
|
50.0
|
933
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-22T20:18:52Z", "hours": 50.0, "multiplier": 18.54, "payout": 933, "blessing": "neutral", "text": "So i taught this project was going to be easy like creating the tidal client for legacy devices but like i was so naive and didnt yet understand how hard it is going to be but it was good in the end i think because i learned a lot about the signal protocol encryption and about backporting and how to make legacy android do things that it was never intended to do but the project is still not finished and i have a lot of work ahead if i want make the app feature complete to the normal signal mobile app but i think its a great demo and it was a great learning experience", "repo": "https://github.com/simonproyt/legacysignal", "demo": "https://cdn.hackclub.com/01a02af7-c370-7c8f-b806-6ca92696e8a8/demo.mp4"}]...
|
[{"post_id": 52604, "ts": "202 [{"post_id": 52604, "ts": "2026-08-22T20:11:21Z", "hours": 3.6061, "text": "Devlog 11: Fixing a few bugs and getting the app ready to ship So in this time i havent done a lot of like cool stuff rather i was fixing a few bugs that broke the messaging feature and image attachment loading because i wanted to showcase those in my demo video and i fixed the github action so ppl can download an apk for the latest version if they want to try it out on their own legacy device also sorry for not writing a dev log sooner i was kinda busy but now i finally got the time to get the project into a ready to ship state"}, {"post_id": 49850, "ts": "2026-08-18T20:00:49Z", "hours": 4.1261, "text": "Devlog 10: Finally added image sending/receiving support So the next thing i taught i would add to my app is image sending and receiving support because that is like kinda a basic feature that any messaging app needs so i added image reviving sending images from the phones storage and via taking a picture with the camera adding these was kinda annoying with figuring out all the correct endpoints and stuff but i think it was worth it in the end"}, {"post_id": 48433, "ts": "2026-08-16T19:38:19Z", "hours": 2.5408, "text": "Devlog 9: New features and a bit of an ui overhaul So I decided to make the ui a bit more pretty and a few new features So this is what i added: a new cleaner ui contact profile picture support message time stamping in the ui dark theme and theme switcher with persistence these are just like qol improvements that i decided to add into the app nothing special but like i missed a few features like the dark theme myself so nothing major but i hope these changes makes the app more usable to ppl"}, {"post_id": 46921, "ts": "2026-08-14T13:57:31Z", "hours": 4.015, "text": "Devlog 8 Working name syncing So after a lot of work i finally made it work so it can show the name that you entered on the signal set up or the devices not just the phone numbers or just unknown sender or just the user id on my app so i guess another feature added now but i still want to add a few stuff before shipping"}, {"post_id": 45824, "ts": "2026-08-12T15:33:59Z", "hours": 6.4758, "text": "Devlog 7: Partly finally working message send/receive So after a lot of work i finally managed to get message sending and receiving working with all of their related crypto stuff but its kinda broken because our message sending api does not support sealed sender yet only the old legacy unsealed sender api that does not encrypt the sender data like modern signal does so on all of the replies it says that they came from unknown contact rather then the actual contact so im working on implementing that so the current stage of the project is after 3x hours of development is Whats working: registering onto the signal network via the phone number and the captchas receiving messages Whats not working or only partially working: sending messages (not working fully because the sealed sender stuff that i talked about previously)"}, {"post_id": 44528, "ts": "2026-08-10T10:59:03Z", "hours": 3.4514, "text": "Devlog 6 Discoverability finally works So after a lot of pain and trial and error and using the signal android source code as an some sort of example that how does the protocol work now we have a finally working code and i can finally move onto the message encryption/decryption part and make it work"}, {"post_id": 43257, "ts": "2026-08-08T12:38:55Z", "hours": 3.6764, "text": "Debugging hell pt2 sorry guys i have been on vacation and taking a bit of a break from the project because of it but now its back in active development now but sadly after fixing registration there is another problem my phone with the latest signal client sadly cant find my client says that its not registered some why even tho it successfully registers so im working trying to fix that possibly and make this project work finally"}, {"post_id": 39975, "ts": "2026-08-03T10:03:07Z", "hours": 6.6417, "text": "Devlog 4: Finally working registration So after like 15 hours of continuous work and debugging i can finally now say that the registration and connection to the signal network is finally working now and i can finally move onto actually making the app itself rather then just having to do trial and error debugging with libsignal and the protocol also while i was testing the app i made a working ci pipeline so the app could be actually downloaded by other ppl now that took a few attempts because of the setting up of the rust toolchains stuff and the android ndk setup part having a few bugs but that is working too now"}, {"post_id": 38718, "ts": "2026-08-01T08:23:46Z", "hours": 9.9889, "text": "Devlog 3: Stuck in debuging hell I’m sorry yall that i didnt make any devlogs about this but i taught this was kinda boring and nothing to write about but after last devlog i found out that the my registration api wasnt fully finished and i needed to generate more keys after the user enters the code from the sms and the registration itself starts but for that we needed to use signals cryptography lib called libsignal so i tried that but the latest version of libsignal had a newer type of elf hash that android 4.x didnt support so i tried using an older version of libsignal but that still didnt work cause it used a few instructions that newer android versions introduced so i tried binary patching in the missing instructions but that still didnt work so i decided the only viable solution was to fork libsignal to try to manually backport everything and thats where im stuck now in debugging hell trying to manually backport and replace the api calls that it uses with the older android versions and its been like 9 hours of trying to do this and still nothing so im kinda tired trying to do this but im wishing that i will finally fix everything and could move onto making that actual app itself rather then then trying to make libsignal work Thank you for reading this super long devlog!"}, {"post_id": 36915, "ts": "2026-07-29T09:58:25Z", "hours": 1.3386, "text": "Devlog 2 Polishing the ui and adding more underlying stuff that we will need in the future so So in this we added to two big changes First is the completely reworked set up it to make it a little bit more pretty and polished looking And the other one is its a more of an underlying change but a well needed one because in the previous demos it stored the key pairs in plain text and stuff so that is obviously super dangerous in a secure messaging context so it will now let you encrypt it via a pin you set in the account creation like in the real signal"}, {"post_id": 36867, "ts": "2026-07-29T06:42:19Z", "hours": 4.4753, "text": "First devlog for this new project So i taught that i made tidal for legacy android and it was pretty easy this is going to be easy like that but how naive was i am like getting even the signal sms registration almost took 4 hours of debugging mainly so this is going to be hard but i will try because it will be worth it in the end"}]...
|
Title: legacysignal by @simonproyt | Stardance
De Title: legacysignal by @simonproyt | Stardance
Devlogs:
First devlog for this new project So i taught that i made tidal for legacy android and it was pretty easy this is going to be easy like that but how naive was i am like getting even the signal sms registration almost took 4 hours of debugging mainly so this is going to be hard but i will try because it will be worth it in the end
Devlog 2 Polishing the ui and adding more underlying stuff that we will need in the future so So in this we added to two big changes First is the completely reworked set up it to make it a little bit more pretty and polished looking And the other one is its a more of an underlying change but a well needed one because in the previous demos it stored the key pairs in plain text and stuff so that is obviously super dangerous in a secure messaging context so it will now let you encrypt it via a pin you set in the account creation like in the real signal
Devlog 3: Stuck in debuging hell I’m sorry yall that i didnt make any devlogs about this but i taught this was kinda boring and nothing to write about but after last devlog i found out that the my registration api wasnt fully finished and i needed to generate more keys after the user enters the code from the sms and the registration itself starts but for that we needed to use signals cryptography lib called libsignal so i tried that but the latest version of libsignal had a newer type of elf hash that android 4.x didnt support so i tried using an older version of libsignal but that still didnt work cause it used a few instructions that newer android versions introduced so i tried binary patching in the missing instructions but that still didnt work so i decided the only viable solution was to fork libsignal to try to manually backport everything and thats where im stuck now in debugging hell trying to manually backport and replace the api calls that it uses with the older android versions and its been like 9 hours of trying to do this and still nothing so im kinda tired trying to do this but im wishing that i will finally fix everything and could move onto making that actual app itself rather then then trying to make libsignal work Thank you for reading this super long devlog!
Devlog 4: Finally working registration So after like 15 hours of continuous work and debugging i can finally now say that the registration and connection to the signal network is finally working now and i can finally move onto actually making the app itself rather then just having to do trial and error debugging with libsignal and the protocol also while i was testing the app i made a working ci pipeline so the app could be actually downloaded by other ppl now that took a few attempts because of the setting up of the rust toolchains stuff and the android ndk setup part having a few bugs but that is working too now
Debugging hell pt2 sorry guys i have been on vacation and taking a bit of a break from the project because of it but now its back in active development now but sadly after fixing registration there is another problem my phone with the latest signal client sadly cant find my client says that its not registered some why even tho it successfully registers so im working trying to fix that possibly and make this project work finally
Devlog 6 Discoverability finally works So after a lot of pain and trial and error and using the signal android source code as an some sort of example that how does the protocol work now we have a finally working code and i can finally move onto the message encryption/decryption part and make it work
Devlog 7: Partly finally working message send/receive So after a lot of work i finally managed to get message sending and receiving working with all of their related crypto stuff but its kinda broken because our message sending api does not support sealed sender yet only the old legacy unsealed sender api that does not encrypt the sender data like modern signal does so on all of the replies it says that they came from unknown contact rather then the actual contact so im working on implementing that so the current stage of the project is after 3x hours of development is Whats working: registering onto the signal network via the phone number and the captchas receiving messages Whats not working or only partially working: sending messages (not working fully because the sealed sender stuff that i talked about previously)
Devlog 8 Working name syncing So after a lot of work i finally made it work so it can show the name that you entered on the signal set up or the devices not just the phone numbers or just unknown sender or just the user id on my app so i guess another feature added now but i still want to add a few stuff before shipping
Devlog 9: New features and a bit of an ui overhaul So I decided to make the ui a bit more pretty and a few new features So this is what i added: a new cleaner ui contact profile picture support message time stamping in the ui dark theme and theme switcher with persistence these are just like qol improvements that i decided to add into the app nothing special but like i missed a few features like the dark theme myself so nothing major but i hope these changes makes the app more usable to ppl
Devlog 10: Finally added image sending/receiving support So the next thing i taught i would add to my app is image sending and receiving support because that is like kinda a basic feature that any messaging app needs so i added image reviving sending images from the phones storage and via taking a picture with the camera adding these was kinda annoying with figuring out all the correct endpoints and stuff but i think it was worth it in the end
Devlog 11: Fixing a few bugs and getting the app ready to ship So in this time i havent done a lot of like cool stuff rather i was fixing a few bugs that broke the messaging feature and image attachment loading because i wanted to showcase those in my demo video and i fixed the github action so ppl can download an apk for the latest version if they want to try it out on their own legacy device also sorry for not writing a dev log sooner i was kinda busy but now i finally got the time to get the project into a ready to ship state
Ships:
So i taught this project was going to be easy like creating the tidal client for legacy devices but like i was so naive and didnt yet understand how hard it is going to be but it was good in the end i think because i learned a lot about the signal protocol encryption and about backporting and how to make legacy android do things that it was never intended to do but the project is still not finished and i have a lot of work ahead if i want make the app feature complete to the normal signal mobile app but i think its a great demo and it was a great learning experience...
|
1793620342.1502535
|
1793706742.1502535
|
|
24514
|
leethanaOS by @leethana | Stardance
|
leethana
|
0
|
4.28
|
0
|
[]
|
[{"post_id": 19790, "ts": "202 [{"post_id": 19790, "ts": "2026-07-01T05:31:45Z", "hours": 0.5161, "text": "Added more school stuff"}, {"post_id": 14258, "ts": "2026-06-23T09:02:01Z", "hours": 0.8956, "text": "Added curl command and a proxy server!"}, {"post_id": 14240, "ts": "2026-06-23T07:56:03Z", "hours": 2.865, "text": "Made the file system store file contents as blobs instead of plain text to allow for the storage of multiple data types. Also added the ‘upload’ command which lets the user upload a file from the real file system to the virtual file system. TurtPDF can now open PDFs from the virtual file system too."}]...
|
Title: leethanaOS by @leethana | Stardance
Devlog Title: leethanaOS by @leethana | Stardance
Devlogs:
Made the file system store file contents as blobs instead of plain text to allow for the storage of multiple data types. Also added the ‘upload’ command which lets the user upload a file from the real file system to the virtual file system. TurtPDF can now open PDFs from the virtual file system too.
Added curl command and a proxy server!
Added more school stuff...
|
1793303335.5452929
|
1793908135.5452929
|
|
10177
|
leefyBot by @leefymoon | Stardance
|
leefymoon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: leefyBot by @leefymoon | Stardance
|
1793512498.1069598
|
1794117298.1069598
|
|
10142
|
leefy's personal site by @leefymoon | Stardanc leefy's personal site by @leefymoon | Stardance...
|
leefymoon
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-27T13:51:11Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i continued the making of my personal site! a few challenging things were finding features to add, how to design pages, and what to write blogs on! but through three years of having this site i’ve enjoyed making it. :]", "repo": "https://git.leefymoons-room.net/leefy/leefymoons-room", "demo": "https://leefymoons-room.net"}]...
|
[{"post_id": 35797, "ts": "202 [{"post_id": 35797, "ts": "2026-07-27T13:46:28Z", "hours": 1.1017, "text": "made a readme! go check it out if you so please ^^"}, {"post_id": 3813, "ts": "2026-06-06T21:20:12Z", "hours": 0.4611, "text": "made a new blog post! (after two months lol) https://leefymoons-room.net/blog.html#7"}]...
|
Title: leefy's personal site by @leefymoon | S Title: leefy's personal site by @leefymoon | Stardance
Devlogs:
made a new blog post! (after two months lol) https://leefymoons-room.net/blog.html#7
made a readme! go check it out if you so please ^^
Ships:
i continued the making of my personal site! a few challenging things were finding features to add, how to design pages, and what to write blogs on! but through three years of having this site i’ve enjoyed making it. :]...
|
1793602495.3629391
|
1793688895.3629391
|
|
10065
|
leefy's personal site (with node.js!) by @leef leefy's personal site (with node.js!) by @leefymoon | Stardance...
|
leefymoon
|
0
|
8.44
|
0
|
[]
|
[{"post_id": 13531, "ts": "202 [{"post_id": 13531, "ts": "2026-06-22T04:36:27Z", "hours": 1.2431, "text": "rewrote the blog post to work with the json file! take a look at the code!"}, {"post_id": 13474, "ts": "2026-06-22T02:06:13Z", "hours": 3.3589, "text": "put my blog posts into a json and created the blog page and rss feed using the json! now i need to make a script that formats the date for the rss feed when posting new blogs…"}, {"post_id": 5449, "ts": "2026-06-09T07:25:39Z", "hours": 1.3492, "text": "made a blog post maker! honestly was a ton easier than i thought it would be :]"}, {"post_id": 5421, "ts": "2026-06-09T05:43:33Z", "hours": 0.4078, "text": "phew,, more madness with the date for lastfm scrobbles LOL reworked it so it checks for the now playing property in the json response, but defaults to the date if it doesn’t have it. i don’t know WHY that took me sooooo long 3:"}, {"post_id": 3915, "ts": "2026-06-07T01:01:42Z", "hours": 0.3089, "text": "discovered that if you’re actively scrobbling a track for lastfm then there’s no date! had to fix that one lol"}, {"post_id": 3906, "ts": "2026-06-07T00:41:42Z", "hours": 0.3, "text": "tweaked the design of the what’s new section ^^ (might add this change to my actual site)"}, {"post_id": 3784, "ts": "2026-06-06T20:47:01Z", "hours": 0.4883, "text": "widget is done AND styled yay!!! time for a gaming break :3"}, {"post_id": 3745, "ts": "2026-06-06T19:50:38Z", "hours": 0.585, "text": "widget is made!! time to style it :3"}, {"post_id": 3699, "ts": "2026-06-06T19:09:50Z", "hours": 0.3986, "text": "currently making a new widget to show my most recent track on last.fm… (ignore most of the code, stole it from my other lastfm script lol)"}]...
|
Title: leefy's personal site (with node.js!) b Title: leefy's personal site (with node.js!) by @leefymoon | Stardance
Devlogs:
currently making a new widget to show my most recent track on last.fm… (ignore most of the code, stole it from my other lastfm script lol)
widget is made!! time to style it :3
widget is done AND styled yay!!! time for a gaming break :3
tweaked the design of the what’s new section ^^ (might add this change to my actual site)
discovered that if you’re actively scrobbling a track for lastfm then there’s no date! had to fix that one lol
phew,, more madness with the date for lastfm scrobbles LOL reworked it so it checks for the now playing property in the json response, but defaults to the date if it doesn’t have it. i don’t know WHY that took me sooooo long 3:
made a blog post maker! honestly was a ton easier than i thought it would be :]
put my blog posts into a json and created the blog page and rss feed using the json! now i need to make a script that formats the date for the rss feed when posting new blogs…
rewrote the blog post to work with the json file! take a look at the code!...
|
1793443987.6542282
|
1794048787.6542282
|
|
42007
|
ledkapetka by @natalka | Stardance
|
natalka
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ledkapetka by @natalka | Stardance
|
1793159595.2132227
|
1793764395.2132227
|
|
68570
|
led matrix joinable by @gagaruk | Stardance
|
gagaruk
|
0
|
7.37
|
0
|
[]
|
[{"post_id": 82232, "ts": "202 [{"post_id": 82232, "ts": "2026-10-24T10:57:37Z", "hours": 7.3739, "text": "A led matrix Devlog 1: *choosing parts ^designing the circuit ~parts wont fit on the pcb I wanted to build this from scratch so instead of using a driver board I’m using 8 shift-registers linked together. The first one gets the input from a buffer to keep the input from degrading. I didn’t use any transistors arrays because i thought 5mA for a single led would be enough. So the parts are as follows: 8x 74HC595 1x 74HC244 64x 5mm LED(standard THT) 64x 560 ohm THT resistors (1/8W) 9x 10nf decopling caps (ceramic) 32x 10k THT resistors pull-__ (1/8W) ^The circuit desing was relatively easy. I just connected the components on kicad editor. But first time using it so there are some naming issues and the whole circuit doesn’t quite fit on the A4. Footprints were from the standard library. ~ Currently designing the pcb (at least trying to). I’m having problems trying to align every single component by hand since there is a lot of them. And I wasn’t able to fit the buffer on the size I wanted the pcb to be. (I can always put it vertically thought). Even then I want to have a common potential plane witht the 5V on the side of the LEDs but after putting all the components there doesnt look like it will have much effect. Other than the main power lines carrying 5V at 2.8A looks hard to fit ( if its even possible). So I might go for 2 seperate pcbs."}]...
|
Title: led matrix joinable by @gagaruk | Stardance Title: led matrix joinable by @gagaruk | Stardance
Devlogs:
A led matrix Devlog 1: *choosing parts ^designing the circuit ~parts wont fit on the pcb I wanted to build this from scratch so instead of using a driver board I’m using 8 shift-registers linked together. The first one gets the input from a buffer to keep the input from degrading. I didn’t use any transistors arrays because i thought 5mA for a single led would be enough. So the parts are as follows: 8x 74HC595 1x 74HC244 64x 5mm LED(standard THT) 64x 560 ohm THT resistors (1/8W) 9x 10nf decopling caps (ceramic) 32x 10k THT resistors pull-__ (1/8W) ^The circuit desing was relatively easy. I just connected the components on kicad editor. But first time using it so there are some naming issues and the whole circuit doesn’t quite fit on the A4. Footprints were from the standard library. ~ Currently designing the pcb (at least trying to). I’m having problems trying to align every single component by hand since there is a lot of them. And I wasn’t able to fit the buffer on the size I wanted the pcb to be. (I can always put it vertically thought). Even then I want to have a common potential plane witht the 5V on the side of the LEDs but after putting all the components there doesnt look like it will have much effect. Other than the main power lines carrying 5V at 2.8A looks hard to fit ( if its even possible). So I might go for 2 seperate pcbs....
|
1793123403.8701365
|
1793728203.8701365
|
|
44345
|
learnova-v2 by @ranveergill | Stardance
|
ranveergill
|
2
|
27.0
|
259
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-09T04:12:17Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "active recall is usually regraded as one of the best study methods of all time, and here you can practice it indefinitely! also, if you believe that your a better debater than ai/someone you know, you can challenge that here too! live at learnova.software :)", "repo": "https://github.com/ranveerlabs/learnova-v2", "demo": "https://www.learnova.software/"}, {"ship_num": 2, "ts": "2026-08-24T09:26:40Z", "hours": 19.0, "multiplier": 13.46, "payout": 259, "blessing": "neutral", "text": "Are you smarter than AI, your friends, or alone? Learnova is a study tool that only counts it as learned once you can say it back with no help. Multiple choice, then fill in the blank, then rebuild the explanation from pieces, then explain it cold, in your own words, with nothing to lean on. Most study tools stop testing you the moment you can recognize the right answer. This one starts there. The new part is who you’re up against. Debate Mode puts you against an AI opponent that argues the other side of whatever you just explained, four speeches, then a real judge call scores who actually held their ground. Or skip the AI and go against a friend instead, live, same format, one shared link, no accounts. The room exists the moment two people are in it and nothing else. Built this week: live 1v1 debate, real time, no database, a room is just two people and a shared connection. Rewrote how the grading talks to you, since a screen that quietly claims you contradicted a source that was never there does real damage to someone trying to learn. Killed the rating system twice over, first for hiding how different a study run and a debate round actually are, then for existing at all when neither needed to accumulate into a score. Rebuilt the whole color palette off the actual logo instead of picking colors that looked fine. None of it is graded on vibes. The AI opponent isn’t told to be nice or mean, it’s told to actually argue, and the judge is a second, separate model call that never sees what the first one said about itself. The score is out of ten, not a made up elo number a language model invented on the spot, because a model asked to do arithmetic will hand you a plausible number whether or not the arithmetic happened. Live at learnova.software. Open source. Built with Claude Code, over about five weeks of actual work, dates and all in the README because a repo that predates its own hackathon submission should say so plainly. Try it against yourself first. Then a friend. Then, if you’re feeling something, the AI.", "repo": "https://github.com/ranveerlabs/learnova-v2", "demo": "https://www.learnova.software/"}]...
|
[{"post_id": 77995, "ts": "202 [{"post_id": 77995, "ts": "2026-10-09T04:10:10Z", "hours": 3.2511, "text": "no idea how i have this unlogged time lol"}, {"post_id": 63383, "ts": "2026-09-07T05:35:06Z", "hours": 0.5103, "text": "trimmed it down and tried to remove anything that could be potentially flagged as ai. i kinda think it looks better now, anyways running out of devlog content haha"}, {"post_id": 61640, "ts": "2026-09-04T17:09:45Z", "hours": 0.5211, "text": "recent rejection said round mode doesnt work i think it might have just been in an api rate limit thing as i wasnt able to find anything proving thats actually true"}, {"post_id": 60528, "ts": "2026-09-02T22:30:58Z", "hours": 0.2811, "text": "idk why i keep getting rejected for ai use my last rejection literally said “emojis in readme convey ai use”, ive never had any emojis in the readme ever. anyways devlogging cuz i wanna claim my 16 mins of skimming docs"}, {"post_id": 60017, "ts": "2026-09-02T03:38:18Z", "hours": 0.3928, "text": "claiming 23 minutes"}, {"post_id": 59412, "ts": "2026-09-01T07:12:15Z", "hours": 3.0644, "text": "everything is a window now whole app reskinned. every screen sits in a title bar and a paper body on a dark desktop, hard borders, no rounded corner left anywhere, 71 of those came out the token swap broke the landing immediately. –ink went #101010, –ground went #2b2b2b, and the headline sits straight on the ground, so LEARNOVA was black on near-black. wrapping screens in a window fixed it. i would have shipped that on the arithmetic two bugs turned out to be the same shape. the notes sheet had tape, punch holes and a pencil at -right-7, all deliberately outside the container, which nobody notices until a screen has a border. and the timer was a conic-gradient ring with a bg-ground disc punched out to make its hole, so once bg-ground became the desktop it drew a dark circle on a white toolbar /feed shipped. no CI on this repo, check-runs returns total_count: 0, so the build half is the deployments api. unauthenticated github is 60 an hour per ip and that ip is the whole deployment, so the answer sits on globalThis for 60 seconds the palette went round the houses. the title bar started as the blue off the reference screenshot, the only colour in the app from outside its own set, then charcoal which read as the old learnova, then mint, then cream warmed toward the star’s gold. i said the blue was gone twice before it actually was, cuz the first pass only moved the title bar and –accent-wash is what paints ::selection worst near miss: computeRoute(“/debate/live/QBTR”, {code:“QBTR”}) came back unmasked and i had most of a paragraph written abt room codes leaking to analytics. turnValueToRegExp wasnt in scope, so it hit the function’s own catch and handed the input straight back. with the helper in scope its /debate/live/[code] still emulated chrome on one machine. analytics loads but has never reported, that only happens off a deploy"}, {"post_id": 53640, "ts": "2026-08-24T09:20:45Z", "hours": 5.425, "text": "live rooms, and the rating that stopped existing live 1v1 debate shipped. two people, a four character code, no accounts the real decision was what a room even is. serverless functions dont share memory between instances, so a Map tracking whether a room exists lies abt half the time. host creates it on one instance, the guest’s join lands on another, and the guest gets told the room doesnt exist while the host is sat inside it. so nothing tracks existence any more. presence on an ably channel is the room two bugs that only turned up by testing it properly only the host’s browser calls the judge, so the ballot came back written entirely from the host’s side. both players read the host’s strengths and the host’s weaknesses in the second person. the judge writes both ballots now and mirror swaps them for the guest and a room was ending when the first person left instead of the last, which threw out whoever had stayed this reverses the last log, twice both elo modules got deleted. one number going up and down implies a round mode run and a debate round measure the same thing, and they dont. it became a plain record instead then the record got deleted too. a debate ends on its verdict and nothing counts up across rounds results were showing +1,380 of 2,280, a division you have to do in your head at the exact moment you want one answer. its a score out of ten now. anything above ten written by an older build gets dropped rather than converted, cuz converting needs a denominator that was never stored cut suggestion chips, which turned “name a topic” into “pick one of these”. three motions that typewrote themselves onto the debate note for no functional reason. /proof, which was a third way into a landing page arguing there are two. thirteen exported symbols nothing was calling and the “get the ballot” button. the eighth speech lands and the round goes to the judge on its own palette rebuilt off the logo. the dark ground is sampled straight out of the asset, and every neutral swapped for the grey at the same relative luminance, so the contrast ratios that were already tuned still hold. type warmed to the logo’s cream and the accent became the star’s gold two prompt bugs the voice instructions were teaching third person inside their own example. and the ballot voice used bare letters A and B, which now and then came out as “a flaw in A’s hanging out point” worst near miss of the session: the case insensitive fix for the letter A also matched the article “a”, and shipped “with they cheaper alternative” thru a live judge call before anybody caught it separate one, numbered lists were coming out as a single run-on line. fixed, and property tested against 200 random chunkings copy the unavailable message used to claim nothing youd typed had been lost, which this app has no way of knowing bigger one. every ai call was failing with a raw HTTP 402 on a student’s screen, telling them to retry something that was never going to work, cuz the shared key had run out of balance. it says plainly that retrying wont fix it now readme the status section had gone stale before, so it got corrected twice this session first pass: a full eight speech live debate across two real browsers, 1.6s to join, each speech reaching the other window in 423 to 1039ms, and a 15.2 second wait before a disconnect gets noticed, written down as measured rather than rounded down. the judge was stubbed that pass, the key had no balance second pass, once the key refilled: two real judge calls, two genuinely different ballots, no stray letters still open: a judge call made from inside a live room and mirrored to the guest has only ever been checked against a stub"}, {"post_id": 48684, "ts": "2026-08-17T06:00:05Z", "hours": 5.7667, "text": "debate mode, and the source that wasnt there biggest thing this session is a second mode. round mode’s ladder tops out at saying something in your own words. debate wants something else out of you, holding a position for four speeches while an opponent tries to take it off you. own route, rather than bolting a sixth round on the end the rating is arithmetic the judge hands back a winner, a margin and ten dimension scores. the elo change gets worked out from those in integer maths the model never sees. ask a model to update an elo directly and you get a number that looks like arithmetic, and you cant catch it going wrong cuz every value it gives you is plausible two tabs and they never mix. open debate is judged on whether the argument holds up. tournament prep gets judged against a tournament bar, where a dropped argument is conceded and 60 means mediocre rather than good for a beginner. format is required and never defaulted, a Public Forum ballot handed to somebody practising Lincoln-Douglas is worse than no ballot cuz theyll act on it tritoflex somebody ran a topic-only session on Tritoflex, a spray-on rubber roofing compound, and got told over and over that it was torch-applied. he caught it cuz he installs the stuff. anybody studying something new wouldnt have ask the model cold abt an obscure term and it comes back with a protein, an alpha helix, signal transduction, implicated in cancer. none of it true, none of it reading as invented, and it never once says it doesnt know the worst bit wasnt a missing disclaimer. on a topic-only round 4 the marking screen printed “Contradicts the source” under a heading reading “The notes”, in a session where the student pasted nothing and the server blanks every citation on the way out anyway. so somebody who wrote a true sentence got told they contradicted evidence that had never existed. it says “the model disagrees” now the header badge went from “AI-generated” to “AI, unchecked”. they typed the topic in themselves so they already know who wrote it. what they have no way to know is that nothing checked it. “AI” stays in the label cuz it outlives the moment, screenshots get shared and come back a week later runs leave something behind they used to die with the tab. honest enough abt the plumbing. but retrieval practice does its work thru spacing, and meeting a concept once, failing to explain it and never seeing it again is the half that only feels like studying the session already worked out the thing worth keeping, a map of which ideas you can recognise but cant say. computed it, showed it once, threw it away on the walk to the results. one standing per concept sticks around now and the front door leads with whats still unsaid the tests that tested nothing my first two boundary assertions both passed against the exact bugs they were written for. one compared trimmed pieces, and trimming erases the evidence, so it cant tell a mid-word cut from a clean one. the other ran on a sample that had collapsed to a single chunk, so there was no join left in it to get wrong only found out bcuz i reverted the fix to watch them fail and they sat there green status the green “strong” band is verified, which closes the open item from the last log. seen in a browser by somebody who knew the answers, rather than by a driver answering option 1 every time readme the privacy section had gone from cautious to false. “nothing is stored beyond the current session” stopped being true the moment runs started leaving a record behind. thats twice a claim in there has drifted while the product moved under it, so anything that stores something now drags a readme check into the same commit still no accounts. standings are per device and clearing site data wipes them"}, {"post_id": 43181, "ts": "2026-08-08T09:29:30Z", "hours": 4.9756, "text": "deleting the score biggest change this session was taking things out. round mode had points, a running total and a combo multiplier. all three gone!!! the argument lowk fell out as soon as i said it aloud. the number at the top of the results was the run time, and the quickest way thru a round is to answer everything wrong immediately. so the headline figure was paying you for the one behaviour the app exists to catch. points and combos were the same information twice over, worked out from how fast and how often you were right, then shown next to how fast and how often you were right whats there instead weights every answer by how little help it had. warm up counts once, round 1 three times, round 2 five, round 3 six, and saying a concept in your own words in round 4 is worth 150. speed isnt in the formula anywhere and two tests hold that down: the same answers given at wildly different speeds come out identical, and fast-and-wrong lands below slow-and-right it reads +615 of 2,120. a bare number says nothing when a short session and a long one have different ceilings round 3 the chip tray used to have wrong words mixed in, so the round was a hunt for what to avoid. now it holds the sentence’s own pieces and nothing else grading stopped being fussy abt list order. seven tests, four of them cases that still have to fail: “sugar traps light” for “light traps sugar”, a scrambled non-list, a missing chip, a changed verb round 4 cant be skipped any more. there was a “stop here and see the results” button sitting right in front of the only moment in the session with nothing on screen to lean on, which is where bailing is most tempting the interface stopped hiding the header used to empty itself during a round, on the theory that chrome at the edges competes with retrieval. thats true for one person at a desk. round mode gets passed round a room with several people reading one screen, so it stays up now locking the page to the viewport turned up two bugs. one of them clipped the verdict off the bottom on a short window, and the verdict is the line that tells you the answer the run clock was a nice one. it measured wall clock from the start of the run, so it counted loading and the between-round screens, and it disagreed with the time the results reported. header said 3:20 against a reported 1:08. built off the same splits the results use now the cold open prompt trimmed it after noticing it asked the model to write explanation lines nobody reads. a/b against the real proxy over 10 topics took median completion tokens from 397 to 266, abt 33%, on the one call every student sits and waits for setTimeout i overrode it in the harness to freeze auto-advance long enough to screenshot a verdict, and it swallowed the harness’s own sleeps. script hung and i captured the wrong state. keep a reference to the real function before you replace it status the assembled round is verified, which closes the open item from the last log. full ladder played end to end, in dev and against a production build"}, {"post_id": 41804, "ts": "2026-08-06T07:19:45Z", "hours": 3.1092, "text": "round mode, inspo is hackclub mail!!!! you type a topic and start guessing. five rounds, each one takes away more of the help: two options, four options, a sentence with the word missing, the same sentence in pieces you have to put back together, then nothing on screen at all and you just say it. the ladder runs recognise -> produce bcuz thats the direction the research points, retrieval beats rereading and producing beats picking anyway that part was already built. today was worse the scores were fake correct answers kept turning up in the first slot. felt wrong, so i wrote a script that generates questions thru the real route and counts where the answer actually lands warm up came back 5 of 5 at index 0. round 1 was 7 / 5 / 3 / 0 which means every score this app has ever shown anybody was inflated. you could do well without reading the question it was my own prompt doing it. every JSON example i handed the model had “answerIndex”: 0 sitting in it, so of course it learned that. placement happens on the server after generation now, for every format with ordered options, and that includes the chip tray, which had been shuffling in the browser where nothing could measure it 197 questions across four topics. chi-square under the 5% critical value on every format repeated questions are gone too. the dedupe compares what a question asks for rather than how its worded, so a rephrasing doesnt sneak past. when a topic runs dry the generator gets told to ask abt distinctions and consequences instead of drawing from the same pool twice three things a diff would never show drove headless chrome over all 21 presentations, cuz none of this is visible in code constellation’s stars stacked into a column. tailwind emits .relative after .absolute, and Pick set relative, so it beat the absolute that was being passed in doors swung 72 degrees, which turns the correct answer edge on at the exact moment you need to read it and a burst balloon faded to 0.25 opacity. so a wrong answer got softened by becoming unreadable. that one still bugs me, the marking is the one part that has to stay honest and it was quietly making the bad news harder to look at audio the generated pad sounded like fan noise. gone. its “8bit Dungeon Level” by Kevin MacLeod now, CC BY 4.0, credited in the app and in the repo on by default, the feel is half of why the mode works, and theres a mute for anyone sitting in a library autoplay turned into its own afternoon. no browser lets a page make noise before you touch it, so the track asks to play on mount, the rejection arms a listener, and your first click or keypress is what starts it testing that turned up a bug i had already talked myself out of. react batches state, so if the first thing you touched was the mute button, the listener fired while the value still read on, started the track, then paused it a frame later. a blip of music played at exactly the person switching it off. set synchronously now Two things from the test rig mattered more than the thing it was testing. element.click() doesnt grant user activation in chrome, so my first run looked like the whole feature was broken and was just the harness lying to me. and running chrome with a permissive autoplay flag meant the gesture fallback never fired once, so i was measuring nothing at all not done nobody has played the full ladder in a real browser yet. the presentations render, thats genuinely all i know. tomorrow"}]...
|
Title: learnova-v2 by @ranveergill | Stardance
De Title: learnova-v2 by @ranveergill | Stardance
Devlogs:
round mode, inspo is hackclub mail!!!! you type a topic and start guessing. five rounds, each one takes away more of the help: two options, four options, a sentence with the word missing, the same sentence in pieces you have to put back together, then nothing on screen at all and you just say it. the ladder runs recognise -> produce bcuz thats the direction the research points, retrieval beats rereading and producing beats picking anyway that part was already built. today was worse the scores were fake correct answers kept turning up in the first slot. felt wrong, so i wrote a script that generates questions thru the real route and counts where the answer actually lands warm up came back 5 of 5 at index 0. round 1 was 7 / 5 / 3 / 0 which means every score this app has ever shown anybody was inflated. you could do well without reading the question it was my own prompt doing it. every JSON example i handed the model had “answerIndex”: 0 sitting in it, so of course it learned that. placement happens on the server after generation now, for every format with ordered options, and that includes the chip tray, which had been shuffling in the browser where nothing could measure it 197 questions across four topics. chi-square under the 5% critical value on every format repeated questions are gone too. the dedupe compares what a question asks for rather than how its worded, so a rephrasing doesnt sneak past. when a topic runs dry the generator gets told to ask abt distinctions and consequences instead of drawing from the same pool twice three things a diff would never show drove headless chrome over all 21 presentations, cuz none of this is visible in code constellation’s stars stacked into a column. tailwind emits .relative after .absolute, and Pick set relative, so it beat the absolute that was being passed in doors swung 72 degrees, which turns the correct answer edge on at the exact moment you need to read it and a burst balloon faded to 0.25 opacity. so a wrong answer got softened by becoming unreadable. that one still bugs me, the marking is the one part that has to stay honest and it was quietly making the bad news harder to look at audio the generated pad sounded like fan noise. gone. its “8bit Dungeon Level” by Kevin MacLeod now, CC BY 4.0, credited in the app and in the repo on by default, the feel is half of why the mode works, and theres a mute for anyone sitting in a library autoplay turned into its own afternoon. no browser lets a page make noise before you touch it, so the track asks to play on mount, the rejection arms a listener, and your first click or keypress is what starts it testing that turned up a bug i had already talked myself out of. react batches state, so if the first thing you touched was the mute button, the listener fired while the value still read on, started the track, then paused it a frame later. a blip of music played at exactly the person switching it off. set synchronously now Two things from the test rig mattered more than the thing it was testing. element.click() doesnt grant user activation in chrome, so my first run looked like the whole feature was broken and was just the harness lying to me. and running chrome with a permissive autoplay flag meant the gesture fallback never fired once, so i was measuring nothing at all not done nobody has played the full ladder in a real browser yet. the presentations render, thats genuinely all i know. tomorrow
deleting the score biggest change this session was taking things out. round mode had points, a running total and a combo multiplier. all three gone!!! the argument lowk fell out as soon as i said it aloud. the number at the top of the results was the run time, and the quickest way thru a round is to answer everything wrong immediately. so the headline figure was paying you for the one behaviour the app exists to catch. points and combos were the same information twice over, worked out from how fast and how often you were right, then shown next to how fast and how often you were right whats there instead weights every answer by how little help it had. warm up counts once, round 1 three times, round 2 five, round 3 six, and saying a concept in your own words in round 4 is worth 150. speed isnt in the formula anywhere and two tests hold that down: the same answers given at wildly different speeds come out identical, and fast-and-wrong lands below slow-and-right it reads +615 of 2,120. a bare number says nothing when a short session and a long one have different ceilings round 3 the chip tray used to have wrong words mixed in, so the round was a hunt for what to avoid. now it holds the sentence’s own pieces and nothing else grading stopped being fussy abt list order. seven tests, four of them cases that still have to fail: “sugar traps light” for “light traps sugar”, a scrambled non-list, a missing chip, a changed verb round 4 cant be skipped any more. there was a “stop here and see the results” button sitting right in front of the only moment in the session with nothing on screen to lean on, which is where bailing is most tempting the interface stopped hiding the header used to empty itself during a round, on the theory that chrome at the edges competes with retrieval. thats true for one person at a desk. round mode gets passed round a room with several people reading one screen, so it stays up now locking the page to the viewport turned up two bugs. one of them clipped the verdict off the bottom on a short window, and the verdict is the line that tells you the answer the run clock was a nice one. it measured wall clock from the start of the run, so it counted loading and the between-round screens, and it disagreed with the time the results reported. header said 3:20 against a reported 1:08. built off the same splits the results use now the cold open prompt trimmed it after noticing it asked the model to write explanation lines nobody reads. a/b against the real proxy over 10 topics took median completion tokens from 397 to 266, abt 33%, on the one call every student sits and waits for setTimeout i overrode it in the harness to freeze auto-advance long enough to screenshot a verdict, and it swallowed the harness’s own sleeps. script hung and i captured the wrong state. keep a reference to the real function before you replace it status the assembled round is verified, which closes the open item from the last log. full ladder played end to end, in dev and against a production build
debate mode, and the source that wasnt there biggest thing this session is a second mode. round mode’s ladder tops out at saying something in your own words. debate wants something else out of you, holding a position for four speeches while an opponent tries to take it off you. own route, rather than bolting a sixth round on the end the rating is arithmetic the judge hands back a winner, a margin and ten dimension scores. the elo change gets worked out from those in integer maths the model never sees. ask a model to update an elo directly and you get a number that looks like arithmetic, and you cant catch it going wrong cuz every value it gives you is plausible two tabs and they never mix. open debate is judged on whether the argument holds up. tournament prep gets judged against a tournament bar, where a dropped argument is conceded and 60 means mediocre rather than good for a beginner. format is required and never defaulted, a Public Forum ballot handed to somebody practising Lincoln-Douglas is worse than no ballot cuz theyll act on it tritoflex somebody ran a topic-only session on Tritoflex, a spray-on rubber roofing compound, and got told over and over that it was torch-applied. he caught it cuz he installs the stuff. anybody studying something new wouldnt have ask the model cold abt an obscure term and it comes back with a protein, an alpha helix, signal transduction, implicated in cancer. none of it true, none of it reading as invented, and it never once says it doesnt know the worst bit wasnt a missing disclaimer. on a topic-only round 4 the marking screen printed “Contradicts the source” under a heading reading “The notes”, in a session where the student pasted nothing and the server blanks every citation on the way out anyway. so somebody who wrote a true sentence got told they contradicted evidence that had never existed. it says “the model disagrees” now the header badge went from “AI-generated” to “AI, unchecked”. they typed the topic in themselves so they already know who wrote it. what they have no way to know is that nothing checked it. “AI” stays in the label cuz it outlives the moment, screenshots get shared and come back a week later runs leave something behind they used to die with the tab. honest enough abt the plumbing. but retrieval practice does its work thru spacing, and meeting a concept once, failing to explain it and never seeing it again is the half that only feels like studying the session already worked out the thing worth keeping, a map of which ideas you can recognise but cant say. computed it, showed it once, threw it away on the walk to the results. one standing per concept sticks around now and the front door leads with whats still unsaid the tests that tested nothing my first two boundary assertions both passed against the exact bugs they were written for. one compared trimmed pieces, and trimming erases the evidence, so it cant tell a mid-word cut from a clean one. the other ran on a sample that had collapsed to a single chunk, so there was no join left in it to get wrong only found out bcuz i reverted the fix to watch them fail and they sat there green status the green “strong” band is verified, which closes the open item from the last log. seen in a browser by somebody who knew the answers, rather than by a driver answering option 1 every time readme the privacy section had gone from cautious to false. “nothing is stored beyond the current session” stopped being true the moment runs started leaving a record behind. thats twice a claim in there has drifted while the product moved under it, so anything that stores something now drags a readme check into the same commit still no accounts. standings are per device and clearing site data wipes them
live rooms, and the rating that stopped existing live 1v1 debate shipped. two people, a four character code, no accounts the real decision was what a room even is. serverless functions dont share memory between instances, so a Map tracking whether a room exists lies abt half the time. host creates it on one instance, the guest’s join lands on another, and the guest gets told the room doesnt exist while the host is sat inside it. so nothing tracks existence any more. presence on an ably channel is the room two bugs that only turned up by testing it properly only the host’s browser calls the judge, so the ballot came back written entirely from the host’s side. both players read the host’s strengths and the host’s weaknesses in the second person. the judge writes both ballots now and mirror swaps them for the guest and a room was ending when the first person left instead of the last, which threw out whoever had stayed this reverses the last log, twice both elo modules got deleted. one number going up and down implies a round mode run and a debate round measure the same thing, and they dont. it became a plain record instead then the record got deleted too. a debate ends on its verdict and nothing counts up across rounds results were showing +1,380 of 2,280, a division you have to do in your head at the exact moment you want one answer. its a score out of ten now. anything above ten written by an older build gets dropped rather than converted, cuz converting needs a denominator that was never stored cut suggestion chips, which turned “name a topic” into “pick one of these”. three motions that typewrote themselves onto the debate note for no functional reason. /proof, which was a third way into a landing page arguing there are two. thirteen exported symbols nothing was calling and the “get the ballot” button. the eighth speech lands and the round goes to the judge on its own palette rebuilt off the logo. the dark ground is sampled straight out of the asset, and every neutral swapped for the grey at the same relative luminance, so the contrast ratios that were already tuned still hold. type warmed to the logo’s cream and the accent became the star’s gold two prompt bugs the voice instructions were teaching third person inside their own example. and the ballot voice used bare letters A and B, which now and then came out as “a flaw in A’s hanging out point” worst near miss of the session: the case insensitive fix for the letter A also matched the article “a”, and shipped “with they cheaper alternative” thru a live judge call before anybody caught it separate one, numbered lists were coming out as a single run-on line. fixed, and property tested against 200 random chunkings copy the unavailable message used to claim nothing youd typed had been lost, which this app has no way of knowing bigger one. every ai call was failing with a raw HTTP 402 on a student’s screen, telling them to retry something that was never going to work, cuz the shared key had run out of balance. it says plainly that retrying wont fix it now readme the status section had gone stale before, so it got corrected twice this session first pass: a full eight speech live debate across two real browsers, 1.6s to join, each speech reaching the other window in 423 to 1039ms, and a 15.2 second wait before a disconnect gets noticed, written down as measured rather than rounded down. the judge was stubbed that pass, the key had no balance second pass, once the key refilled: two real judge calls, two genuinely different ballots, no stray letters still open: a judge call made from inside a live room and mirrored to the guest has only ever been checked against a stub
everything is a window now whole app reskinned. every screen sits in a title bar and a paper body on a dark desktop, hard borders, no rounded corner left anywhere, 71 of those came out the token swap broke the landing immediately. –ink went #101010, –ground went #2b2b2b, and the headline sits straight on the ground, so LEARNOVA was black on near-black. wrapping screens in a window fixed it. i would have shipped that on the arithmetic two bugs turned out to be the same shape. the notes sheet had tape, punch holes and a pencil at -right-7, all deliberately outside the container, which nobody notices until a screen has a border. and the timer was a conic-gradient ring with a bg-ground disc punched out to make its hole, so once bg-ground became the desktop it drew a dark circle on a white toolbar /feed shipped. no CI on this repo, check-runs returns total_count: 0, so the build half is the deployments api. unauthenticated github is 60 an hour per ip and that ip is the whole deployment, so the answer sits on globalThis for 60 seconds the palette went round the houses. the title bar started as the blue off the reference screenshot, the only colour in the app from outside its own set, then charcoal which read as the old learnova, then mint, then cream warmed toward the star’s gold. i said the blue was gone twice before it actually was, cuz the first pass only moved the title bar and –accent-wash is what paints ::selection worst near miss: computeRoute(“/debate/live/QBTR”, {code:“QBTR”}) came back unmasked and i had most of a paragraph written abt room codes leaking to analytics. turnValueToRegExp wasnt in scope, so it hit the function’s own catch and handed the input straight back. with the helper in scope its /debate/live/[code] still emulated chrome on one machine. analytics loads but has never reported, that only happens off a deploy
claiming 23 minutes
idk why i keep getting rejected for ai use my last rejection literally said “emojis in readme convey ai use”, ive never had any emojis in the readme ever. anyways devlogging cuz i wanna claim my 16 mins of skimming docs
recent rejection said round mode doesnt work i think it might have just been in an api rate limit thing as i wasnt able to find anything proving thats actually true
trimmed it down and tried to remove anything that could be potentially flagged as ai. i kinda think it looks better now, anyways running out of devlog content haha
no idea how i have this unlogged time lol
Ships:
Are you smarter than AI, your friends, or alone? Learnova is a study tool that only counts it as learned once you can say it back with no help. Multiple choice, then fill in the blank, then rebuild the explanation from pieces, then explain it cold, in your own words, with nothing to lean on. Most study tools stop testing you the moment you can recognize the right answer. This one starts there. The new part is who you’re up against. Debate Mode puts you against an AI opponent that argues the other side of whatever you just explained, four speeches, then a real judge call scores who actually held their ground. Or skip the AI and go against a friend instead, live, same format, one shared link, no accounts. The room exists the moment two people are in it and nothing else. Built this week: live 1v1 debate, real time, no database, a room is just two people and a shared connection. Rewrote how the grading talks to you, since a screen that quietly claims you contradicted a source that was never there does real damage to someone trying to learn. Killed the rating system twice over, first for hiding how different a study run and a debate round actually are, then for existing at all when neither needed to accumulate into a score. Rebuilt the whole color palette off the actual logo instead of picking colors that looked fine. None of it is graded on vibes. The AI opponent isn’t told to be nice or mean, it’s told to actually argue, and the judge is a second, separate model call that never sees what the first one said about itself. The score is out of ten, not a made up elo number a language model invented on the spot, because a model asked to do arithmetic will hand you a plausible number whether or not the arithmetic happened. Live at learnova.software. Open source. Built with Claude Code, over about five weeks of actual work, dates and all in the README because a repo that predates its own hackathon submission should say so plainly. Try it against yourself first. Then a friend. Then, if you’re feeling something, the AI.
active recall is usually regraded as one of the best study methods of all time, and here you can practice it indefinitely! also, if you believe that your a better debater than ai/someone you know, you can challenge that here too! live at learnova.software :)...
|
1793598699.647689
|
1793685099.647689
|
|
62769
|
learnivia by @shouryasharan27 | Stardance
|
shouryasharan27
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-16T13:30:36Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "It’s a browser-based vocab trainer with a few game modes that force you to engage with words instead of just passively reading them", "repo": "https://github.com/shouryasharan7-netizen/sat-vocab-game", "demo": "https://www.satvocab.xyz"}]...
|
[{"post_id": 69134, "ts": "202 [{"post_id": 69134, "ts": "2026-09-16T13:27:52Z", "hours": 3.5114, "text": "a look at the interface"}]...
|
Title: learnivia by @shouryasharan27 | Stardance
Title: learnivia by @shouryasharan27 | Stardance
Devlogs:
a look at the interface
Ships:
It’s a browser-based vocab trainer with a few game modes that force you to engage with words instead of just passively reading them...
|
1793685069.606787
|
1793771469.606787
|
|
23461
|
learning trumpet fingerings by @Dasher2801 | Stard learning trumpet fingerings by @Dasher2801 | Stardance...
|
|
1
|
6.0
|
23
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T17:51:45Z", "hours": 6.0, "multiplier": 4.1, "payout": 23, "blessing": "neutral", "text": "Master Trumpet Fingerings: The Interactive Trainer This minimalist web app is the perfect digital tool for trumpet beginners, music students, and returning playersto intuitively master classic fingerings in the treble clef.Without any downloads or registrations, the tool transforms any web browser into a motivating educational game. The app randomly generates notes between low C and high C, featuring a dynamic sheet music staff that automatically handles ledger lines. You control the virtual valves using your keyboard keys 1, 2, and 3, while pressing 0 immediately resets all valves to the open position. Pressing the Enter key evaluates your attempt. If you are correct, the entire screen instantly turns green and a synthesized trumpet fanfare sounds. Thanks to this combination of visual staff notation, tactile keyboard input, and immediate acoustic rewards, this website ensures rapid learning success. It is the ideal companion for your daily musical warm-up.", "repo": "https://github.com/Dasher2801/Trompete-lernen", "demo": "https://dasher2801.github.io/Trompete-lernen/"}]...
|
[{"post_id": 14356, "ts": "202 [{"post_id": 14356, "ts": "2026-06-23T13:39:19Z", "hours": 1.7, "text": "The design has been completely revamped. Several bugs have also been fixed—such as the issue where only one key could be pressed at a time, or notes being displayed incorrectly."}, {"post_id": 13725, "ts": "2026-06-22T14:31:15Z", "hours": 2.2825, "text": "Now, all notes from Gb to C3 are being tested. The design is still the old one."}, {"post_id": 13012, "ts": "2026-06-21T09:04:53Z", "hours": 1.7472, "text": "Ich arbeite an einer Website, mit der Trompetenspieler schnell und Effizient alle Griffe für die Trompete lernen können. Bis jetzt ist es mur dieser eine Ton (A1).Jetzt muss ich alle anderen Töne und Vorzeichen hinzufügen. Auch das Design muss ich noch anpassen."}]...
|
Title: learning trumpet fingerings by @Dasher2801 Title: learning trumpet fingerings by @Dasher2801 | Stardance
Devlogs:
Ich arbeite an einer Website, mit der Trompetenspieler schnell und Effizient alle Griffe für die Trompete lernen können. Bis jetzt ist es mur dieser eine Ton (A1).Jetzt muss ich alle anderen Töne und Vorzeichen hinzufügen. Auch das Design muss ich noch anpassen.
Now, all notes from Gb to C3 are being tested. The design is still the old one.
The design has been completely revamped. Several bugs have also been fixed—such as the issue where only one key could be pressed at a time, or notes being displayed incorrectly.
Ships:
Master Trumpet Fingerings: The Interactive Trainer This minimalist web app is the perfect digital tool for trumpet beginners, music students, and returning playersto intuitively master classic fingerings in the treble clef.Without any downloads or registrations, the tool transforms any web browser into a motivating educational game. The app randomly generates notes between low C and high C, featuring a dynamic sheet music staff that automatically handles ledger lines. You control the virtual valves using your keyboard keys 1, 2, and 3, while pressing 0 immediately resets all valves to the open position. Pressing the Enter key evaluates your attempt. If you are correct, the entire screen instantly turns green and a synthesized trumpet fanfare sounds. Thanks to this combination of visual staff notation, tactile keyboard input, and immediate acoustic rewards, this website ensures rapid learning success. It is the ideal companion for your daily musical warm-up....
|
1793634512.6722484
|
1793720912.6722484
|
|
67346
|
learning rust by @Elia_Piagentini | Stardance
|
Elia_Piagentini
|
0
|
10.51
|
0
|
[]
|
[{"post_id": 81783, "ts": "202 [{"post_id": 81783, "ts": "2026-10-22T13:44:56Z", "hours": 8.1306, "text": "going strong"}, {"post_id": 76231, "ts": "2026-10-02T19:44:00Z", "hours": 2.3842, "text": "rust"}]...
|
Title: learning rust by @Elia_Piagentini | Stardan Title: learning rust by @Elia_Piagentini | Stardance
Devlogs:
rust
going strong...
|
1793109106.3595996
|
1793713906.3595996
|
|
45259
|
learning react by @crunchy | Stardance
|
crunchy
|
0
|
1.17
|
0
|
[]
|
[{"post_id": 45029, "ts": "202 [{"post_id": 45029, "ts": "2026-08-11T05:45:48Z", "hours": 1.1694, "text": "I want to learn ReactJS to develop my career as an Industrial Engineer. While it may seem like an irrelevant career path, Industrial Engineers strive to optimize and make systems more efficient. It is highly beneficial for Industrial Engineers to be able to create models and visualize systems for others to see and critique. Learning React will allow me to build upon my existing JavaScript knowledge to create a functional webpage that I can customize to fit the needs of whatever project I am working on. At the moment, I am working on learning the different elements of React. By the end of the project, I want to be able to come up with an interactive model to fix a problem that I see in my everyday life."}]...
|
Title: learning react by @crunchy | Stardance
Dev Title: learning react by @crunchy | Stardance
Devlogs:
I want to learn ReactJS to develop my career as an Industrial Engineer. While it may seem like an irrelevant career path, Industrial Engineers strive to optimize and make systems more efficient. It is highly beneficial for Industrial Engineers to be able to create models and visualize systems for others to see and critique. Learning React will allow me to build upon my existing JavaScript knowledge to create a functional webpage that I can customize to fit the needs of whatever project I am working on. At the moment, I am working on learning the different elements of React. By the end of the project, I want to be able to come up with an interactive model to fix a problem that I see in my everyday life....
|
1793324914.1957104
|
1793929714.1957104
|
|
28519
|
learning python/ml by @euler_rr | Stardance
|
euler_rr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: learning python/ml by @euler_rr | Stardance
|
1793188125.2372937
|
1793792925.2372937
|
|
64784
|
learning python by @puneetdhiman41 | Stardance
|
puneetdhiman41
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: learning python by @puneetdhiman41 | Starda Title: learning python by @puneetdhiman41 | Stardance...
|
1793678083.9297922
|
1794282883.9297922
|
|
11447
|
learning project by @supertheoctagon | Stardance
|
supertheoctagon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: learning project by @supertheoctagon | Star Title: learning project by @supertheoctagon | Stardance...
|
1793368457.2251108
|
1793973257.2251108
|
|
50257
|
learning neural networks by @infoajith2020 | Stard learning neural networks by @infoajith2020 | Stardance...
|
infoajith2020
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: learning neural networks by @infoajith2020 Title: learning neural networks by @infoajith2020 | Stardance...
|
1793332358.71045
|
1793937158.71045
|
|
9865
|
learning ig by @Otoko | Stardance
|
Otoko
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: learning ig by @Otoko | Stardance
|
1793393299.916183
|
1793998099.916183
|