|
72085
|
djblog by @jeivish_j | Stardance
|
jeivish_j
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: djblog by @jeivish_j | Stardance
|
1793375235.6853988
|
1793980035.6853988
|
|
66058
|
djrmivmeikvmrejkconrkve by @hridyanshp5 | Stardanc djrmivmeikvmrejkconrkve by @hridyanshp5 | Stardance...
|
hridyanshp5
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: djrmivmeikvmrejkconrkve by @hridyanshp5 | S Title: djrmivmeikvmrejkconrkve by @hridyanshp5 | Stardance...
|
1793710320.8474636
|
1794315120.8474636
|
|
40198
|
djsjs by @AhaanKukreja | Stardance
|
AhaanKukreja
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: djsjs by @AhaanKukreja | Stardance
|
1793443689.965254
|
1794048489.965254
|
|
34651
|
dkndkfjdk by @Madhavnair | Stardance
|
Madhavnair
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dkndkfjdk by @Madhavnair | Stardance
|
1793332304.2752745
|
1793937104.2752745
|
|
72701
|
dlauncher by @delkom1 | Stardance
|
delkom1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dlauncher by @delkom1 | Stardance
|
1793591225.224438
|
1794196025.224438
|
|
25207
|
dnf by @robinhickmann | Stardance
|
robinhickmann
|
0
|
50.79
|
0
|
[]
|
[{"post_id": 55489, "ts": "202 [{"post_id": 55489, "ts": "2026-08-27T11:32:45Z", "hours": 49.8711, "text": "Lots of work!! It’s been a while, and I might have forgot to make a devlog. But I’ve been trying to figure everything out and make sure everything will be stable. I got a server so I can host a demo for dnf and I spent some time setting up all up, with tailscale, grafana, prometheus, loki, alloy, ect. So now I have full monitoring of everything with lots of nice dashboards, which I think will really help test and develop dnf. I also spent a bunch of time doing all the small details in terms of coding, I added: Docker Compose env Linting and Connection timeouts Full support for SOA and NS GitHub release pipeline Install script Service file Structured logging Setup dependabot Fix shutdown logic Implement EDNS and ECS Auto deploy to demo server Currently I’m working on adding TCP support to my DNS server, and adding rate-limiting to both the DNS and HTTP servers. I’m also gonna have to implement ACME in my DNS server that generates TLS certificates for the HTTP server. After that I’m gonna start working on core fingerprinting code itself and the demo site too."}, {"post_id": 15349, "ts": "2026-06-24T23:13:20Z", "hours": 0.9228, "text": "How my DNS browser fingerprinting works The idea is that different browsers fetch DNS records differently. But in order to capture all DNS traffic we have to avoid DNS caching!! To solve that we generate a new subdomain for every request, so it’s impossible to cache. Say our domain is example.com , if we generate 12 random digits (the longer the random number the less likely you are to hit collisions) , using something like base36. We can generate random IDs like 2eg2mpkwgylh or zokydwitx5pu and then we just append our domain, and we have unique DNS records. We just have to implement a DNS server where we serve the same A/AAAA/HTTPS record for anything .example.com Implementing this into a normal website All you have to do is add a script that will generate the random ID and fetch it. You can also make the returned A/AAAA/HTTPS record lead to a HTTP server that will just serve 200 if you dont want the fetch to fail. I’m ignoring all the backend systems work you’d have to do to integrate the DNS server with the rest of your stack. But that’s different for everyone so you’ll have to figure it out. Implementing this into a demo site My plan is to have a demo website with a script that will query a rest API on a randomly generated domain like mentioned above. Then the API can check the host header to return the result of the DNS queries which can then be displayed in the demo site. What I have done so far Implemented DNS server Implemented HTTP rest api Implemented some frontend demo code What I need to do DNS fingerprinting algorithm itself Way for rest api to retrieve results Rest of demo frontend code"}]...
|
Title: dnf by @robinhickmann | Stardance
Devlogs: Title: dnf by @robinhickmann | Stardance
Devlogs:
How my DNS browser fingerprinting works The idea is that different browsers fetch DNS records differently. But in order to capture all DNS traffic we have to avoid DNS caching!! To solve that we generate a new subdomain for every request, so it’s impossible to cache. Say our domain is example.com , if we generate 12 random digits (the longer the random number the less likely you are to hit collisions) , using something like base36. We can generate random IDs like 2eg2mpkwgylh or zokydwitx5pu and then we just append our domain, and we have unique DNS records. We just have to implement a DNS server where we serve the same A/AAAA/HTTPS record for anything .example.com Implementing this into a normal website All you have to do is add a script that will generate the random ID and fetch it. You can also make the returned A/AAAA/HTTPS record lead to a HTTP server that will just serve 200 if you dont want the fetch to fail. I’m ignoring all the backend systems work you’d have to do to integrate the DNS server with the rest of your stack. But that’s different for everyone so you’ll have to figure it out. Implementing this into a demo site My plan is to have a demo website with a script that will query a rest API on a randomly generated domain like mentioned above. Then the API can check the host header to return the result of the DNS queries which can then be displayed in the demo site. What I have done so far Implemented DNS server Implemented HTTP rest api Implemented some frontend demo code What I need to do DNS fingerprinting algorithm itself Way for rest api to retrieve results Rest of demo frontend code
Lots of work!! It’s been a while, and I might have forgot to make a devlog. But I’ve been trying to figure everything out and make sure everything will be stable. I got a server so I can host a demo for dnf and I spent some time setting up all up, with tailscale, grafana, prometheus, loki, alloy, ect. So now I have full monitoring of everything with lots of nice dashboards, which I think will really help test and develop dnf. I also spent a bunch of time doing all the small details in terms of coding, I added: Docker Compose env Linting and Connection timeouts Full support for SOA and NS GitHub release pipeline Install script Service file Structured logging Setup dependabot Fix shutdown logic Implement EDNS and ECS Auto deploy to demo server Currently I’m working on adding TCP support to my DNS server, and adding rate-limiting to both the DNS and HTTP servers. I’m also gonna have to implement ACME in my DNS server that generates TLS certificates for the HTTP server. After that I’m gonna start working on core fingerprinting code itself and the demo site too....
|
1793541271.651514
|
1794146071.651514
|
|
13667
|
dnp3 Parser and Simulator by @arnabm | Stardance
|
arnabm
|
1
|
104.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-11-01T03:47:21Z", "hours": 104.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built a partial implementation of DNP3 in C, along with a TCP client/server simulator and an interactive packet parser. DNP3 is a communication protocol used in SCADA systems, including power utilities and water management. It lets equipment at remote sites send measurements and status information to control centers. The protocol is decades old and widely used, but finding detailed, freely available documentation was surprisingly difficult. My project implements a small subset of it so you can generate data, exchange packets between programs, and inspect what those packets contain. Why was it challenging? The hardest part was turning the protocol’s packet layouts into working C code. DNP3 originated in serial communication, and carrying its frames over TCP meant handling the fact that one network read doesn’t necessarily equal one complete packet. This was also my first big C project. Coming from Java, I had to get comfortable with pointers, manual memory handling, sockets, and the difference between a struct’s layout in memory and the bytes a protocol expects. Struct padding caused a lot more trouble than I expected 😭. I also took a roughly two-month break. Returning to code I’d written while still learning C was a challenge of its own, especially where I hadn’t used consistent conventions or documented my decisions. What are you proud of? Mostly, that I stuck with it. This project pushed me through problems that initially felt impossible and taught me how to break them down, investigate them, and keep going. I understand memory layout, byte order, networking, and C much better now than when I started. Seeing the client request data, the server build a response, and the parser turn those bytes into readable fields made that work feel worth it. What should people know before using it? Read the README first! It explains how to build the programs, configure connections, and use the supported packet formats. This is a partial implementation, so it won’t interpret every DNP3 packet. For a quick demo: Start the server. Its default port is 48188. Choose Group 1, Variation 2 for binary values with flags, or Group 30, Variation 1 for analog values with flags. Use a small point range, such as 0–7. Start the client, enter port 48188, and enter 0 as the address to use localhost. Copy a complete reply from the client’s output into the parser. Join the hex bytes into one line and leave out the surrounding log messages. (certain consoles will do this automatically hint hint vscode", "repo": "https://github.com/arnabmondal-eg/dnp3", "demo": "https://github.com/arnabmondal-eg/dnp3/releases/tag/latest"}]...
|
[{"post_id": 86151, "ts": "202 [{"post_id": 86151, "ts": "2026-11-01T03:03:35Z", "hours": 11.1631, "text": "Just finished the Server-Client loop, as well as overhawling the parser binary. We are ready to SHIP!"}, {"post_id": 58550, "ts": "2026-08-31T00:08:09Z", "hours": 1.8961, "text": "Added the data generation, request creation, and response creation to the client and server. You can see a demo below. Not a giant change, just integrating the the new functions into the Client and Server."}, {"post_id": 57761, "ts": "2026-08-30T01:20:48Z", "hours": 10.5842, "text": "IM FREEEEE I FINALLY finished writing the write_data() function. Now full packet generation, with a request, and a reply is complete! Litterly the only thing left to do is make the ui. I AM DONE WITH THE BACKEND!!!!! I have included a handy guide to the output bellow. Instead of another picture of my terminal, you guys get to enjoy some color coded google docs!"}, {"post_id": 49396, "ts": "2026-08-18T06:12:20Z", "hours": 10.715, "text": "Im just going to appologize now, this devlog is not gonna be that great. I have been working the past few days on packet generation. Specifically on requesting data from a server, and writing that data to a packet as a server. As you can see by the time, this is much harder than it may seem. Though I did predict this a while ago. When the client request data from the server, a function is invoked that configures the group (data type; digital or analog) and the variation (presentation; packed format or with extra flags). When the server responds to this request, it invokes a function (technically 2) that refreshes the data it has (currently using a random number generator) and writes that to a packet. The packet is mostly a clone of the request, just with the source and destination switched, and the data added. Currently, I have both functions completed (or almost completed), but I still need to add crc to the reply form the server, and fix the many bugs that have arrisen from this change. Bellow I have an example request, no reply becuase the function is currently inoperable :( 05 64 0F C4 01 00 00 00 C8 E2 C1 C0 01 01 01 10 F7 03 00 0F 00 00 This request is asking for data from the server with address 1, data type 30 (digital), and the data points 3-15 Once again, very sorry for the poor quality dev log, but I just wanted to get an update out before I dug myself into an even deeper hole. See you guys later!"}, {"post_id": 45462, "ts": "2026-08-11T23:06:44Z", "hours": 6.2953, "text": "Been a busy 4 days. Worked on mostly modularity for the program, making sure that I am not repeating code that can be a function as part of a larger library The 2 libraries I implemented were the common/ and network/ libraries. These are used in both the client and server. Common includes functions like setting up connections, sending packets, receiving packets, interpreting them, and polling them for data The network library handles connecting to a server/client, and others. I also finally added the ability for the client (main stations/ems) to multiple servers (outstations/rtu). You can see a demo of all this working in the video. That’s it for now, goodbye!"}, {"post_id": 42903, "ts": "2026-08-07T21:11:13Z", "hours": 2.3822, "text": "More work on the logging system. Realized that we can use a global var with an init function to remove the need for each log call to pass the file pointer to the log Previous Method; // main log_err ( errno , \"client/main\" , fptr ); The fptr is a FILE* varible that points to the logging file New Method; // log.c static FILE * log_file = NULL ; int log_init ( const char * file_path ) { log_file = fopen ( file_path , \"a\" ); if ( log_file == NULL ) { log_err ( errno , \"log/log_init\" ); return - 1 ; } return 0 ; } // main log_init ( \"log/log.txt\" ); log_err ( errno , \"client/main\" ); The new method means all you have to pass is errno and the location of error. Super Simple!!! I also updated both client and server with this system. Bye"}, {"post_id": 41747, "ts": "2026-08-06T04:11:05Z", "hours": 0.5658, "text": "Small addition. Made log_info() a variadic function, like printf() . This means you can now do the same formatting like printf(\"hello %s\", \"world\") . This allows for easier logging to file and console, as both are just an arg in the funciton call! Yay!!!!"}, {"post_id": 41582, "ts": "2026-08-05T21:33:22Z", "hours": 2.0283, "text": "Finished adding the logging library I mentioned in the last post. It supports Colored text for warning and errors, time stamps, and better formatting. Ironically, the hardest part about this was figuring out how to use ANSI escape codes to support the colored text. This Medium article fromVitor Matias was super helpful! i also realized most people dont wanna read walls, so my updates will be smaller form now!"}, {"post_id": 41164, "ts": "2026-08-05T06:12:35Z", "hours": 6.4817, "text": "DevLog 15 Been busy the past couple of days with some school, so sorry I haven’t posted sooner, but I have also built out a couple more features.The Main additions are; Reusable frequent packet structures (acknowledge, negative acknowledge, reset link) Server Client loop 1. Ability to choose packet type to send to server (through TUI) in client 2. Server responds, and client is able to display response Better error handling, with more checks for errno and printing to log and console Better logging through file rather than just console The logging is proably my favorite new feature. It saves previous runs and even annotates the time and date the run took place. The error info is also much more helpful, and more often my program tells me why it crashed, instead of just ending or segfaulting client [ main]: Connection refused ^^^^ This now happens when you try to run the client with out a server on the configured adress or port Errors I ran into There actually wasn’t that much stuff going wrong, just took me pretty long as I had to edit a lot of functions and flows. A big issue i did run into was adding select() , also know as polling to the socket. Basicly, my code will loop checking the socket and parsing the data in it. But, a problem occurs if there is no data in the socket waiting. Polling allows my code to check if there actually is data, and if not wait/move on to the next task. But, I had incorrectly configured the function (the documentation for this function is especially confusing…), and this lead it to always report data in the socket. This then lead to errors with trying to map that data into a struct, and it just lead to catastrophy. Immediate Plans Have some stuff I’m going to / want to try and start before the next devlog; Logging Functions to simply logging to console and file * Something like log_note() , log_warn() , and log_error() * Currently just writing both fprintf() and perror() Add functionality to digital and analog requests * Need to add packet structures and creator functions for both Seperate network functionality like socket() , send() , etc… into its own library fucntions Seperate shared code between server and client into common library Media I thought I would include this section to explain some of things in the attached videos. These show all the features I implemented, including the client server loop, logging, and error handling Video 1 This just shows the current loop between the client and server, where the client sends a packet, a reset link packet in this case, and the server responds, in this case with a simple acknowledgement. It also shows how both programs log information about their runs in an assocaited text file. Btw, if you have some sugestions for making this better, please leave a comment . This is just about the simplest way to do logging, so other ideas are appreciated! Video 2 This shows an example of custom ports, error handling, and more logging. Both the client and server support custom ports (and server adresses in the case of the client) passed in as a launch argument. You can see when the client trys to connect to a server that either doesn’t exist on the current port, or isn’t active, an error message is displayed into the console and logged in the file. Alternatively, when both use the same port, the connection succeds, that port is logged as well. Wrap Up Lots of stuff to do still, and I am super excited to get started. Thank you to the few of you who have been following development since the beginning, and hello to anyone new!"}, {"post_id": 34839, "ts": "2026-07-25T21:21:26Z", "hours": 2.57, "text": "Manual Packet Creation and More! Just finished adding the ability to create a packet based on parameters rather than requiring a premade packet. Manual Packets Basicly, instead of needing something like , uint8_t input [] = { 0x05 , 0x64 , ... }; dnp3p_st packet_s = mkPacket ( input ); You can now just use a function and pass in parameters. Then, since this is just a fancy memory structure, a simple memcpy into an appropriately sized array will give you both! (The raw packet, and the structure) uint8_t packet [ 30 ] = { 0 }; // did some renaming, uses dnp3Lib for library funcs now dnp3p_st packet_s = dnp3Lib_mkPacket_manual ( 1 , 0 , 30 , 2 , 0 , 10 ); // params are: destination, source, group, variation, startIndex, and stopIndex memcpy ( & packet , & packet_s , 30 ); This will give you basicly the same thing as the first example, meaning you can create a packet based on a discription, rather than a discription based on a packet. This will be very useful when creating responses from to the client from the server, or vice versa. Should be noted that this is technically not very complete, but it is just an example for now. Pre-made Packets On the topic of creating a packet based on a discription, I also created some functions to create packets for common messages, including; Reset Link Required when creating a new connection Acknowledgement Negative Acknowledgment These will be useful when making connections, and sending responses to requests and replies. Wrap Up Still got a ways to go in terms of completion, but I’m hoping to ramp up my speed, been a little busy the past couple weeks."}, {"post_id": 31917, "ts": "2026-07-20T18:19:30Z", "hours": 1.1969, "text": "Added the ability to pick a custom socket or server ip. Also actualy pushed becuase I forgot last time"}, {"post_id": 31334, "ts": "2026-07-19T17:17:47Z", "hours": 4.9769, "text": "Just finished getting the client server connection working. Next thing to do is to interpret the packet on the server side, then create a reply based on the request."}, {"post_id": 26929, "ts": "2026-07-12T00:21:49Z", "hours": 3.2033, "text": "Dev log 11? I just pushed some changes and merged main and dev. This update I basically just made some fixes that should make the parser more accurate overall, but there are still a few lingering bugs. The main change I made was adding a system to clean the packet of any CRC bytes from within. Normally, a packet contains 2 bytes of CRC spread around it, with 2 after the end of the header, and after that 2 after every 16 bytes. This change will allow my data handler to not accidentally ingest CRC bytes, which would mess up the spacing of each data segment, and result in randomness. I also added a function to calculate the size of a packet based on the length information stored within it, rather than the physical memory size of it. This is better, as I can call it from any function and not have to pass in the size as a param. Overall, I am around 90% done with the backend, and just have a couple bugs to fix. I have attached a screen shot of some of the new features."}, {"post_id": 25364, "ts": "2026-07-09T16:42:47Z", "hours": 1.4706, "text": "Added parsing for more Objects Has not been very long but I am back with an update. I just finished adding in parsing for more object types, including Group 1 Varriation 1 Varriation 2 Group 30 Varriation 1 Varriation 2 I’ll also try and make more frequent posts here!"}, {"post_id": 25027, "ts": "2026-07-08T23:27:04Z", "hours": 9.7514, "text": "DNP3 Parser Update - Understanding a DNP3 Packet This week I finished parsing DNP3 Group 1 Variation 1 , the first object type supported by the parser. That means the parser can now decode binary input status values from real DNP3 traffic instead of just stopping at the object header. I also got some practice using GDB to debug my programs! Super useful as I ran into some segmentation faults that would have been impossible to fix without it! How a DNP3 Packet Works DNP3 (Distributed Network Protocol 3) is an industrial control protocol used by electric utilities, water systems, and other critical infrastructure. Communication happens between a Master (SCADA server) and one or more Outstations (RTUs, relays, PLCs, etc.). A packet is made up of several layers: Data Link Layer Transport Layer Application Header Object Header(s) Object Data Data Link Layer The packet always begins with the start bytes: 0x05 0x64 These identify the frame as DNP3. The rest of the link header contains: Length Control byte Destination address Source address CRC This layer is responsible for moving frames between devices and detecting transmission errors. Transport Layer The transport header is only one byte long, but it’s important because it: Marks the start and end of fragmented messages Provides a sequence number so fragments can be reassembled Application Layer The application header tells the receiver what operation is being requested. Examples include: Read Write Response Confirm It also contains application control flags and an application sequence number. Object Headers After the application header come one or more object headers. These tell the parser what type of data follows . An object header contains: Group number Variation number Qualifier For example: Group 1 Variation 1 represents packed binary input values. The qualifier then specifies how many objects are present and how they are indexed. Object Data Finally comes the actual payload. For Group 1 Variation 1, each bit represents the current state of a binary input: 1 = ON 0 = OFF The parser reads these bytes and expands them into individual points that can be displayed or analyzed. Completed Sections Data Link Layer parsing Transport Header parsing Application Header parsing Object Header parsing Group 1 Variation 1 object parsing Next up is adding support for additional object groups and variations so the parser can decode more real-world DNP3 traffic."}, {"post_id": 15996, "ts": "2026-06-25T23:42:02Z", "hours": 7.0044, "text": "Transport Header, Printing Updates, and Bug Fixes! Its once again that time. This week I worked on the object header, updated the printing on the DLC parsing, as well as fixing a couple big bugs. Transport Header The transport header consists of 5 parts, and its main job is to explains the format, and ordering of the data in the packet. Note that there are multiple object and data blocks in a single packet, but currently I can only parse 1 at most. Bugs Fixed Ran into a couple bugs, but I’ll just mention 2. When filling the range (part of the object header) I ran into some errors. It turns out that I had forgoten to initilize the space with 0s, and that ment that if less than 8 bytes were assigned, there was garbage memory sitting in the space. Fix was pretty easy, just zeroed out the space and then assigned the data Incorrect DLC data being printed. Another strange bug, not really sure what was causing it Fix was pretty simple, just rewrote the print statements (attached a picture) Wrap Up Thanks for enduring that yap fest. Next update will probably be when I add in data parsing, unless I make some major change.Hope you enjoyed it. Check out the GitHub: https://github.com/arnabmondal-eg/dnp3 And have a safe , fun, and patriotic Fourth of July !"}, {"post_id": 10044, "ts": "2026-06-16T16:44:41Z", "hours": 7.025, "text": "DNP3 Parser I genuinely dont know how its been 7 hours. I feel like the majority of my time is fixing bugs and trying to get my code to compile. Where I’ve Been It’s been a while since my last devlog, and I have spent the past 7 hours adding a good bit. Main thing is that almost the entire packet is now being parsed, or atleast the hard part. The entire header, dlc byte, transport header, and application header are parsed , so the only thing left is the Object headers and the data itself. I also created a new struct to hold all of these functions , so you can just pass in a hex and get all this data out, no need to call each portions functionality anymore. Whats Next Moving forward, I have a couple goals/milestones I have to hit before I can ship this project: Parse the rest of the packet Check validity on entire packet (using CRC bytes) Finish Parser UI (almost done, but still some more to be done) Create Control/Main Station UI Create RTU/Secondary Station UI Link backend and frontend using network sockets Create systems for creating packets (I believe this will be much more difficult than parsing them) Simulate “Conversations” between the main and outstations Create binaries for Windows, Mac, and Linux"}, {"post_id": 8365, "ts": "2026-06-13T22:07:59Z", "hours": 1.3322, "text": "Just did a little rework to move all header files to the inc/ folder. This should make it less cluttered, but we will see how this holds up. Next things on the chopping block are: Implement Transport Header Parsing Implement Application Header Parsing Check all CRC bytes in entire packet Check out the GitHub! https://github.com/arnabmondal-eg/dnp3"}, {"post_id": 7776, "ts": "2026-06-13T00:04:46Z", "hours": 5.6458, "text": "Its been a while… Hello! I have been working on the parser for a while. This post will be an explanation of where I am in the project so far. I wouldn’t go as far as to say that I am close to done yet, but I’m definitely nearing the halfway point. The past 2 days I have reworked how packets are interpreted, as well as adding some new helper utilities/functions to make future decoding easier. I also implemented a full bit-by-bit decomposition of the DLC byte in a header! This was super fun and rewarding as I learned a lot about bit-wise operations in C, as well as strengthening my understand of memory and how it is transferred through a program. I also learned I can’t spell! Wrote valid as “vaild” over 10 times! I also learned that C doesn’t pass the size of an array automatically! Super fun bugs! \\s Feel free to critique my code on the GitHub! https://github.com/arnabmondal-eg/dnp3"}, {"post_id": 6455, "ts": "2026-06-10T21:20:28Z", "hours": 1.3786, "text": "Finished reworking the Parser UI. It uses a split pane so you can get as much or as little space as you need. Features a text input area on the left with a parse button on the bottom, and a tree view on the right (to see the parsed packet contents) with a valid indicator on the bottom. Nothing is hooked up yet to logic, so that is coming up soon on the list! Swing is definitely kind of tedious to write though! Check out the github: https://github.com/arnabmondal-eg/dnp3"}, {"post_id": 5990, "ts": "2026-06-10T01:27:53Z", "hours": 2.5494, "text": "Just finished writing the final portion of the header validity checker, which uses a brand new CRC byte calculator! Very Fun to make, as I really got to dig deep into bit-wise operations for the first time, but definitely challenging! In terms of the backend, there is still much to do, but I am getting close to completion. The frontend still is in rough shape however. Making Good Progress!"}, {"post_id": 5857, "ts": "2026-06-09T20:07:09Z", "hours": 2.4053, "text": "Improved project structure, worked on README, added tasks to make compiling easier. Really want this to be usable, so I am putting in the work to make it simple to understand and use. Also I hated writing this project tree. Leme know if there is some tool i can use to do this automatically in the future"}, {"post_id": 5339, "ts": "2026-06-09T02:25:31Z", "hours": 1.3033, "text": "Working on the parser backend. Currently planning for all the backend to be in C, while I handle the frontend in Java using Swing. While this may seem like an ancient technology, most production SCADA applications use Swing for its long term support. And Java and C are obvious choices aswell. Heres a pic of the header part of the interpreter, and some work in progress ui. Much more work to come!"}]...
|
Title: dnp3 Parser and Simulator by @arnabm | Star Title: dnp3 Parser and Simulator by @arnabm | Stardance
Devlogs:
Working on the parser backend. Currently planning for all the backend to be in C, while I handle the frontend in Java using Swing. While this may seem like an ancient technology, most production SCADA applications use Swing for its long term support. And Java and C are obvious choices aswell. Heres a pic of the header part of the interpreter, and some work in progress ui. Much more work to come!
Improved project structure, worked on README, added tasks to make compiling easier. Really want this to be usable, so I am putting in the work to make it simple to understand and use. Also I hated writing this project tree. Leme know if there is some tool i can use to do this automatically in the future
Just finished writing the final portion of the header validity checker, which uses a brand new CRC byte calculator! Very Fun to make, as I really got to dig deep into bit-wise operations for the first time, but definitely challenging! In terms of the backend, there is still much to do, but I am getting close to completion. The frontend still is in rough shape however. Making Good Progress!
Finished reworking the Parser UI. It uses a split pane so you can get as much or as little space as you need. Features a text input area on the left with a parse button on the bottom, and a tree view on the right (to see the parsed packet contents) with a valid indicator on the bottom. Nothing is hooked up yet to logic, so that is coming up soon on the list! Swing is definitely kind of tedious to write though! Check out the github: https://github.com/arnabmondal-eg/dnp3
Its been a while… Hello! I have been working on the parser for a while. This post will be an explanation of where I am in the project so far. I wouldn’t go as far as to say that I am close to done yet, but I’m definitely nearing the halfway point. The past 2 days I have reworked how packets are interpreted, as well as adding some new helper utilities/functions to make future decoding easier. I also implemented a full bit-by-bit decomposition of the DLC byte in a header! This was super fun and rewarding as I learned a lot about bit-wise operations in C, as well as strengthening my understand of memory and how it is transferred through a program. I also learned I can’t spell! Wrote valid as “vaild” over 10 times! I also learned that C doesn’t pass the size of an array automatically! Super fun bugs! \s Feel free to critique my code on the GitHub! https://github.com/arnabmondal-eg/dnp3
Just did a little rework to move all header files to the inc/ folder. This should make it less cluttered, but we will see how this holds up. Next things on the chopping block are: Implement Transport Header Parsing Implement Application Header Parsing Check all CRC bytes in entire packet Check out the GitHub! https://github.com/arnabmondal-eg/dnp3
DNP3 Parser I genuinely dont know how its been 7 hours. I feel like the majority of my time is fixing bugs and trying to get my code to compile. Where I’ve Been It’s been a while since my last devlog, and I have spent the past 7 hours adding a good bit. Main thing is that almost the entire packet is now being parsed, or atleast the hard part. The entire header, dlc byte, transport header, and application header are parsed , so the only thing left is the Object headers and the data itself. I also created a new struct to hold all of these functions , so you can just pass in a hex and get all this data out, no need to call each portions functionality anymore. Whats Next Moving forward, I have a couple goals/milestones I have to hit before I can ship this project: Parse the rest of the packet Check validity on entire packet (using CRC bytes) Finish Parser UI (almost done, but still some more to be done) Create Control/Main Station UI Create RTU/Secondary Station UI Link backend and frontend using network sockets Create systems for creating packets (I believe this will be much more difficult than parsing them) Simulate “Conversations” between the main and outstations Create binaries for Windows, Mac, and Linux
Transport Header, Printing Updates, and Bug Fixes! Its once again that time. This week I worked on the object header, updated the printing on the DLC parsing, as well as fixing a couple big bugs. Transport Header The transport header consists of 5 parts, and its main job is to explains the format, and ordering of the data in the packet. Note that there are multiple object and data blocks in a single packet, but currently I can only parse 1 at most. Bugs Fixed Ran into a couple bugs, but I’ll just mention 2. When filling the range (part of the object header) I ran into some errors. It turns out that I had forgoten to initilize the space with 0s, and that ment that if less than 8 bytes were assigned, there was garbage memory sitting in the space. Fix was pretty easy, just zeroed out the space and then assigned the data Incorrect DLC data being printed. Another strange bug, not really sure what was causing it Fix was pretty simple, just rewrote the print statements (attached a picture) Wrap Up Thanks for enduring that yap fest. Next update will probably be when I add in data parsing, unless I make some major change.Hope you enjoyed it. Check out the GitHub: https://github.com/arnabmondal-eg/dnp3 And have a safe , fun, and patriotic Fourth of July !
DNP3 Parser Update - Understanding a DNP3 Packet This week I finished parsing DNP3 Group 1 Variation 1 , the first object type supported by the parser. That means the parser can now decode binary input status values from real DNP3 traffic instead of just stopping at the object header. I also got some practice using GDB to debug my programs! Super useful as I ran into some segmentation faults that would have been impossible to fix without it! How a DNP3 Packet Works DNP3 (Distributed Network Protocol 3) is an industrial control protocol used by electric utilities, water systems, and other critical infrastructure. Communication happens between a Master (SCADA server) and one or more Outstations (RTUs, relays, PLCs, etc.). A packet is made up of several layers: Data Link Layer Transport Layer Application Header Object Header(s) Object Data Data Link Layer The packet always begins with the start bytes: 0x05 0x64 These identify the frame as DNP3. The rest of the link header contains: Length Control byte Destination address Source address CRC This layer is responsible for moving frames between devices and detecting transmission errors. Transport Layer The transport header is only one byte long, but it’s important because it: Marks the start and end of fragmented messages Provides a sequence number so fragments can be reassembled Application Layer The application header tells the receiver what operation is being requested. Examples include: Read Write Response Confirm It also contains application control flags and an application sequence number. Object Headers After the application header come one or more object headers. These tell the parser what type of data follows . An object header contains: Group number Variation number Qualifier For example: Group 1 Variation 1 represents packed binary input values. The qualifier then specifies how many objects are present and how they are indexed. Object Data Finally comes the actual payload. For Group 1 Variation 1, each bit represents the current state of a binary input: 1 = ON 0 = OFF The parser reads these bytes and expands them into individual points that can be displayed or analyzed. Completed Sections Data Link Layer parsing Transport Header parsing Application Header parsing Object Header parsing Group 1 Variation 1 object parsing Next up is adding support for additional object groups and variations so the parser can decode more real-world DNP3 traffic.
Added parsing for more Objects Has not been very long but I am back with an update. I just finished adding in parsing for more object types, including Group 1 Varriation 1 Varriation 2 Group 30 Varriation 1 Varriation 2 I’ll also try and make more frequent posts here!
Dev log 11? I just pushed some changes and merged main and dev. This update I basically just made some fixes that should make the parser more accurate overall, but there are still a few lingering bugs. The main change I made was adding a system to clean the packet of any CRC bytes from within. Normally, a packet contains 2 bytes of CRC spread around it, with 2 after the end of the header, and after that 2 after every 16 bytes. This change will allow my data handler to not accidentally ingest CRC bytes, which would mess up the spacing of each data segment, and result in randomness. I also added a function to calculate the size of a packet based on the length information stored within it, rather than the physical memory size of it. This is better, as I can call it from any function and not have to pass in the size as a param. Overall, I am around 90% done with the backend, and just have a couple bugs to fix. I have attached a screen shot of some of the new features.
Just finished getting the client server connection working. Next thing to do is to interpret the packet on the server side, then create a reply based on the request.
Added the ability to pick a custom socket or server ip. Also actualy pushed becuase I forgot last time
Manual Packet Creation and More! Just finished adding the ability to create a packet based on parameters rather than requiring a premade packet. Manual Packets Basicly, instead of needing something like , uint8_t input [] = { 0x05 , 0x64 , ... }; dnp3p_st packet_s = mkPacket ( input ); You can now just use a function and pass in parameters. Then, since this is just a fancy memory structure, a simple memcpy into an appropriately sized array will give you both! (The raw packet, and the structure) uint8_t packet [ 30 ] = { 0 }; // did some renaming, uses dnp3Lib for library funcs now dnp3p_st packet_s = dnp3Lib_mkPacket_manual ( 1 , 0 , 30 , 2 , 0 , 10 ); // params are: destination, source, group, variation, startIndex, and stopIndex memcpy ( & packet , & packet_s , 30 ); This will give you basicly the same thing as the first example, meaning you can create a packet based on a discription, rather than a discription based on a packet. This will be very useful when creating responses from to the client from the server, or vice versa. Should be noted that this is technically not very complete, but it is just an example for now. Pre-made Packets On the topic of creating a packet based on a discription, I also created some functions to create packets for common messages, including; Reset Link Required when creating a new connection Acknowledgement Negative Acknowledgment These will be useful when making connections, and sending responses to requests and replies. Wrap Up Still got a ways to go in terms of completion, but I’m hoping to ramp up my speed, been a little busy the past couple weeks.
DevLog 15 Been busy the past couple of days with some school, so sorry I haven’t posted sooner, but I have also built out a couple more features.The Main additions are; Reusable frequent packet structures (acknowledge, negative acknowledge, reset link) Server Client loop 1. Ability to choose packet type to send to server (through TUI) in client 2. Server responds, and client is able to display response Better error handling, with more checks for errno and printing to log and console Better logging through file rather than just console The logging is proably my favorite new feature. It saves previous runs and even annotates the time and date the run took place. The error info is also much more helpful, and more often my program tells me why it crashed, instead of just ending or segfaulting client [ main]: Connection refused ^^^^ This now happens when you try to run the client with out a server on the configured adress or port Errors I ran into There actually wasn’t that much stuff going wrong, just took me pretty long as I had to edit a lot of functions and flows. A big issue i did run into was adding select() , also know as polling to the socket. Basicly, my code will loop checking the socket and parsing the data in it. But, a problem occurs if there is no data in the socket waiting. Polling allows my code to check if there actually is data, and if not wait/move on to the next task. But, I had incorrectly configured the function (the documentation for this function is especially confusing…), and this lead it to always report data in the socket. This then lead to errors with trying to map that data into a struct, and it just lead to catastrophy. Immediate Plans Have some stuff I’m going to / want to try and start before the next devlog; Logging Functions to simply logging to console and file * Something like log_note() , log_warn() , and log_error() * Currently just writing both fprintf() and perror() Add functionality to digital and analog requests * Need to add packet structures and creator functions for both Seperate network functionality like socket() , send() , etc… into its own library fucntions Seperate shared code between server and client into common library Media I thought I would include this section to explain some of things in the attached videos. These show all the features I implemented, including the client server loop, logging, and error handling Video 1 This just shows the current loop between the client and server, where the client sends a packet, a reset link packet in this case, and the server responds, in this case with a simple acknowledgement. It also shows how both programs log information about their runs in an assocaited text file. Btw, if you have some sugestions for making this better, please leave a comment . This is just about the simplest way to do logging, so other ideas are appreciated! Video 2 This shows an example of custom ports, error handling, and more logging. Both the client and server support custom ports (and server adresses in the case of the client) passed in as a launch argument. You can see when the client trys to connect to a server that either doesn’t exist on the current port, or isn’t active, an error message is displayed into the console and logged in the file. Alternatively, when both use the same port, the connection succeds, that port is logged as well. Wrap Up Lots of stuff to do still, and I am super excited to get started. Thank you to the few of you who have been following development since the beginning, and hello to anyone new!
Finished adding the logging library I mentioned in the last post. It supports Colored text for warning and errors, time stamps, and better formatting. Ironically, the hardest part about this was figuring out how to use ANSI escape codes to support the colored text. This Medium article fromVitor Matias was super helpful! i also realized most people dont wanna read walls, so my updates will be smaller form now!
Small addition. Made log_info() a variadic function, like printf() . This means you can now do the same formatting like printf("hello %s", "world") . This allows for easier logging to file and console, as both are just an arg in the funciton call! Yay!!!!
More work on the logging system. Realized that we can use a global var with an init function to remove the need for each log call to pass the file pointer to the log Previous Method; // main log_err ( errno , "client/main" , fptr ); The fptr is a FILE* varible that points to the logging file New Method; // log.c static FILE * log_file = NULL ; int log_init ( const char * file_path ) { log_file = fopen ( file_path , "a" ); if ( log_file == NULL ) { log_err ( errno , "log/log_init" ); return - 1 ; } return 0 ; } // main log_init ( "log/log.txt" ); log_err ( errno , "client/main" ); The new method means all you have to pass is errno and the location of error. Super Simple!!! I also updated both client and server with this system. Bye
Been a busy 4 days. Worked on mostly modularity for the program, making sure that I am not repeating code that can be a function as part of a larger library The 2 libraries I implemented were the common/ and network/ libraries. These are used in both the client and server. Common includes functions like setting up connections, sending packets, receiving packets, interpreting them, and polling them for data The network library handles connecting to a server/client, and others. I also finally added the ability for the client (main stations/ems) to multiple servers (outstations/rtu). You can see a demo of all this working in the video. That’s it for now, goodbye!
Im just going to appologize now, this devlog is not gonna be that great. I have been working the past few days on packet generation. Specifically on requesting data from a server, and writing that data to a packet as a server. As you can see by the time, this is much harder than it may seem. Though I did predict this a while ago. When the client request data from the server, a function is invoked that configures the group (data type; digital or analog) and the variation (presentation; packed format or with extra flags). When the server responds to this request, it invokes a function (technically 2) that refreshes the data it has (currently using a random number generator) and writes that to a packet. The packet is mostly a clone of the request, just with the source and destination switched, and the data added. Currently, I have both functions completed (or almost completed), but I still need to add crc to the reply form the server, and fix the many bugs that have arrisen from this change. Bellow I have an example request, no reply becuase the function is currently inoperable :( 05 64 0F C4 01 00 00 00 C8 E2 C1 C0 01 01 01 10 F7 03 00 0F 00 00 This request is asking for data from the server with address 1, data type 30 (digital), and the data points 3-15 Once again, very sorry for the poor quality dev log, but I just wanted to get an update out before I dug myself into an even deeper hole. See you guys later!
IM FREEEEE I FINALLY finished writing the write_data() function. Now full packet generation, with a request, and a reply is complete! Litterly the only thing left to do is make the ui. I AM DONE WITH THE BACKEND!!!!! I have included a handy guide to the output bellow. Instead of another picture of my terminal, you guys get to enjoy some color coded google docs!
Added the data generation, request creation, and response creation to the client and server. You can see a demo below. Not a giant change, just integrating the the new functions into the Client and Server.
Just finished the Server-Client loop, as well as overhawling the parser binary. We are ready to SHIP!
Ships:
What did you make? I built a partial implementation of DNP3 in C, along with a TCP client/server simulator and an interactive packet parser. DNP3 is a communication protocol used in SCADA systems, including power utilities and water management. It lets equipment at remote sites send measurements and status information to control centers. The protocol is decades old and widely used, but finding detailed, freely available documentation was surprisingly difficult. My project implements a small subset of it so you can generate data, exchange packets between programs, and inspect what those packets contain. Why was it challenging? The hardest part was turning the protocol’s packet layouts into working C code. DNP3 originated in serial communication, and carrying its frames over TCP meant handling the fact that one network read doesn’t necessarily equal one complete packet. This was also my first big C project. Coming from Java, I had to get comfortable with pointers, manual memory handling, sockets, and the difference between a struct’s layout in memory and the bytes a protocol expects. Struct padding caused a lot more trouble than I expected 😭. I also took a roughly two-month break. Returning to code I’d written while still learning C was a challenge of its own, especially where I hadn’t used consistent conventions or documented my decisions. What are you proud of? Mostly, that I stuck with it. This project pushed me through problems that initially felt impossible and taught me how to break them down, investigate them, and keep going. I understand memory layout, byte order, networking, and C much better now than when I started. Seeing the client request data, the server build a response, and the parser turn those bytes into readable fields made that work feel worth it. What should people know before using it? Read the README first! It explains how to build the programs, configure connections, and use the supported packet formats. This is a partial implementation, so it won’t interpret every DNP3 packet. For a quick demo: Start the server. Its default port is 48188. Choose Group 1, Variation 2 for binary values with flags, or Group 30, Variation 1 for analog values with flags. Use a small point range, such as 0–7. Start the client, enter port 48188, and enter 0 as the address to use localhost. Copy a complete reply from the client’s output into the parser. Join the hex bytes into one line and leave out the surrounding log messages. (certain consoles will do this automatically hint hint vscode...
|
1793659988.746861
|
1793746388.746861
|
|
18441
|
dnschat by @moriaan | Stardance
|
moriaan
|
0
|
3.14
|
0
|
[]
|
[{"post_id": 8591, "ts": "2026 [{"post_id": 8591, "ts": "2026-06-14T09:08:12Z", "hours": 3.1431, "text": "Created base32 encoding and decoding algorithms It may look like the program just copies the string to the “decoded_str” output but it takes the output from the encode algorithm to decode again."}]...
|
Title: dnschat by @moriaan | Stardance
Devlogs:
C Title: dnschat by @moriaan | Stardance
Devlogs:
Created base32 encoding and decoding algorithms It may look like the program just copies the string to the “decoded_str” output but it takes the output from the encode algorithm to decode again....
|
1793339300.1791892
|
1793944100.1791892
|
|
43456
|
do it by @naksu | Stardance
|
naksu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: do it by @naksu | Stardance
|
1793224418.0449827
|
1793829218.0449827
|
|
4103
|
docify by @mehar | Stardance
|
mehar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: docify by @mehar | Stardance
|
1793242101.4178255
|
1793846901.4178255
|
|
65237
|
docker-vps-manager by @michael_macmullen | Stardan docker-vps-manager by @michael_macmullen | Stardance...
|
michael_macmullen
|
0
|
0.72
|
0
|
[]
|
[{"post_id": 72885, "ts": "202 [{"post_id": 72885, "ts": "2026-09-23T22:45:54Z", "hours": 0.7192, "text": "Simple Manager Classes for Docker Containers Created a simple (WIP) manager class for handling docker containers specifically virtual servers for future implementation of VPSs."}]...
|
Title: docker-vps-manager by @michael_macmullen | Title: docker-vps-manager by @michael_macmullen | Stardance
Devlogs:
Simple Manager Classes for Docker Containers Created a simple (WIP) manager class for handling docker containers specifically virtual servers for future implementation of VPSs....
|
1793699270.2344477
|
1794304070.2344477
|
|
57529
|
doctor strange by @slayer-EX | Stardance
|
slayer-EX
|
0
|
0.48
|
0
|
[]
|
[{"post_id": 62234, "ts": "202 [{"post_id": 62234, "ts": "2026-09-05T14:36:16Z", "hours": 0.4836, "text": "today i worked on my openCV library and some basic things"}]...
|
Title: doctor strange by @slayer-EX | Stardance
D Title: doctor strange by @slayer-EX | Stardance
Devlogs:
today i worked on my openCV library and some basic things...
|
1793443842.6158254
|
1794048642.6158254
|
|
38804
|
doddle cat ware by @Slear69_githud | Stardance
|
Slear69_githud
|
2
|
13.0
|
47
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T20:46:37Z", "hours": 6.0, "multiplier": 7.32, "payout": 47, "blessing": "neutral", "text": "in this ship there are 5 game in total andd yess like this is :)", "repo": "https://github.com/slear69/catt_ware", "demo": "https://catss-lovee.itch.io/doddle-cats-ware67"}, {"ship_num": 2, "ts": "2026-07-29T17:56:56Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "okkkk this is the project the last game is not that good but i will try to add animations", "repo": "https://github.com/slear69/catt_ware", "demo": "https://catss-lovee.itch.io/doddle-cats-ware67"}]...
|
[{"post_id": 65570, "ts": "202 [{"post_id": 65570, "ts": "2026-09-10T19:54:07Z", "hours": 2.8553, "text": "in the 5ft game you have to PET THE CAT :3 12 time with a and d"}, {"post_id": 64682, "ts": "2026-09-09T08:45:30Z", "hours": 1.8453, "text": "4th minigame :) in here you have to dodge the incoming water"}, {"post_id": 63845, "ts": "2026-09-07T20:32:07Z", "hours": 1.7367, "text": "New stuff : 1. new font , 2. new animation , and better 3rd game"}, {"post_id": 37171, "ts": "2026-07-29T17:55:26Z", "hours": 1.3411, "text": "FOR EVRY ONE WHO WILLMAKE THIS MISSON !!!!! if you want to post it on itch io the seance have to be in the same folder where everything is i mean in the ress: \\ folder this was the problem for me i hope it helps"}, {"post_id": 36701, "ts": "2026-07-28T22:31:10Z", "hours": 5.3025, "text": "i have most of the game done only the player left"}]...
|
Title: doddle cat ware by @Slear69_githud | Starda Title: doddle cat ware by @Slear69_githud | Stardance
Devlogs:
i have most of the game done only the player left
FOR EVRY ONE WHO WILLMAKE THIS MISSON !!!!! if you want to post it on itch io the seance have to be in the same folder where everything is i mean in the ress: \ folder this was the problem for me i hope it helps
New stuff : 1. new font , 2. new animation , and better 3rd game
4th minigame :) in here you have to dodge the incoming water
in the 5ft game you have to PET THE CAT :3 12 time with a and d
Ships:
okkkk this is the project the last game is not that good but i will try to add animations
in this ship there are 5 game in total andd yess like this is :)...
|
1793681639.9282222
|
1793768039.9282222
|
|
61243
|
dodge by @neerajthapa | Stardance
|
neerajthapa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dodge by @neerajthapa | Stardance
|
1793648899.494617
|
1794253699.494617
|
|
63382
|
doing sumthing with python game ig by @TNT | Stard doing sumthing with python game ig by @TNT | Stardance...
|
TNT
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: doing sumthing with python game ig by @TNT Title: doing sumthing with python game ig by @TNT | Stardance...
|
1793660207.5243108
|
1794265007.5243108
|
|
59517
|
doki-clicker! by @nic | Stardance
|
nic
|
0
|
2.02
|
0
|
[]
|
[{"post_id": 66864, "ts": "202 [{"post_id": 66864, "ts": "2026-09-12T19:59:40Z", "hours": 2.0167, "text": "doki-clicker devlog #1 made a simple DDLC-themed clicker game with some JS tutorials! also learned how to make my first animation ever in VS code planned features: shop upgrades; for more dokis per second, decorations for Sayori, or change the character (Yuri, Natsuki, Monika) make Sayori cycle through different sprites the more dokis are collected background music toggle! wallpaper settings (?)"}]...
|
Title: doki-clicker! by @nic | Stardance
Devlogs: Title: doki-clicker! by @nic | Stardance
Devlogs:
doki-clicker devlog #1 made a simple DDLC-themed clicker game with some JS tutorials! also learned how to make my first animation ever in VS code planned features: shop upgrades; for more dokis per second, decorations for Sayori, or change the character (Yuri, Natsuki, Monika) make Sayori cycle through different sprites the more dokis are collected background music toggle! wallpaper settings (?)...
|
1793563039.9892168
|
1794167839.9892168
|
|
63004
|
domain recon by @ego | Stardance
|
ego
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: domain recon by @ego | Stardance
|
1793659765.699643
|
1794264565.699643
|
|
46689
|
donOS X by @boredon | Stardance
|
boredon
|
1
|
26.0
|
389
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T17:02:11Z", "hours": 26.0, "multiplier": 12.71, "payout": 389, "blessing": "neutral", "text": "What did you make? I made a web-based operating system inspired by y2k aesthetics and webcore, with a design language created to be unique. What was challenging? The bit that took the longest was actually nailing the design to go forward with, but that was just one of many struggles. Getting the screen to fit perfectly inside the CRT monitor, as well as applying the overlay for the 3D effect, forced me to dive deeper into CSS more than I ever have and discover this absolute gem called cqi. This was also my first time ever using JavaScript seriously, so learning how to store things locally, build functions and map those functions to elements was definitely a steep hill to climb, and I wouldn’t say I’ve reached the peak quite yet. However, this projects has taught me a lot about JavaScript syntaxing and best practices, which I plan to implement extensively in future projects. What are you proud of? Honestly? Everything! It was a really daunting task at first, but the hardest part of anything is starting. Once I started, I picked up a momentum that was pretty much impossible to stop, if it weren’t for the time constraints of course (I have school very soon). I’m proud of the JavaScript I’ve learnt, however basic it was, and I’m glad I had the opportunity to dive headfirst into something I’ve never dabbled in before. Any last words, buckaroo? I plan to add a LOT to this project in the near future, and I’m mobilizing as much time as I can to invest in this project. If you have the time, please let me know what else I can implement as you give feedback. …oh…and also… “Tails is the best fictional character in the universe,” I say as they drag me to the padded room…", "repo": "https://github.com/Donald-Mutuku/donOS-X", "demo": "https://donald-mutuku.github.io/donOS-X/"}]...
|
[{"post_id": 53910, "ts": "202 [{"post_id": 53910, "ts": "2026-08-24T16:49:04Z", "hours": 4.5711, "text": "webOS devlog 5 two-in-one?? paint app and start menu! in record time (yes, 4 hours is record time), i managed to create a basic painting app and a start menu! carrying over my knowledge about localStorage to making the save and new functions of Paint really sped things up. that said, setting up the viewport of the canvas so that you could edit a whole screen worth of content was a bit of a headache: i tried setting the paint window to just clip content, but that meant when it was resized from a larger to smaller then larger size again, only the content visible in the smaller size was preserved. so i had to set up a big, invisible viewport and a window so that you can scroll the viewport, and the whole beautiful art you made can be restored. features included in Paint™: draw. can u believe that? can u believe u can draw in a Paint app? change the brush colour (i know, mindblowing) fill the canvas with your choice of colour erase (this took me wayyyy too long to figure out wth) make multiple paintings and save each. that’s right, u can make and save as many incomplete art panels as the average manga artist (no shade). view all of your paintings. each painting is saved like a clickable file on the desktop. that’s so cool, as long as you don’t refresh the page because idk how to write to ur pc storage. sue me. start menu was very easy, probably cuz it’s so basic but i’m not really building it beyond that for now. unfortunately for the 0.5 people that have been following along, this might be my last devlog… before my first ship! i want to account for all the progress i’ve made thus far, so i’ll be shipping the first rendition of donOS X later today for the world to enjoy (or hate on, whichever fits ur personality). thanks for reading! like this devlog. now."}, {"post_id": 53302, "ts": "2026-08-23T19:18:22Z", "hours": 6.7169, "text": "webOS devlog 4 notepad babyyy!! update: you can now try out my website live on my project page! go on, treat yourself… my coding efficiency needs to be studied…. wdym 6 hours for a notepad app… anywayss, i got it done nice and clean, and now i have something actually functional!! and the best part is, i did it 99% without AI!! the all-new Notepad™ features: bold and italic formatting. now your notes look expressive . whoop whoop the ability to save your notes to the desktop! as long as you don’t refresh your tab, your cute little notes stay on the desktop, with your questionably long names dynamically fitting with some fancy flexbox formatting the ability to make NEW notes. that’s right, you can populate this poor desktop with a bajillion notes if you want, as long as bajllion means less than around 20. don’t push it buddy. soon: tails appears if you call out to him 👀👀👀 things i’ll definitely do in the next devlog: manage time properly (yikes) browser. what’s a desktop without a means to doomscroll a game. if i can’t code solitaire, sorry guys, pong is the best i can do ….tails…. ok byebye"}, {"post_id": 52385, "ts": "2026-08-22T14:37:10Z", "hours": 3.4147, "text": "webOS devlog 3 draggable and closable windows!! i need to speed this up wthhh but yeah, u read the title. we now have proper dragging windows. last time, they cursor would fly off screen if u dragged too far (it still kinda does if u shake the windows too much, but no idea how to fix that yet), but now, they, y’know. Drag hmm what else. oh, right. i added desktop icons, so that you can access your favourite time-wasting apps more efficiently close buttons, so that you can kill your favorite time-wasting apps. sidenote on this, this took longest because the guide initially just set it up for one window, so i had to basically learn javascript myself to learn how to apply it to all windows. Hope. Tails!!!! not enough yet tho >:("}, {"post_id": 51876, "ts": "2026-08-21T19:15:02Z", "hours": 3.1472, "text": "webOS devlog 2 welcome screen!!! yippee i managed to make my welcome screen, fitting neatly inside a draggable window template which i’ll apply to other windows in the future. this took way longer than expected again, mostly because the drag function allowed the user to drag beyond the screen boundaries, which i fixed by adding clampPosition function that ensures the window never crosses the screen’s dimensions. i also created custom window buttons and dialog buttons, though none of them are functional just yet. things to do: more Tails. duh. make the window buttons do stuff add desktop icons games?? 👀👀 (foreshadowing x2) see y’all tomorrow. i’m so tired"}, {"post_id": 51534, "ts": "2026-08-21T09:23:55Z", "hours": 7.6553, "text": "webOS devlog 1 seven hours over 3 days for… almost nothing huh 😭😭. i actually spent most of this time trying to decide what design style i’d use. i tried mimicking the Wii U, then the Wii, then the PS VITA, then i read the mission requirements and realized it needs to have draggable windows … sigh…. anyway, i managed to set the base desktop for my OS with a LOT of enhancements, including: a CRT monitor frame, complete with shadows and gradients to create the illusion of 3 dimensions great responsiveness to ensure the monitor maintains its aspect ratio while fitting on practically any screen a custom cursor within the screen to mimic the old windows XP look a desktop wallpaper. it really is cool enough to have its own bullet point problems i faced? oh, boy. first of all, i had no idea how responsiveness actually worked, so i initially set all my units in px and the layout would break horribly on any display other than mine. so i had to learn to use cqi units instead and change EVERY. SINGLE. ONE. then i spent about an hour trying to figure out why everything was still broken and the gradients weren’t working, only to realize i hadn’t linked my .css file in the header. AAAAA what i’m going to add the welcome screen (should’ve been the first thing bruh) draggable windows Tails, because… Tails games? 👀👀 ok see y’all tomorrow (or probably later today yayaya)"}]...
|
Title: donOS X by @boredon | Stardance
Devlogs:
w Title: donOS X by @boredon | Stardance
Devlogs:
webOS devlog 1 seven hours over 3 days for… almost nothing huh 😭😭. i actually spent most of this time trying to decide what design style i’d use. i tried mimicking the Wii U, then the Wii, then the PS VITA, then i read the mission requirements and realized it needs to have draggable windows … sigh…. anyway, i managed to set the base desktop for my OS with a LOT of enhancements, including: a CRT monitor frame, complete with shadows and gradients to create the illusion of 3 dimensions great responsiveness to ensure the monitor maintains its aspect ratio while fitting on practically any screen a custom cursor within the screen to mimic the old windows XP look a desktop wallpaper. it really is cool enough to have its own bullet point problems i faced? oh, boy. first of all, i had no idea how responsiveness actually worked, so i initially set all my units in px and the layout would break horribly on any display other than mine. so i had to learn to use cqi units instead and change EVERY. SINGLE. ONE. then i spent about an hour trying to figure out why everything was still broken and the gradients weren’t working, only to realize i hadn’t linked my .css file in the header. AAAAA what i’m going to add the welcome screen (should’ve been the first thing bruh) draggable windows Tails, because… Tails games? 👀👀 ok see y’all tomorrow (or probably later today yayaya)
webOS devlog 2 welcome screen!!! yippee i managed to make my welcome screen, fitting neatly inside a draggable window template which i’ll apply to other windows in the future. this took way longer than expected again, mostly because the drag function allowed the user to drag beyond the screen boundaries, which i fixed by adding clampPosition function that ensures the window never crosses the screen’s dimensions. i also created custom window buttons and dialog buttons, though none of them are functional just yet. things to do: more Tails. duh. make the window buttons do stuff add desktop icons games?? 👀👀 (foreshadowing x2) see y’all tomorrow. i’m so tired
webOS devlog 3 draggable and closable windows!! i need to speed this up wthhh but yeah, u read the title. we now have proper dragging windows. last time, they cursor would fly off screen if u dragged too far (it still kinda does if u shake the windows too much, but no idea how to fix that yet), but now, they, y’know. Drag hmm what else. oh, right. i added desktop icons, so that you can access your favourite time-wasting apps more efficiently close buttons, so that you can kill your favorite time-wasting apps. sidenote on this, this took longest because the guide initially just set it up for one window, so i had to basically learn javascript myself to learn how to apply it to all windows. Hope. Tails!!!! not enough yet tho >:(
webOS devlog 4 notepad babyyy!! update: you can now try out my website live on my project page! go on, treat yourself… my coding efficiency needs to be studied…. wdym 6 hours for a notepad app… anywayss, i got it done nice and clean, and now i have something actually functional!! and the best part is, i did it 99% without AI!! the all-new Notepad™ features: bold and italic formatting. now your notes look expressive . whoop whoop the ability to save your notes to the desktop! as long as you don’t refresh your tab, your cute little notes stay on the desktop, with your questionably long names dynamically fitting with some fancy flexbox formatting the ability to make NEW notes. that’s right, you can populate this poor desktop with a bajillion notes if you want, as long as bajllion means less than around 20. don’t push it buddy. soon: tails appears if you call out to him 👀👀👀 things i’ll definitely do in the next devlog: manage time properly (yikes) browser. what’s a desktop without a means to doomscroll a game. if i can’t code solitaire, sorry guys, pong is the best i can do ….tails…. ok byebye
webOS devlog 5 two-in-one?? paint app and start menu! in record time (yes, 4 hours is record time), i managed to create a basic painting app and a start menu! carrying over my knowledge about localStorage to making the save and new functions of Paint really sped things up. that said, setting up the viewport of the canvas so that you could edit a whole screen worth of content was a bit of a headache: i tried setting the paint window to just clip content, but that meant when it was resized from a larger to smaller then larger size again, only the content visible in the smaller size was preserved. so i had to set up a big, invisible viewport and a window so that you can scroll the viewport, and the whole beautiful art you made can be restored. features included in Paint™: draw. can u believe that? can u believe u can draw in a Paint app? change the brush colour (i know, mindblowing) fill the canvas with your choice of colour erase (this took me wayyyy too long to figure out wth) make multiple paintings and save each. that’s right, u can make and save as many incomplete art panels as the average manga artist (no shade). view all of your paintings. each painting is saved like a clickable file on the desktop. that’s so cool, as long as you don’t refresh the page because idk how to write to ur pc storage. sue me. start menu was very easy, probably cuz it’s so basic but i’m not really building it beyond that for now. unfortunately for the 0.5 people that have been following along, this might be my last devlog… before my first ship! i want to account for all the progress i’ve made thus far, so i’ll be shipping the first rendition of donOS X later today for the world to enjoy (or hate on, whichever fits ur personality). thanks for reading! like this devlog. now.
Ships:
What did you make? I made a web-based operating system inspired by y2k aesthetics and webcore, with a design language created to be unique. What was challenging? The bit that took the longest was actually nailing the design to go forward with, but that was just one of many struggles. Getting the screen to fit perfectly inside the CRT monitor, as well as applying the overlay for the 3D effect, forced me to dive deeper into CSS more than I ever have and discover this absolute gem called cqi. This was also my first time ever using JavaScript seriously, so learning how to store things locally, build functions and map those functions to elements was definitely a steep hill to climb, and I wouldn’t say I’ve reached the peak quite yet. However, this projects has taught me a lot about JavaScript syntaxing and best practices, which I plan to implement extensively in future projects. What are you proud of? Honestly? Everything! It was a really daunting task at first, but the hardest part of anything is starting. Once I started, I picked up a momentum that was pretty much impossible to stop, if it weren’t for the time constraints of course (I have school very soon). I’m proud of the JavaScript I’ve learnt, however basic it was, and I’m glad I had the opportunity to dive headfirst into something I’ve never dabbled in before. Any last words, buckaroo? I plan to add a LOT to this project in the near future, and I’m mobilizing as much time as I can to invest in this project. If you have the time, please let me know what else I can implement as you give feedback. …oh…and also… “Tails is the best fictional character in the universe,” I say as they drag me to the padded room…...
|
1793703451.7340348
|
1793789851.7340348
|
|
45307
|
donewtab by @boredon | Stardance
|
boredon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: donewtab by @boredon | Stardance
|
1792925534.7691917
|
1793789534.7691917
|
|
57029
|
dongle by @Sid | Stardance
|
Sid
|
0
|
6.74
|
0
|
[]
|
[{"post_id": 62684, "ts": "202 [{"post_id": 62684, "ts": "2026-09-06T05:27:35Z", "hours": 0.85, "text": "made the bom and added parts in cart to find the amount to request"}, {"post_id": 62663, "ts": "2026-09-06T04:19:30Z", "hours": 4.2158, "text": "Finally completed the PCB! I also added a cool B.Silk cat doodle and made a case for the dongle. The only thing I’m not completely happy with is that the cover hides the B.Silk artwork. Also, wrote a simple code to blink one LED!"}, {"post_id": 59484, "ts": "2026-09-01T10:58:21Z", "hours": 1.6789, "text": "Dongle!!!! Created the schematics and just started working on the PCB editor! Was facing a few issues, but I’ll figure them out and fix them later."}]...
|
Title: dongle by @Sid | Stardance
Devlogs:
Dongle Title: dongle by @Sid | Stardance
Devlogs:
Dongle!!!! Created the schematics and just started working on the PCB editor! Was facing a few issues, but I’ll figure them out and fix them later.
Finally completed the PCB! I also added a cool B.Silk cat doodle and made a case for the dongle. The only thing I’m not completely happy with is that the cover hides the B.Silk artwork. Also, wrote a simple code to blink one LED!
made the bom and added parts in cart to find the amount to request...
|
1793411612.9609969
|
1794016412.9609969
|
|
6584
|
donk15 hackpad by @MomoMcDonkey | Stardance
|
MomoMcDonkey
|
0
|
2.68
|
0
|
[]
|
[{"post_id": 9243, "ts": "2026 [{"post_id": 9243, "ts": "2026-06-15T15:00:39Z", "hours": 0.5528, "text": "I added 3d models!"}, {"post_id": 5600, "ts": "2026-06-09T13:33:29Z", "hours": 1.2142, "text": "pcb is almost finished!"}, {"post_id": 2207, "ts": "2026-06-04T16:08:21Z", "hours": 0.9153, "text": "currently routing my pcb!"}]...
|
Title: donk15 hackpad by @MomoMcDonkey | Stardance Title: donk15 hackpad by @MomoMcDonkey | Stardance
Devlogs:
currently routing my pcb!
pcb is almost finished!
I added 3d models!...
|
1793382815.399078
|
1793987615.399078
|
|
13077
|
donkOS by @MomoMcDonkey | Stardance
|
MomoMcDonkey
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: donkOS by @MomoMcDonkey | Stardance
|
1793360942.736446
|
1793965742.736446
|
|
44461
|
donline!!! by @boredon | Stardance
|
boredon
|
2
|
12.0
|
14
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-12T09:17:42Z", "hours": 1.0, "multiplier": 14.45, "payout": 14, "blessing": "neutral", "text": "(reship so that it can go into rating!) I made a newspaper-themed personal website, with lots of info and lots of Tails. This is my first time ever making an actual website. I initially planned for it to be way simpler, but the idea of a newspaper as a website was irresistible and I had to pursue it. The most challenging part by far was figuring out how to format divs that would accommodate the hybrid spacing and style of traditional newspapers. I had to tinker a lot with flexboxes. On top of that, I also had to labour on making the website as responsive as possible on all screen sizes, which I achieved with clever decisions on the divs (definitely not just “width: 100%” on everything). I’m so glad with how everything turned out and I hope you guys will enjoy reading it as much as I enjoyed making it (sometimes, when it wasn’t bugging out)! Please give me feedback on stuff I should improve or add, as I will be updating this frequently even after it ships!", "repo": "https://github.com/Donald-Mutuku/the-caffeine-herald", "demo": "https://donald-mutuku.github.io/the-caffeine-herald/"}, {"ship_num": 2, "ts": "2026-08-10T22:17:32Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a newspaper-themed personal website, with lots of info and lots of Tails. This is my first time ever making an actual website. I initially planned for it to be way simpler, but the idea of a newspaper as a website was irresistible and I had to pursue it. The most challenging part by far was figuring out how to format divs that would accommodate the hybrid spacing and style of traditional newspapers. I had to tinker a lot with flexboxes. On top of that, I also had to labour on making the website as responsive as possible on all screen sizes, which I achieved with clever decisions on the divs (definitely not just “width: 100%” on everything). I’m so glad with how everything turned out and I hope you guys will enjoy reading it as much as I enjoyed making it (sometimes, when it wasn’t bugging out)! Please give me feedback on stuff I should improve or add, as I will be updating this frequently even after it ships!", "repo": "https://github.com/Donald-Mutuku/the-caffeine-herald", "demo": "https://donald-mutuku.github.io/the-caffeine-herald/"}]...
|
[{"post_id": 45657, "ts": "202 [{"post_id": 45657, "ts": "2026-08-12T09:14:08Z", "hours": 1.0033, "text": "icing on the cake: stickers!! i learnt a little bit of JavaScript today, especially focusing on mouse interactions, and i figured i’d apply it to my website. and what better way to do that than adding stickers! i was so sure they were gonna take 15 minutes tops but nope. for some reason, the stickers initially just vanished when you tried to grab them, and i spent about an hour trying to fix it, only to realize the problem was the sticker-container being set to position: relative; . that was literally it :// anyways, i think i’ll stop tinkering with this website for now, but i will add stickers, maybe copious amounts for all you sticker-loving maniacs. ok byebye! to-do: add more tails"}, {"post_id": 44847, "ts": "2026-08-10T21:35:37Z", "hours": 3.3286, "text": "day 4 of making my personal website: final commit! today was so packed oml. i might be ready to ship this already! there are so many changes i introduced today, including changing the header to a more readable “THE CAFFEINE HERALD” making a carousel for my artworks (day 2 me would be proud) adding 2 google docs embeds so that i can bless my viewers with my beautiful works of literature added a whole column of spotify embed widgets so that y’all can enjoy my atrocious music taste added a music recommendations article so that you can not only listen to, but read about my atrocious music taste added a projects section with, get this, actual projects! added images from my gallery because there was empty space lol i’ll yap a bit about my design choices: the orange accent is a call back to tails, who’s basically part of me atp the off-white background is meant to mimic old fading newspapers the terminal-like font (Iosevka Charon) is meant to contrast with the old design, so the result is a fresh combo of digital and analog media. anyways, i’m so proud of how this turned out and i can’t wait for you guys to be able to check it out. it’s all done (in only 11 hours!) and i’ll ship it later today. yayayayayay!"}, {"post_id": 43816, "ts": "2026-08-09T07:52:12Z", "hours": 2.7344, "text": "day 3 of making my personal website. i completely overhauled the design to match this newspaper aesthetic and i really love how it looks!! getting the columns right was def the most difficult part, but now that i got it down, i only need to add a couple of sections and i’ll be done! yay!"}, {"post_id": 42944, "ts": "2026-08-07T22:39:45Z", "hours": 0.9319, "text": "day third time’s a charm i spent WAYYYY too much time on Figma (pls add hackatime to figma 😭) drafting how i want my website to look, and i think I got something i like! i settled for a newspaper-layout style website when i realized there’s no better way to cram info onto a screen than by packing it in columns. i have so many idea planned for this, including interactive advertisements and maybe even a music widget, and i am so excited to see how it’ll turn out. for today tho, i only managed to make a neat little header for my newspaper, which definitely took a reasonable amount of time ( cough 55 minutes cough ). can’t wait to make the rest tomorrow!"}, {"post_id": 42794, "ts": "2026-08-07T18:08:03Z", "hours": 2.1894, "text": "day two of making my personal website! finished the about me section and moving on to the projects page… and i’m stuck again. i tried making a carousel for my images but it no-clipped out of the page. so i tried to lock them in a container, but now the carousel doesn’t move. so i got rid of the carousel and stacked the images, and now ALL of them clip out of the container. ended up giving up cuz it got too late, but i’ll fix it tomorrow promise 🙏 i’ve also finally decided that i’ll completely change the design of my website, and i got the perfect idea while reading a newspaper (subtle foreshadowing?? 👀👀👀) see y’all tomorrow :DD"}, {"post_id": 42192, "ts": "2026-08-06T20:07:52Z", "hours": 1.3586, "text": "and so it begins… day 1 of making my personal website and i am… so lost. i have not done html/css in quite a while, but i was way rustier than i expected and i spent WAY too long trying to figure out how to organize and format divs. (why does align-items:center; not always, you know, align items in the center??) i’m not too sure about where i’m going with the design, but it doesn’t look too bad honestly. by far my proudest achievement was figuring out how to make the bullet point lists all by myself . even if it’s like, what, 2 lines of code, i love how it looks and that it’s not AI. to-do: design the projects page (doesn’t exist rn) add more stuff to my home page add more tails (most important)"}]...
|
Title: donline!!! by @boredon | Stardance
Devlogs Title: donline!!! by @boredon | Stardance
Devlogs:
and so it begins… day 1 of making my personal website and i am… so lost. i have not done html/css in quite a while, but i was way rustier than i expected and i spent WAY too long trying to figure out how to organize and format divs. (why does align-items:center; not always, you know, align items in the center??) i’m not too sure about where i’m going with the design, but it doesn’t look too bad honestly. by far my proudest achievement was figuring out how to make the bullet point lists all by myself . even if it’s like, what, 2 lines of code, i love how it looks and that it’s not AI. to-do: design the projects page (doesn’t exist rn) add more stuff to my home page add more tails (most important)
day two of making my personal website! finished the about me section and moving on to the projects page… and i’m stuck again. i tried making a carousel for my images but it no-clipped out of the page. so i tried to lock them in a container, but now the carousel doesn’t move. so i got rid of the carousel and stacked the images, and now ALL of them clip out of the container. ended up giving up cuz it got too late, but i’ll fix it tomorrow promise 🙏 i’ve also finally decided that i’ll completely change the design of my website, and i got the perfect idea while reading a newspaper (subtle foreshadowing?? 👀👀👀) see y’all tomorrow :DD
day third time’s a charm i spent WAYYYY too much time on Figma (pls add hackatime to figma 😭) drafting how i want my website to look, and i think I got something i like! i settled for a newspaper-layout style website when i realized there’s no better way to cram info onto a screen than by packing it in columns. i have so many idea planned for this, including interactive advertisements and maybe even a music widget, and i am so excited to see how it’ll turn out. for today tho, i only managed to make a neat little header for my newspaper, which definitely took a reasonable amount of time ( cough 55 minutes cough ). can’t wait to make the rest tomorrow!
day 3 of making my personal website. i completely overhauled the design to match this newspaper aesthetic and i really love how it looks!! getting the columns right was def the most difficult part, but now that i got it down, i only need to add a couple of sections and i’ll be done! yay!
day 4 of making my personal website: final commit! today was so packed oml. i might be ready to ship this already! there are so many changes i introduced today, including changing the header to a more readable “THE CAFFEINE HERALD” making a carousel for my artworks (day 2 me would be proud) adding 2 google docs embeds so that i can bless my viewers with my beautiful works of literature added a whole column of spotify embed widgets so that y’all can enjoy my atrocious music taste added a music recommendations article so that you can not only listen to, but read about my atrocious music taste added a projects section with, get this, actual projects! added images from my gallery because there was empty space lol i’ll yap a bit about my design choices: the orange accent is a call back to tails, who’s basically part of me atp the off-white background is meant to mimic old fading newspapers the terminal-like font (Iosevka Charon) is meant to contrast with the old design, so the result is a fresh combo of digital and analog media. anyways, i’m so proud of how this turned out and i can’t wait for you guys to be able to check it out. it’s all done (in only 11 hours!) and i’ll ship it later today. yayayayayay!
icing on the cake: stickers!! i learnt a little bit of JavaScript today, especially focusing on mouse interactions, and i figured i’d apply it to my website. and what better way to do that than adding stickers! i was so sure they were gonna take 15 minutes tops but nope. for some reason, the stickers initially just vanished when you tried to grab them, and i spent about an hour trying to fix it, only to realize the problem was the sticker-container being set to position: relative; . that was literally it :// anyways, i think i’ll stop tinkering with this website for now, but i will add stickers, maybe copious amounts for all you sticker-loving maniacs. ok byebye! to-do: add more tails
Ships:
I made a newspaper-themed personal website, with lots of info and lots of Tails. This is my first time ever making an actual website. I initially planned for it to be way simpler, but the idea of a newspaper as a website was irresistible and I had to pursue it. The most challenging part by far was figuring out how to format divs that would accommodate the hybrid spacing and style of traditional newspapers. I had to tinker a lot with flexboxes. On top of that, I also had to labour on making the website as responsive as possible on all screen sizes, which I achieved with clever decisions on the divs (definitely not just “width: 100%” on everything). I’m so glad with how everything turned out and I hope you guys will enjoy reading it as much as I enjoyed making it (sometimes, when it wasn’t bugging out)! Please give me feedback on stuff I should improve or add, as I will be updating this frequently even after it ships!
(reship so that it can go into rating!) I made a newspaper-themed personal website, with lots of info and lots of Tails. This is my first time ever making an actual website. I initially planned for it to be way simpler, but the idea of a newspaper as a website was irresistible and I had to pursue it. The most challenging part by far was figuring out how to format divs that would accommodate the hybrid spacing and style of traditional newspapers. I had to tinker a lot with flexboxes. On top of that, I also had to labour on making the website as responsive as possible on all screen sizes, which I achieved with clever decisions on the divs (definitely not just “width: 100%” on everything). I’m so glad with how everything turned out and I hope you guys will enjoy reading it as much as I enjoyed making it (sometimes, when it wasn’t bugging out)! Please give me feedback on stuff I should improve or add, as I will be updating this frequently even after it ships!...
|
1793689022.8267944
|
1793775422.8267944
|
|
31065
|
dook bot by @Aliexpress_enjoyer | Stardance
|
Aliexpress_enjoyer
|
1
|
16.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T04:01:00Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hi! I made a youtube downloader music discord bot primarily for my friend group. I had previously attempted something two years prior and it was beloved, but it permanently died since a library I previously used was unmaintained and eventually couldn’t keep up with the youtube updates, and I didn’t really have any idea of what I was doing at the time. This time, I’ve made a version that I like a lot more, and am quite proud of it. One notable feature is the ability to set a personal playlist, allowing for people to listen to each other’s playlists. I struggled with motivation while making this project, as there was only a little bit of social pressure to finish it. You can tell since near the end of the project, I added some random geolocating features.. Anyway, thanks for reading, enjoy!", "repo": "https://github.com/boredguywithacomputer/dook-bot", "demo": "https://discord.gg/ZBbQc37vv"}]...
|
[{"post_id": 64528, "ts": "202 [{"post_id": 64528, "ts": "2026-09-09T00:24:03Z", "hours": 1.0678, "text": "Prepared for shipping. I figured working on this project got kind of repetitive and boring especially since I have significantly more fun projects coming up, so I decided to wrap this bot up. I got rid of commented out unused code, and hid my api keys. I also optimized some things, such as removing unnecessary logic. More importantly, I accidentally fixed an uncommon error that has randomly crashed the bot before, which somehow never got caught in my catch loops. This was because there was logic in the catch handler that caused it to crash again. Anyway I’ll probably ship soon, enjoy"}, {"post_id": 63876, "ts": "2026-09-07T21:35:05Z", "hours": 2.3839, "text": "Failed to add some commands, instead added some weird doxxing features I’ve been dead for a bit as I was sick and also working on another more fun project, but I threw together a openstreetmap geolocating feature, along with a command that gets ssids based on an inputted latitude and longitude, courtesy of WiGle. A major issue was that there were extremely low rate limits (like in the ones digits every day), so I basically could only test it like a couple times every day."}, {"post_id": 60058, "ts": "2026-09-02T05:16:03Z", "hours": 0.3164, "text": "Previously the play command couldn’t accept links, only search queries. Now it can!! I made it hard for myself because my code was spaghettified and I had to use some hacky methods to get around it."}, {"post_id": 59386, "ts": "2026-09-01T05:14:15Z", "hours": 0.5386, "text": "I did some miscellaneous code optimizing, such as converting a bunch of stuff to using the ytdlp-nodejs library."}, {"post_id": 58656, "ts": "2026-08-31T04:37:42Z", "hours": 0.3331, "text": "Fixed a bug where it would play the wrong person’s playlist,. I initially blamed the new feature to disable but it, turned out that I forgot to reset the queue upon running the playlist command."}, {"post_id": 58432, "ts": "2026-08-30T21:01:44Z", "hours": 0.2803, "text": "I made the playlist shuffle feature optional. I also added a secret unrelated command.."}, {"post_id": 58417, "ts": "2026-08-30T20:34:04Z", "hours": 0.4731, "text": "I updated the playlist command to fix certain limitations. Previously, I’ve been using youtube’s api. Did I mention it sucks? It has an annoyingly low limit per day, along with providing limited information. Anyway I hit my daily limit and decided to fix it. I refactored the playlist command by switching to ytdlp-nodejs, which essentially does everything in much cleaner ways."}, {"post_id": 58389, "ts": "2026-08-30T19:57:15Z", "hours": 2.5122, "text": "Added a set playlist command. This allows users to attach a youtube playlist url/id to themselves, so that the /playlist command can play an individual’s playlist. There is also the ability to play someone else’s playlist as long as they set one. I spent most of the time implementing a db."}, {"post_id": 52666, "ts": "2026-08-22T22:29:29Z", "hours": 0.7922, "text": "Fixed the playlist command, added an embed to show current song, and added a skip command All i had to do was wait for a yt-dlp update. In other words, my code fixed itself. Very fun"}, {"post_id": 47910, "ts": "2026-08-16T05:46:02Z", "hours": 3.1097, "text": "Added half of a playlist command, which lets the user play a shuffled verision of someone’s youtube playlist. It was quite annoying since google’s documentation still sucks imo. Consequences of that include situations like me wasting half an hour because the docs told me to use id when the actual thing was supposed to be playlistId. I also had issues with yt-dlp being partially outdated., causing 403s upon downloading videos. Guess I’ll just have to wait a little bit."}, {"post_id": 33901, "ts": "2026-07-24T05:56:39Z", "hours": 1.9811, "text": "Added the music player command to the bot. It first downloads the video using yt-dlp and and then broadcasts it to a voice channel. I basically moved the search code from the previous devlog for this. I did have some issues getting it to play music for the first time, since discord has some niche annoying feature that requires you to set the bot’s intents and i forgot to do that. Eventually, I got it working. It came with some bugs related to file formatting, but they got fixed, and the bot should be working."}, {"post_id": 33856, "ts": "2026-07-24T03:32:58Z", "hours": 0.9606, "text": "Added a feature to search for youtube videos. Was a quick and easy api call, but Google’s documentation kinda sucks. I thought it was just me, but apparently internet people seem to agree. To quote one blog author, “Why has the YouTube API have to suck dongs?” Anyway Google also gives you essentially no search calls a day (100/day), so to bypass that I grabbed a bunch of alts and spun up 5 or more keys which seemed like an appropriate and reasonable amount."}, {"post_id": 23022, "ts": "2026-07-05T19:07:31Z", "hours": 0.8567, "text": "I created and setup the bot. Following the discordjs guide, I made a command handler and a very bare bone slash command."}]...
|
Title: dook bot by @Aliexpress_enjoyer | Stardance Title: dook bot by @Aliexpress_enjoyer | Stardance
Devlogs:
I created and setup the bot. Following the discordjs guide, I made a command handler and a very bare bone slash command.
Added a feature to search for youtube videos. Was a quick and easy api call, but Google’s documentation kinda sucks. I thought it was just me, but apparently internet people seem to agree. To quote one blog author, “Why has the YouTube API have to suck dongs?” Anyway Google also gives you essentially no search calls a day (100/day), so to bypass that I grabbed a bunch of alts and spun up 5 or more keys which seemed like an appropriate and reasonable amount.
Added the music player command to the bot. It first downloads the video using yt-dlp and and then broadcasts it to a voice channel. I basically moved the search code from the previous devlog for this. I did have some issues getting it to play music for the first time, since discord has some niche annoying feature that requires you to set the bot’s intents and i forgot to do that. Eventually, I got it working. It came with some bugs related to file formatting, but they got fixed, and the bot should be working.
Added half of a playlist command, which lets the user play a shuffled verision of someone’s youtube playlist. It was quite annoying since google’s documentation still sucks imo. Consequences of that include situations like me wasting half an hour because the docs told me to use id when the actual thing was supposed to be playlistId. I also had issues with yt-dlp being partially outdated., causing 403s upon downloading videos. Guess I’ll just have to wait a little bit.
Fixed the playlist command, added an embed to show current song, and added a skip command All i had to do was wait for a yt-dlp update. In other words, my code fixed itself. Very fun
Added a set playlist command. This allows users to attach a youtube playlist url/id to themselves, so that the /playlist command can play an individual’s playlist. There is also the ability to play someone else’s playlist as long as they set one. I spent most of the time implementing a db.
I updated the playlist command to fix certain limitations. Previously, I’ve been using youtube’s api. Did I mention it sucks? It has an annoyingly low limit per day, along with providing limited information. Anyway I hit my daily limit and decided to fix it. I refactored the playlist command by switching to ytdlp-nodejs, which essentially does everything in much cleaner ways.
I made the playlist shuffle feature optional. I also added a secret unrelated command..
Fixed a bug where it would play the wrong person’s playlist,. I initially blamed the new feature to disable but it, turned out that I forgot to reset the queue upon running the playlist command.
I did some miscellaneous code optimizing, such as converting a bunch of stuff to using the ytdlp-nodejs library.
Previously the play command couldn’t accept links, only search queries. Now it can!! I made it hard for myself because my code was spaghettified and I had to use some hacky methods to get around it.
Failed to add some commands, instead added some weird doxxing features I’ve been dead for a bit as I was sick and also working on another more fun project, but I threw together a openstreetmap geolocating feature, along with a command that gets ssids based on an inputted latitude and longitude, courtesy of WiGle. A major issue was that there were extremely low rate limits (like in the ones digits every day), so I basically could only test it like a couple times every day.
Prepared for shipping. I figured working on this project got kind of repetitive and boring especially since I have significantly more fun projects coming up, so I decided to wrap this bot up. I got rid of commented out unused code, and hid my api keys. I also optimized some things, such as removing unnecessary logic. More importantly, I accidentally fixed an uncommon error that has randomly crashed the bot before, which somehow never got caught in my catch loops. This was because there was logic in the catch handler that caused it to crash again. Anyway I’ll probably ship soon, enjoy
Ships:
Hi! I made a youtube downloader music discord bot primarily for my friend group. I had previously attempted something two years prior and it was beloved, but it permanently died since a library I previously used was unmaintained and eventually couldn’t keep up with the youtube updates, and I didn’t really have any idea of what I was doing at the time. This time, I’ve made a version that I like a lot more, and am quite proud of it. One notable feature is the ability to set a personal playlist, allowing for people to listen to each other’s playlists. I struggled with motivation while making this project, as there was only a little bit of social pressure to finish it. You can tell since near the end of the project, I added some random geolocating features.. Anyway, thanks for reading, enjoy!...
|
1793720865.326485
|
1793807265.326485
|
|
56428
|
doom by @hridhaannanda20011 | Stardance
|
hridhaannanda20011
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: doom by @hridhaannanda20011 | Stardance
|
1793382709.2142491
|
1793987509.2142491
|
|
54350
|
doom watch by @sammyamd | Stardance
|
sammyamd
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: doom watch by @sammyamd | Stardance
|
1793537443.1585467
|
1794142243.1585467
|
|
47082
|
doom-sl by @dylanjtholen | Stardance
|
dylanjtholen
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: doom-sl by @dylanjtholen | Stardance
|
1793166705.315718
|
1793771505.315718
|
|
25259
|
doomREAL3D by @kan411 | Stardance
|
kan411
|
1
|
10.0
|
74
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-29T21:52:28Z", "hours": 10.0, "multiplier": 7.73, "payout": 74, "blessing": "neutral", "text": "We’ve all seen Doom running on weird hardware, even on a 3D printer display, but have you ever seen Doom printed on a 3D printer? My goal was to make a simple Doom-inspired shooter, but instead of displaying frames on a monitor, it prints the whole map, enemies, and the player on a 3D printer. The game is a basic turn-based shooter with a map loosely inspired by the first stage of Doom. You lose if one of the enemies gets too close to you, and you win when you kill all 4 enemies. You can use automatic printing (which works only with Bambu Studio) or just generate STL files that you can manually open or print. The hardest part was probably getting enemy AI to work. You can try it even if you don’t have a 3D printer, you just need a program that can open STL files. If you need instructions on how to play, visit my GitHub repo.", "repo": "https://github.com/kanal411/doomREAL3D", "demo": "https://github.com/kanal411/doomREAL3D/releases"}]...
|
[{"post_id": 17933, "ts": "202 [{"post_id": 17933, "ts": "2026-06-28T21:32:03Z", "hours": 0.7667, "text": "devlog #5 - Today I added the ability to win, the project is almost ready for ship"}, {"post_id": 17271, "ts": "2026-06-28T00:10:16Z", "hours": 3.6219, "text": "devlog #4 - Today I created github repo, finished automatic printing, and optimized it so loading stl doesn’t take 2 minutes. Also fixed some bugs."}, {"post_id": 15684, "ts": "2026-06-25T14:31:43Z", "hours": 1.5492, "text": "devlog #3 - Today I added shooting and polished the movement system. Also you can now lose when an enemy gets too close to you. At first i was a little bit worried about supports but now i think they are pretty doom-vibed so I’m gonna leave them as they are."}, {"post_id": 15354, "ts": "2026-06-24T23:26:13Z", "hours": 1.6758, "text": "devlog #2 - I made so that enemies try to catch player and implemented controling player from console. Also added so that if an enemy is to close you lose. It still have a couple bugs to fix but after I fix them I can try to automate printing process."}, {"post_id": 15108, "ts": "2026-06-24T15:26:44Z", "hours": 1.9539, "text": "Today I coded map and enemy generation which then gets exported to stl that i can print with my 3d printer. I still have to add enemy AI, player inputs, and automated printing."}]...
|
Title: doomREAL3D by @kan411 | Stardance
Devlogs: Title: doomREAL3D by @kan411 | Stardance
Devlogs:
Today I coded map and enemy generation which then gets exported to stl that i can print with my 3d printer. I still have to add enemy AI, player inputs, and automated printing.
devlog #2 - I made so that enemies try to catch player and implemented controling player from console. Also added so that if an enemy is to close you lose. It still have a couple bugs to fix but after I fix them I can try to automate printing process.
devlog #3 - Today I added shooting and polished the movement system. Also you can now lose when an enemy gets too close to you. At first i was a little bit worried about supports but now i think they are pretty doom-vibed so I’m gonna leave them as they are.
devlog #4 - Today I created github repo, finished automatic printing, and optimized it so loading stl doesn’t take 2 minutes. Also fixed some bugs.
devlog #5 - Today I added the ability to win, the project is almost ready for ship
Ships:
We’ve all seen Doom running on weird hardware, even on a 3D printer display, but have you ever seen Doom printed on a 3D printer? My goal was to make a simple Doom-inspired shooter, but instead of displaying frames on a monitor, it prints the whole map, enemies, and the player on a 3D printer. The game is a basic turn-based shooter with a map loosely inspired by the first stage of Doom. You lose if one of the enemies gets too close to you, and you win when you kill all 4 enemies. You can use automatic printing (which works only with Bambu Studio) or just generate STL files that you can manually open or print. The hardest part was probably getting enemy AI to work. You can try it even if you don’t have a 3D printer, you just need a program that can open STL files. If you need instructions on how to play, visit my GitHub repo....
|
1793649090.1448493
|
1793735490.1448493
|
|
13010
|
doomscroll engine by @mewo | Stardance
|
mewo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: doomscroll engine by @mewo | Stardance
|
1793479803.0142298
|
1794084603.0142298
|
|
70066
|
doomsday cyberdeck by @Adnancyberdeck | Stardance
|
Adnancyberdeck
|
0
|
0.78
|
0
|
[]
|
[{"post_id": 80206, "ts": "202 [{"post_id": 80206, "ts": "2026-10-16T18:50:07Z", "hours": 0.7836, "text": "doomsday inspired cyberdeck"}]...
|
Title: doomsday cyberdeck by @Adnancyberdeck | Sta Title: doomsday cyberdeck by @Adnancyberdeck | Stardance
Devlogs:
doomsday inspired cyberdeck...
|
1793605792.1679177
|
1794210592.1679177
|
|
23498
|
dopamine shopping by @akshanpathe_1 | Stardance
|
akshanpathe_1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dopamine shopping by @akshanpathe_1 | Stard Title: dopamine shopping by @akshanpathe_1 | Stardance...
|
1793551833.9653575
|
1794156633.9653575
|
|
63499
|
dope hackpad :3 by @gabrielb | Stardance
|
gabrielb
|
0
|
2.7
|
0
|
[]
|
[{"post_id": 71785, "ts": "202 [{"post_id": 71785, "ts": "2026-09-21T15:31:33Z", "hours": 1.2297, "text": "after researching how to do a switch matrix in kicad, you could say i’m a professional. I did my own schematic, and… absolutely failed when making the pcb. i simply don’t know how to wire yet :c genuinely so embarrassed of the pcb i wont even put a screenshot here"}, {"post_id": 71253, "ts": "2026-09-20T15:08:00Z", "hours": 1.1164, "text": "after uploading all my files to github (it’s an absolute mess) and switching operating systems to use fusion360, i was really proud of myself. that was until i found out i got my dimensions wrong and the DXF diagram didn’t fit. i think i’ll create the schematic and pcb of my own macropad in kicad instead of the guide’s and i’ll figure out modelling the keyboard housing later"}, {"post_id": 71093, "ts": "2026-09-20T09:04:45Z", "hours": 0.35, "text": "working on the guide 👀 I accidentally finished both the schematic and pcb of the guide and made my own schematic without knowing i had to record it :( so now i am just redoing it 😴"}]...
|
Title: dope hackpad :3 by @gabrielb | Stardance
D Title: dope hackpad :3 by @gabrielb | Stardance
Devlogs:
working on the guide 👀 I accidentally finished both the schematic and pcb of the guide and made my own schematic without knowing i had to record it :( so now i am just redoing it 😴
after uploading all my files to github (it’s an absolute mess) and switching operating systems to use fusion360, i was really proud of myself. that was until i found out i got my dimensions wrong and the DXF diagram didn’t fit. i think i’ll create the schematic and pcb of my own macropad in kicad instead of the guide’s and i’ll figure out modelling the keyboard housing later
after researching how to do a switch matrix in kicad, you could say i’m a professional. I did my own schematic, and… absolutely failed when making the pcb. i simply don’t know how to wire yet :c genuinely so embarrassed of the pcb i wont even put a screenshot here...
|
1793663348.5967665
|
1794268148.5967665
|
|
49697
|
dope mario by @umangarawat24 | Stardance
|
umangarawat24
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dope mario by @umangarawat24 | Stardance
|
1793299672.8591592
|
1793904472.8591592
|
|
31134
|
dope website by @Gnashum | Stardance
|
Gnashum
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dope website by @Gnashum | Stardance
|
1793450973.1262221
|
1794055773.1262221
|
|
32782
|
dorianOS by @dorian_osly | Stardance
|
dorian_osly
|
0
|
0.82
|
0
|
[]
|
[{"post_id": 25013, "ts": "202 [{"post_id": 25013, "ts": "2026-07-08T22:47:05Z", "hours": 0.8233, "text": "getting started on my webOS project :)"}]...
|
Title: dorianOS by @dorian_osly | Stardance
Devlo Title: dorianOS by @dorian_osly | Stardance
Devlogs:
getting started on my webOS project :)...
|
1793217236.794741
|
1793822036.794741
|
|
55654
|
dot dot dot by @hoshi | Stardance
|
hoshi
|
1
|
3.0
|
20
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T14:56:03Z", "hours": 3.0, "multiplier": 6.72, "payout": 20, "blessing": "neutral", "text": "I just made this project because I was bored and I had like two to three hours. Basically, in this game, you start as a small dot that follows your cursor. Avoid bigger dots and eat smaller dots to grow bigger. You also have powers such as shields (auto saves your life) and shockwaves (reduces all the dots’s radius by 50%), those cannot be acquired during the game, so once you use it, it is over for that game. Try to get the lowest time!", "repo": "https://github.com/uuukye/dot", "demo": "https://uuukye.github.io/dot/"}]...
|
[{"post_id": 58957, "ts": "202 [{"post_id": 58957, "ts": "2026-08-31T14:55:38Z", "hours": 0.3408, "text": "bug fixes again (screen resize and others)"}, {"post_id": 58513, "ts": "2026-08-30T22:59:42Z", "hours": 0.3217, "text": "ig im done"}, {"post_id": 58500, "ts": "2026-08-30T22:36:56Z", "hours": 0.9836, "text": "finished the basic powerups, ig its ready to ship after the leaderboard function and a few more changes :D"}, {"post_id": 57626, "ts": "2026-08-29T20:37:44Z", "hours": 1.0514, "text": "finished the basic game structure, you start as a small dot and eat smaller dots to survive and grow (avoid bigger dots), I might add some twists if I have time"}, {"post_id": 57020, "ts": "2026-08-29T02:55:42Z", "hours": 0.2961, "text": "starting project"}]...
|
Title: dot dot dot by @hoshi | Stardance
Devlogs: Title: dot dot dot by @hoshi | Stardance
Devlogs:
starting project
finished the basic game structure, you start as a small dot and eat smaller dots to survive and grow (avoid bigger dots), I might add some twists if I have time
finished the basic powerups, ig its ready to ship after the leaderboard function and a few more changes :D
ig im done
bug fixes again (screen resize and others)
Ships:
I just made this project because I was bored and I had like two to three hours. Basically, in this game, you start as a small dot that follows your cursor. Avoid bigger dots and eat smaller dots to grow bigger. You also have powers such as shields (auto saves your life) and shockwaves (reduces all the dots’s radius by 50%), those cannot be acquired during the game, so once you use it, it is over for that game. Try to get the lowest time!...
|
1793695668.1007185
|
1793782068.1007185
|
|
24992
|
dotsong by @te | Stardance
|
te
|
1
|
29.51
|
44
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T02:41:15Z", "hours": 9.0, "multiplier": 4.96, "payout": 44, "blessing": "neutral", "text": "dotsong in its current state supports discord rich presence and scrobbling to last.fm, libre.fm, and any listenbrainz-compatible scrobbler. it can pick up tracks from any music player that interfaces with the system media center (i.e. MediaRemote on macOS, the media control thing on Windows that i always forget the name of, and MPRIS on linux). on the todo list is: better browser detection (might end up defaulting to off) scrobble retries optimization image uploading", "repo": "https://github.com/thrzl/dotsong", "demo": "https://github.com/thrzl/dotsong/releases/latest"}]...
|
[{"post_id": 42062, "ts": "202 [{"post_id": 42062, "ts": "2026-08-06T16:54:01Z", "hours": 2.9975, "text": "detecting browsers is annoying i discovered the issue when dotsong was trying to scrobble “Instagram”. i had to design this weird detection logic that runs if the process name matches a list of known browsers: is allow_browsers even enabled in settings? could we find it on deezer this feels a bit shoddy because for more niche tracks (which is totally possible if you’re playing them from a browser) it probably won’t be found. this makes me think i should lookup on musicbrainz instead. i also don’t want to rely on a private API, metabrainz seems more trustworthy especially considering spotify’s latest API changes also: i think i want to add a few custom discord apps for certain common players, like apple music and spotify so it can be “Listening to Apple Music” and stuff yk?"}, {"post_id": 21795, "ts": "2026-07-03T22:18:48Z", "hours": 4.4486, "text": "started rewriting the entire pipeline. main changes: complete MediaCenter::process_event rewrite rewritten completely from scratch. now takes up 40 less lines, skips invalid tracks earlier, and is much simpler to understand ticking logic improvement the app used to tick every 5 s to check track duration, which means 12/min. instead, i now calculate how far the 50% mark is and sleep for only that long; when we’re past it, it’ll just idle until the next track. the app now only wakes once per event, rather than 12 times/min use unicase crate to avoid unnecessary allocations most of the String allocations i make in the program are to_lowercase() calls for comparisons. the unicase crate allows me to make case-insensitive comparisons without extra allocations. all of this SHOULD mean less CPU and memory usage (i’m a bit obsessed with that, if you can’t tell yet), but i havent benched anything yet this PR edits like 500 lines but there’s only like 20 lines more than there were originally lol"}, {"post_id": 21295, "ts": "2026-07-03T04:32:00Z", "hours": 0.7556, "text": "i had been initializing a whole new last.fm/libre.fm client on every now playing request/scrobble, which was unnecessary and clunky. so i now: store a static CLIENT_POOL: LazyLock<DashMap<String, Client>> where the keys are the Scrobbler ids get the client for this scrobbler or create a new one and store it. this only runs on new requests, so we don’t unnecessarily create client. remove the client when the scrobbler is dropped, e.g. when the config is updated i’ve never used drop logic before but i think its like the coolest thing ever, so i was excuted about that"}, {"post_id": 20890, "ts": "2026-07-02T16:51:10Z", "hours": 5.135, "text": "originally, i had written two completely separate track detection pipelines for macOS and windows/linux, but i realized that it resulted in a lot of redundant logic, and making changes to that logic required testing on both macOS and windows for things that shouldnt have (e.g. cover art uploading), so i decided to unify it into one processing pipeline, and the platform-specific parts are just getting it to be a MediaInfo type as soon as possible. by the end of it, there were only 20 more lines than there were before, but there is now only one processing pipeline which is a huge help for implementing stuff in the future! also, some more tangible things: dark mode UI dotsong will do its best to filter out tracks from browsers instead of just taking it with no questions arm64 builds for linux now!"}, {"post_id": 17915, "ts": "2026-06-28T21:03:56Z", "hours": 1.7003, "text": "finally merged the cover art uploading feature! works on all platforms (linux is untested, but… we’ll get there)"}, {"post_id": 16727, "ts": "2026-06-27T05:22:26Z", "hours": 0.7731, "text": "fixed a really obnoxious bug i’ve been dealing with pretty much the whole time. on macOS apple music, when you pick a new track, it’ll broadcast a pause event and THEN a play event immediately after. for whatever reason, pause events always LOSE the race against the play event, and therefore overwrite the play event. it probably has to do with deezer caching. the fix was just short circuiting; check early if this is a pause event and we alr have the info; if so, dont worry about processing anything else"}, {"post_id": 16694, "ts": "2026-06-27T03:56:21Z", "hours": 2.8658, "text": "published another two versions today! first update contained a lot of those optimization fixes from before, but the second one was me testing with a user on windows (i normally use macOS, so testing on windows isn’t the easiest) now i’m doing testing on debian which is not working in any way at all </3"}, {"post_id": 16081, "ts": "2026-06-26T04:22:02Z", "hours": 0.7939, "text": "created a litterbox mock api with bun so i can test against image uploading against it compliant-ish. enough that it only accepts valid parameters and returns realistic URL responses. and its only 57 lines! i <3 bun forever the source is here https://gist.github.com/thrzl/22cde52746d4febf2c513b7fc7b829eb"}, {"post_id": 15509, "ts": "2026-06-25T06:26:35Z", "hours": 0.5628, "text": "more subtle improvements in this session, i removed some unnecessary ui elements (like a redundant separator and useless buttons) the more interesting thing is i fixed a bug where i was loading stale states, which cause it to spam now, i’m about to test AppImage builds, whenever i feel comfortable enough to put out another release"}, {"post_id": 15474, "ts": "2026-06-25T05:00:04Z", "hours": 0.4772, "text": "spent a LOT longer than 20 minutes trying to debug this weird memory leak that happens whenever i even ACCEPT image data on track events i literally gain a whole 200 MB PER EVENT, an “event” being any time the track info doesn’t stay the same. so if you pause it, play it, or the track changes for any reason, that’s an event, and it stacks so its totally unreasonable rn for me to get the images cus bro?? and i know its not in my code because i didn’t even add the handling yet i literally just accept the image data and it does that so i just filed an issue in the upstream crate pray for me guys"}, {"post_id": 15409, "ts": "2026-06-25T01:34:27Z", "hours": 0.9381, "text": "today i was trying to implement scrobble retries but i ended up not liking the current shape. i was gonna write to a file and send scrobbles later next time the host succeeds, but that was super annoying to implement i think i might end up trying a threads based approach where i just spawn a new thread whenever a scrobble fails; but that wouldnt handle network conditions as well. i think ima take a break from that and look at getting image support working tomorrow. that needs me to fix the upstream media-remote crate to fix a memory leak, first and foremost; then i’d want to lazy load images cus 70 MB just for getting a track is absurd"}, {"post_id": 14813, "ts": "2026-06-24T01:45:22Z", "hours": 7.9556, "text": "lots of code cleanup learned today that you can’t just use Arc<Mutex<...>> everywhere (well you can but its not necessarily a good thing) so i’m now using RwLock and ArcSwap which makes things a lot easier. i ended up changing tons of internal stuff in basically every file and still my PR only added like 30 something lines"}]...
|
Title: dotsong by @te | Stardance
Devlogs:
lots o Title: dotsong by @te | Stardance
Devlogs:
lots of code cleanup learned today that you can’t just use Arc<Mutex<...>> everywhere (well you can but its not necessarily a good thing) so i’m now using RwLock and ArcSwap which makes things a lot easier. i ended up changing tons of internal stuff in basically every file and still my PR only added like 30 something lines
today i was trying to implement scrobble retries but i ended up not liking the current shape. i was gonna write to a file and send scrobbles later next time the host succeeds, but that was super annoying to implement i think i might end up trying a threads based approach where i just spawn a new thread whenever a scrobble fails; but that wouldnt handle network conditions as well. i think ima take a break from that and look at getting image support working tomorrow. that needs me to fix the upstream media-remote crate to fix a memory leak, first and foremost; then i’d want to lazy load images cus 70 MB just for getting a track is absurd
spent a LOT longer than 20 minutes trying to debug this weird memory leak that happens whenever i even ACCEPT image data on track events i literally gain a whole 200 MB PER EVENT, an “event” being any time the track info doesn’t stay the same. so if you pause it, play it, or the track changes for any reason, that’s an event, and it stacks so its totally unreasonable rn for me to get the images cus bro?? and i know its not in my code because i didn’t even add the handling yet i literally just accept the image data and it does that so i just filed an issue in the upstream crate pray for me guys
more subtle improvements in this session, i removed some unnecessary ui elements (like a redundant separator and useless buttons) the more interesting thing is i fixed a bug where i was loading stale states, which cause it to spam now, i’m about to test AppImage builds, whenever i feel comfortable enough to put out another release
created a litterbox mock api with bun so i can test against image uploading against it compliant-ish. enough that it only accepts valid parameters and returns realistic URL responses. and its only 57 lines! i <3 bun forever the source is here https://gist.github.com/thrzl/22cde52746d4febf2c513b7fc7b829eb
published another two versions today! first update contained a lot of those optimization fixes from before, but the second one was me testing with a user on windows (i normally use macOS, so testing on windows isn’t the easiest) now i’m doing testing on debian which is not working in any way at all </3
fixed a really obnoxious bug i’ve been dealing with pretty much the whole time. on macOS apple music, when you pick a new track, it’ll broadcast a pause event and THEN a play event immediately after. for whatever reason, pause events always LOSE the race against the play event, and therefore overwrite the play event. it probably has to do with deezer caching. the fix was just short circuiting; check early if this is a pause event and we alr have the info; if so, dont worry about processing anything else
finally merged the cover art uploading feature! works on all platforms (linux is untested, but… we’ll get there)
originally, i had written two completely separate track detection pipelines for macOS and windows/linux, but i realized that it resulted in a lot of redundant logic, and making changes to that logic required testing on both macOS and windows for things that shouldnt have (e.g. cover art uploading), so i decided to unify it into one processing pipeline, and the platform-specific parts are just getting it to be a MediaInfo type as soon as possible. by the end of it, there were only 20 more lines than there were before, but there is now only one processing pipeline which is a huge help for implementing stuff in the future! also, some more tangible things: dark mode UI dotsong will do its best to filter out tracks from browsers instead of just taking it with no questions arm64 builds for linux now!
i had been initializing a whole new last.fm/libre.fm client on every now playing request/scrobble, which was unnecessary and clunky. so i now: store a static CLIENT_POOL: LazyLock<DashMap<String, Client>> where the keys are the Scrobbler ids get the client for this scrobbler or create a new one and store it. this only runs on new requests, so we don’t unnecessarily create client. remove the client when the scrobbler is dropped, e.g. when the config is updated i’ve never used drop logic before but i think its like the coolest thing ever, so i was excuted about that
started rewriting the entire pipeline. main changes: complete MediaCenter::process_event rewrite rewritten completely from scratch. now takes up 40 less lines, skips invalid tracks earlier, and is much simpler to understand ticking logic improvement the app used to tick every 5 s to check track duration, which means 12/min. instead, i now calculate how far the 50% mark is and sleep for only that long; when we’re past it, it’ll just idle until the next track. the app now only wakes once per event, rather than 12 times/min use unicase crate to avoid unnecessary allocations most of the String allocations i make in the program are to_lowercase() calls for comparisons. the unicase crate allows me to make case-insensitive comparisons without extra allocations. all of this SHOULD mean less CPU and memory usage (i’m a bit obsessed with that, if you can’t tell yet), but i havent benched anything yet this PR edits like 500 lines but there’s only like 20 lines more than there were originally lol
detecting browsers is annoying i discovered the issue when dotsong was trying to scrobble “Instagram”. i had to design this weird detection logic that runs if the process name matches a list of known browsers: is allow_browsers even enabled in settings? could we find it on deezer this feels a bit shoddy because for more niche tracks (which is totally possible if you’re playing them from a browser) it probably won’t be found. this makes me think i should lookup on musicbrainz instead. i also don’t want to rely on a private API, metabrainz seems more trustworthy especially considering spotify’s latest API changes also: i think i want to add a few custom discord apps for certain common players, like apple music and spotify so it can be “Listening to Apple Music” and stuff yk?
Ships:
dotsong in its current state supports discord rich presence and scrobbling to last.fm, libre.fm, and any listenbrainz-compatible scrobbler. it can pick up tracks from any music player that interfaces with the system media center (i.e. MediaRemote on macOS, the media control thing on Windows that i always forget the name of, and MPRIS on linux). on the todo list is: better browser detection (might end up defaulting to off) scrobble retries optimization image uploading...
|
1793732182.4191086
|
1793818582.4191086
|
|
13317
|
dottyOS by @WayTooUnlucky | Stardance
|
WayTooUnlucky
|
0
|
2.23
|
0
|
[]
|
[{"post_id": 11037, "ts": "202 [{"post_id": 11037, "ts": "2026-06-18T02:00:41Z", "hours": 2.2258, "text": "Just figured out how to commit with Git so I don’t have to leave my code editor, and around 7 nerve-racking commits later I got a very basic webpage (that I am very proud of!) check it out! https://waytoounlucky.github.io/dottyOS/"}]...
|
Title: dottyOS by @WayTooUnlucky | Stardance
Devl Title: dottyOS by @WayTooUnlucky | Stardance
Devlogs:
Just figured out how to commit with Git so I don’t have to leave my code editor, and around 7 nerve-racking commits later I got a very basic webpage (that I am very proud of!) check it out! https://waytoounlucky.github.io/dottyOS/...
|
1793181052.8333888
|
1793785852.8333888
|
|
56330
|
double-or-nothing by @M4RC086 | Stardance
|
M4RC086
|
1
|
19.0
|
103
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-13T08:25:51Z", "hours": 19.0, "multiplier": 5.3, "payout": 103, "blessing": "neutral", "text": "So I made a simple web game were you have a score and a coin. If you decide to flip the coin, you can duplicate your score or lose it, you take the risk. I used flask (even if it wasn’t the more ideal for this project). I learned how to use flask, Javascript, databases and fetch, so it was a project to learn things. I’m really proud of the leaderboard in real time but unfortunately I use the free plan of Supabase and Vercel so it can have some lag, but I tried to lower it all I could. I hope you like the mini game!", "repo": "https://github.com/M4RC086/double-or-nothing", "demo": "https://double-or-nothing-eta.vercel.app/"}]...
|
[{"post_id": 67202, "ts": "202 [{"post_id": 67202, "ts": "2026-09-13T08:11:08Z", "hours": 1.6578, "text": "Bugs, bugs, more bugs! I had bugs but in fact I think those but existed because I accidentally deleted lines of code that were needed"}, {"post_id": 65355, "ts": "2026-09-10T13:20:45Z", "hours": 3.4994, "text": "I deployed it in Vercel and Supabase for the database. It wasn’t really hard to do but it was boring and very long to do. I will make small changes and I ship it. :)"}, {"post_id": 64858, "ts": "2026-09-09T15:32:36Z", "hours": 2.2994, "text": "Well, well, well. I thing the project is near to be over. I need to deploy it. I think I’m going to use nest because it’s hard to find a platform that accept databases. I want to move the leaderboard to the left of the score and little details like that but nothing very big"}, {"post_id": 62848, "ts": "2026-09-06T11:37:24Z", "hours": 1.9247, "text": "I did some CSS and I think is great. I also fixed some bugs and improved a little the code but nothing very important"}, {"post_id": 62155, "ts": "2026-09-05T12:30:10Z", "hours": 3.0353, "text": "I added a coin that flips with a CSS animation. I have to say that I love and hate javascript at the same level. I had a LOT of help of Claude and Deepseek for the coin CSS but like always I took my time to understand it and customize it. There’re a few bugs. Apart from the aesthetics, I could say it’s ready but I will change lots of things like always for no reason. I NEED A CLEAN CODE!"}, {"post_id": 60762, "ts": "2026-09-03T10:53:48Z", "hours": 1.1658, "text": "I did the leaderboard in real time… I hate javascript. Thanks Claude…"}, {"post_id": 60239, "ts": "2026-09-02T14:14:00Z", "hours": 2.0994, "text": "I made the connection between the database and the login. So now you log with your username and is stored in the cookies with the flask session module so if you enter again you have your username automatically set. I need to refactor the hole code because it’s a mess. I have to admit that I used a lot of Claude for this part but I made sure I knew what I was doing. I know I am not doing it the best way but I’ll try to improve the code slowly"}, {"post_id": 59476, "ts": "2026-09-01T10:45:05Z", "hours": 1.0508, "text": "I made the database connection! I used sqlite3 and it was easier than what I thought it would be. I also removed the stay button because it makes no sense: if you want to stay you only need to not to press the double button :v. Now I need to do the login before doing all the css, animations and stuff."}, {"post_id": 59235, "ts": "2026-08-31T22:13:25Z", "hours": 1.6658, "text": "The main mechanic is done except for the database. I have to figure out how to do it. I thought the game could be like a Russian roulette because is the same idea (the gun shooting the money or something like that?) but I don’t know how to do all this but I will take my time to learn for this project and do a good CSS."}, {"post_id": 58725, "ts": "2026-08-31T08:29:47Z", "hours": 0.9381, "text": "This is the firs devlog of a larger project. This project will be a web made with Flask (because I don’t know js). The idea is you have a score and you have 50% of chances of double it and 50% of chances you come back to 0 or you can stay with your points. I also want to implement a leaderboard because the funny part is to be the one with most points. I think people like this sort of projects :)"}]...
|
Title: double-or-nothing by @M4RC086 | Stardance
Title: double-or-nothing by @M4RC086 | Stardance
Devlogs:
This is the firs devlog of a larger project. This project will be a web made with Flask (because I don’t know js). The idea is you have a score and you have 50% of chances of double it and 50% of chances you come back to 0 or you can stay with your points. I also want to implement a leaderboard because the funny part is to be the one with most points. I think people like this sort of projects :)
The main mechanic is done except for the database. I have to figure out how to do it. I thought the game could be like a Russian roulette because is the same idea (the gun shooting the money or something like that?) but I don’t know how to do all this but I will take my time to learn for this project and do a good CSS.
I made the database connection! I used sqlite3 and it was easier than what I thought it would be. I also removed the stay button because it makes no sense: if you want to stay you only need to not to press the double button :v. Now I need to do the login before doing all the css, animations and stuff.
I made the connection between the database and the login. So now you log with your username and is stored in the cookies with the flask session module so if you enter again you have your username automatically set. I need to refactor the hole code because it’s a mess. I have to admit that I used a lot of Claude for this part but I made sure I knew what I was doing. I know I am not doing it the best way but I’ll try to improve the code slowly
I did the leaderboard in real time… I hate javascript. Thanks Claude…
I added a coin that flips with a CSS animation. I have to say that I love and hate javascript at the same level. I had a LOT of help of Claude and Deepseek for the coin CSS but like always I took my time to understand it and customize it. There’re a few bugs. Apart from the aesthetics, I could say it’s ready but I will change lots of things like always for no reason. I NEED A CLEAN CODE!
I did some CSS and I think is great. I also fixed some bugs and improved a little the code but nothing very important
Well, well, well. I thing the project is near to be over. I need to deploy it. I think I’m going to use nest because it’s hard to find a platform that accept databases. I want to move the leaderboard to the left of the score and little details like that but nothing very big
I deployed it in Vercel and Supabase for the database. It wasn’t really hard to do but it was boring and very long to do. I will make small changes and I ship it. :)
Bugs, bugs, more bugs! I had bugs but in fact I think those but existed because I accidentally deleted lines of code that were needed
Ships:
So I made a simple web game were you have a score and a coin. If you decide to flip the coin, you can duplicate your score or lose it, you take the risk. I used flask (even if it wasn’t the more ideal for this project). I learned how to use flask, Javascript, databases and fetch, so it was a project to learn things. I’m really proud of the leaderboard in real time but unfortunately I use the free plan of Supabase and Vercel so it can have some lag, but I tried to lower it all I could. I hope you like the mini game!...
|
1793674098.7737675
|
1793760498.7737675
|
|
42498
|
draft 1 by @danielayoub | Stardance
|
danielayoub
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: draft 1 by @danielayoub | Stardance
|
1793177536.5410914
|
1793782336.5410914
|
|
65266
|
dragon by @Eveykay | Stardance
|
Eveykay
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-25T22:52:11Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is Terry my animatronic dragon. I started him shortly before joining stardance and I think the most difficult part was the jaw. Im still trying to figure out stardance works but I hope everyone else loves terry as much as I do!", "repo": "https://github.com/EveyKay/dragon", "demo": ""}]...
|
[{"post_id": 73766, "ts": "202 [{"post_id": 73766, "ts": "2026-09-25T21:49:09Z", "hours": 0.36, "text": "I added more sound animations!"}, {"post_id": 73305, "ts": "2026-09-24T20:15:10Z", "hours": 2.0083, "text": "I add more animations and a nose"}, {"post_id": 73004, "ts": "2026-09-24T06:20:08Z", "hours": 1.0431, "text": "Im making a robot dragon! His name is Terry, i just switch his brain from an uno to and esp32."}]...
|
Title: dragon by @Eveykay | Stardance
Devlogs:
Im Title: dragon by @Eveykay | Stardance
Devlogs:
Im making a robot dragon! His name is Terry, i just switch his brain from an uno to and esp32.
I add more animations and a nose
I added more sound animations!
Ships:
This is Terry my animatronic dragon. I started him shortly before joining stardance and I think the most difficult part was the jaw. Im still trying to figure out stardance works but I hope everyone else loves terry as much as I do!...
|
1793685333.70963
|
1793771733.70963
|
|
16387
|
dragonfist limitless by @ciacxz | Stardance
|
ciacxz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dragonfist limitless by @ciacxz | Stardance
|
1793465628.5331724
|
1794070428.5331724
|
|
5632
|
drawOff by @Wajeeh | Stardance
|
Wajeeh
|
0
|
13.67
|
0
|
[]
|
[{"post_id": 35511, "ts": "202 [{"post_id": 35511, "ts": "2026-07-27T00:06:50Z", "hours": 1.0014, "text": "Updated news, organized file structure, testing done, merged v1/main (final deployment preparing for vercel)"}, {"post_id": 35384, "ts": "2026-07-26T19:05:14Z", "hours": 0.7647, "text": "Judging Features (Voting) and 60s rounds now work; routes also fixed to redirect to fullest lobby (5 player system; 2 drawing + 3 judging, highest votes wins), styling for homepage statsPanel fixed to match, database tested & working"}, {"post_id": 31085, "ts": "2026-07-19T06:19:52Z", "hours": 3.4033, "text": "Integrated a DB for the app throgh Turso (has a lot of scalability… wanna make this big) to track stats for the site! Will hopefully entice viewers. Will style a bit more later but took a while cuz I messed up a lot of stuff and had to debug a while. Fixed TS errors and anything not letting me build."}, {"post_id": 18488, "ts": "2026-06-29T17:28:47Z", "hours": 0.7539, "text": "Implemented room codes, a basic frontend for the homepage (will style soon / make it pretty), and joining features for lobbies including random code generation. Also fixed some bugs with routing. Planning on working on the homepage to make it pretty now. Will also fix the play button glitch…"}, {"post_id": 13534, "ts": "2026-06-22T04:42:39Z", "hours": 6.2458, "text": "Socket.io WEBSOCKETS implemented. Multiplayer works, random lobbies generate. Barebones Tailwind CSS styling in. Undo/redo functionality persists across both canvas refs (both sides). History saves and reloads don’t ruin games. Colour wheel works. Reordered file structure (organized). Auto assigning of sides and implemented a small title bobbing animation."}, {"post_id": 1842, "ts": "2026-06-04T01:43:35Z", "hours": 0.7639, "text": "Changed UI a bit, fixed refs so 2 players can edit 2 canvasses separately, added an HTML slider input for line width! Will implement socket.io next so big patch for multiplayer incoming.."}, {"post_id": 1159, "ts": "2026-06-03T00:25:26Z", "hours": 0.7325, "text": "Implemented colour changing for the brush"}]...
|
Title: drawOff by @Wajeeh | Stardance
Devlogs:
Im Title: drawOff by @Wajeeh | Stardance
Devlogs:
Implemented colour changing for the brush
Changed UI a bit, fixed refs so 2 players can edit 2 canvasses separately, added an HTML slider input for line width! Will implement socket.io next so big patch for multiplayer incoming..
Socket.io WEBSOCKETS implemented. Multiplayer works, random lobbies generate. Barebones Tailwind CSS styling in. Undo/redo functionality persists across both canvas refs (both sides). History saves and reloads don’t ruin games. Colour wheel works. Reordered file structure (organized). Auto assigning of sides and implemented a small title bobbing animation.
Implemented room codes, a basic frontend for the homepage (will style soon / make it pretty), and joining features for lobbies including random code generation. Also fixed some bugs with routing. Planning on working on the homepage to make it pretty now. Will also fix the play button glitch…
Integrated a DB for the app throgh Turso (has a lot of scalability… wanna make this big) to track stats for the site! Will hopefully entice viewers. Will style a bit more later but took a while cuz I messed up a lot of stuff and had to debug a while. Fixed TS errors and anything not letting me build.
Judging Features (Voting) and 60s rounds now work; routes also fixed to redirect to fullest lobby (5 player system; 2 drawing + 3 judging, highest votes wins), styling for homepage statsPanel fixed to match, database tested & working
Updated news, organized file structure, testing done, merged v1/main (final deployment preparing for vercel)...
|
1793260328.2641826
|
1793865128.2641826
|
|
34028
|
drawing with circles by @gaukhar | Stardance
|
gaukhar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: drawing with circles by @gaukhar | Stardanc Title: drawing with circles by @gaukhar | Stardance...
|
1793288930.8894422
|
1793893730.8894422
|
|
60651
|
dreadai by @ckopweb | Stardance
|
ckopweb
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dreadai by @ckopweb | Stardance
|
1793645410.459126
|
1794250210.459126
|
|
58996
|
dreamwithpriyanshu by @dreamwithpriyanshu | Starda dreamwithpriyanshu by @dreamwithpriyanshu | Stardance...
|
dreamwithpriyanshu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dreamwithpriyanshu by @dreamwithpriyanshu | Title: dreamwithpriyanshu by @dreamwithpriyanshu | Stardance...
|
1793523219.789794
|
1794128019.789794
|
|
68781
|
dreiton by @Xenon | Stardance
|
Xenon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: dreiton by @Xenon | Stardance
|
1793749729.2022111
|
1794354529.2022111
|
|
47105
|
drift racer by @ayushs1305 | Stardance
|
ayushs1305
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: drift racer by @ayushs1305 | Stardance
|
1793170041.4742737
|
1793774841.4742737
|
|
45702
|
driver drowsiness detection by @MadameLouise | Sta driver drowsiness detection by @MadameLouise | Stardance...
|
MadameLouise
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T19:33:27Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "the difficult part was making the wires stick, it was really loose so I had my mom hold the wires tightly, make sure to use tapes or new wires and breadboard", "repo": "https://github.com/AmruthaMuralidhar1/Notebook/tree/9303ec6ff69e4144a5fcc70df0b643fedaf5b8f3/driverdrowsy", "demo": ""}]...
|
[{"post_id": 43481, "ts": "202 [{"post_id": 43481, "ts": "2026-08-08T19:31:28Z", "hours": 4.3233, "text": "Driver Drowsiness detection using two methods, a specs based one where driver has to wear specs and it detects drowsiness n sends alerts and then camera based where a tiny iot camera is placed ifront of the driver"}]...
|
Title: driver drowsiness detection by @MadameLouis Title: driver drowsiness detection by @MadameLouise | Stardance
Devlogs:
Driver Drowsiness detection using two methods, a specs based one where driver has to wear specs and it detects drowsiness n sends alerts and then camera based where a tiny iot camera is placed ifront of the driver
Ships:
the difficult part was making the wires stick, it was really loose so I had my mom hold the wires tightly, make sure to use tapes or new wires and breadboard...
|
1793703133.898565
|
1793789533.898565
|
|
27014
|
drms by @HUMI | Stardance
|
HUMI
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: drms by @HUMI | Stardance
|
1793148703.235358
|
1793753503.235358
|