|
71606
|
Little Lantern by @asherkhalidasherkhalid | Starda Little Lantern by @asherkhalidasherkhalid | Stardance...
|
asherkhalidasherkhalid
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Little Lantern by @asherkhalidasherkhalid | Title: Little Lantern by @asherkhalidasherkhalid | Stardance...
|
1793735345.7123244
|
1794599345.7123244
|
|
71607
|
U by @MrD | Stardance
|
MrD
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: U by @MrD | Stardance
|
1793735346.5806973
|
1794340146.5806973
|
|
26398
|
200 MPH Drone RTOS by @Guagyyy | Stardance
|
Guagyyy
|
3
|
149.0
|
2753
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-11-01T00:30:45Z", "hours": 28.0, "multiplier": 17.06, "payout": 486, "blessing": "neutral", "text": "200 MPH Drone RTOS For this ship, I’m linking the last stable working build (not the latest full version of my code). It runs directly on the STM32 Nucleo hardware, giving a solid baseline to build on even though scheduled tasks still need some fine-tuning. The biggest improvement was fixing race conditions in the scheduler by centralizing context switching inside PendSV. Global variables like currTaskIndex and topOfStack were getting hit from multiple entry points during interrupts, causing stack pointers to save into the wrong slots and dropping events. Moving all state decisions into decideNextTask() inside the PendSV assembly handler fixed task pointer corruption and stopped double-queuing entirely. I also fixed a major I/O bottleneck by switching USART printing over to a background circular DMA task. Blocking print calls were taking up ~95% of total execution time and breaking preemption timing. Moving logging off the main thread to UART4 freed up USART3 for the GPS module, and fixing commented-out handlers in stm32f7xx_it.c got the DMA HAL working properly again (although this doesn’t work inside of Renode since it utilizes DMA). On the tooling side, I fixed the simulation startup sequence so virtual boards initialize and boot correctly in Renode. To make setup easier, I added auto-installers to both run.sh and run.bat so Renode downloads automatically without needing a manual install step. Although this version of the project is not 100% due to Renode limitations, I can say that everything works properly on my Nucleo board, just be mindful of this when reviewing, as scheduled tasks do not work properly.", "repo": "https://github.com/Guag914/200-MPH-Drone-RTOS/", "demo": "https://github.com/Guag914/200-MPH-Drone-RTOS#interactive--simulation-demo"}, {"ship_num": 2, "ts": "2026-09-22T00:49:05Z", "hours": 106.0, "multiplier": 19.18, "payout": 2024, "blessing": "neutral", "text": "200 MPH Drone RTOS: How it went Simulation to Silicon! When I published the first major update for this project at the 15-hour mark, I essentially had a proof-of-concept. I had managed to write a custom hybrid cooperative/preemptive scheduler and get an ARM Cortex-M7 (on the STM32f756VGTx) assembly context switcher functioning inside the Renode simulator. Although this looked like a massive leap, the project had barely started. Over 100 hours of development have gone into this project since then. The transition from a simulated kernel to a bare-metal flight controller capable of keeping a 200 MPH drone in the air required stripping the system down to its bare components, rewriting the memory architecture, and debugging some of the most frustrating hardware faults I have ever encountered-especially whenever the project just crashed, leaving me no traces as to what went wrong. Software Limitations The biggest turning point was realizing that software simulation can only take you so far. Renode is an amazing tool, but it hid a massive amount of race conditions and timing flaws that only exposed themselves when I finally flashed the code to physical STM32F756 Nucleo board. Sometimes, the MCU would have to reboot every 2 seconds. I spent dozens of hours tracking down massive architectural bugs. One of the worst was a context-switching fault where floating-point math was corrupting the return address in the CPU registers, causing the processor to execute raw garbage data. To fix this, I had to completely restructure the boot sequence and overhaul the memory management. I moved away from static arrays to a dynamic per-task stack allocation system, and implemented a dual-guard memory system. Arguably, this was the most important change as it allowed me to debug tasks way quicker as I instantly could know when the canary values were corrupted. Overhauling the Data Pipelines In order to avoid the 10ms delay of my original blocking pipline (for data transfer), I entirely rewrote the hardware data pipelines multiple times to use a semi-blocking, circular Direct Memory Access (DMA) architecture. Instead of the processor handling the data transfer, the hardware itself moves the bytes from the sensors directly into memory in the background. The DMA streams now trigger precise interrupts at the halfway and full-transfer points, allowing the RTOS to safely parse incoming radio packets and sensor reads without ever risking data overwrites or blocking the main flight loop. Building a Flight Controller I integrated Betaflight’s Actual Rates algorithm with custom expo curves, ensuring that physical stick inputs map perfectly to target velocities. I built a custom SPI driver to pull 24-bit raw pressure and temperature data from a BMP390 barometer, passing it through hypsometric formulas to calculate altitude. For video and telemetry, I moved away from raw UART strings and implemented native MSP DisplayPort communication (for true digital Walksnail Avatar connection). I also built an interactive USB command-line interface. Instead of having to recompile and re-flash the firmware every time a PID value needs to be adjusted, I can plug into the board, pull up a terminal, and manually tune gains, remap CRSF radio channels, or adjust IMU orientation offsets in real time. Final Version The last few weeks have been about refinement and consistency, removing race conditions and overall polishing the code. Now that the RTOS is fully functional, the only things to add are extra features, like a permanent + more expanded CLI, as well as finishing the external RM and linking the ESC drivers. As these are pretty insignificant, I have linked the source of this shipment to the Github project rather than a specific release so that I can update these during review!", "repo": "https://github.com/Guag914/200-MPH-Drone-RTOS/", "demo": "https://github.com/Guag914/200-MPH-Drone-RTOS#interactive--simulation-demo"}, {"ship_num": 3, "ts": "2026-07-15T04:02:12Z", "hours": 15.0, "multiplier": 16.44, "payout": 243, "blessing": "neutral", "text": "Phase 1 (The Custom RTOS Kernel) I am building a custom FPV drone from scratch with my friend in an attempt to achieve 200 mph . At those speeds, standard super loops are far too slow, as a single microsecond of lag means the drone travels feet before making a PID correction. To solve this, I built a custom, hybrid cooperative/preemptive Real-Time Operating System (RTOS) from scratch for the ARM Cortex-M7 (STM32F7)! What Was Challenging? The absolute hardest part of this phase was writing the low-level assembly context switcher ( PendSV_Handler.S ). Hacking the ARM Cortex-M7 registers to physically hot-swap stack pointers ( PSP ) mid-execution without crashing the CPU or corrupting the program state was a massive headache. I had to ensure that when an asynchronous preemption event fires, the assembly code perfectly preserves the execution registers ( R4-R11 plus the hardware-stacked registers), jumps to the high-priority task, and then seamlessly restores the background task right where it left off. Getting the compiler-enforced task overloading working so the kernel cleanly separates periodic tasks from raw interrupts was another huge hurdle, but it makes the whole codebase infinitely more robust. Want to Test It or Write Your Own Tasks? You don’t need physical hardware to watch this run! I’ve packaged the entire project with a Renode simulation script. You can run the interactive emulator with a single command to see the preemption scheduler hijack our counter task live, or you can jump into the user sandbox file and write your own custom tasks. Check out the GitHub Repository to Run the Demo! The README has a quick 5-minute setup guide to get you compiling and simulating your own code in no time.", "repo": "https://github.com/Guag914/200-MPH-Drone-RTOS/", "demo": "https://github.com/Guag914/200-MPH-Drone-RTOS#interactive--simulation-demo"}]...
|
[{"post_id": 86020, "ts": "202 [{"post_id": 86020, "ts": "2026-11-01T00:21:56Z", "hours": 0.9361, "text": "The last two days have been identical to the previous devlog. I have just been debugging the project, not much has been done. Since I am going to ship today, I will just link the last working version of the project, which although it has an issue with the scheduled tasks also works on the my Nucelo board."}, {"post_id": 84680, "ts": "2026-10-30T02:31:22Z", "hours": 9.5083, "text": "I have spent the past 5 days mostly working on debugging the scheduler. It has been super difficult cause I don’t know exactly what has been causing the bugs, but basically right now all the project is doing is launching and then instantly freezing. This may be simply an issue with Renode on my side, but it is also failing on my Nucleo but in a different way so its likely a combination of my code and Renode failing. If I’m being honest, I am in way over my head, despite knowing a lot about RTOS’s and stuff in general, it is taking way too long to debug and figure out issues. I have fixed next to nothing these past 5 days, so I may be a little cooked, mostly have patched smaller bugs but they don’t seem to contributing to the major issue. A rough estimate of when the RTOS will be finished (version 1), will likely be sometime in December, however I will probably get a semi-working version in for Stardance by the end of the week, just know that it is NOT at all finished. Git will also be updated (at least to another branch) by the end of the week as well, even if this version doesn’t fully work. I may or may not start a snapshots branch for unfinished code or quick bug fixes."}, {"post_id": 82549, "ts": "2026-10-25T06:23:47Z", "hours": 9.7414, "text": "I spent the past week fixing timing issues on the hardware and getting the simulation environment back into a usable state. Although it isn’t 100% yet, I managed to fix a lot of underlying bugs causing the program to fail on actual hardware. Serial Communication and DMA The biggest issue was that manual USART transfers were completely blocking the system. Printing alone was taking around 95 percent of the total execution time. This was destroying the preempt speed and causing weird timing bugs across the board. I rewrote the USART printing logic to offload everything to a background circular DMA task instead. While I was working on the serial connections, I also fixed the UART mapping bugs and moved all logging over to UART4 so it stops fighting with the GPS module on USART3. I also went through stm32f7xx_it.c and fixed the rest of the extern “C” methods. They were previously commented out, which was silently causing their respective DMA HALs to fail. Moving them to the correct user code sections fixed the issue entirely. Simulation Environment and Tooling On the software side, the simulation startup in the HAL was broken and preventing the virtual boards from properly configuring and running. I fixed the initialization sequence so the simulations actually boot correctly now. To make starting the environment even easier for new users, I updated both the run.sh and run.bat scripts with installers that automatically download Renode. This skips the manual installation step completely and gets the simulation running much faster."}, {"post_id": 78931, "ts": "2026-10-12T02:34:08Z", "hours": 8.2783, "text": "Although I haven’t been able to make much progress on the project due to school over the past weeks I did manage to make some substantial project mostly with the scheduler, allowing for fairly good performance on my STM Nucleo boards, rather than it just crashing instantly. 1. Issues with the Old Design The flight controller’s RTOS scheduler wasn’t working under real hardware timing because global variables like currTaskIndex, topOfStack, and excReturn were being modified from multiple entry points simultaneously. Yield calls, interrupt handlers, and the main task-selection logic were all making independent writes to the same shared task control blocks. Whenever a hardware interrupt fired mid-write, stack pointers and exception return values were saved into the wrong taskControlBlocks slot. This created edge cases where preempted tasks were silently double-queued, state tracking completely desynchronized, and time-critical hardware events were dropped during flight. 2. Centralizing Context Switches in PendSV To eliminate these race conditions, all state-selection decisions were moved out of individual execution contexts and consolidated into decideNextTask(), which now runs exclusively inside the PendSV assembly handler. Functions like yieldCurrentTask(), decideNextInterruptTask(), and decideNextScheduledTask() no longer touch global scheduler state or choose which task runs next; they simply update local status flags like TaskState::BLOCKED or TaskState::READY inside brief __disable_irq() critical sections and trigger PendSV using SCB_ICSR_PENDSVSET_Msk. When PendSV fires, decideNextTask() saves outgoingSP and outgoingExcReturn to the active block, sets RUNNING tasks to READY, and runs a two-pass check over taskControlBlocks[]—evaluating high-priority TaskType::INTERRUPT tasks first, then TaskType::SCHEDULED tasks, and falling back to index 0 for idle. Since PendSV is the only place allowed to modify currTaskIndex, concurrent state corruption is structurally impossible."}, {"post_id": 71997, "ts": "2026-09-21T23:26:43Z", "hours": 7.2761, "text": "For the past couple weeks I have been mostly refining small bugs, which were originally rendering the RTOS usless, as well as refactoring the code for simplicity rather than elegancy. 1. Transition to Actual Hardware Renode is great for simulation, but it ended up hiding a bunch of race conditions in the population methods and the main scheduler that led to no code actually running during the IRQ handler calls. I spent a lot of time securing those resources and finally got the scheduler mostly finished up. Also, I decided to just take out the double preempts entirely since they were adding way too much complexity for absolutely zero speed benefits in practice (plus they were creating detrimental but rare race conditions). 2. Code Refactor To make things run a bit more consistent, I restructured how the control loops operate. I ended up merging the dShotGeneration task with the parent IMU control loop, so now everything from reading the sensors to pushing motor commands happens in one clean sequence (rather than including an unnecessary preempt). I also built out a brand new CRSF control loop to handle all the radio parsing and state machine updates in its own dedicated space (just for consistency). Lastly, while doing a final pass on the code, I realized that in my dShotGeneration helper, I had forgot to scale the values by a factor of 1/2000, as the inputs require the value to be between 0 and 1 (not 0 and 2000). 3. Final DMA Iteration The biggest relief was finally getting rid of the old blocking USART system. I finally transitioned away from manually handling the streaming by polling flags in a loop, which was tying up the processor way more than it should have. Everything has been converted over to a blocking DMA system, so the hardware can just handle all the memory transfers in the background while the CPU focuses on actually keeping the drone in the air. Overall, I think that this will be the final iteration of the RTOS DMA pipeline, as now that it is solid and works with all the edge cases, theres no need to change it. 4. Timeline With almost all the major bugs fixed, I am going to ship the project! While it is not 100% done, it will likely be as close as it will get during the timeframe of the Stardance hackathon, and with it so close, theres no reason not to ship. Anyway, I will keep the source as the main project rather than a release, so if I do end up fixing any major bugs, they will get patched either before or during project review (besides most of these bugs are only detectable on actual hardware). I will most likely finish the RTOS in the next couple weeks (by the end of October), and will finish the drivers for the ESC and RM by latest end of November (for more timing refer to the README). Thanks to everyone who supported me throughout this project (hopefully me and my friend can get this drone flying in another Hack Club Hackathon!)."}, {"post_id": 63202, "ts": "2026-09-06T21:25:57Z", "hours": 9.6606, "text": "1. Scheduler Hardening and Task Discovery Spent part of this session making the RTOS scheduler itself more robust. I added a findTaskByName() function so interrupt-driven task lookups happen dynamically instead of relying on hardcoded task indices, which was a fragile setup just waiting to break the moment task registration order changed. Alongside that, I wrapped every one of those lookups with lambdas that throw a proper warning if a task can’t be found, so a missing task fails loudly instead of silently dereferencing a null pointer somewhere downstream. 2. Blocking vs Non-Blocking Scheduled Tasks After a lot of painful debugging, I traced a string of issues (including interrupt tasks silently failing to fire and scheduled tasks stepping on each other) back to non-blocking statements I’d introduced inside scheduled tasks in the previous devlog. I ended up taking those out and reverting scheduled tasks fully back to blocking, which is genuinely what the scheduled zone was designed for in the first place: tasks that don’t need to run in polynomial time and can safely block without putting the drone at risk of crashing. Once that was sorted, I converted the raw USART byte-pushing into a blocking DMA system instead, so streaming is handled by DMA hardware rather than manually pushed byte-by-byte over USART. 3. Flight Loop Refactor and VTX Communication On the flight logic side, I refactored flightLoop() to use lambdas and a state machine so I would never have to yield in the middle of my tasks (which was used previousely for zeroing motor outputs). I also converted the error handling into a proper state machine, so different types of warnings can be caught and handled distinctly instead of lumping every issue into one path, and turned on full debug printing whenever the system is running. Last but not least, I built out a dedicated injector for respondToVTX so I can properly test and simulate VTX communication going forward. 4. Real Hardware Testing Since, I am almost 100% done with the RTOS I bought two NUCLEO-F756ZG’s which will serve as testing the 100% production code rather than the simulation version. I bought two so that one of the boards will be running the real RTOS code, testing DMA reading from USART, SPI, and emitting real motor signals, while the second will be emulating all of my peripherals. When the boards come, if the code does work, it will also mean that the real PCB’s will also work when my friend finishes with them. 5. Next Steps As of now there are a few issues with the double preempt system (for the interrupt tasks) I designed a while back, so I will need to debug that before they arrive. Right now before the boards arrive, I will be finishing up the RTOS blocking DMA pipelines (stripping out IRQ, removing NVIC etc. for scheduled tasks), and performing a bunch of baseline testing in order to prove that the RTOS is capable of flying an actual drone!"}, {"post_id": 52761, "ts": "2026-08-23T03:11:04Z", "hours": 9.6356, "text": "1. CLI Upgrades and Channel Mapping Over the past 5 days, I knocked out some major quality-of-life upgrades for the flight controller. I added customizable channel mapping for CRSF directly through the CLI. By utilizing a combination of references and pointers, I was able to point a volatile alias to certain channel mappings, allowing for completely customizable CRSF channels. While I was in the CLI logic, I also added the ability to configure custom IMU orientations around the z-axis, making it way easier to mount the board in different directions without having to recompile the firmware. 2. DMA Pipeline Fixes and Baro Optimization A big chunk of this session went into debugging and refactoring the hardware data pipelines. I adjusted the ADC population pipeline in order to fix some stream parsing issues, and gave the barometer a massive overhaul. The baro now uses a non-blocking, non-circular DMA setup that relies on a semi-interrupt-driven task call rather than a continuous loop. This enabled me to yield in the middle of the function, and call back later as soon as DMA is finished transferring. I also fixed a massive bug in the DMA setup: the DMA_SxCR_HTIE and DMA_SxCR_TCIE flags were accidentally enabled for the GPS and OSD ring buffers, which would have crashed the whole RTOS by firing unhandled interrupts, causing default HAL and IRQ handlers to run. 3. Walksnail Two-Way Communication Finally, I built out the respondToVTX task to get the drone properly communicating with the Walksnail VTX. Instead of just blindly sending video data out, this sets up true two-way communication over asynchronous UART. By writing a persistent byte-by-byte state machine, the flight controller can now safely parse incoming requests from the VTX without dropping half-packets, allowing me to send back live stick positions and armed status for the OSD menus. The only thing left to do now is handle persistent CLI storage, the logToBlackBox task, integrating the semi-interrupt pipeline with telemetryTX and the OSD, and a few other system tweaks. After that the RTOS will be 100% ready to fly the actual drone."}, {"post_id": 49360, "ts": "2026-08-18T04:16:35Z", "hours": 4.0211, "text": "Complete RTOS Overhaul, Circular DMA Pipelines, and CPU Abort Fixes This update focuses on fine-tuning the RTOS, organizing the scheduler, and rewriting microcontroller memory handling. Renode’s simulated DMA restrictions make software-only pipeline testing nearly impossible, so I plan to buy a physical dev board and Raspberry Pi to validate on silicon. While the Git diff might not look massive, the architecture has evolved from a blocking system to a true preemptive RTOS with precise polynomial timing. 1. Reworking DMA Flow & Standardizing Ring Buffers Sensor and receiver data pipelines are now driven by circular DMA, enabling non-blocking, high-frequency transfers with response times as fast as 0.3 ms (without printToUSART enabled). Everything now relies on ring buffers. Instead of generating complete packets instantly, mock injectors stream bytes directly into the buffers while updating the simulated NDTR register to mirror hardware behavior. if ( byteIdx >= frameLen ) { byteIdx = 0 ; } crsfRingBuffer [ head ] = frameBuf [ byteIdx ++ ]; head = ( head + 1 ) % CRSF_RING_BUFFER_SIZE ; currentBoardConfig . crsf_dma_stream -> NDTR = CRSF_RING_BUFFER_SIZE - head ; Feeding bytes incrementally moves the write head gradually, ensuring the simulation mimics a physical UART and allowing population functions to safely pull data within interrupt locks. 2. DMA Interrupts for Safe Parsing To prevent data overwrites, DMA streams trigger interrupts at the halfway (HTIE) and full-transfer (TCIE) points to queue tasks. Because registers like LISR are read-only in hardware, I implemented a software mock flag system (mock_LISR) for simulation: extern \"C\" void DMA1_Stream0_IRQHandler ( void ) { #ifdef SIMULATION uint32_t flags = mock_LISR ; mock_LISR = 0 ; #else uint32_t flags = DMA1 -> LISR ; #endif if ( flags & DMA_LISR_HTIF0 ) { DMA1 -> LIFCR = DMA_LIFCR_CHTIF0 ; decideNextInterruptTask ( & taskControlBlocks [ 1 ]); } } Functions safely extract data with interrupts disabled, ensuring the CPU never blocks waiting for peripheral transfers. 3. Assembly Bugs & CPU Aborts Debugging nested hardware interrupts exposed massive faults: The context-switching bug: FPU usage or large stack frames corrupted the return address, causing the CPU to execute BX LR with garbage data. Fixed in PendSV_Handler.S by explicitly storing excReturn inside the TaskControlBlock rather than relying on stacked registers. Second, a 0x00000000 Null Return Crash: Scheduled tasks attempted to return natively, popping 0x00000000 from the zero-initialized Link Register and causing a fetch fault. Every task now runs inside an infinite while(true) loop calling yieldCurrentTask() . 4. Clock PLLs & Hardware Re-routing After configuring the STM32CubeMX PLL for a 25 MHz HSE clock, the MCU runs at its full 216 MHz. I added a standardized initSystemGPIOClocks() function to enable peripheral clocks consistently. I also moved motor 3 from TIM1 to TIM4, synchronizing it with the 216MHz clock and freeing up a TIM1 DMA stream exclusively for the upcoming BlackBox logging. Future Updates With the core RTOS stabilized, development shifts to flight-facing systems: hooking the SPI pipeline to the video overlay for live OSD goggle telemetry, adding permanent flash storage for PID tunes/configs, exposing MCU controls via CLI, supporting programmable transmitter bind buttons, building a desktop GUI, and using the freed TIM1 DMA for BlackBox logging. Below, I have attached a screenshot of every single task working, and outputting values in the simulation, something that wasn’t possible for the interrupt tasks until now."}, {"post_id": 48647, "ts": "2026-08-17T03:57:01Z", "hours": 9.6761, "text": "1. Reworking the DMA Flow for Speed So, a lot has been going on lately, starting with a massive rework of the entire DMA flow. The functions are now entirely populated by circular DMA, which is a huge upgrade for the system’s overall performance. This architectural change allows for completely non-blocking, high-frequency calls, hitting response times as fast as 0.03 milliseconds. It basically means the whole data pipeline is significantly faster, and much more responsive than it was in previous versions. 2. Standardizing Ring Buffers and Mock Injectors To make everything more reliable, the DMA now follows a very specific and predictable pattern for both scheduled and interrupt tasks. Everything relies on ring buffers now, whether they are being injected by actual hardware (or simulated) DMA or by my custom simulation scripts. I also reworked the mock injectors so they no longer just return a pre-formatted packet. Instead, they write directly into the ring buffer, which lets me test the exact same parsing pipeline in software, simulating the hardware flow almost exactly like Renode (if only they would ever fix that USART DMA bug…). 3. Assembly BX LR Bug + STMCubeMX Clock PLL I also finally solved the long term BX LR return bug that I literally spent over 20 hours trying to find. Whenever tasks used the FPU or had slightly larger stacks, the return address in the r0 register would just get completely corrupted by the extra data. I fixed this by storing the return address in a dedicated uint value instead of blindly trusting the registers to hold it. That fix alone allowed me to safely re-add telemetryTX and make a bunch of other function logic much more robust. On top of that, I went into STM32CubeMX and reworked the clock PLL manually (it took over 3 hours to solve by hand). By feeding in a 25 MHz HSE clock, I managed to unlock the MCU’s internal clocks to run at their full 216 MHz.I also took some time to clean up the codebase to improve overall readability and commenting. 4. DMA Interrupts for Safe Parsing Another feature is that DMA now triggers interrupts when the ring buffers hit exactly halfway and when they are fully populated. This gives me the time to parse all the incoming values safely without having the risk about data getting overwritten by the next DMA pass before I am done reading it. I set up the IRQ handlers in the code to call the interrupt methods automatically, which ensures the CPU stays completely unblocked and free to handle other flight control tasks almost all the time (overall decreasing headroom). 5. Current Status: NVIC Bug Sadly, the code is actually not functional right now because the NVIC and IRQ pipeline is malfunctioning and just refusing to call the interrupts for reasons I cannot figure out yet. Because of this, I am holding off on pushing the code until I can track down the bug, give everything a final polish, and run some benchmark testing (since I don’t want to commit broken code). Also, sorry for promising a commit a day or two after my last devlog. I got super busy, especially with vacation, but I will try my best to get this sorted. Depending on how long it takes to figure out this NVIC issue, the next commit might drop anywhere from tomorrow to a few weeks from now."}, {"post_id": 41654, "ts": "2026-08-06T00:44:12Z", "hours": 9.5336, "text": "This week was heavily focused on the fine tuning and organization of the RTOS. I spent numerous hours of research and untangling environment setups. I originally tried to build out a complete framework for the drone code without relying on any simulation code, but Renode’s restrictions, specifically with its ability to perform DMA requests, quickly made it clear that path was impossible. To fix this I’m looking into picking up a dev board and a Raspberry Pi so I can test and debug everything on an actual MCU before finally moving the codebase over to the drone. Even though the git won’t look a whole lot different and not a lot of actual code changed, getting these configs finalized (especially in STM32CubeMX) in was a huge step forward for the project. I expect to commit the next version of the code either today or tomorrow, with improvements specifically in TelemetryTX, BlackBoxLogging, and a few other minor changes!"}, {"post_id": 37983, "ts": "2026-07-31T02:30:16Z", "hours": 8.6756, "text": "Major Architecture Upgrade : OSD, Betaflight Rates & Build System Refactor 1. OSD, DMA + SYS First off on the hardware side, I added native MSP-based OSD support for Walksnail video transmitters, built the SPI barometer driver for altitude tracking, and spun up a low-level health task that constantly monitors MPU registers and stack usage in the background. On top of that, I finally fixed the DMA stream conflicts (mainly in STMCubeMX) between TIM1 DShot motor outputs , ADC1, and SPI peripherals, so everything runs without collisions now. 2. SYS Health + Debugging I also implemented a few other low level tasks, allowing me to monitor system health, based upon ram usage and storage used. This task prints out the amount at which each tasks stack is being used, allowing me to effectively debug whether a task was actually overflowing, vs an unrestricted read/write. Furthermore, the original canary values that I used, were completely replaced as they in fact were causing some of the “stack overflow” bugs (via unrestricted reads/write every 1 ms in SysTick_Handler ). 3. Betaflight Rates + CLI Update For flight feel, I implemented Betaflight’s Actual Rates algorithm with custom expo curves, so stick inputs map to target angular velocities with center-stick precision. I also completely separated serial communications by moving the interactive CLI to USART1 (accessible via nc -C localhost 1234 in terminal) and pushing system logs to USART3. Additionally, I removed the old telemetryTX task because its unauthorized reads/writes were completely breaking the RTOS scheduler, and expanded the CLI with a ton of commands for live sensor readings and more PID tuning. Speaking of which, I am planning to create a persistent file in /bin/ , allowing for rates to be stored between runs, rather than being reset each during runtime, and having to be manually configured through the CLI. 4. Overhauled Building Workflow Finally, I overhauled the whole developer workflow and build automation setup. The build.sh and build.bat scripts now auto-configure custom CMake profiles and generate a full disassembly file in /bin/ after every build for fast low-level debugging, while run.sh and run.bat automatically launch the right terminal windows on launch. 5. Future Additions: I’m planning to build a closed-loop Renode simulation matrix to stream hardware data into every peripheral externally, letting me run 100% real production code during SIL testing! For this, I will utilize the currently blank simulate.py as well as certain commands in simulate.resc to create properly formatted dynamic buffers(which are not directly injected into the code), allowing me to properly test the DMA drivers, and many of the memory management helpers."}, {"post_id": 35605, "ts": "2026-07-27T04:22:30Z", "hours": 9.44, "text": "Over the last few days, I wrapped up two major tasks for the flight controller’s core sensor and telemetry stack: the on-screen display (OSD) renderer and the BMP390 barometer subsystem. The OSD engine is now fully hooked up to the state system, giving real-time visual downlinks for critical metrics like flight battery voltage, active flight modes, and height statistics over UART. To keep the execution completely non-blocking, all frame updates are dispatched asynchronously, preventing rendering delays from hindering the performance of the high-frequency control loops. On the barometer side, I implemented altitude tracking using Bosch’s BMP390 sensor over SPI with non-blocking DMA burst transfers. In the 50Hz task loop, incoming 24-bit raw pressure and temperature bytes are assembled and passed through the hypsometric formula to calculate smooth, relative height above ground level (AGL). Although the barometer task is a bit flawed due to floating point register stack errors with the header and end canary values, they don’t seem to be affecting the system in anyway (nor is any data being corrupted). I will find a way to fix these issues before the next commit, as well as the race condition in the interrupt tasks in the next Github commit. After that, it is just system polish and extensive testing before the RTOS will be complete!"}, {"post_id": 33865, "ts": "2026-07-24T04:03:21Z", "hours": 7.1808, "text": "1. Fixing the Stack Overflows at Boot After an entire 25-hour debugging period across 4 days, the RTOS kernel is finally done (for the scheduled tasks). I tracked down a silent bug where several critical scheduled tasks—like powerManagement , lowLevelFailSafe , and telemetryTX —were crashing the MCU on boot. The issue came down to a boot-time dependency lock: tasks were trying to poll hardware registers (like UART TX flags) and read shared drone state variables before the peripherals or producer tasks had time to initialize on Tick 0. By adding an initial yieldCurrentTask() right at the top of these methods, Task Phase Alignment was officially added. This gives the hardware a full cycle to stabilize, preventing buffer overflows and eliminating the cascading task state corruptions that were locking up the scheduler. 2. Custom Stack Sizing & Real-Time Guard Checks Alongside the scheduler fix, I pushed major upgrades to memory safety and task management. Instead of assigning a static stack array to every task, I transitioned to dynamic per-task stack allocations during initialization ( new (std::nothrow) ). Heavy string-parsing and math tasks get larger stacks, while simple toggle tasks stay lightweight. To catch memory issues before they corrupt the heap, I implemented a custom dual guarding system: 0xDEADBEEF is appended at the bottom of the stack to catch standard stack overflows, while a new 0xBEEFCAFE canary value is written to the very top index ( stackSizeWords ) to instantly flag memory breaches in the SysTick_Handler . Furthermore, I refactored powerManagement to use ADC2 in Circular DMA Mode, writing battery telemetry directly to RAM in the background for zero CPU overhead. 3. Transitioning to Walksnail Avatar HD Looking ahead, my and my friend are officially transitioning our existing analog video setup over to a fully integrated Walksnail Avatar HD digital ecosystem. Rather than keeping my custom telemetry task ( telemetryTX ) with heavy string formatting over raw UART, Walksnail allows me to stream standard MSP (MultiWii Serial Protocol) DisplayPort frames straight to the VTX. The Walksnail system will serve as our primary onboard logging source, giving us full OSD telemetry, high-framerate HD video, and precise blackbox data logging. With the RTOS core now stable and non-blocking, our next focus shifts toward “premium” flight controller features, e.g. including custom RC stick expo curves, an expanded USB CLI, and an integrated simulator interface."}, {"post_id": 32665, "ts": "2026-07-21T23:24:15Z", "hours": 9.0794, "text": "I just finished expanding the RTOS architecture, filling out all of the scheduled background tasks to handle real-time flight telemetry, peripheral hardware, and terminal configuration. On the telemetry side, I built out telemetryTX to package battery, status, and GPS data into standard CRSF frames over UART, alongside an NMEA gpsParser that decodes $GNGGA and $GNRMC sentences for live location fixes. I also made powerManagement into its own standalone task so ADC voltage and current metrics can feed into the failsafe logic and telemetry concurrently. To make bench testing and tuning significantly easier, I added usbCLI over USART1, giving me a full interactive shell to tweak PID gains (Kp, Ki, Kd), dump raw IMU data, and inspect hardware states on the fly without needing to reflash firmware. To keep the physical quad safe and responsive during flight, I added updatePeripherals for LED status patterns and buzzer warnings, along with a dedicated Independent Watchdog (IWDG) task running as a low-priority fail-safe to trigger hardware MCU resets if the scheduler ever freezes. On the project structure side, CMake now routes all output binaries straight into a clean ./bin/ directory so nobody has to compile the source manually just to run the .elf target in Renode. I also introduced a -DENABLE_DEBUG flag, allowing me to cleanly toggle between complete USART log prints across every loop or a blank terminal environment meant purely for the CLI shell. While all the background subsystems and scheduled task priorities are fully mapped out, I’m currently figuring out a few lingering RTOS bugs—specifically around stack allocation, causing stack overflow flags on certain scheduled tasks, along with scheduling starvation where context switching isn’t releasing task blocks properly. Because I want to ensure the scheduler kernel is 100% complete before pushing broken stack frames to the main branch, the GitHub repository will be updated with the complete, bug-fixed code later today. Everything is moving in the right direction, and getting these background tasks finalized brings me one step closer to full flight hardware deployment!"}, {"post_id": 31067, "ts": "2026-07-19T04:58:26Z", "hours": 2.5139, "text": "I’ve spent the last 20 hours of coding basically staring at bare-metal memory allocations and tracking down why the drone’s context switcher was triggering CPU drops under the Renode simulation environment. Moving away from manual Python injection scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify the testing layout, but instead, it exposed structural design flaws in how the scheduler kernel boots up. Running a multi-sample sensorCalibration() routine at cold boot was forcing hidden task yields before the OS kernel was fully mapped out, which was throwing unmapped register address errors and wiping out index-0 entries. To solve this, I decoupled the entire state machine sequence so that hardware allocations, peripheral registers, and core tracking counters now clear before any operational loops drop into the registry. I also added a critical rtosStarted gatekeeper flag to yieldCurrentTask() so calibration math runs cleanly in sequence without triggering early PendSV handler switches. On top of that, the task stack pointers are completely realigned. The assembly context swapper now maps a precise 32-word boundary allocation utilizing 0xFFFFFFFD as a basic exception return code, which completely eliminates the data corruption that was misaligning our Process Stack Pointer. With the fundamental kernel stabilized, I shifted entirely into clean architecture organization. The massive, cluttered code blocks have been split up into independent tracking files (BufferPopulation.cpp, Tasks.cpp, and SimInjector.cpp). High-speed SPI reads for the IMU, UART ring buffers for decoding CRSF radio channel frames, battery ADC sampling, and DShot600 motor output mixers are now fully broken out and functional. There is still a nagging preemption lockout issue inside the simulator where a single interrupt task attempts to starve out the other concurrent loops during a millisecond window, but the baseline operating system is locked in, meaning I can confidently verify the PID flight mixing tables and safety code blocks safely before the code ever touches a physical quadcopter. If you would like to run your own tasks, I also added support in the .bat and .sh files to build code for the simulation (flag=sim), user task code (flag=user), and actual drone upload code (no flags). Example MacOS Commands: ./build.sh sim ./build.sh user ./build.sh This makes it so that I don’t have to constantly modify code to run either the user tasks or simulation code, instead using a flag. Overall, this RTOS is not done yet, however, I plan to add the rest of the scheduled tasks later today, and fixing the sole bug keeping this simulation back! I expect a full ship to be comming out in the next week or so, along with all ESC, RM, and TM code complete!"}, {"post_id": 30963, "ts": "2026-07-18T23:42:07Z", "hours": 9.2461, "text": "I’ve been doing a lot of debugging for the RTOS scheduler inside the simulation environment, and it’s been very difficult for me to identify many bugs in teh core architecture of my tasks. Moving away from Python scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify things, but instead, it exposed some nasty architectural bugs in how tasks and context switching interact. There has also been a massive priority inversion and preemption lockup where the CRSF parsing loop completely starves out the lower-priority threads. Also, running a raw sensor calibration loop at boot was forcing thread switches before the OS kernel was even fully initialized, completely corrupting task indexes, throwing null pointer warnings, and leaving half of my PID calculations at zero. Still working on many fixes, but it has been a lot of work (9 hours), but I hope to get the full RTOS with at least bare minimum flight tasks out by tomorrow! The GitHub repo still won’t be fully up-to-date until these structural bugs are figured out, but I plan to push the corrected scheduler files and mock drivers very soon. The screenshot below shows an image of the CRSF task completely dominating, without any processes interrupting it."}, {"post_id": 30245, "ts": "2026-07-17T17:45:35Z", "hours": 9.5911, "text": "I just wrapped up the core architecture of the drone’s flight controller, including mapping out all 7 interrupt methods into a far more optimized RTOS scheduler. The updated version makes use of a FIFO stack, to keep track of nested interrupts. I also protected the main code from data corruption during pendSV switches by enabling and disabling irq in certain areas of vulnerable code. Other small changes to the assembly to save floating point registers as well as better memory allocation was also done in this update. From high-speed IMU sensor integration and state estimation calculations to CRSF packet decoding and DShot motor generation, the essential tasks are fully written and compiled. I’ve officially shifted gears into the testing phase, working on simulated environments to debug DMA transfers, registers, and the flight state machine’s arming sequences. As of now, I am writing python scripts by hand, in order to inject “dummy” values into the GPIO, SPI, and USART registers in order to populate the buffers, and simulate the calculations. As the code is becoming longer and longer, I will try to refactor a lot of the files into smaller more organized portions, to increase readability (often I have a hard time traversing everything). Note: The current code pushed to GitHub isn’t quite the latest since I’m in the middle of troubleshooting a few simulation-specific register bugs, but I wanted to get this update out to meet the 10-hour devlog requirement on Stardance. Everything is moving in the right direction, and having a virtual environment all working means I can safely verify the PID mixer and safety flags before this code ever touches a physical quad. This officially marks the end of both phases 2 and 3, and now its a matter of finishing extra scheduled telemetry tasks (e.g. OSD and EdgeTX logging), but I estimate that the flight controller portion of the code (around 60% of all logic in the drone) will be done between now and Sunday, July 19th! I will also post a much more in depth devlog about how the methods work, as well as an updated README.md on Github ASAP."}, {"post_id": 28703, "ts": "2026-07-15T03:44:43Z", "hours": 1.4603, "text": "To make my hybrid RTOS accessible and easy to test, I designed a modular sandbox task registry system that isolates the core kernel from custom user code. Developers can write standard non-returning tasks in an isolated file ( User_Tasks/user_tasks.cpp ), while the kernel exposes a registration hook that allocates a dedicated 1024-word stack space. This decoupling means anyone can plug in their own cooperative or preemptive tasks, set execution periods or trigger bounds, and run them instantly on our virtual STM32F7 without risking memory corruption or touching the underlying context-switching assembly. For more information on how to make your own tasks refer to the README.md ."}, {"post_id": 28651, "ts": "2026-07-15T01:05:47Z", "hours": 1.0922, "text": "I just updated a few build files and restructured the project, so code and simulation separation would be better. I also added a few executable files (build.sh, run.bat, and run.sh) to easily compile and run the project."}, {"post_id": 28615, "ts": "2026-07-14T23:38:20Z", "hours": 5.5942, "text": "I finally reached a massive milestone with the kernel architecture and got the scheduler firing exactly how it needs to. Even though I thought the RTOS portion was completely wrapped up a bit ago, now it is officially done. I ended up doing a massive revamp on how scheduled tasks execute, routing them through PendSV so that the background worker states get completely backed up and saved by my assembly code just like the preemptive ones. I also cleaned up the initialization API by throwing in an overloaded function to separate timed loops from raw hardware events (the interrupt tasks). Overall most of the testing logic is now gone, and now the system is being more and more focused on the actual drone tasks. On the hardware side of things, I built out the actual drone tasks and the underlying SPI and UART DMA drivers that populate my local data packets. Even though they are not in use right now as all the tasks (which are not fully completed) require the support of each other for full testing. With the core OS completely checked off, the focus is shifting entirely over to the actual flight control logic. Over the next couple of days, I’m going to wrap up the final flight controller tasks, and get the core stabilization algorithms running. Once the flight controller application layer is fully put together, I’m moving straight onto building out complete simulations for the receiver, transmitter, and finally the ESC modules to get the whole drone network interacting together!"}, {"post_id": 27365, "ts": "2026-07-12T21:17:48Z", "hours": 3.8289, "text": "I finally finished the most difficult part of the project so far and got a hybrid cooperative/preemptive scheduler running from scratch. After a ton of debugging with the assembly memory layout, the core RTOS kernel shell is officially stable, verified inside the Renode simulator, and completely ready to handle flight data. The architecture divides the CPU’s brain into two execution pathways to maximize calculation speeds while keeping latency near zero. Standard background tasks, like handling low-priority peripheral updates, run sequentially inside a cooperative loop based on their relative priority. They execute and then drop out without wasting an overhead time. But for high-priority hardware event such as a critical radio packet arriving over UART or raw sensor data from the IMU, the system completely bypasses the standard queue. It pulls a physical hardware lever (PendSV) that forces an instant stack swap. When an interrupt task fires through PendSV, the CPU pauses the background scheduled loop, and my assembly code packs up the core registers, saves that exact memory address to RAM, and hot-swaps the Process Stack Pointer to launch the interrupt task. Right now, there is just a dummy delay loop inside the interrupt task to visually show the execution break in the console logs. Once it finishes printing, it hits a yield function that throws the assembly switch backward, pops the background registers, and hands control straight back to the flight loop. The repository currenly has a lot of diagnostic test code because I needed to prove the pointer indirection and stack-faking logic worked without blowing up the memory alignment. Now that the plumbing is completely verified, the next step is to strip out the test code and start writing the actual flight infrastructure. I am moving straight into coding the PID control loops, signal mixers, Kalman filters, and live motor generation."}, {"post_id": 26996, "ts": "2026-07-12T03:54:25Z", "hours": 2.8228, "text": "I finally added minimum task scheduling for the RTOS. I had originally designed a simple kernel to create a buffer of scheduled tasks in QEMU, but after learning that the simulation didn’t actually support the specific MCU that my friend and I are using for the real drone, I had to pivot. I switched over to using STM32CubeMX for the actual bare-metal configuration and Renode to handle running the emulation. Right now, the kernel just executes a task based on a basic timing loop and priority, waits for it to completely finish, and then moves on to the next task. To be honest, it isn’t super useful yet because it only covers tasks in what I call the “scheduled zone” of the drone. This includes background stuff like blackbox flight data management, but it leaves out the most critical parts like the PID control loops and streaming real-time UART data from the IMU. Those features need to fire their own asynchronous interrupt signals at the highest possible hardware priority so they can instantly pause the optional background tasks and execute the critical code that actually keeps the drone stable and flying. Next up, I need to write a short piece of assembly to handle saving the current CPU state and registers of whatever task is currently running when an interrupt hits. It shouldn’t be too bad since it will only take about 30 lines of code. I know I haven’t been posting devlogs for the past couple of weeks even though I’ve been grinding on this, but that’s mostly because we spent a ton of time initially planning out the architecture of the drone. We wanted to map out the software boundaries early so my friend and I could go our separate ways working on different systems without having massive merge conflicts later on."}]...
|
Title: 200 MPH Drone RTOS by @Guagyyy | Stardance
Title: 200 MPH Drone RTOS by @Guagyyy | Stardance
Devlogs:
I finally added minimum task scheduling for the RTOS. I had originally designed a simple kernel to create a buffer of scheduled tasks in QEMU, but after learning that the simulation didn’t actually support the specific MCU that my friend and I are using for the real drone, I had to pivot. I switched over to using STM32CubeMX for the actual bare-metal configuration and Renode to handle running the emulation. Right now, the kernel just executes a task based on a basic timing loop and priority, waits for it to completely finish, and then moves on to the next task. To be honest, it isn’t super useful yet because it only covers tasks in what I call the “scheduled zone” of the drone. This includes background stuff like blackbox flight data management, but it leaves out the most critical parts like the PID control loops and streaming real-time UART data from the IMU. Those features need to fire their own asynchronous interrupt signals at the highest possible hardware priority so they can instantly pause the optional background tasks and execute the critical code that actually keeps the drone stable and flying. Next up, I need to write a short piece of assembly to handle saving the current CPU state and registers of whatever task is currently running when an interrupt hits. It shouldn’t be too bad since it will only take about 30 lines of code. I know I haven’t been posting devlogs for the past couple of weeks even though I’ve been grinding on this, but that’s mostly because we spent a ton of time initially planning out the architecture of the drone. We wanted to map out the software boundaries early so my friend and I could go our separate ways working on different systems without having massive merge conflicts later on.
I finally finished the most difficult part of the project so far and got a hybrid cooperative/preemptive scheduler running from scratch. After a ton of debugging with the assembly memory layout, the core RTOS kernel shell is officially stable, verified inside the Renode simulator, and completely ready to handle flight data. The architecture divides the CPU’s brain into two execution pathways to maximize calculation speeds while keeping latency near zero. Standard background tasks, like handling low-priority peripheral updates, run sequentially inside a cooperative loop based on their relative priority. They execute and then drop out without wasting an overhead time. But for high-priority hardware event such as a critical radio packet arriving over UART or raw sensor data from the IMU, the system completely bypasses the standard queue. It pulls a physical hardware lever (PendSV) that forces an instant stack swap. When an interrupt task fires through PendSV, the CPU pauses the background scheduled loop, and my assembly code packs up the core registers, saves that exact memory address to RAM, and hot-swaps the Process Stack Pointer to launch the interrupt task. Right now, there is just a dummy delay loop inside the interrupt task to visually show the execution break in the console logs. Once it finishes printing, it hits a yield function that throws the assembly switch backward, pops the background registers, and hands control straight back to the flight loop. The repository currenly has a lot of diagnostic test code because I needed to prove the pointer indirection and stack-faking logic worked without blowing up the memory alignment. Now that the plumbing is completely verified, the next step is to strip out the test code and start writing the actual flight infrastructure. I am moving straight into coding the PID control loops, signal mixers, Kalman filters, and live motor generation.
I finally reached a massive milestone with the kernel architecture and got the scheduler firing exactly how it needs to. Even though I thought the RTOS portion was completely wrapped up a bit ago, now it is officially done. I ended up doing a massive revamp on how scheduled tasks execute, routing them through PendSV so that the background worker states get completely backed up and saved by my assembly code just like the preemptive ones. I also cleaned up the initialization API by throwing in an overloaded function to separate timed loops from raw hardware events (the interrupt tasks). Overall most of the testing logic is now gone, and now the system is being more and more focused on the actual drone tasks. On the hardware side of things, I built out the actual drone tasks and the underlying SPI and UART DMA drivers that populate my local data packets. Even though they are not in use right now as all the tasks (which are not fully completed) require the support of each other for full testing. With the core OS completely checked off, the focus is shifting entirely over to the actual flight control logic. Over the next couple of days, I’m going to wrap up the final flight controller tasks, and get the core stabilization algorithms running. Once the flight controller application layer is fully put together, I’m moving straight onto building out complete simulations for the receiver, transmitter, and finally the ESC modules to get the whole drone network interacting together!
I just updated a few build files and restructured the project, so code and simulation separation would be better. I also added a few executable files (build.sh, run.bat, and run.sh) to easily compile and run the project.
To make my hybrid RTOS accessible and easy to test, I designed a modular sandbox task registry system that isolates the core kernel from custom user code. Developers can write standard non-returning tasks in an isolated file ( User_Tasks/user_tasks.cpp ), while the kernel exposes a registration hook that allocates a dedicated 1024-word stack space. This decoupling means anyone can plug in their own cooperative or preemptive tasks, set execution periods or trigger bounds, and run them instantly on our virtual STM32F7 without risking memory corruption or touching the underlying context-switching assembly. For more information on how to make your own tasks refer to the README.md .
I just wrapped up the core architecture of the drone’s flight controller, including mapping out all 7 interrupt methods into a far more optimized RTOS scheduler. The updated version makes use of a FIFO stack, to keep track of nested interrupts. I also protected the main code from data corruption during pendSV switches by enabling and disabling irq in certain areas of vulnerable code. Other small changes to the assembly to save floating point registers as well as better memory allocation was also done in this update. From high-speed IMU sensor integration and state estimation calculations to CRSF packet decoding and DShot motor generation, the essential tasks are fully written and compiled. I’ve officially shifted gears into the testing phase, working on simulated environments to debug DMA transfers, registers, and the flight state machine’s arming sequences. As of now, I am writing python scripts by hand, in order to inject “dummy” values into the GPIO, SPI, and USART registers in order to populate the buffers, and simulate the calculations. As the code is becoming longer and longer, I will try to refactor a lot of the files into smaller more organized portions, to increase readability (often I have a hard time traversing everything). Note: The current code pushed to GitHub isn’t quite the latest since I’m in the middle of troubleshooting a few simulation-specific register bugs, but I wanted to get this update out to meet the 10-hour devlog requirement on Stardance. Everything is moving in the right direction, and having a virtual environment all working means I can safely verify the PID mixer and safety flags before this code ever touches a physical quad. This officially marks the end of both phases 2 and 3, and now its a matter of finishing extra scheduled telemetry tasks (e.g. OSD and EdgeTX logging), but I estimate that the flight controller portion of the code (around 60% of all logic in the drone) will be done between now and Sunday, July 19th! I will also post a much more in depth devlog about how the methods work, as well as an updated README.md on Github ASAP.
I’ve been doing a lot of debugging for the RTOS scheduler inside the simulation environment, and it’s been very difficult for me to identify many bugs in teh core architecture of my tasks. Moving away from Python scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify things, but instead, it exposed some nasty architectural bugs in how tasks and context switching interact. There has also been a massive priority inversion and preemption lockup where the CRSF parsing loop completely starves out the lower-priority threads. Also, running a raw sensor calibration loop at boot was forcing thread switches before the OS kernel was even fully initialized, completely corrupting task indexes, throwing null pointer warnings, and leaving half of my PID calculations at zero. Still working on many fixes, but it has been a lot of work (9 hours), but I hope to get the full RTOS with at least bare minimum flight tasks out by tomorrow! The GitHub repo still won’t be fully up-to-date until these structural bugs are figured out, but I plan to push the corrected scheduler files and mock drivers very soon. The screenshot below shows an image of the CRSF task completely dominating, without any processes interrupting it.
I’ve spent the last 20 hours of coding basically staring at bare-metal memory allocations and tracking down why the drone’s context switcher was triggering CPU drops under the Renode simulation environment. Moving away from manual Python injection scripts to a cleaner C++ conditional compilation framework using CMake was supposed to simplify the testing layout, but instead, it exposed structural design flaws in how the scheduler kernel boots up. Running a multi-sample sensorCalibration() routine at cold boot was forcing hidden task yields before the OS kernel was fully mapped out, which was throwing unmapped register address errors and wiping out index-0 entries. To solve this, I decoupled the entire state machine sequence so that hardware allocations, peripheral registers, and core tracking counters now clear before any operational loops drop into the registry. I also added a critical rtosStarted gatekeeper flag to yieldCurrentTask() so calibration math runs cleanly in sequence without triggering early PendSV handler switches. On top of that, the task stack pointers are completely realigned. The assembly context swapper now maps a precise 32-word boundary allocation utilizing 0xFFFFFFFD as a basic exception return code, which completely eliminates the data corruption that was misaligning our Process Stack Pointer. With the fundamental kernel stabilized, I shifted entirely into clean architecture organization. The massive, cluttered code blocks have been split up into independent tracking files (BufferPopulation.cpp, Tasks.cpp, and SimInjector.cpp). High-speed SPI reads for the IMU, UART ring buffers for decoding CRSF radio channel frames, battery ADC sampling, and DShot600 motor output mixers are now fully broken out and functional. There is still a nagging preemption lockout issue inside the simulator where a single interrupt task attempts to starve out the other concurrent loops during a millisecond window, but the baseline operating system is locked in, meaning I can confidently verify the PID flight mixing tables and safety code blocks safely before the code ever touches a physical quadcopter. If you would like to run your own tasks, I also added support in the .bat and .sh files to build code for the simulation (flag=sim), user task code (flag=user), and actual drone upload code (no flags). Example MacOS Commands: ./build.sh sim ./build.sh user ./build.sh This makes it so that I don’t have to constantly modify code to run either the user tasks or simulation code, instead using a flag. Overall, this RTOS is not done yet, however, I plan to add the rest of the scheduled tasks later today, and fixing the sole bug keeping this simulation back! I expect a full ship to be comming out in the next week or so, along with all ESC, RM, and TM code complete!
I just finished expanding the RTOS architecture, filling out all of the scheduled background tasks to handle real-time flight telemetry, peripheral hardware, and terminal configuration. On the telemetry side, I built out telemetryTX to package battery, status, and GPS data into standard CRSF frames over UART, alongside an NMEA gpsParser that decodes $GNGGA and $GNRMC sentences for live location fixes. I also made powerManagement into its own standalone task so ADC voltage and current metrics can feed into the failsafe logic and telemetry concurrently. To make bench testing and tuning significantly easier, I added usbCLI over USART1, giving me a full interactive shell to tweak PID gains (Kp, Ki, Kd), dump raw IMU data, and inspect hardware states on the fly without needing to reflash firmware. To keep the physical quad safe and responsive during flight, I added updatePeripherals for LED status patterns and buzzer warnings, along with a dedicated Independent Watchdog (IWDG) task running as a low-priority fail-safe to trigger hardware MCU resets if the scheduler ever freezes. On the project structure side, CMake now routes all output binaries straight into a clean ./bin/ directory so nobody has to compile the source manually just to run the .elf target in Renode. I also introduced a -DENABLE_DEBUG flag, allowing me to cleanly toggle between complete USART log prints across every loop or a blank terminal environment meant purely for the CLI shell. While all the background subsystems and scheduled task priorities are fully mapped out, I’m currently figuring out a few lingering RTOS bugs—specifically around stack allocation, causing stack overflow flags on certain scheduled tasks, along with scheduling starvation where context switching isn’t releasing task blocks properly. Because I want to ensure the scheduler kernel is 100% complete before pushing broken stack frames to the main branch, the GitHub repository will be updated with the complete, bug-fixed code later today. Everything is moving in the right direction, and getting these background tasks finalized brings me one step closer to full flight hardware deployment!
1. Fixing the Stack Overflows at Boot After an entire 25-hour debugging period across 4 days, the RTOS kernel is finally done (for the scheduled tasks). I tracked down a silent bug where several critical scheduled tasks—like powerManagement , lowLevelFailSafe , and telemetryTX —were crashing the MCU on boot. The issue came down to a boot-time dependency lock: tasks were trying to poll hardware registers (like UART TX flags) and read shared drone state variables before the peripherals or producer tasks had time to initialize on Tick 0. By adding an initial yieldCurrentTask() right at the top of these methods, Task Phase Alignment was officially added. This gives the hardware a full cycle to stabilize, preventing buffer overflows and eliminating the cascading task state corruptions that were locking up the scheduler. 2. Custom Stack Sizing & Real-Time Guard Checks Alongside the scheduler fix, I pushed major upgrades to memory safety and task management. Instead of assigning a static stack array to every task, I transitioned to dynamic per-task stack allocations during initialization ( new (std::nothrow) ). Heavy string-parsing and math tasks get larger stacks, while simple toggle tasks stay lightweight. To catch memory issues before they corrupt the heap, I implemented a custom dual guarding system: 0xDEADBEEF is appended at the bottom of the stack to catch standard stack overflows, while a new 0xBEEFCAFE canary value is written to the very top index ( stackSizeWords ) to instantly flag memory breaches in the SysTick_Handler . Furthermore, I refactored powerManagement to use ADC2 in Circular DMA Mode, writing battery telemetry directly to RAM in the background for zero CPU overhead. 3. Transitioning to Walksnail Avatar HD Looking ahead, my and my friend are officially transitioning our existing analog video setup over to a fully integrated Walksnail Avatar HD digital ecosystem. Rather than keeping my custom telemetry task ( telemetryTX ) with heavy string formatting over raw UART, Walksnail allows me to stream standard MSP (MultiWii Serial Protocol) DisplayPort frames straight to the VTX. The Walksnail system will serve as our primary onboard logging source, giving us full OSD telemetry, high-framerate HD video, and precise blackbox data logging. With the RTOS core now stable and non-blocking, our next focus shifts toward “premium” flight controller features, e.g. including custom RC stick expo curves, an expanded USB CLI, and an integrated simulator interface.
Over the last few days, I wrapped up two major tasks for the flight controller’s core sensor and telemetry stack: the on-screen display (OSD) renderer and the BMP390 barometer subsystem. The OSD engine is now fully hooked up to the state system, giving real-time visual downlinks for critical metrics like flight battery voltage, active flight modes, and height statistics over UART. To keep the execution completely non-blocking, all frame updates are dispatched asynchronously, preventing rendering delays from hindering the performance of the high-frequency control loops. On the barometer side, I implemented altitude tracking using Bosch’s BMP390 sensor over SPI with non-blocking DMA burst transfers. In the 50Hz task loop, incoming 24-bit raw pressure and temperature bytes are assembled and passed through the hypsometric formula to calculate smooth, relative height above ground level (AGL). Although the barometer task is a bit flawed due to floating point register stack errors with the header and end canary values, they don’t seem to be affecting the system in anyway (nor is any data being corrupted). I will find a way to fix these issues before the next commit, as well as the race condition in the interrupt tasks in the next Github commit. After that, it is just system polish and extensive testing before the RTOS will be complete!
Major Architecture Upgrade : OSD, Betaflight Rates & Build System Refactor 1. OSD, DMA + SYS First off on the hardware side, I added native MSP-based OSD support for Walksnail video transmitters, built the SPI barometer driver for altitude tracking, and spun up a low-level health task that constantly monitors MPU registers and stack usage in the background. On top of that, I finally fixed the DMA stream conflicts (mainly in STMCubeMX) between TIM1 DShot motor outputs , ADC1, and SPI peripherals, so everything runs without collisions now. 2. SYS Health + Debugging I also implemented a few other low level tasks, allowing me to monitor system health, based upon ram usage and storage used. This task prints out the amount at which each tasks stack is being used, allowing me to effectively debug whether a task was actually overflowing, vs an unrestricted read/write. Furthermore, the original canary values that I used, were completely replaced as they in fact were causing some of the “stack overflow” bugs (via unrestricted reads/write every 1 ms in SysTick_Handler ). 3. Betaflight Rates + CLI Update For flight feel, I implemented Betaflight’s Actual Rates algorithm with custom expo curves, so stick inputs map to target angular velocities with center-stick precision. I also completely separated serial communications by moving the interactive CLI to USART1 (accessible via nc -C localhost 1234 in terminal) and pushing system logs to USART3. Additionally, I removed the old telemetryTX task because its unauthorized reads/writes were completely breaking the RTOS scheduler, and expanded the CLI with a ton of commands for live sensor readings and more PID tuning. Speaking of which, I am planning to create a persistent file in /bin/ , allowing for rates to be stored between runs, rather than being reset each during runtime, and having to be manually configured through the CLI. 4. Overhauled Building Workflow Finally, I overhauled the whole developer workflow and build automation setup. The build.sh and build.bat scripts now auto-configure custom CMake profiles and generate a full disassembly file in /bin/ after every build for fast low-level debugging, while run.sh and run.bat automatically launch the right terminal windows on launch. 5. Future Additions: I’m planning to build a closed-loop Renode simulation matrix to stream hardware data into every peripheral externally, letting me run 100% real production code during SIL testing! For this, I will utilize the currently blank simulate.py as well as certain commands in simulate.resc to create properly formatted dynamic buffers(which are not directly injected into the code), allowing me to properly test the DMA drivers, and many of the memory management helpers.
This week was heavily focused on the fine tuning and organization of the RTOS. I spent numerous hours of research and untangling environment setups. I originally tried to build out a complete framework for the drone code without relying on any simulation code, but Renode’s restrictions, specifically with its ability to perform DMA requests, quickly made it clear that path was impossible. To fix this I’m looking into picking up a dev board and a Raspberry Pi so I can test and debug everything on an actual MCU before finally moving the codebase over to the drone. Even though the git won’t look a whole lot different and not a lot of actual code changed, getting these configs finalized (especially in STM32CubeMX) in was a huge step forward for the project. I expect to commit the next version of the code either today or tomorrow, with improvements specifically in TelemetryTX, BlackBoxLogging, and a few other minor changes!
1. Reworking the DMA Flow for Speed So, a lot has been going on lately, starting with a massive rework of the entire DMA flow. The functions are now entirely populated by circular DMA, which is a huge upgrade for the system’s overall performance. This architectural change allows for completely non-blocking, high-frequency calls, hitting response times as fast as 0.03 milliseconds. It basically means the whole data pipeline is significantly faster, and much more responsive than it was in previous versions. 2. Standardizing Ring Buffers and Mock Injectors To make everything more reliable, the DMA now follows a very specific and predictable pattern for both scheduled and interrupt tasks. Everything relies on ring buffers now, whether they are being injected by actual hardware (or simulated) DMA or by my custom simulation scripts. I also reworked the mock injectors so they no longer just return a pre-formatted packet. Instead, they write directly into the ring buffer, which lets me test the exact same parsing pipeline in software, simulating the hardware flow almost exactly like Renode (if only they would ever fix that USART DMA bug…). 3. Assembly BX LR Bug + STMCubeMX Clock PLL I also finally solved the long term BX LR return bug that I literally spent over 20 hours trying to find. Whenever tasks used the FPU or had slightly larger stacks, the return address in the r0 register would just get completely corrupted by the extra data. I fixed this by storing the return address in a dedicated uint value instead of blindly trusting the registers to hold it. That fix alone allowed me to safely re-add telemetryTX and make a bunch of other function logic much more robust. On top of that, I went into STM32CubeMX and reworked the clock PLL manually (it took over 3 hours to solve by hand). By feeding in a 25 MHz HSE clock, I managed to unlock the MCU’s internal clocks to run at their full 216 MHz.I also took some time to clean up the codebase to improve overall readability and commenting. 4. DMA Interrupts for Safe Parsing Another feature is that DMA now triggers interrupts when the ring buffers hit exactly halfway and when they are fully populated. This gives me the time to parse all the incoming values safely without having the risk about data getting overwritten by the next DMA pass before I am done reading it. I set up the IRQ handlers in the code to call the interrupt methods automatically, which ensures the CPU stays completely unblocked and free to handle other flight control tasks almost all the time (overall decreasing headroom). 5. Current Status: NVIC Bug Sadly, the code is actually not functional right now because the NVIC and IRQ pipeline is malfunctioning and just refusing to call the interrupts for reasons I cannot figure out yet. Because of this, I am holding off on pushing the code until I can track down the bug, give everything a final polish, and run some benchmark testing (since I don’t want to commit broken code). Also, sorry for promising a commit a day or two after my last devlog. I got super busy, especially with vacation, but I will try my best to get this sorted. Depending on how long it takes to figure out this NVIC issue, the next commit might drop anywhere from tomorrow to a few weeks from now.
Complete RTOS Overhaul, Circular DMA Pipelines, and CPU Abort Fixes This update focuses on fine-tuning the RTOS, organizing the scheduler, and rewriting microcontroller memory handling. Renode’s simulated DMA restrictions make software-only pipeline testing nearly impossible, so I plan to buy a physical dev board and Raspberry Pi to validate on silicon. While the Git diff might not look massive, the architecture has evolved from a blocking system to a true preemptive RTOS with precise polynomial timing. 1. Reworking DMA Flow & Standardizing Ring Buffers Sensor and receiver data pipelines are now driven by circular DMA, enabling non-blocking, high-frequency transfers with response times as fast as 0.3 ms (without printToUSART enabled). Everything now relies on ring buffers. Instead of generating complete packets instantly, mock injectors stream bytes directly into the buffers while updating the simulated NDTR register to mirror hardware behavior. if ( byteIdx >= frameLen ) { byteIdx = 0 ; } crsfRingBuffer [ head ] = frameBuf [ byteIdx ++ ]; head = ( head + 1 ) % CRSF_RING_BUFFER_SIZE ; currentBoardConfig . crsf_dma_stream -> NDTR = CRSF_RING_BUFFER_SIZE - head ; Feeding bytes incrementally moves the write head gradually, ensuring the simulation mimics a physical UART and allowing population functions to safely pull data within interrupt locks. 2. DMA Interrupts for Safe Parsing To prevent data overwrites, DMA streams trigger interrupts at the halfway (HTIE) and full-transfer (TCIE) points to queue tasks. Because registers like LISR are read-only in hardware, I implemented a software mock flag system (mock_LISR) for simulation: extern "C" void DMA1_Stream0_IRQHandler ( void ) { #ifdef SIMULATION uint32_t flags = mock_LISR ; mock_LISR = 0 ; #else uint32_t flags = DMA1 -> LISR ; #endif if ( flags & DMA_LISR_HTIF0 ) { DMA1 -> LIFCR = DMA_LIFCR_CHTIF0 ; decideNextInterruptTask ( & taskControlBlocks [ 1 ]); } } Functions safely extract data with interrupts disabled, ensuring the CPU never blocks waiting for peripheral transfers. 3. Assembly Bugs & CPU Aborts Debugging nested hardware interrupts exposed massive faults: The context-switching bug: FPU usage or large stack frames corrupted the return address, causing the CPU to execute BX LR with garbage data. Fixed in PendSV_Handler.S by explicitly storing excReturn inside the TaskControlBlock rather than relying on stacked registers. Second, a 0x00000000 Null Return Crash: Scheduled tasks attempted to return natively, popping 0x00000000 from the zero-initialized Link Register and causing a fetch fault. Every task now runs inside an infinite while(true) loop calling yieldCurrentTask() . 4. Clock PLLs & Hardware Re-routing After configuring the STM32CubeMX PLL for a 25 MHz HSE clock, the MCU runs at its full 216 MHz. I added a standardized initSystemGPIOClocks() function to enable peripheral clocks consistently. I also moved motor 3 from TIM1 to TIM4, synchronizing it with the 216MHz clock and freeing up a TIM1 DMA stream exclusively for the upcoming BlackBox logging. Future Updates With the core RTOS stabilized, development shifts to flight-facing systems: hooking the SPI pipeline to the video overlay for live OSD goggle telemetry, adding permanent flash storage for PID tunes/configs, exposing MCU controls via CLI, supporting programmable transmitter bind buttons, building a desktop GUI, and using the freed TIM1 DMA for BlackBox logging. Below, I have attached a screenshot of every single task working, and outputting values in the simulation, something that wasn’t possible for the interrupt tasks until now.
1. CLI Upgrades and Channel Mapping Over the past 5 days, I knocked out some major quality-of-life upgrades for the flight controller. I added customizable channel mapping for CRSF directly through the CLI. By utilizing a combination of references and pointers, I was able to point a volatile alias to certain channel mappings, allowing for completely customizable CRSF channels. While I was in the CLI logic, I also added the ability to configure custom IMU orientations around the z-axis, making it way easier to mount the board in different directions without having to recompile the firmware. 2. DMA Pipeline Fixes and Baro Optimization A big chunk of this session went into debugging and refactoring the hardware data pipelines. I adjusted the ADC population pipeline in order to fix some stream parsing issues, and gave the barometer a massive overhaul. The baro now uses a non-blocking, non-circular DMA setup that relies on a semi-interrupt-driven task call rather than a continuous loop. This enabled me to yield in the middle of the function, and call back later as soon as DMA is finished transferring. I also fixed a massive bug in the DMA setup: the DMA_SxCR_HTIE and DMA_SxCR_TCIE flags were accidentally enabled for the GPS and OSD ring buffers, which would have crashed the whole RTOS by firing unhandled interrupts, causing default HAL and IRQ handlers to run. 3. Walksnail Two-Way Communication Finally, I built out the respondToVTX task to get the drone properly communicating with the Walksnail VTX. Instead of just blindly sending video data out, this sets up true two-way communication over asynchronous UART. By writing a persistent byte-by-byte state machine, the flight controller can now safely parse incoming requests from the VTX without dropping half-packets, allowing me to send back live stick positions and armed status for the OSD menus. The only thing left to do now is handle persistent CLI storage, the logToBlackBox task, integrating the semi-interrupt pipeline with telemetryTX and the OSD, and a few other system tweaks. After that the RTOS will be 100% ready to fly the actual drone.
1. Scheduler Hardening and Task Discovery Spent part of this session making the RTOS scheduler itself more robust. I added a findTaskByName() function so interrupt-driven task lookups happen dynamically instead of relying on hardcoded task indices, which was a fragile setup just waiting to break the moment task registration order changed. Alongside that, I wrapped every one of those lookups with lambdas that throw a proper warning if a task can’t be found, so a missing task fails loudly instead of silently dereferencing a null pointer somewhere downstream. 2. Blocking vs Non-Blocking Scheduled Tasks After a lot of painful debugging, I traced a string of issues (including interrupt tasks silently failing to fire and scheduled tasks stepping on each other) back to non-blocking statements I’d introduced inside scheduled tasks in the previous devlog. I ended up taking those out and reverting scheduled tasks fully back to blocking, which is genuinely what the scheduled zone was designed for in the first place: tasks that don’t need to run in polynomial time and can safely block without putting the drone at risk of crashing. Once that was sorted, I converted the raw USART byte-pushing into a blocking DMA system instead, so streaming is handled by DMA hardware rather than manually pushed byte-by-byte over USART. 3. Flight Loop Refactor and VTX Communication On the flight logic side, I refactored flightLoop() to use lambdas and a state machine so I would never have to yield in the middle of my tasks (which was used previousely for zeroing motor outputs). I also converted the error handling into a proper state machine, so different types of warnings can be caught and handled distinctly instead of lumping every issue into one path, and turned on full debug printing whenever the system is running. Last but not least, I built out a dedicated injector for respondToVTX so I can properly test and simulate VTX communication going forward. 4. Real Hardware Testing Since, I am almost 100% done with the RTOS I bought two NUCLEO-F756ZG’s which will serve as testing the 100% production code rather than the simulation version. I bought two so that one of the boards will be running the real RTOS code, testing DMA reading from USART, SPI, and emitting real motor signals, while the second will be emulating all of my peripherals. When the boards come, if the code does work, it will also mean that the real PCB’s will also work when my friend finishes with them. 5. Next Steps As of now there are a few issues with the double preempt system (for the interrupt tasks) I designed a while back, so I will need to debug that before they arrive. Right now before the boards arrive, I will be finishing up the RTOS blocking DMA pipelines (stripping out IRQ, removing NVIC etc. for scheduled tasks), and performing a bunch of baseline testing in order to prove that the RTOS is capable of flying an actual drone!
For the past couple weeks I have been mostly refining small bugs, which were originally rendering the RTOS usless, as well as refactoring the code for simplicity rather than elegancy. 1. Transition to Actual Hardware Renode is great for simulation, but it ended up hiding a bunch of race conditions in the population methods and the main scheduler that led to no code actually running during the IRQ handler calls. I spent a lot of time securing those resources and finally got the scheduler mostly finished up. Also, I decided to just take out the double preempts entirely since they were adding way too much complexity for absolutely zero speed benefits in practice (plus they were creating detrimental but rare race conditions). 2. Code Refactor To make things run a bit more consistent, I restructured how the control loops operate. I ended up merging the dShotGeneration task with the parent IMU control loop, so now everything from reading the sensors to pushing motor commands happens in one clean sequence (rather than including an unnecessary preempt). I also built out a brand new CRSF control loop to handle all the radio parsing and state machine updates in its own dedicated space (just for consistency). Lastly, while doing a final pass on the code, I realized that in my dShotGeneration helper, I had forgot to scale the values by a factor of 1/2000, as the inputs require the value to be between 0 and 1 (not 0 and 2000). 3. Final DMA Iteration The biggest relief was finally getting rid of the old blocking USART system. I finally transitioned away from manually handling the streaming by polling flags in a loop, which was tying up the processor way more than it should have. Everything has been converted over to a blocking DMA system, so the hardware can just handle all the memory transfers in the background while the CPU focuses on actually keeping the drone in the air. Overall, I think that this will be the final iteration of the RTOS DMA pipeline, as now that it is solid and works with all the edge cases, theres no need to change it. 4. Timeline With almost all the major bugs fixed, I am going to ship the project! While it is not 100% done, it will likely be as close as it will get during the timeframe of the Stardance hackathon, and with it so close, theres no reason not to ship. Anyway, I will keep the source as the main project rather than a release, so if I do end up fixing any major bugs, they will get patched either before or during project review (besides most of these bugs are only detectable on actual hardware). I will most likely finish the RTOS in the next couple weeks (by the end of October), and will finish the drivers for the ESC and RM by latest end of November (for more timing refer to the README). Thanks to everyone who supported me throughout this project (hopefully me and my friend can get this drone flying in another Hack Club Hackathon!).
Although I haven’t been able to make much progress on the project due to school over the past weeks I did manage to make some substantial project mostly with the scheduler, allowing for fairly good performance on my STM Nucleo boards, rather than it just crashing instantly. 1. Issues with the Old Design The flight controller’s RTOS scheduler wasn’t working under real hardware timing because global variables like currTaskIndex, topOfStack, and excReturn were being modified from multiple entry points simultaneously. Yield calls, interrupt handlers, and the main task-selection logic were all making independent writes to the same shared task control blocks. Whenever a hardware interrupt fired mid-write, stack pointers and exception return values were saved into the wrong taskControlBlocks slot. This created edge cases where preempted tasks were silently double-queued, state tracking completely desynchronized, and time-critical hardware events were dropped during flight. 2. Centralizing Context Switches in PendSV To eliminate these race conditions, all state-selection decisions were moved out of individual execution contexts and consolidated into decideNextTask(), which now runs exclusively inside the PendSV assembly handler. Functions like yieldCurrentTask(), decideNextInterruptTask(), and decideNextScheduledTask() no longer touch global scheduler state or choose which task runs next; they simply update local status flags like TaskState::BLOCKED or TaskState::READY inside brief __disable_irq() critical sections and trigger PendSV using SCB_ICSR_PENDSVSET_Msk. When PendSV fires, decideNextTask() saves outgoingSP and outgoingExcReturn to the active block, sets RUNNING tasks to READY, and runs a two-pass check over taskControlBlocks[]—evaluating high-priority TaskType::INTERRUPT tasks first, then TaskType::SCHEDULED tasks, and falling back to index 0 for idle. Since PendSV is the only place allowed to modify currTaskIndex, concurrent state corruption is structurally impossible.
I spent the past week fixing timing issues on the hardware and getting the simulation environment back into a usable state. Although it isn’t 100% yet, I managed to fix a lot of underlying bugs causing the program to fail on actual hardware. Serial Communication and DMA The biggest issue was that manual USART transfers were completely blocking the system. Printing alone was taking around 95 percent of the total execution time. This was destroying the preempt speed and causing weird timing bugs across the board. I rewrote the USART printing logic to offload everything to a background circular DMA task instead. While I was working on the serial connections, I also fixed the UART mapping bugs and moved all logging over to UART4 so it stops fighting with the GPS module on USART3. I also went through stm32f7xx_it.c and fixed the rest of the extern “C” methods. They were previously commented out, which was silently causing their respective DMA HALs to fail. Moving them to the correct user code sections fixed the issue entirely. Simulation Environment and Tooling On the software side, the simulation startup in the HAL was broken and preventing the virtual boards from properly configuring and running. I fixed the initialization sequence so the simulations actually boot correctly now. To make starting the environment even easier for new users, I updated both the run.sh and run.bat scripts with installers that automatically download Renode. This skips the manual installation step completely and gets the simulation running much faster.
I have spent the past 5 days mostly working on debugging the scheduler. It has been super difficult cause I don’t know exactly what has been causing the bugs, but basically right now all the project is doing is launching and then instantly freezing. This may be simply an issue with Renode on my side, but it is also failing on my Nucleo but in a different way so its likely a combination of my code and Renode failing. If I’m being honest, I am in way over my head, despite knowing a lot about RTOS’s and stuff in general, it is taking way too long to debug and figure out issues. I have fixed next to nothing these past 5 days, so I may be a little cooked, mostly have patched smaller bugs but they don’t seem to contributing to the major issue. A rough estimate of when the RTOS will be finished (version 1), will likely be sometime in December, however I will probably get a semi-working version in for Stardance by the end of the week, just know that it is NOT at all finished. Git will also be updated (at least to another branch) by the end of the week as well, even if this version doesn’t fully work. I may or may not start a snapshots branch for unfinished code or quick bug fixes.
The last two days have been identical to the previous devlog. I have just been debugging the project, not much has been done. Since I am going to ship today, I will just link the last working version of the project, which although it has an issue with the scheduled tasks also works on the my Nucelo board.
Ships:
Phase 1 (The Custom RTOS Kernel) I am building a custom FPV drone from scratch with my friend in an attempt to achieve 200 mph . At those speeds, standard super loops are far too slow, as a single microsecond of lag means the drone travels feet before making a PID correction. To solve this, I built a custom, hybrid cooperative/preemptive Real-Time Operating System (RTOS) from scratch for the ARM Cortex-M7 (STM32F7)! What Was Challenging? The absolute hardest part of this phase was writing the low-level assembly context switcher ( PendSV_Handler.S ). Hacking the ARM Cortex-M7 registers to physically hot-swap stack pointers ( PSP ) mid-execution without crashing the CPU or corrupting the program state was a massive headache. I had to ensure that when an asynchronous preemption event fires, the assembly code perfectly preserves the execution registers ( R4-R11 plus the hardware-stacked registers), jumps to the high-priority task, and then seamlessly restores the background task right where it left off. Getting the compiler-enforced task overloading working so the kernel cleanly separates periodic tasks from raw interrupts was another huge hurdle, but it makes the whole codebase infinitely more robust. Want to Test It or Write Your Own Tasks? You don’t need physical hardware to watch this run! I’ve packaged the entire project with a Renode simulation script. You can run the interactive emulator with a single command to see the preemption scheduler hijack our counter task live, or you can jump into the user sandbox file and write your own custom tasks. Check out the GitHub Repository to Run the Demo! The README has a quick 5-minute setup guide to get you compiling and simulating your own code in no time.
200 MPH Drone RTOS: How it went Simulation to Silicon! When I published the first major update for this project at the 15-hour mark, I essentially had a proof-of-concept. I had managed to write a custom hybrid cooperative/preemptive scheduler and get an ARM Cortex-M7 (on the STM32f756VGTx) assembly context switcher functioning inside the Renode simulator. Although this looked like a massive leap, the project had barely started. Over 100 hours of development have gone into this project since then. The transition from a simulated kernel to a bare-metal flight controller capable of keeping a 200 MPH drone in the air required stripping the system down to its bare components, rewriting the memory architecture, and debugging some of the most frustrating hardware faults I have ever encountered-especially whenever the project just crashed, leaving me no traces as to what went wrong. Software Limitations The biggest turning point was realizing that software simulation can only take you so far. Renode is an amazing tool, but it hid a massive amount of race conditions and timing flaws that only exposed themselves when I finally flashed the code to physical STM32F756 Nucleo board. Sometimes, the MCU would have to reboot every 2 seconds. I spent dozens of hours tracking down massive architectural bugs. One of the worst was a context-switching fault where floating-point math was corrupting the return address in the CPU registers, causing the processor to execute raw garbage data. To fix this, I had to completely restructure the boot sequence and overhaul the memory management. I moved away from static arrays to a dynamic per-task stack allocation system, and implemented a dual-guard memory system. Arguably, this was the most important change as it allowed me to debug tasks way quicker as I instantly could know when the canary values were corrupted. Overhauling the Data Pipelines In order to avoid the 10ms delay of my original blocking pipline (for data transfer), I entirely rewrote the hardware data pipelines multiple times to use a semi-blocking, circular Direct Memory Access (DMA) architecture. Instead of the processor handling the data transfer, the hardware itself moves the bytes from the sensors directly into memory in the background. The DMA streams now trigger precise interrupts at the halfway and full-transfer points, allowing the RTOS to safely parse incoming radio packets and sensor reads without ever risking data overwrites or blocking the main flight loop. Building a Flight Controller I integrated Betaflight’s Actual Rates algorithm with custom expo curves, ensuring that physical stick inputs map perfectly to target velocities. I built a custom SPI driver to pull 24-bit raw pressure and temperature data from a BMP390 barometer, passing it through hypsometric formulas to calculate altitude. For video and telemetry, I moved away from raw UART strings and implemented native MSP DisplayPort communication (for true digital Walksnail Avatar connection). I also built an interactive USB command-line interface. Instead of having to recompile and re-flash the firmware every time a PID value needs to be adjusted, I can plug into the board, pull up a terminal, and manually tune gains, remap CRSF radio channels, or adjust IMU orientation offsets in real time. Final Version The last few weeks have been about refinement and consistency, removing race conditions and overall polishing the code. Now that the RTOS is fully functional, the only things to add are extra features, like a permanent + more expanded CLI, as well as finishing the external RM and linking the ESC drivers. As these are pretty insignificant, I have linked the source of this shipment to the Github project rather than a specific release so that I can update these during review!
200 MPH Drone RTOS For this ship, I’m linking the last stable working build (not the latest full version of my code). It runs directly on the STM32 Nucleo hardware, giving a solid baseline to build on even though scheduled tasks still need some fine-tuning. The biggest improvement was fixing race conditions in the scheduler by centralizing context switching inside PendSV. Global variables like currTaskIndex and topOfStack were getting hit from multiple entry points during interrupts, causing stack pointers to save into the wrong slots and dropping events. Moving all state decisions into decideNextTask() inside the PendSV assembly handler fixed task pointer corruption and stopped double-queuing entirely. I also fixed a major I/O bottleneck by switching USART printing over to a background circular DMA task. Blocking print calls were taking up ~95% of total execution time and breaking preemption timing. Moving logging off the main thread to UART4 freed up USART3 for the GPS module, and fixing commented-out handlers in stm32f7xx_it.c got the DMA HAL working properly again (although this doesn’t work inside of Renode since it utilizes DMA). On the tooling side, I fixed the simulation startup sequence so virtual boards initialize and boot correctly in Renode. To make setup easier, I added auto-installers to both run.sh and run.bat so Renode downloads automatically without needing a manual install step. Although this version of the project is not 100% due to Renode limitations, I can say that everything works properly on my Nucleo board, just be mindful of this when reviewing, as scheduled tasks do not work properly....
|
1793735347.4372265
|
1794599347.4372265
|
|
71608
|
My awesome macropad! by @Nadin | Stardance
|
Nadin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Nadin | Stardance
|
1793735348.3043077
|
1794340148.3043077
|
|
71609
|
Hackitpad by @MAyaanBaig2013 | Stardance
|
MAyaanBaig2013
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hackitpad by @MAyaanBaig2013 | Stardance
|
1793735349.2069087
|
1794599349.2069087
|
|
57885
|
Portfolio by @ojassahu | Stardance
|
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T15:43:19Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a personal portfolio website to showcase my work, skills, projects, and experience as a frontend developer. I started with an existing portfolio template rather than building the entire website from scratch, and then customized it extensively with my own content, branding, layout changes, styling, responsive behavior, interactions, and animations. I also deployed the final website using GitHub Pages. The most challenging part was understanding and modifying someone else’s existing codebase instead of starting with a clean project. I had to figure out how the different HTML, CSS, and JavaScript components worked together before changing them without breaking the existing layout or interactions. Making the customized sections look consistent across different screen sizes and refining the animations and interactions also required a lot of testing and iteration. I’m proud that I was able to take an existing template and turn it into something that represents me and my work. I especially like the interactive feel of the website, the visual presentation of my projects and skills, and the fact that I was able to understand, modify, and deploy a project that I didn’t originally write from scratch. The project is a web-based portfolio, so there is no installation or setup required. Simply open the live website and explore the different sections using the navigation or by scrolling through the page. Try the navigation links, buttons, project links, hover interactions, animations, and contact section. Since it is hosted on GitHub Pages, the website can be tested directly in a browser.", "repo": "https://github.com/theojassahu/PORTFOLIO", "demo": "https://theojassahu.github.io/PORTFOLIO/"}]...
|
[{"post_id": 61551, "ts": "202 [{"post_id": 61551, "ts": "2026-09-04T14:56:35Z", "hours": 10.0222, "text": "Personal Portfolio WebsiteI created and customized a modern personal portfolio website to showcase my work as a frontend developer. The website was not built completely from scratch; I started with an existing portfolio template and significantly customized it to match my personal branding, projects, skills, and overall design preferences.What I Worked OnCustomized the overall layout, typography, spacing, and visual design of the template.Replaced the original content with my own introduction, skills, projects, statistics, and contact information.Added and customized sections for About Me, Skills, Projects, Experience, and Contact.Integrated my frontend technology stack, including HTML, CSS, Bootstrap, Tailwind CSS, Strapi, and PostgreSQL.Customized the interactive elements, buttons, navigation, and call-to-action sections.Worked on the website’s responsive behavior so that the layout adapts to different screen sizes.Added and refined scroll-based animations and interactive visual effects to make the website feel more dynamic instead of being a static portfolio.Connected the different sections through smooth navigation and interactive UI elements.Added links to my projects and social/contact profiles.Deployed the finished website using GitHub Pages.How It Was MadeThe project started from a pre-existing portfolio template, which I used as the foundation rather than creating every component from scratch. I then modified the structure, styling, content, interactions, and branding to turn it into my own portfolio.The development process involved understanding the existing HTML/CSS/JavaScript structure, identifying the parts that needed modification, redesigning sections, integrating my own information and projects, testing responsiveness, and deploying the final version.Animations & User ExperienceI focused on making the portfolio feel like an interactive website rather than a simple resume. The site uses animated transitions, interactive navigation, hover effects, and scroll-based visual movement to improve the overall user experience.ResultThe final website acts as my personal developer profile where visitors can quickly understand who I am, what technologies I work with, what projects I have built, and how they can contact me.Live Website: https://theojassahu.github.io/PORTFOLIO"}, {"post_id": 61293, "ts": "2026-09-04T04:20:22Z", "hours": 10.9558, "text": "Creating My Portfolio Website!"}]...
|
Title: Portfolio by @ojassahu | Stardance
Devlogs Title: Portfolio by @ojassahu | Stardance
Devlogs:
Creating My Portfolio Website!
Personal Portfolio WebsiteI created and customized a modern personal portfolio website to showcase my work as a frontend developer. The website was not built completely from scratch; I started with an existing portfolio template and significantly customized it to match my personal branding, projects, skills, and overall design preferences.What I Worked OnCustomized the overall layout, typography, spacing, and visual design of the template.Replaced the original content with my own introduction, skills, projects, statistics, and contact information.Added and customized sections for About Me, Skills, Projects, Experience, and Contact.Integrated my frontend technology stack, including HTML, CSS, Bootstrap, Tailwind CSS, Strapi, and PostgreSQL.Customized the interactive elements, buttons, navigation, and call-to-action sections.Worked on the website’s responsive behavior so that the layout adapts to different screen sizes.Added and refined scroll-based animations and interactive visual effects to make the website feel more dynamic instead of being a static portfolio.Connected the different sections through smooth navigation and interactive UI elements.Added links to my projects and social/contact profiles.Deployed the finished website using GitHub Pages.How It Was MadeThe project started from a pre-existing portfolio template, which I used as the foundation rather than creating every component from scratch. I then modified the structure, styling, content, interactions, and branding to turn it into my own portfolio.The development process involved understanding the existing HTML/CSS/JavaScript structure, identifying the parts that needed modification, redesigning sections, integrating my own information and projects, testing responsiveness, and deploying the final version.Animations & User ExperienceI focused on making the portfolio feel like an interactive website rather than a simple resume. The site uses animated transitions, interactive navigation, hover effects, and scroll-based visual movement to improve the overall user experience.ResultThe final website acts as my personal developer profile where visitors can quickly understand who I am, what technologies I work with, what projects I have built, and how they can contact me.Live Website: https://theojassahu.github.io/PORTFOLIO
Ships:
I made a personal portfolio website to showcase my work, skills, projects, and experience as a frontend developer. I started with an existing portfolio template rather than building the entire website from scratch, and then customized it extensively with my own content, branding, layout changes, styling, responsive behavior, interactions, and animations. I also deployed the final website using GitHub Pages. The most challenging part was understanding and modifying someone else’s existing codebase instead of starting with a clean project. I had to figure out how the different HTML, CSS, and JavaScript components worked together before changing them without breaking the existing layout or interactions. Making the customized sections look consistent across different screen sizes and refining the animations and interactions also required a lot of testing and iteration. I’m proud that I was able to take an existing template and turn it into something that represents me and my work. I especially like the interactive feel of the website, the visual presentation of my projects and skills, and the fact that I was able to understand, modify, and deploy a project that I didn’t originally write from scratch. The project is a web-based portfolio, so there is no installation or setup required. Simply open the live website and explore the different sections using the navigation or by scrolling through the page. Try the navigation links, buttons, project links, hover interactions, animations, and contact section. Since it is hosted on GitHub Pages, the website can be tested directly in a browser....
|
1793735350.0658357
|
1793821750.0658357
|
|
71199
|
NULL
|
NULL
|
0
|
0.0
|
0
|
[]
|
[]
|
|
1793735351.1870449
|
1794599351.1870449
|
|
71610
|
My very own WebOS by @BlueCrafter | Stardance
|
BlueCrafter
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @BlueCrafter | Stardan Title: My very own WebOS by @BlueCrafter | Stardance...
|
1793735352.0502162
|
1794340152.0502162
|
|
18092
|
Sumi The AI Powerd Open Sourced Slack Channel Summ Sumi The AI Powerd Open Sourced Slack Channel Summarizer by @Magic_X | Stardance...
|
Magic_X
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T16:38:00Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Slack bot that can filter,summarize,and chat with you about certain topics in a channel The most difficult part i think i faced was uploading the code to github using git.", "repo": "https://github.com/Magic-XY/Sumi", "demo": "https://hackclub.enterprise.slack.com/archives/C0BSFKXMZCN"}]...
|
[{"post_id": 8702, "ts": "2026 [{"post_id": 8702, "ts": "2026-06-14T13:38:53Z", "hours": 0.67, "text": "I just finished the filter command for Sumi so it can now filter messages within a given channel based on a topic or category"}, {"post_id": 8399, "ts": "2026-06-13T23:31:17Z", "hours": 1.1981, "text": "Sumi is looking good I just finished the summarize Cmd command so it actually summarizes channels now"}, {"post_id": 8309, "ts": "2026-06-13T20:26:58Z", "hours": 1.2719, "text": "I am working on Sumi a Mistral AI Powered slack bot that will be able to summarize channels and messages it will also be able to provide help with various tasks Today I finished writing most of the code, implementing the AI api and debugging it"}]...
|
Title: Sumi The AI Powerd Open Sourced Slack Chann Title: Sumi The AI Powerd Open Sourced Slack Channel Summarizer by @Magic_X | Stardance
Devlogs:
I am working on Sumi a Mistral AI Powered slack bot that will be able to summarize channels and messages it will also be able to provide help with various tasks Today I finished writing most of the code, implementing the AI api and debugging it
Sumi is looking good I just finished the summarize Cmd command so it actually summarizes channels now
I just finished the filter command for Sumi so it can now filter messages within a given channel based on a topic or category
Ships:
I made a Slack bot that can filter,summarize,and chat with you about certain topics in a channel The most difficult part i think i faced was uploading the code to github using git....
|
1793735352.9213748
|
1793821752.9213748
|
|
71611
|
My awesome macropad! by @shreshth92012 | Stardance
|
shreshth92012
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @shreshth92012 | St Title: My awesome macropad! by @shreshth92012 | Stardance...
|
1793735354.0538118
|
1794340154.0538118
|
|
25748
|
a lego sorter app by @legolucas | Stardance
|
legolucas
|
1
|
56.0
|
774
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-26T11:56:00Z", "hours": 56.0, "multiplier": 13.88, "payout": 774, "blessing": "neutral", "text": "i made the software/ui for my lego sorting machine i am proud that it works and that i now can begin on my hardware project and it looks really good i think i hope you also think that", "repo": "https://github.com/ecochicnl-collab/lego-sortingmachine", "demo": "https://legosorterv2.netlify.app/"}]...
|
[{"post_id": 54502, "ts": "202 [{"post_id": 54502, "ts": "2026-08-25T14:59:14Z", "hours": 7.7147, "text": "Devlog #12 Project: LEGO Sorter AppOverviewFinalizing the search system and completing the software development.Progress UpdateI fully finished the search and inventory system! It now supports detailed search filters and visual previews with images. With help from AI, I resolved a major issue where downloading images and syncing all storage bins was freezing the app due to long loading times. With an optimized asynchronous system in place, the entire software suite is complete. This marks the final devlog for the software phase.Next StepsShift focus entirely to the physical device and start building the hardware.Thank you for reading!"}, {"post_id": 34127, "ts": "2026-07-24T16:49:13Z", "hours": 7.6042, "text": "Devlog #11 Project: LEGO Sorter App Overview Connecting the software to the hardware. Progress Update Today, I built the interface that runs directly on the sorting machine. It successfully communicates with the esp32 via Python scripts. This marks a major milestone in bridging the simulation with the physical device. Next Steps Develop the “Pak een blokje” (Pick a brick) feature. Finalize the inventory screen. Thank you for reading!"}, {"post_id": 30821, "ts": "2026-07-18T19:08:12Z", "hours": 9.2661, "text": "Devlog #10 Project: LEGO Sorter App Overview Completion of the search and inventory system. Progress Update The search system is now complete, although I still need to polish minor details like text sizes and player preferences later. I downloaded a CSV file from BrickLink containing all existing LEGO bricks and built a search interface using toggles for specific categories like modified hinges. Users can input brick sizes to find specific parts, and the grid system updates accordingly. Next Steps Clean up the UI for the inventory tab. Begin the next phase of development. Thank you for reading!"}, {"post_id": 29368, "ts": "2026-07-16T08:35:47Z", "hours": 1.7981, "text": "Devlog #09 Project: LEGO Sorter App Overview Managing the UI for the two sides of the sorting machine. Progress Update I have built the system for both sides of the machine, including a screen-switching mechanism. Implementing the screen transitions was time-consuming due to the grid layout, but it is now functioning as intended. My next focus is researching how to connect the BrickLink database to Unity so that specific bricks can be assigned to individual cups. Next Steps Integrate the BrickLink database into the project. Refine the assignment logic for bricks and cups. Thank you for reading!"}, {"post_id": 29106, "ts": "2026-07-15T19:23:17Z", "hours": 2.73, "text": "Devlog #08 Project: LEGO Sorter App Overview Development of the cup grid system. Progress Update I created a grid representing the LEGO storage cups, with 500 spots on each side. I implemented a system where these spots function as buttons, including a zoom functionality for better accessibility. I faced an issue where only the first layer would move correctly during interaction, but I was eventually able to resolve this with some help from AI. Next Steps Continue refining the grid interactions. Begin integrating the sorting logic with the grid. Thank you for reading!"}, {"post_id": 28837, "ts": "2026-07-15T10:51:58Z", "hours": 6.8975, "text": "Devlog #07 Project: LEGO Sorter App Overview The simulation tab is now complete. Progress Update I have finalized the UI for the simulation tab, which now includes sliders to adjust the rotation speed and the drop timing. I have also implemented a calculation system that determines the throughput of the machine, measured in bricks per hour. Next Steps Transition to developing a new tab for the application. Thank you for reading!"}, {"post_id": 26575, "ts": "2026-07-11T14:13:51Z", "hours": 0.6842, "text": "Devlog #06 Project: LEGO Sorter App Overview Improvements to the detection accuracy of the system. Progress Update The system is now performing reliably. By introducing a timer that allows the brick to fall for a slightly longer duration before scanning, the AI is consistently identifying the bricks correctly. Next Steps Finalize the simulation tab interface. Begin work on additional UI elements. Thank you for reading!"}, {"post_id": 26546, "ts": "2026-07-11T12:58:32Z", "hours": 9.0408, "text": "Devlog #05 Project: LEGO Sorter App Overview I have successfully integrated the Brickognize API into the Unity environment. Progress Update Getting the colliders and rotation to sync with brick falling was difficult, but it is now operational. I implemented a logic where the brick becomes a child of the carousel upon contact. Furthermore, I set up a system that captures images of both the top and bottom of the brick and sends them to the Brickognize API. Because I had trouble getting the implementation to work, I utilized AI to assist with the Python script used for API communication within Unity. Next Steps Tweak the physical interaction of the bricks to make the movement feel more realistic. Continue optimizing the detection workflow. Thank you for reading!"}, {"post_id": 21740, "ts": "2026-07-03T20:37:03Z", "hours": 6.4189, "text": "Devlog #04 Project: LEGO Sorter App Overview This update focuses on optimizing the carousel simulation and implementing a collision avoidance system. Progress Update After troubleshooting various joint configurations that did not perform as expected, I pivoted to using transform-based simulation for the carousel. I also implemented a safety system: if a brick is detected in the fall range of another C-channel, that specific channel will pause its movement to prevent jams. This ensures that bricks are handled one at a time. Next Steps Implement image capturing of the carousel using OpenCV. Integrate the Brickognize API to identify the LEGO bricks. Thank you for reading!"}, {"post_id": 20029, "ts": "2026-07-01T15:08:03Z", "hours": 1.3989, "text": "Devlog #03 Project: LEGO Sorter App Overview The simulation is taking shape with the addition of physical interactions and movement. Progress Update I have implemented the script that allows the C-channel to rotate. I also set up the spawning logic for the LEGO bricks. A significant challenge was fine-tuning the mesh colliders and rigidbodies to ensure the bricks interact correctly. The bricks currently lack sufficient traction, so I will need to experiment with different mass settings and physical properties. Next Steps Test different physics configurations to optimize brick movement. Refine the interaction between the bricks and the carousel. Thank you for reading!"}, {"post_id": 19955, "ts": "2026-07-01T12:33:35Z", "hours": 1.2903, "text": "Devlog #02 Project: LEGO Sorter App Overview Today, I made progress on the Unity simulation environment. Progress Update I successfully imported the 3D model of the C-channel, which I designed in Fusion 360, into the Unity project. Additionally, I implemented a camera script that allows for viewing the model from different angles and includes a zoom function for closer inspection of the components. Next Steps Begin integrating rotation logic for the components. Set up the brick spawning mechanics. Thank you for reading!"}, {"post_id": 15645, "ts": "2026-06-25T13:17:08Z", "hours": 0.8986, "text": "Devlog #01 Project: LEGO Sorter App Overview Hello everyone, welcome to the first devlog for the LEGO Sorter App. I have officially started working on this project, which involves two main components: designing the physical sorter in Fusion 360 and developing the software application in Unity to manage the sorting process. Progress Update Today, I have nearly completed the physical model for the sorter in Fusion 360. Simultaneously, I have begun the foundational work in Unity by implementing the basic UI and buttons that allow for navigation between different scenes. Next Steps Continue refining the physical model in Fusion 360. Expand the Unity interface to include more detailed menus. Thank you for reading!"}]...
|
Title: a lego sorter app by @legolucas | Stardance Title: a lego sorter app by @legolucas | Stardance
Devlogs:
Devlog #01 Project: LEGO Sorter App Overview Hello everyone, welcome to the first devlog for the LEGO Sorter App. I have officially started working on this project, which involves two main components: designing the physical sorter in Fusion 360 and developing the software application in Unity to manage the sorting process. Progress Update Today, I have nearly completed the physical model for the sorter in Fusion 360. Simultaneously, I have begun the foundational work in Unity by implementing the basic UI and buttons that allow for navigation between different scenes. Next Steps Continue refining the physical model in Fusion 360. Expand the Unity interface to include more detailed menus. Thank you for reading!
Devlog #02 Project: LEGO Sorter App Overview Today, I made progress on the Unity simulation environment. Progress Update I successfully imported the 3D model of the C-channel, which I designed in Fusion 360, into the Unity project. Additionally, I implemented a camera script that allows for viewing the model from different angles and includes a zoom function for closer inspection of the components. Next Steps Begin integrating rotation logic for the components. Set up the brick spawning mechanics. Thank you for reading!
Devlog #03 Project: LEGO Sorter App Overview The simulation is taking shape with the addition of physical interactions and movement. Progress Update I have implemented the script that allows the C-channel to rotate. I also set up the spawning logic for the LEGO bricks. A significant challenge was fine-tuning the mesh colliders and rigidbodies to ensure the bricks interact correctly. The bricks currently lack sufficient traction, so I will need to experiment with different mass settings and physical properties. Next Steps Test different physics configurations to optimize brick movement. Refine the interaction between the bricks and the carousel. Thank you for reading!
Devlog #04 Project: LEGO Sorter App Overview This update focuses on optimizing the carousel simulation and implementing a collision avoidance system. Progress Update After troubleshooting various joint configurations that did not perform as expected, I pivoted to using transform-based simulation for the carousel. I also implemented a safety system: if a brick is detected in the fall range of another C-channel, that specific channel will pause its movement to prevent jams. This ensures that bricks are handled one at a time. Next Steps Implement image capturing of the carousel using OpenCV. Integrate the Brickognize API to identify the LEGO bricks. Thank you for reading!
Devlog #05 Project: LEGO Sorter App Overview I have successfully integrated the Brickognize API into the Unity environment. Progress Update Getting the colliders and rotation to sync with brick falling was difficult, but it is now operational. I implemented a logic where the brick becomes a child of the carousel upon contact. Furthermore, I set up a system that captures images of both the top and bottom of the brick and sends them to the Brickognize API. Because I had trouble getting the implementation to work, I utilized AI to assist with the Python script used for API communication within Unity. Next Steps Tweak the physical interaction of the bricks to make the movement feel more realistic. Continue optimizing the detection workflow. Thank you for reading!
Devlog #06 Project: LEGO Sorter App Overview Improvements to the detection accuracy of the system. Progress Update The system is now performing reliably. By introducing a timer that allows the brick to fall for a slightly longer duration before scanning, the AI is consistently identifying the bricks correctly. Next Steps Finalize the simulation tab interface. Begin work on additional UI elements. Thank you for reading!
Devlog #07 Project: LEGO Sorter App Overview The simulation tab is now complete. Progress Update I have finalized the UI for the simulation tab, which now includes sliders to adjust the rotation speed and the drop timing. I have also implemented a calculation system that determines the throughput of the machine, measured in bricks per hour. Next Steps Transition to developing a new tab for the application. Thank you for reading!
Devlog #08 Project: LEGO Sorter App Overview Development of the cup grid system. Progress Update I created a grid representing the LEGO storage cups, with 500 spots on each side. I implemented a system where these spots function as buttons, including a zoom functionality for better accessibility. I faced an issue where only the first layer would move correctly during interaction, but I was eventually able to resolve this with some help from AI. Next Steps Continue refining the grid interactions. Begin integrating the sorting logic with the grid. Thank you for reading!
Devlog #09 Project: LEGO Sorter App Overview Managing the UI for the two sides of the sorting machine. Progress Update I have built the system for both sides of the machine, including a screen-switching mechanism. Implementing the screen transitions was time-consuming due to the grid layout, but it is now functioning as intended. My next focus is researching how to connect the BrickLink database to Unity so that specific bricks can be assigned to individual cups. Next Steps Integrate the BrickLink database into the project. Refine the assignment logic for bricks and cups. Thank you for reading!
Devlog #10 Project: LEGO Sorter App Overview Completion of the search and inventory system. Progress Update The search system is now complete, although I still need to polish minor details like text sizes and player preferences later. I downloaded a CSV file from BrickLink containing all existing LEGO bricks and built a search interface using toggles for specific categories like modified hinges. Users can input brick sizes to find specific parts, and the grid system updates accordingly. Next Steps Clean up the UI for the inventory tab. Begin the next phase of development. Thank you for reading!
Devlog #11 Project: LEGO Sorter App Overview Connecting the software to the hardware. Progress Update Today, I built the interface that runs directly on the sorting machine. It successfully communicates with the esp32 via Python scripts. This marks a major milestone in bridging the simulation with the physical device. Next Steps Develop the “Pak een blokje” (Pick a brick) feature. Finalize the inventory screen. Thank you for reading!
Devlog #12 Project: LEGO Sorter AppOverviewFinalizing the search system and completing the software development.Progress UpdateI fully finished the search and inventory system! It now supports detailed search filters and visual previews with images. With help from AI, I resolved a major issue where downloading images and syncing all storage bins was freezing the app due to long loading times. With an optimized asynchronous system in place, the entire software suite is complete. This marks the final devlog for the software phase.Next StepsShift focus entirely to the physical device and start building the hardware.Thank you for reading!
Ships:
i made the software/ui for my lego sorting machine i am proud that it works and that i now can begin on my hardware project and it looks really good i think i hope you also think that...
|
1793735354.98521
|
1793821754.98521
|
|
71612
|
Petista by @hunar | Stardance
|
hunar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Petista by @hunar | Stardance
|
1793735356.2110546
|
1794340156.2110546
|
|
57895
|
Blade of dawn by @Mech2782 | Stardance
|
Mech2782
|
1
|
48.0
|
103
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-03T18:06:35Z", "hours": 48.0, "multiplier": 10.27, "payout": 103, "blessing": "neutral", "text": "Made a 2d action rpg game, it was definitely challenging(alot actually) but it was fun to start with this 1st game which introduced me into game dev, might make a game on my own ig in few days or a week.", "repo": "https://github.com/Sai-Santosh09/Blade-of-Dawn", "demo": "https://mech-2782.itch.io/blade-of-dawn"}]...
|
[{"post_id": 60992, "ts": "202 [{"post_id": 60992, "ts": "2026-09-03T18:00:50Z", "hours": 47.835, "text": "I didn’t knew about the devlog thing cuz I thought to ship this in other ysws but didn’t get time so here I go"}]...
|
Title: Blade of dawn by @Mech2782 | Stardance
Dev Title: Blade of dawn by @Mech2782 | Stardance
Devlogs:
I didn’t knew about the devlog thing cuz I thought to ship this in other ysws but didn’t get time so here I go
Ships:
Made a 2d action rpg game, it was definitely challenging(alot actually) but it was fun to start with this 1st game which introduced me into game dev, might make a game on my own ig in few days or a week....
|
1793735359.8645403
|
1793821759.8645403
|
|
22999
|
music player website by @shuaiyf | Stardance
|
shuaiyf
|
1
|
10.0
|
41
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T14:32:35Z", "hours": 10.0, "multiplier": 4.1, "payout": 41, "blessing": "neutral", "text": "Web Music Player A simple web music player made using HTML and CSS, able to play five pre-downloaded songs! Includes a home page where users can use a song to play by title or artist. Simple animations (spinning vinyl disc and scrolling text!) are featured in the music player page. Challenges, etc. First project in HTML! I had no experience prior to making this and so it was a little daunting and a little confusing, but it worked out pretty well in the end :) Followed a (tutorial)[https://youtu.be/JtrFzoL1joI?si=4XzKUBnZ152NrrPh] for the basics of a music player, then added the rest myself (including the home page). Consulted a LOT of https://www.html.am/ and https://www.w3schools.com/html/ . Overall, I’m really happy with how the project turned out!", "repo": "https://github.com/selinayunfei/music-player-public", "demo": "https://music-player-shuai.vercel.app/"}]...
|
[{"post_id": 14844, "ts": "202 [{"post_id": 14844, "ts": "2026-06-24T03:20:19Z", "hours": 1.1867, "text": "⋆˚꩜。 Devlog 3 : Officially done with my first HTML project! Added comments and re-organised some of my code, added a README file, now waiting for site to deploy before shipping :)"}, {"post_id": 14814, "ts": "2026-06-24T01:48:44Z", "hours": 6.975, "text": "⋆˚꩜。 Devlog 2 : Pretty much finished the project! Added a home page featuring five songs and redesigned the user interface for the actual music player; added animations such as the spinning disc and the moving text. Had a lot of fun working on this project! It was a great introduction to HTML for me. Next steps: cleaning up the code, organizing and adding comments, etc.!"}, {"post_id": 12927, "ts": "2026-06-21T05:07:12Z", "hours": 1.8217, "text": "⋆˚꩜。 Devlog 1: Started to work on a web music player! This is my first time working with HTML and CSS seriously, excited to learn more and see how far I can take this project. Started with a basic tutorial that included the play button and the seek bar; next steps would definitely be to personalise it a lot more and add more features!"}]...
|
Title: music player website by @shuaiyf | Stardanc Title: music player website by @shuaiyf | Stardance
Devlogs:
⋆˚꩜。 Devlog 1: Started to work on a web music player! This is my first time working with HTML and CSS seriously, excited to learn more and see how far I can take this project. Started with a basic tutorial that included the play button and the seek bar; next steps would definitely be to personalise it a lot more and add more features!
⋆˚꩜。 Devlog 2 : Pretty much finished the project! Added a home page featuring five songs and redesigned the user interface for the actual music player; added animations such as the spinning disc and the moving text. Had a lot of fun working on this project! It was a great introduction to HTML for me. Next steps: cleaning up the code, organizing and adding comments, etc.!
⋆˚꩜。 Devlog 3 : Officially done with my first HTML project! Added comments and re-organised some of my code, added a README file, now waiting for site to deploy before shipping :)
Ships:
Web Music Player A simple web music player made using HTML and CSS, able to play five pre-downloaded songs! Includes a home page where users can use a song to play by title or artist. Simple animations (spinning vinyl disc and scrolling text!) are featured in the music player page. Challenges, etc. First project in HTML! I had no experience prior to making this and so it was a little daunting and a little confusing, but it worked out pretty well in the end :) Followed a (tutorial)[https://youtu.be/JtrFzoL1joI?si=4XzKUBnZ152NrrPh] for the basics of a music player, then added the rest myself (including the home page). Consulted a LOT of https://www.html.am/ and https://www.w3schools.com/html/ . Overall, I’m really happy with how the project turned out!...
|
1793735361.0508008
|
1793821761.0508008
|
|
67788
|
GOATED BLINKY BOARD by @gurliv | Stardance
|
gurliv
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: GOATED BLINKY BOARD by @gurliv | Stardance
|
1793735362.9430952
|
1794340162.9430952
|
|
35695
|
My site by @muh_dawood990 | Stardance
|
muh_dawood990
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T17:53:05Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my second website. It looks MUCH better than the first. The html wasn’t that hard since I wrote pretty simple code. I really enjoyed the css it was satisfying for the website to finally look good.", "repo": "https://github.com/Muhammad-Dead/personal-site", "demo": "https://muhammad-dead.github.io/personal-site/"}]...
|
[{"post_id": 29618, "ts": "202 [{"post_id": 29618, "ts": "2026-07-16T17:48:28Z", "hours": 1.0394, "text": "Devlog #2 Today I locked in I wrote css to make it look less bad and added more text and a email me button"}, {"post_id": 29162, "ts": "2026-07-15T21:34:01Z", "hours": 0.2669, "text": "#devlog 1 i just started working on this a while ago. This is my first project/devlog on hackclub."}]...
|
Title: My site by @muh_dawood990 | Stardance
Devl Title: My site by @muh_dawood990 | Stardance
Devlogs:
#devlog 1 i just started working on this a while ago. This is my first project/devlog on hackclub.
Devlog #2 Today I locked in I wrote css to make it look less bad and added more text and a email me button
Ships:
This is my second website. It looks MUCH better than the first. The html wasn’t that hard since I wrote pretty simple code. I really enjoyed the css it was satisfying for the website to finally look good....
|
1793735365.3816469
|
1793821765.3816469
|
|
2972
|
Image to ASCII by @eli | Stardance
|
eli
|
1
|
16.0
|
264
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-14T17:48:46Z", "hours": 16.0, "multiplier": 17.82, "payout": 264, "blessing": "neutral", "text": "I made Ghostchar, a desktop app that lets you join any video call with a ASCII filter! It was my first dive into ML but it was so worth it!", "repo": "https://github.com/Papaya-Voldemort/GhostChar", "demo": "https://ghostchar.elinelson.dev/demo"}]...
|
[{"post_id": 28431, "ts": "202 [{"post_id": 28431, "ts": "2026-07-14T17:47:13Z", "hours": 0.2933, "text": "Hey everyone I shipping this for the first time! I might go back and ship again for the other OSes but for now I can finally take a little break! Thank you guys so much for the support. And please enjoy Ghostchar!"}, {"post_id": 25385, "ts": "2026-07-09T17:22:58Z", "hours": 2.2831, "text": "Sorry its been a REALLY long time, I just got back from a national business competition and have this weird burnout but I am finally back for the finishing touches! I made the desktop app and with AI a quick web page to download it (also github release as well!). I am going to ship very soon so I can get an apple dev license and sign it! Technically the app is not quite what I wanted, I used Python instead of rust of an easier GUI and just hooked off of the OBS virtual camera. It still runs pretty quick and was fine for my needs! Thank you guys for the incredible support, and enjoy joining video cams with an ASCII filter!"}, {"post_id": 5951, "ts": "2026-06-09T23:18:10Z", "hours": 4.3983, "text": "Sorry for the delay! Had quite a few issues along the way! Getting the model running in the browser was quite a issue but I ended up making it work with the web run time for onnx! The model is still quite slow but its fast enough for the time being. I will add some fun conversion tools soon but for now go ahead and try out the site here PS: Added basic full color support!"}, {"post_id": 3637, "ts": "2026-06-06T17:36:55Z", "hours": 1.2708, "text": "Updated the repo with better folder structure for future expansion. Currently the model itself is finished and does not need improvement. Now I am building a nice front end so you can convert images and videos to ASCII, test a live web cam demo, and download the desktop app. Speaking of the desktop app (Name idea: GhostChar) it will be a camera filter that converts you live into ASCII to protect your identity while still showing enough to get things done. The app will be a GUI built with Rust running the ONNX model for FPS. PS: I am adding color themes to the app!"}, {"post_id": 3209, "ts": "2026-06-06T01:15:06Z", "hours": 3.1256, "text": "I worked a LOT today! Ran into a few issues with not committing my models so I lost good ones :( But I eventually thought to do a second round of training on real images not just synthetic data and that made the model a LOT better. Still room for improvement like full color, more data, longer training, etc. But the model is getting really good and I will build a web UI soon!"}, {"post_id": 2344, "ts": "2026-06-04T19:46:36Z", "hours": 1.9886, "text": "So I started working on the actual program behind this, its a CNN vision model designed to take real time camera feed and turn it into ASCII art! Its soo cool!"}, {"post_id": 1050, "ts": "2026-06-02T21:06:26Z", "hours": 2.1131, "text": "Spent quite some time learning more about AI! Finally graduated from sklearn into full TensorFlow which has been really fun! I have built a few small neural networks and those are awesome!"}, {"post_id": 473, "ts": "2026-06-01T22:39:08Z", "hours": 0.4553, "text": "Finished Unit 1! I learned about splitting your data so you can grade/test the model later, and advanced testing methods like using a matrix to see where the model might have messed up!"}, {"post_id": 459, "ts": "2026-06-01T22:08:43Z", "hours": 0.3069, "text": "Completed my first lesson on ML! I learned about LogisticRegression models and the amazing library called: sklearn!"}]...
|
Title: Image to ASCII by @eli | Stardance
Devlogs Title: Image to ASCII by @eli | Stardance
Devlogs:
Completed my first lesson on ML! I learned about LogisticRegression models and the amazing library called: sklearn!
Finished Unit 1! I learned about splitting your data so you can grade/test the model later, and advanced testing methods like using a matrix to see where the model might have messed up!
Spent quite some time learning more about AI! Finally graduated from sklearn into full TensorFlow which has been really fun! I have built a few small neural networks and those are awesome!
So I started working on the actual program behind this, its a CNN vision model designed to take real time camera feed and turn it into ASCII art! Its soo cool!
I worked a LOT today! Ran into a few issues with not committing my models so I lost good ones :( But I eventually thought to do a second round of training on real images not just synthetic data and that made the model a LOT better. Still room for improvement like full color, more data, longer training, etc. But the model is getting really good and I will build a web UI soon!
Updated the repo with better folder structure for future expansion. Currently the model itself is finished and does not need improvement. Now I am building a nice front end so you can convert images and videos to ASCII, test a live web cam demo, and download the desktop app. Speaking of the desktop app (Name idea: GhostChar) it will be a camera filter that converts you live into ASCII to protect your identity while still showing enough to get things done. The app will be a GUI built with Rust running the ONNX model for FPS. PS: I am adding color themes to the app!
Sorry for the delay! Had quite a few issues along the way! Getting the model running in the browser was quite a issue but I ended up making it work with the web run time for onnx! The model is still quite slow but its fast enough for the time being. I will add some fun conversion tools soon but for now go ahead and try out the site here PS: Added basic full color support!
Sorry its been a REALLY long time, I just got back from a national business competition and have this weird burnout but I am finally back for the finishing touches! I made the desktop app and with AI a quick web page to download it (also github release as well!). I am going to ship very soon so I can get an apple dev license and sign it! Technically the app is not quite what I wanted, I used Python instead of rust of an easier GUI and just hooked off of the OBS virtual camera. It still runs pretty quick and was fine for my needs! Thank you guys for the incredible support, and enjoy joining video cams with an ASCII filter!
Hey everyone I shipping this for the first time! I might go back and ship again for the other OSes but for now I can finally take a little break! Thank you guys so much for the support. And please enjoy Ghostchar!
Ships:
I made Ghostchar, a desktop app that lets you join any video call with a ASCII filter! It was my first dive into ML but it was so worth it!...
|
1793735366.5127623
|
1793821766.5127623
|
|
67789
|
Super Dingus Watch by @Wawawa | Stardance
|
Wawawa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Super Dingus Watch by @Wawawa | Stardance
|
1793735367.6830945
|
1794340167.6830945
|
|
35336
|
MORS by @Zaloguj12 | Stardance
|
Zaloguj12
|
1
|
2.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T02:07:31Z", "hours": 2.0, "multiplier": 3.49, "payout": 9, "blessing": "neutral", "text": "MORS (modern overly resourceful system) is a simple morse code translator. I am proud of it because its my first semi advanced project, i had to go indepth on sine waves and sound generation. Very good! meoww", "repo": "https://github.com/zaloguj12/mors", "demo": "https://github.com/zaloguj12/mors/releases/latest"}]...
|
[{"post_id": 28669, "ts": "202 [{"post_id": 28669, "ts": "2026-07-15T02:06:29Z", "hours": 0.3111, "text": "bug fixes, hehe, the image is NOT me"}, {"post_id": 28661, "ts": "2026-07-15T01:31:20Z", "hours": 1.0817, "text": "uhh, i got audio generation working using numpy and scipy, it outputs to morse.wav. also i made the code an eyesore to read 👍. got github releases working, not gonna ship yet"}, {"post_id": 28623, "ts": "2026-07-15T00:06:55Z", "hours": 1.0758, "text": "got M2T and T2M translation working, got proper error catching working and proper comments next to work on is audio generator and packaging"}]...
|
Title: MORS by @Zaloguj12 | Stardance
Devlogs:
go Title: MORS by @Zaloguj12 | Stardance
Devlogs:
got M2T and T2M translation working, got proper error catching working and proper comments next to work on is audio generator and packaging
uhh, i got audio generation working using numpy and scipy, it outputs to morse.wav. also i made the code an eyesore to read 👍. got github releases working, not gonna ship yet
bug fixes, hehe, the image is NOT me
Ships:
MORS (modern overly resourceful system) is a simple morse code translator. I am proud of it because its my first semi advanced project, i had to go indepth on sine waves and sound generation. Very good! meoww...
|
1793735368.5391464
|
1793821768.5391464
|
|
16872
|
TCG Tycoon Slack Bot by @Veeraj | Stardance
|
Veeraj
|
1
|
2.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-13T17:20:23Z", "hours": 2.0, "multiplier": 1.55, "payout": 3, "blessing": "neutral", "text": "I made a slackbot that allows you to play a tycoon game with the use of one command. I found a lot of things challenging as it was my first time. The main thing was understanding terminal commands and understanding how to install the software. It was confusing at first but as I did more I started to get the hang of it. I am really proud of the tournament feature and hope you enjoy it as much as I did.", "repo": "https://github.com/Octolord12/waddle-tcg-tycoon", "demo": "https://app.slack.com/client/E09V59WQY1E/C0BAWSLDY83"}]...
|
[{"post_id": 8171, "ts": "2026 [{"post_id": 8171, "ts": "2026-06-13T16:50:02Z", "hours": 1.7956, "text": "Version 1.2 added features such as gradable cards, player to player trading and a highly volatile tournament system. The screenshot is the grading system."}]...
|
Title: TCG Tycoon Slack Bot by @Veeraj | Stardance Title: TCG Tycoon Slack Bot by @Veeraj | Stardance
Devlogs:
Version 1.2 added features such as gradable cards, player to player trading and a highly volatile tournament system. The screenshot is the grading system.
Ships:
I made a slackbot that allows you to play a tycoon game with the use of one command. I found a lot of things challenging as it was my first time. The main thing was understanding terminal commands and understanding how to install the software. It was confusing at first but as I did more I started to get the hang of it. I am really proud of the tournament feature and hope you enjoy it as much as I did....
|
1793735369.6980147
|
1793821769.6980147
|
|
67790
|
My awesome macropad! by @ramseyaiku | Stardance
|
ramseyaiku
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @ramseyaiku | Stard Title: My awesome macropad! by @ramseyaiku | Stardance...
|
1793735370.8673604
|
1794340170.8673604
|
|
10460
|
Cosmo Docks by @james31vn | Stardance
|
james31vn
|
1
|
5.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-16T10:29:08Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "As you can see, I made Cosmos Docks, a custom 9-key macropad with a Seeed XIAO RP2040, one rotary encoder, a 0.91 inch OLED display, and 13 SK6812MINI-E RGB LEDs. The schematic and PCB was designed in KiCad, modeled a fully 3D-printable top and bottom case in Fusion 360 which fits together perfectly, and wrote QMK firmware for the key matrix, encoder, OLED, and RGB lighting, so it can always be updated to different functions. This was supposed to be an easy project(but I made it difficult because I overcomplicated stuff and added way more capacitors and resistors than I was supposed to). I spent a lot of time trying to optimize the pcb so now we’re here. I think I outdid myself with the case design(it even crashed my Fusion when exporting). To test the project, flash the included firmware.uf2 file onto the XIAO RP2040. Then plug in the macropad through USB-C and test all 9 keys in a text editor or keyboard tester. The rotary encoder should control volume on the base layer, the OLED should display the macropad name and layer, and the RGB LEDs should light up through QMK RGB Matrix.", "repo": "https://github.com/holeminhnhat3101/Cosmos-docks", "demo": ""}]...
|
[{"post_id": 9868, "ts": "2026 [{"post_id": 9868, "ts": "2026-06-16T10:13:30Z", "hours": 3.5575, "text": "I finished the macropad! After several days of having issues with hackatime and lapse, I finally shipped my first macropad. I’m calling this one Cosmodocks. It took way longer than the number you’re seeing on screen right now to learn pcb and 3d modeling in such a short amount of time. But here it is. It has 9 keys, a rotary encoder, and an Oled. Right now, the firmware only has basic functions, but it is compatible with QMK so it can be changed to more functions! Check out my github project to see more."}, {"post_id": 4924, "ts": "2026-06-08T15:00:19Z", "hours": 1.0308, "text": "Custom macropad with oled I just started gathering all the components my macropad would need and started the schematics design. I finished the schematics for the switches and knob, now I only need the LEDs and OLED schematics."}]...
|
Title: Cosmo Docks by @james31vn | Stardance
Devl Title: Cosmo Docks by @james31vn | Stardance
Devlogs:
Custom macropad with oled I just started gathering all the components my macropad would need and started the schematics design. I finished the schematics for the switches and knob, now I only need the LEDs and OLED schematics.
I finished the macropad! After several days of having issues with hackatime and lapse, I finally shipped my first macropad. I’m calling this one Cosmodocks. It took way longer than the number you’re seeing on screen right now to learn pcb and 3d modeling in such a short amount of time. But here it is. It has 9 keys, a rotary encoder, and an Oled. Right now, the firmware only has basic functions, but it is compatible with QMK so it can be changed to more functions! Check out my github project to see more.
Ships:
As you can see, I made Cosmos Docks, a custom 9-key macropad with a Seeed XIAO RP2040, one rotary encoder, a 0.91 inch OLED display, and 13 SK6812MINI-E RGB LEDs. The schematic and PCB was designed in KiCad, modeled a fully 3D-printable top and bottom case in Fusion 360 which fits together perfectly, and wrote QMK firmware for the key matrix, encoder, OLED, and RGB lighting, so it can always be updated to different functions. This was supposed to be an easy project(but I made it difficult because I overcomplicated stuff and added way more capacitors and resistors than I was supposed to). I spent a lot of time trying to optimize the pcb so now we’re here. I think I outdid myself with the case design(it even crashed my Fusion when exporting). To test the project, flash the included firmware.uf2 file onto the XIAO RP2040. Then plug in the macropad through USB-C and test all 9 keys in a text editor or keyboard tester. The rotary encoder should control volume on the base layer, the OLED should display the macropad name and layer, and the RGB LEDs should light up through QMK RGB Matrix....
|
1793735371.7608292
|
1793821771.7608292
|
|
33038
|
Defied by @Sgattix | Stardance
|
Sgattix
|
1
|
37.62
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T16:36:14Z", "hours": 16.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Defied — a full-stack monorepo featuring a Next.js 15 marketing site, NestJS API server, Fumadocs documentation, shared auth (Better Auth + Stripe, that will be later on moved to zitadel), Prisma/MariaDB, and Payload CMS — all wired with Turborepo. Challenge: Getting Better Auth to work identically across both the Next.js web app and NestJS server without duplicating config, while keeping Prisma types in sync across packages. Proud of: not using AI, insuring a high quality communication while also maintaining control over app primitives using Defied DART and Defied Prism. To test: pnpm install pnpm dev Then open http://localhost:2029 .", "repo": "https://github.com/defied-labs/website", "demo": "https://defied.sgattix.online"}]...
|
[{"post_id": 74793, "ts": "202 [{"post_id": 74793, "ts": "2026-09-28T08:30:44Z", "hours": 21.6183, "text": "Hi everyone! I’ve been making good progress on Defied lately. Here’s an update on what I’ve been working on: Backend Magic-link auth is working, and I’ve added Zitadel as auth provider for a more ecosystem-like architecture. The auth handler now supports both email magic-links and Zitadel OIDC. Health endpoints: /health , /health/db , /health/auth , and /health/mail endpoints for monitoring Email verification: SMTP integration with verifyEmailConnection() for magic-link email verification Frontend Blog management: Integrated BlockNote and Nextra to build a fully-functional blog Landing page: Designed and built, showcasing Defied’s services and values Login page: Updated with modern design and auth flow I will soon implement syntax highlighting and LaTeX in the blog editor. Stay tuned"}, {"post_id": 53036, "ts": "2026-08-23T13:00:32Z", "hours": 4.4719, "text": "Hi guys, I decided to spend these 4 hours doing something that almost no one does these days: reviewing code by hand, zero-AI. I noticed some contradictions, something that didn’t quite reflect Defied’s values and status. So here’s the final, working, bulletproof, but most importantly meaningful version of Defied’s landing page. I will soon ship it, so wish me luck!"}, {"post_id": 43218, "ts": "2026-08-08T10:55:52Z", "hours": 11.6939, "text": "Hi guys, I’ve been quite busy lately with my life outside Stardance. However I still managed to put some effort on a new project: Defied. Defied is a software company that builds advanced digital products, combining software engineering, AI and design to create reliable, elegant and accessible tools. Here’s what I did so far: Backend Built basic magic-link auth that will be later moved to a Zitadel-based auth for a more ecosystem-like architecture Frontend Designed and built landing page Designed and built login page Just as a quick note, this is Defied’s landing page and service wrapper, not a service. For Defied services, check out Defied Prism (Which I will later post here, as a multi-framework, css modules and tailwindcss component library)."}]...
|
Title: Defied by @Sgattix | Stardance
Devlogs:
Hi Title: Defied by @Sgattix | Stardance
Devlogs:
Hi guys, I’ve been quite busy lately with my life outside Stardance. However I still managed to put some effort on a new project: Defied. Defied is a software company that builds advanced digital products, combining software engineering, AI and design to create reliable, elegant and accessible tools. Here’s what I did so far: Backend Built basic magic-link auth that will be later moved to a Zitadel-based auth for a more ecosystem-like architecture Frontend Designed and built landing page Designed and built login page Just as a quick note, this is Defied’s landing page and service wrapper, not a service. For Defied services, check out Defied Prism (Which I will later post here, as a multi-framework, css modules and tailwindcss component library).
Hi guys, I decided to spend these 4 hours doing something that almost no one does these days: reviewing code by hand, zero-AI. I noticed some contradictions, something that didn’t quite reflect Defied’s values and status. So here’s the final, working, bulletproof, but most importantly meaningful version of Defied’s landing page. I will soon ship it, so wish me luck!
Hi everyone! I’ve been making good progress on Defied lately. Here’s an update on what I’ve been working on: Backend Magic-link auth is working, and I’ve added Zitadel as auth provider for a more ecosystem-like architecture. The auth handler now supports both email magic-links and Zitadel OIDC. Health endpoints: /health , /health/db , /health/auth , and /health/mail endpoints for monitoring Email verification: SMTP integration with verifyEmailConnection() for magic-link email verification Frontend Blog management: Integrated BlockNote and Nextra to build a fully-functional blog Landing page: Designed and built, showcasing Defied’s services and values Login page: Updated with modern design and auth flow I will soon implement syntax highlighting and LaTeX in the blog editor. Stay tuned
Ships:
Defied — a full-stack monorepo featuring a Next.js 15 marketing site, NestJS API server, Fumadocs documentation, shared auth (Better Auth + Stripe, that will be later on moved to zitadel), Prisma/MariaDB, and Payload CMS — all wired with Turborepo. Challenge: Getting Better Auth to work identically across both the Next.js web app and NestJS server without duplicating config, while keeping Prisma types in sync across packages. Proud of: not using AI, insuring a high quality communication while also maintaining control over app primitives using Defied DART and Defied Prism. To test: pnpm install pnpm dev Then open http://localhost:2029 ....
|
1793735372.9284167
|
1793821772.9284167
|
|
67791
|
Shark Sub by @cabdi | Stardance
|
cabdi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Shark Sub by @cabdi | Stardance
|
1793735374.095532
|
1794340174.095532
|
|
22086
|
My very own WebOS by @zarthy1155 | Stardance
|
zarthy1155
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T21:30:50Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made My very own WebOS based off of The Chosen Cheese. It has two apps, draggable windows, and some cool stuff. Yay.", "repo": "https://github.com/Zarfur/VeryOwnWebOS", "demo": "https://zarfur.github.io/VeryOwnWebOS/"}]...
|
[{"post_id": 34290, "ts": "202 [{"post_id": 34290, "ts": "2026-07-24T21:28:51Z", "hours": 0.8347, "text": "Added a second app to The Chosen Cheese OS. It uses the Relic Rater app to display upgrades for an idle cheese counter. Yay!"}, {"post_id": 33762, "ts": "2026-07-23T22:44:38Z", "hours": 2.3378, "text": "I finished the. “Jam” thing. But i took like an extra hour than what was recommended. (which i feel quite foolish about). But my website is done! There are some movable windows and movable Chosen Cheese, which you can move if you please. You can close them too! Also there is a little image you can tap on which opens a “Relic Rater” window. It just gives some silly opinions on random Relics. TODO: add something that wasn’t on the Jam !!!!"}, {"post_id": 33570, "ts": "2026-07-23T16:39:30Z", "hours": 1.1192, "text": "My Very Own WebOS 1 following the tutorial!! html 😨 i did the first two “jams” ? i created some window boxes with cool words and images inside of them! Also a top bar and a display of the time. It is cool! My Web OS will be about The Chosen Cheese."}]...
|
Title: My very own WebOS by @zarthy1155 | Stardanc Title: My very own WebOS by @zarthy1155 | Stardance
Devlogs:
My Very Own WebOS 1 following the tutorial!! html 😨 i did the first two “jams” ? i created some window boxes with cool words and images inside of them! Also a top bar and a display of the time. It is cool! My Web OS will be about The Chosen Cheese.
I finished the. “Jam” thing. But i took like an extra hour than what was recommended. (which i feel quite foolish about). But my website is done! There are some movable windows and movable Chosen Cheese, which you can move if you please. You can close them too! Also there is a little image you can tap on which opens a “Relic Rater” window. It just gives some silly opinions on random Relics. TODO: add something that wasn’t on the Jam !!!!
Added a second app to The Chosen Cheese OS. It uses the Relic Rater app to display upgrades for an idle cheese counter. Yay!
Ships:
I made My very own WebOS based off of The Chosen Cheese. It has two apps, draggable windows, and some cool stuff. Yay....
|
1793735374.977396
|
1793821774.977396
|
|
67792
|
My awesome macropad! by @NathanPereira | Stardance
|
NathanPereira
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @NathanPereira | St Title: My awesome macropad! by @NathanPereira | Stardance...
|
1793735376.1249719
|
1794340176.1249719
|
|
59291
|
CAD PROJECTS + MUSIC by @soumilyadav25 | Stardance
|
soumilyadav25
|
1
|
7.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T03:41:25Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an Italian Piazza On SketchUp! This is just a blueprint or a demo so that I can create the same on Onshore but add batter features and add dynamics. SketchUp was really laggy and hard to control and that was super tricky. However, through many trial and errors, I got through the problems and finished this!", "repo": "https://github.com/soumilyadav25-afk/Hack-Club-CAD", "demo": "https://app.sketchup.com/share/tc/northAmerica/r4OZys9EZm4?source=web&stoken=UAuJv8dJlVrv2iGA8caUWnHcJZBTcQDwGH9-0Q3vN3G9gh2EGJKBr0D3EWuiN01D"}]...
|
[{"post_id": 63404, "ts": "202 [{"post_id": 63404, "ts": "2026-09-07T07:04:55Z", "hours": 7.4703, "text": "Italy Inspired Buildings"}]...
|
Title: CAD PROJECTS + MUSIC by @soumilyadav25 | St Title: CAD PROJECTS + MUSIC by @soumilyadav25 | Stardance
Devlogs:
Italy Inspired Buildings
Ships:
I made an Italian Piazza On SketchUp! This is just a blueprint or a demo so that I can create the same on Onshore but add batter features and add dynamics. SketchUp was really laggy and hard to control and that was super tricky. However, through many trial and errors, I got through the problems and finished this!...
|
1793735377.0100555
|
1793821777.0100555
|
|
67793
|
My awesome macropad! by @markdiffenbaugh16 | Stard My awesome macropad! by @markdiffenbaugh16 | Stardance...
|
markdiffenbaugh16
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @markdiffenbaugh16 Title: My awesome macropad! by @markdiffenbaugh16 | Stardance...
|
1793735378.15818
|
1794340178.15818
|
|
29489
|
Personal Website V2 by @Theo | Stardance
|
Theo
|
1
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-20T19:58:22Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made V2 of my personal website (or at least most of it). It contains a great homepage. It’s not finished but I need stardust because Stardance is almost over and I don’t want to miss out on it. Just a quick disclaimer: None of the other pages work yet, just the homepage. I am working hard to perfect the design and the animations. I am moving some things around and making in more modernized all the time! It features a sleek blue-hacker theme and it has a bit of info about me (the rest will be in the about page). I plan to add some widgets for recently played games and music. I also plan to have a smaller area for projects on the homepage but the larger stuff will be on the projects page. Maybe blog too. Either way, I am spending a lot of time making this website look good and I am just a beginner so I hope you guys like it. I am proud of how well just the homepage turned out and just how much effort I am actually putting into this.", "repo": "https://github.com/trose2012/New-Personal-Website/", "demo": "https://new-personal-website-steel.vercel.app/"}]...
|
[{"post_id": 51255, "ts": "202 [{"post_id": 51255, "ts": "2026-08-20T19:48:15Z", "hours": 3.9217, "text": "I Did SO MUCH EXPERIMENTING Ok, I did so much testing and trying out new things, and now I think I am a comfortable place where I have at least most of the homepage done, so I’m gonna ship this. 🔔What’s New? New “Find Me” section The Profile Spinner on Hover is Back!!! This isn’t really new but I kinda uh gave up on the status dot and decided it wasn’t important. (I will use a cool widget later in the future hopefully! The formatting and footer is done. It took so much time to perfect the formatting but it’s finally finished."}, {"post_id": 28974, "ts": "2026-07-15T16:29:55Z", "hours": 2.0825, "text": "I Fixed Everything! Bug Fixes I fixed a ton of things in this update! Navbar is now smaller and organized My profile section is now clean and organized instead of looking like a clunky dirt pile. 88x31 Buttons now have slightly rounded corners and they get bigger when you hover. I rebranded the website to my online alias - Chroma. Next Up These features should come in the next update assuming nothing goes terribly wrong… 404 Page More Sections in Homepage Hopefully status stuff like what I listened to or played last. Cool Things The header and footer are their own HTML file! If I update them they update on all pages! (Or at least they will when I add more pages lol. Feedback Comment Below! What do you think of the theme and design? I will take all suggestions into consideration."}, {"post_id": 23162, "ts": "2026-07-05T23:14:26Z", "hours": 0.8914, "text": "I Think I Broke Something New Features Half-Working Status Dot Wave Animation Copied from V1 Things That Broke A bunch of things broke for no reason - I fixed one thing and it caused another problem. The Navbar is Messed Up - This is honestly just to prepare for the new navbar that I hope to implement in the next update. It’s going to be smaller, and it might even work on mobile :0 The Navbar doesn’t stay pinned to the top. My Profile Card is like way to chunky The footer overlaps other elements when you scroll to the bottom. Future Features Smaller Navbar Better Status Dot and Now Playing Indicator More Pages! Custom Cursor and Revamped Custom Scrollbar and Highlight New Icons - I plan to use Lordicon :) And more!"}, {"post_id": 20818, "ts": "2026-07-02T15:03:45Z", "hours": 1.5883, "text": "Welcome to Version 2 of my project Info on AI Use I got some feedback saying that I was using AI last time. I never use AI to make Devlogs or Readme’s. What’s New I added a lot of cool custom features like a custom scrollbar and highlight effect. I also added a cool looking fade effect around the edges of all boxes. I also changed up the color scheme from green to blue, with a transparent effect to show the cool hacker style in the back! I think people will like this style better from the old one. What’s To Come I plan on adding tons of new features to my website, including a lot more interactivity like maybe a guestbook or smthn. I also plan to add some more features that allow me to make things easier to edit - see below Cool Things I also found out how to use JS to fetch code for a navbar and footer so I only need to edit it in one place and the others do it automatically Feedback Please leave feedback! I need to know how you all like the new theme and design! Tell me your honest opinions!"}]...
|
Title: Personal Website V2 by @Theo | Stardance
D Title: Personal Website V2 by @Theo | Stardance
Devlogs:
Welcome to Version 2 of my project Info on AI Use I got some feedback saying that I was using AI last time. I never use AI to make Devlogs or Readme’s. What’s New I added a lot of cool custom features like a custom scrollbar and highlight effect. I also added a cool looking fade effect around the edges of all boxes. I also changed up the color scheme from green to blue, with a transparent effect to show the cool hacker style in the back! I think people will like this style better from the old one. What’s To Come I plan on adding tons of new features to my website, including a lot more interactivity like maybe a guestbook or smthn. I also plan to add some more features that allow me to make things easier to edit - see below Cool Things I also found out how to use JS to fetch code for a navbar and footer so I only need to edit it in one place and the others do it automatically Feedback Please leave feedback! I need to know how you all like the new theme and design! Tell me your honest opinions!
I Think I Broke Something New Features Half-Working Status Dot Wave Animation Copied from V1 Things That Broke A bunch of things broke for no reason - I fixed one thing and it caused another problem. The Navbar is Messed Up - This is honestly just to prepare for the new navbar that I hope to implement in the next update. It’s going to be smaller, and it might even work on mobile :0 The Navbar doesn’t stay pinned to the top. My Profile Card is like way to chunky The footer overlaps other elements when you scroll to the bottom. Future Features Smaller Navbar Better Status Dot and Now Playing Indicator More Pages! Custom Cursor and Revamped Custom Scrollbar and Highlight New Icons - I plan to use Lordicon :) And more!
I Fixed Everything! Bug Fixes I fixed a ton of things in this update! Navbar is now smaller and organized My profile section is now clean and organized instead of looking like a clunky dirt pile. 88x31 Buttons now have slightly rounded corners and they get bigger when you hover. I rebranded the website to my online alias - Chroma. Next Up These features should come in the next update assuming nothing goes terribly wrong… 404 Page More Sections in Homepage Hopefully status stuff like what I listened to or played last. Cool Things The header and footer are their own HTML file! If I update them they update on all pages! (Or at least they will when I add more pages lol. Feedback Comment Below! What do you think of the theme and design? I will take all suggestions into consideration.
I Did SO MUCH EXPERIMENTING Ok, I did so much testing and trying out new things, and now I think I am a comfortable place where I have at least most of the homepage done, so I’m gonna ship this. 🔔What’s New? New “Find Me” section The Profile Spinner on Hover is Back!!! This isn’t really new but I kinda uh gave up on the status dot and decided it wasn’t important. (I will use a cool widget later in the future hopefully! The formatting and footer is done. It took so much time to perfect the formatting but it’s finally finished.
Ships:
I made V2 of my personal website (or at least most of it). It contains a great homepage. It’s not finished but I need stardust because Stardance is almost over and I don’t want to miss out on it. Just a quick disclaimer: None of the other pages work yet, just the homepage. I am working hard to perfect the design and the animations. I am moving some things around and making in more modernized all the time! It features a sleek blue-hacker theme and it has a bit of info about me (the rest will be in the about page). I plan to add some widgets for recently played games and music. I also plan to have a smaller area for projects on the homepage but the larger stuff will be on the projects page. Maybe blog too. Either way, I am spending a lot of time making this website look good and I am just a beginner so I hope you guys like it. I am proud of how well just the homepage turned out and just how much effort I am actually putting into this....
|
1793735379.0322511
|
1793821779.0322511
|
|
67794
|
TeenyTinyStories by @yf | Stardance
|
yf
|
0
|
30.16
|
0
|
[]
|
[{"post_id": 78495, "ts": "202 [{"post_id": 78495, "ts": "2026-10-10T23:27:58Z", "hours": 4.4483, "text": "Evals are done Finally, after two days of tweaking values and rewriting evaluation prompts, the eval is all done. As per the original paper I employed a GPT-Eval adjacent score (albeit with Ministral-14B) as the LLM judge) and an Elo system (with GPT 5.6 Luna as the judge). The results did significantly corroborate with each other, which validates our conclusion that TTS-1M did as well or exceeded (slightly) as TS-1M whilst TTS-33M was poorer in performance compared to TS-33M though still competitive. Both the 33M models significantly outcompeted the 1M models, as expected and serves as an auxiliary validation."}, {"post_id": 77963, "ts": "2026-10-09T00:54:28Z", "hours": 4.7397, "text": "While we’re waiting…"}, {"post_id": 77744, "ts": "2026-10-08T04:38:53Z", "hours": 4.0003, "text": "Models are finished The models have officially been fully trained and are ready for evaluation. I trained a 1M and a 33M (nominal) parameter model on the TTS dataset; at validation, shows much promise. I also drafted the Methods section and the Related Works section. I will continue to work on the evaluation section and the discussion section, before writing the final paper."}, {"post_id": 77443, "ts": "2026-10-07T00:58:48Z", "hours": 4.3611, "text": "On the Models The 1M model is finished training with tts 1.9870 / 7.29 (4.02M tok), ts_cap 2.3691 / 10.69, ts_full 2.3852 / 10.86 . It cost me around 10 USD but I am happy with its results. The 33M model is now undergoing training with ETA in around 10 hours. The models themselves use a GPT-Neo architecture with the EleutherAI/GPT-Neo-125M tokenizer, as per the original paper. I also worked on the paper, namely the methodology section. I don’t know if I can do the 3/9/28M models however due to budget constraints but I will try."}, {"post_id": 76948, "ts": "2026-10-05T05:10:19Z", "hours": 3.3178, "text": "Devlog 3 Full corpus generation finished ASAP on 4090. You can find the TTS corpus on ableian/teenytinystories on Huggingface. Now, I followed the architecture specified by Eldan and Li and started training the 1M/3M and 9M models. Will finish in 16 hours, so I’m excited!"}, {"post_id": 76665, "ts": "2026-10-04T09:26:41Z", "hours": 3.1161, "text": "Devlog 2 In here, I introduce you to the official generation pipeline.I used the TinyStories-Instruct-33M checkpoint as the progenitor model. It accepts a structured header as follows: Words: verb, noun, adjective Features: X, Y [optional] Story: The words were chosen from the original TS word list from TinyStories-Instruct-valid.txt . The features were derived from an optional feature set, sampled from the empirical distributions in the same TinyStories-Instruct data. Quality control was also enforced by rejecting incomplete stories and stories that were too long or too short. I wrote an .ipynb and began generating stories in batches of 1024 on a rented 4090 (CUDA) and my M1 MacBook Pro (MPS)! Should be ready in around 8 hours."}, {"post_id": 76587, "ts": "2026-10-04T02:34:54Z", "hours": 6.1778, "text": "1 On TinyStories TinyStories (Eldan & Li, 2023) represented a significant breakthrough in the field of language model training, providing evidence that an synthetic (i.e. LLM-generated) corpus could be used to efficiently train a Small Language Model (SLM) fluent in English and basic story generation. The pipeline is direct: Eldan and Li seeded ChatGPT (3.5 and 4) with story generation prompts, generating over 470 M tokens (~2.1 million stories), before training a 1, 3, 9, 28 and 33M SLM. Through a range of evaluation metrics, they demonstrated that these models could output fluent English, and for larger and more layered models, could generate semi-coherent stories. 2 On TeenyTinyStories Now, I propose a step further: what happens if we take the Instruct variant of the official checkpoint, TinyStories-Instruct-33M instead of a frontier model like the GPT series, to generate a new corpus of data and train the same models on this corpus instead? This is the core of this project.Note: I understand that this is fundamentally a research project rather than produce-a-usable-software type thing you see on Stardance, so I will produce a bunch of usables, including a conversation-tuned instruct variant of the 33M which you can chat with in your browser in the form of a website. The core results, however, will be in the form of an ArXiV preprint before I submit to NHSJS. What I did After I skimmed through the 2023 paper, I summarised their corpus generation pipeline as follows:The generator used GPT-3.5 and GPT-4 via the OpenAI APIPrompt composition composed of a list of required words (one verb, one noun, one adjective), and an (optional) story feature (i.e. dialogue, bad ending, moral value, plot twist…) to generate a story. Example: “Write a short story (3-5 paragraphs) which only uses very simple words that a 3 year old child would likely understand.The story should use the verb “decorate”,the noun “thunder”and the adjective “ancient”.The story should have the following features:the story should contain at least one dialogue,the story has a bad ending.Remember to only use simple words!”Accordingly, I wrote the draft introduction and the Related Works section, and planned the Methodology."}]...
|
Title: TeenyTinyStories by @yf | Stardance
Devlog Title: TeenyTinyStories by @yf | Stardance
Devlogs:
1 On TinyStories TinyStories (Eldan & Li, 2023) represented a significant breakthrough in the field of language model training, providing evidence that an synthetic (i.e. LLM-generated) corpus could be used to efficiently train a Small Language Model (SLM) fluent in English and basic story generation. The pipeline is direct: Eldan and Li seeded ChatGPT (3.5 and 4) with story generation prompts, generating over 470 M tokens (~2.1 million stories), before training a 1, 3, 9, 28 and 33M SLM. Through a range of evaluation metrics, they demonstrated that these models could output fluent English, and for larger and more layered models, could generate semi-coherent stories. 2 On TeenyTinyStories Now, I propose a step further: what happens if we take the Instruct variant of the official checkpoint, TinyStories-Instruct-33M instead of a frontier model like the GPT series, to generate a new corpus of data and train the same models on this corpus instead? This is the core of this project.Note: I understand that this is fundamentally a research project rather than produce-a-usable-software type thing you see on Stardance, so I will produce a bunch of usables, including a conversation-tuned instruct variant of the 33M which you can chat with in your browser in the form of a website. The core results, however, will be in the form of an ArXiV preprint before I submit to NHSJS. What I did After I skimmed through the 2023 paper, I summarised their corpus generation pipeline as follows:The generator used GPT-3.5 and GPT-4 via the OpenAI APIPrompt composition composed of a list of required words (one verb, one noun, one adjective), and an (optional) story feature (i.e. dialogue, bad ending, moral value, plot twist…) to generate a story. Example: “Write a short story (3-5 paragraphs) which only uses very simple words that a 3 year old child would likely understand.The story should use the verb “decorate”,the noun “thunder”and the adjective “ancient”.The story should have the following features:the story should contain at least one dialogue,the story has a bad ending.Remember to only use simple words!”Accordingly, I wrote the draft introduction and the Related Works section, and planned the Methodology.
Devlog 2 In here, I introduce you to the official generation pipeline.I used the TinyStories-Instruct-33M checkpoint as the progenitor model. It accepts a structured header as follows: Words: verb, noun, adjective Features: X, Y [optional] Story: The words were chosen from the original TS word list from TinyStories-Instruct-valid.txt . The features were derived from an optional feature set, sampled from the empirical distributions in the same TinyStories-Instruct data. Quality control was also enforced by rejecting incomplete stories and stories that were too long or too short. I wrote an .ipynb and began generating stories in batches of 1024 on a rented 4090 (CUDA) and my M1 MacBook Pro (MPS)! Should be ready in around 8 hours.
Devlog 3 Full corpus generation finished ASAP on 4090. You can find the TTS corpus on ableian/teenytinystories on Huggingface. Now, I followed the architecture specified by Eldan and Li and started training the 1M/3M and 9M models. Will finish in 16 hours, so I’m excited!
On the Models The 1M model is finished training with tts 1.9870 / 7.29 (4.02M tok), ts_cap 2.3691 / 10.69, ts_full 2.3852 / 10.86 . It cost me around 10 USD but I am happy with its results. The 33M model is now undergoing training with ETA in around 10 hours. The models themselves use a GPT-Neo architecture with the EleutherAI/GPT-Neo-125M tokenizer, as per the original paper. I also worked on the paper, namely the methodology section. I don’t know if I can do the 3/9/28M models however due to budget constraints but I will try.
Models are finished The models have officially been fully trained and are ready for evaluation. I trained a 1M and a 33M (nominal) parameter model on the TTS dataset; at validation, shows much promise. I also drafted the Methods section and the Related Works section. I will continue to work on the evaluation section and the discussion section, before writing the final paper.
While we’re waiting…
Evals are done Finally, after two days of tweaking values and rewriting evaluation prompts, the eval is all done. As per the original paper I employed a GPT-Eval adjacent score (albeit with Ministral-14B) as the LLM judge) and an Elo system (with GPT 5.6 Luna as the judge). The results did significantly corroborate with each other, which validates our conclusion that TTS-1M did as well or exceeded (slightly) as TS-1M whilst TTS-33M was poorer in performance compared to TS-33M though still competitive. Both the 33M models significantly outcompeted the 1M models, as expected and serves as an auxiliary validation....
|
1793735380.2204483
|
1794340180.2204483
|
|
34346
|
My own site! by @Rc | Stardance
|
Rc
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T22:41:40Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a little website in the workshop with jenin it was fun when doing it", "repo": "https://github.com/Random-cat1/my-personal-website", "demo": "https://random-cat1.github.io/my-personal-website/"}]...
|
[{"post_id": 29101, "ts": "202 [{"post_id": 29101, "ts": "2026-07-15T19:18:58Z", "hours": 1.1514, "text": "Hi! my first devlog of my website that i got help with on the workshop thanks to jenin i will be doing more progress tomorrow on the next workshop"}]...
|
Title: My own site! by @Rc | Stardance
Devlogs:
H Title: My own site! by @Rc | Stardance
Devlogs:
Hi! my first devlog of my website that i got help with on the workshop thanks to jenin i will be doing more progress tomorrow on the next workshop
Ships:
i made a little website in the workshop with jenin it was fun when doing it...
|
1793735381.345884
|
1793821781.345884
|
|
67795
|
Omni Directional Drivebase by @sircheetodust | Sta Omni Directional Drivebase by @sircheetodust | Stardance...
|
sircheetodust
|
0
|
2.36
|
0
|
[]
|
[{"post_id": 76852, "ts": "202 [{"post_id": 76852, "ts": "2026-10-04T20:18:08Z", "hours": 1.1431, "text": "Devlog 2! Welcome back, today I made the body of the robot and made some modifications to the adapters. I shortened the shaft adapters by 8 mm to stop the wheel from protruding out as much as it did. As for the base, I didnt do much extra just yet. Soon i am going to make 2 mounts for the L298N motor drivers which control the motor, a mount for the arduino, and comms SBC and buck converter."}, {"post_id": 76606, "ts": "2026-10-04T04:52:39Z", "hours": 1.2178, "text": "Devlog 01! I am planning to make an X drivetrain with omni wheels and 12 V 600 rpm motors. I started out by throwing stuff into onshape and hoping it works. So far I have this testing wheel assembly, which I will mount in an X shape like this diagram I definetly did not steal from the vex website. Electronics wise, I will have an arduino uno r4 + motor controller hat, and a rock 4 c+ for live coms via controller and telemetry to my laptop like FRC robots. Firmware wise, I have already have a coms system which relays laptop signals to the arduino and can allow for a over the air UI system. Arduino is also simple enough so I will spend the most time cadding this(no idea what im doing). wait onshape has dark mode?"}]...
|
Title: Omni Directional Drivebase by @sircheetodus Title: Omni Directional Drivebase by @sircheetodust | Stardance
Devlogs:
Devlog 01! I am planning to make an X drivetrain with omni wheels and 12 V 600 rpm motors. I started out by throwing stuff into onshape and hoping it works. So far I have this testing wheel assembly, which I will mount in an X shape like this diagram I definetly did not steal from the vex website. Electronics wise, I will have an arduino uno r4 + motor controller hat, and a rock 4 c+ for live coms via controller and telemetry to my laptop like FRC robots. Firmware wise, I have already have a coms system which relays laptop signals to the arduino and can allow for a over the air UI system. Arduino is also simple enough so I will spend the most time cadding this(no idea what im doing). wait onshape has dark mode?
Devlog 2! Welcome back, today I made the body of the robot and made some modifications to the adapters. I shortened the shaft adapters by 8 mm to stop the wheel from protruding out as much as it did. As for the base, I didnt do much extra just yet. Soon i am going to make 2 mounts for the L298N motor drivers which control the motor, a mount for the arduino, and comms SBC and buck converter....
|
1793735382.4912622
|
1794340182.4912622
|
|
29446
|
Some new tab by @foxors | Stardance
|
foxors
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-02T06:08:38Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a new tab page with direct search form for duckduckgo. In the back end it uses an API from Nasa to fetch a new cosmic image every 24 hours and uses it as a background. Javascript in the front end cares for updating the time and date displayed each second. I made a custom CSS structure around everything and finally got to use 2 year old CSS code for the colored heading. I didn’t use the missions guide and build everything without it (while still reading it to not make something too far of)", "repo": "https://git.foxors.de/Foxors/Some-new-tab", "demo": "https://newtab.foxors.de/"}]...
|
[{"post_id": 20575, "ts": "202 [{"post_id": 20575, "ts": "2026-07-02T06:01:16Z", "hours": 1.0906, "text": "Minor improvements. I updated the design a bit Added java script for automatic date/time updating Improved the API from PHP a bit The java script I just take the h1 and h2 tags and set their inner text every 1000 ms (1s) to a date. Time was easy because we just use new Date().toLocaleTimeStrin() for the date i hade to get a bit more creative ${(\"0\" + dt.getDay()).slice(-2)}.${(\"0\" + (dt.getMonth() + 1)).slice()}.${dt.getFullYear()} ${weekdays[dt.getDay()]} / ${months[dt.getMonth()]} All this is there to have leading zeros that only appear when the second digit isn’t used (0-9). Also i convert months and days with help of arrays to short strings that are getting placed at the end. I personally need number & name because i really can’t memorize the names for the months. The PHP The PHP code is now also caching the image from the Nasa API so that clients don’t have to call any other servers. I also made the php script read from the API key file, trim spaces and other characters that are there for some reason and than use it. Of course i also added the .htaccess file to block access to the API_KEY.txt Furthermore i added headers to stop clients from caching so that when a new image from Nasa replaces the old one the clients get the new image displayed. May be not the best solution but it works! Another thing I would like to add is that I made it so that when a image from the API is requested with special copyright it gets displayed in the footer. If the API doesn’t give an copyright notice the PHP script just default to Nasa."}, {"post_id": 20135, "ts": "2026-07-01T17:53:42Z", "hours": 2.6894, "text": "So we got this new mission for making a new tab page with some API stuff. Well… I did started it. I have made a simple website that can be used as a new tab. With a HTML form automatically going to duckduckgo. Therefore I actually still don’t have any Java script to work with currently. But you may ask how did I then requested thing from the free Nasa API. I do it through PHP. I have already made several applications with PHP so instead of following the tutorial I build everything without it (again…) was it a mistake? maybe? But now my PHP script asks every 24 hours the API endpoint for the updated info and than caches it until next time. This way clients only request from my website files + the API key is stored on the server and only used by the server + rate limit will not be a problem (i do 1 request per day, Nasa blocks at 1000 or something like that) What i want to add with Java script is actually updating the time and date (currently server sends its time and it never gets changed) and i want to add shortcuts a bit like duckduckgo’s vim keybindings. Maybe i also just make a quote of the day thing. Because, in my terminal, I have a Fox ASCII art that tells me every day a new quote. fortune | cowsay -f fox"}]...
|
Title: Some new tab by @foxors | Stardance
Devlog Title: Some new tab by @foxors | Stardance
Devlogs:
So we got this new mission for making a new tab page with some API stuff. Well… I did started it. I have made a simple website that can be used as a new tab. With a HTML form automatically going to duckduckgo. Therefore I actually still don’t have any Java script to work with currently. But you may ask how did I then requested thing from the free Nasa API. I do it through PHP. I have already made several applications with PHP so instead of following the tutorial I build everything without it (again…) was it a mistake? maybe? But now my PHP script asks every 24 hours the API endpoint for the updated info and than caches it until next time. This way clients only request from my website files + the API key is stored on the server and only used by the server + rate limit will not be a problem (i do 1 request per day, Nasa blocks at 1000 or something like that) What i want to add with Java script is actually updating the time and date (currently server sends its time and it never gets changed) and i want to add shortcuts a bit like duckduckgo’s vim keybindings. Maybe i also just make a quote of the day thing. Because, in my terminal, I have a Fox ASCII art that tells me every day a new quote. fortune | cowsay -f fox
Minor improvements. I updated the design a bit Added java script for automatic date/time updating Improved the API from PHP a bit The java script I just take the h1 and h2 tags and set their inner text every 1000 ms (1s) to a date. Time was easy because we just use new Date().toLocaleTimeStrin() for the date i hade to get a bit more creative ${("0" + dt.getDay()).slice(-2)}.${("0" + (dt.getMonth() + 1)).slice()}.${dt.getFullYear()} ${weekdays[dt.getDay()]} / ${months[dt.getMonth()]} All this is there to have leading zeros that only appear when the second digit isn’t used (0-9). Also i convert months and days with help of arrays to short strings that are getting placed at the end. I personally need number & name because i really can’t memorize the names for the months. The PHP The PHP code is now also caching the image from the Nasa API so that clients don’t have to call any other servers. I also made the php script read from the API key file, trim spaces and other characters that are there for some reason and than use it. Of course i also added the .htaccess file to block access to the API_KEY.txt Furthermore i added headers to stop clients from caching so that when a new image from Nasa replaces the old one the clients get the new image displayed. May be not the best solution but it works! Another thing I would like to add is that I made it so that when a image from the API is requested with special copyright it gets displayed in the footer. If the API doesn’t give an copyright notice the PHP script just default to Nasa.
Ships:
I made a new tab page with direct search form for duckduckgo. In the back end it uses an API from Nasa to fetch a new cosmic image every 24 hours and uses it as a background. Javascript in the front end cares for updating the time and date displayed each second. I made a custom CSS structure around everything and finally got to use 2 year old CSS code for the colored heading. I didn’t use the missions guide and build everything without it (while still reading it to not make something too far of)...
|
1793735383.3932273
|
1793821783.3932273
|
|
67796
|
Untitled project by @bakshit624 | Stardance
|
bakshit624
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @bakshit624 | Stardance
|
1793735384.5899477
|
1794340184.5899477
|
|
67797
|
Custom bobbleheads by @malcolmM | Stardance
|
malcolmM
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Custom bobbleheads by @malcolmM | Stardance
|
1793735385.444136
|
1794340185.444136
|
|
67798
|
My awesome macropad! by @azureworksinc | Stardance
|
azureworksinc
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @azureworksinc | St Title: My awesome macropad! by @azureworksinc | Stardance...
|
1793735386.3358834
|
1794340186.3358834
|
|
59299
|
My Webpage by @shra2408 | Stardance
|
shra2408
|
1
|
25.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-30T13:49:29Z", "hours": 25.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a website where u can see my favourite players, my art, and listen to bluey as well as use a real time clock :D.", "repo": "https://github.com/shravanisumant248-ux/shraswebpage/", "demo": "https://shravanisumant248-ux.github.io/shraswebpage/"}]...
|
[{"post_id": 84857, "ts": "202 [{"post_id": 84857, "ts": "2026-10-30T13:47:24Z", "hours": 3.8211, "text": "Devlog #14 FINAL DEVLOG!!!!!! 🌼🌼i GOT a link for my website and added sum cool features check it out!🌼🌼Hmm for some reason the audios not working idk why but it works on my browser and not on the demo url."}, {"post_id": 84261, "ts": "2026-10-29T11:08:41Z", "hours": 0.7167, "text": "Devlog#13 🌼🌼Made a sign up element.🌼🌼"}, {"post_id": 84116, "ts": "2026-10-29T04:15:51Z", "hours": 1.7, "text": "Devlog #12 🌼🌼Fixing all those bugs was a bit troublesome but now i have the perfect (well almost) music player!!!!! It can pause, play, previous song, next song. What im working on next is the shuffle and repeat functions. I also promise to get a demo url ready by tonight so yall can try!🌼🌼"}, {"post_id": 83969, "ts": "2026-10-29T00:16:52Z", "hours": 2.1544, "text": "Devlog # 11 🌼🌼Im back! Trying to quickly finish my webpage giving it some finishing touches to I can make it in time for the sale!!🌼🌼You can hear my dad in the bg lol"}, {"post_id": 79040, "ts": "2026-10-12T13:55:05Z", "hours": 5.4533, "text": "Devlog#10 🌼🌼Yay made an instantaneous clock, after all those hrs learning JS!! PS its Haikyuu! themed.🌼🌼"}, {"post_id": 76309, "ts": "2026-10-03T04:40:00Z", "hours": 1.6219, "text": "Devlog#9 🌼🌼I made an animation. But for some reason i can see two sprites moving.. I think its the space between the sprites :D"}, {"post_id": 75885, "ts": "2026-10-01T14:20:59Z", "hours": 1.6914, "text": "#Devlog 8 🌼🌼I made yet another navbar/sidebar… I just can’t help it, playing with navbars and sidebars is just soo fun!! I bet you can spot Boyle(my cute little sprite) in his spritesheet as well! Have a nice day.🌼🌼"}, {"post_id": 75457, "ts": "2026-09-30T04:44:14Z", "hours": 1.6258, "text": "#Devlog 7 🌼🌼Making a spritesheet for my game on My Webpage!!! Look forward to the game guys!! Im gonna ship it soon!🌼🌼"}, {"post_id": 74240, "ts": "2026-09-27T01:24:01Z", "hours": 0.2667, "text": "#Devlog 6 🌼🌼I made a navbar element. I have to fuse the two elements tho… the animation and the actual navbar :‘3 But yay I’m happy I made progress.🌼🌼"}, {"post_id": 74234, "ts": "2026-09-27T00:45:20Z", "hours": 1.3094, "text": "Devlog#5 🌼🌼Yess! Now, my gallery can scroll!🌼🌼"}, {"post_id": 70110, "ts": "2026-09-18T14:10:37Z", "hours": 1.2489, "text": "Devlog#4 🌼🌼Finally got the grid gallery aligned properly and now I am either going to add more images to it or a learn more section. Yay!🌼🌼"}, {"post_id": 70062, "ts": "2026-09-18T11:40:18Z", "hours": 0.2633, "text": "Devlog #3 🌼🌼I finally finished my website’s gallery :D I know it isn’t perfect, but this is a start!!!🌼🌼"}, {"post_id": 70032, "ts": "2026-09-18T10:23:59Z", "hours": 2.9714, "text": "Devlog #2 🌼🌼I am making an interactive website on which you can play games on, look at my artwork, and the hardware projects I made.🌼🌼"}, {"post_id": 68964, "ts": "2026-09-16T03:55:20Z", "hours": 0.6536, "text": "Navbar/Sidebar element🌼"}]...
|
Title: My Webpage by @shra2408 | Stardance
Devlog Title: My Webpage by @shra2408 | Stardance
Devlogs:
Navbar/Sidebar element🌼
Devlog #2 🌼🌼I am making an interactive website on which you can play games on, look at my artwork, and the hardware projects I made.🌼🌼
Devlog #3 🌼🌼I finally finished my website’s gallery :D I know it isn’t perfect, but this is a start!!!🌼🌼
Devlog#4 🌼🌼Finally got the grid gallery aligned properly and now I am either going to add more images to it or a learn more section. Yay!🌼🌼
Devlog#5 🌼🌼Yess! Now, my gallery can scroll!🌼🌼
#Devlog 6 🌼🌼I made a navbar element. I have to fuse the two elements tho… the animation and the actual navbar :‘3 But yay I’m happy I made progress.🌼🌼
#Devlog 7 🌼🌼Making a spritesheet for my game on My Webpage!!! Look forward to the game guys!! Im gonna ship it soon!🌼🌼
#Devlog 8 🌼🌼I made yet another navbar/sidebar… I just can’t help it, playing with navbars and sidebars is just soo fun!! I bet you can spot Boyle(my cute little sprite) in his spritesheet as well! Have a nice day.🌼🌼
Devlog#9 🌼🌼I made an animation. But for some reason i can see two sprites moving.. I think its the space between the sprites :D
Devlog#10 🌼🌼Yay made an instantaneous clock, after all those hrs learning JS!! PS its Haikyuu! themed.🌼🌼
Devlog # 11 🌼🌼Im back! Trying to quickly finish my webpage giving it some finishing touches to I can make it in time for the sale!!🌼🌼You can hear my dad in the bg lol
Devlog #12 🌼🌼Fixing all those bugs was a bit troublesome but now i have the perfect (well almost) music player!!!!! It can pause, play, previous song, next song. What im working on next is the shuffle and repeat functions. I also promise to get a demo url ready by tonight so yall can try!🌼🌼
Devlog#13 🌼🌼Made a sign up element.🌼🌼
Devlog #14 FINAL DEVLOG!!!!!! 🌼🌼i GOT a link for my website and added sum cool features check it out!🌼🌼Hmm for some reason the audios not working idk why but it works on my browser and not on the demo url.
Ships:
I made a website where u can see my favourite players, my art, and listen to bluey as well as use a real time clock :D....
|
1793735387.2424467
|
1793821787.2424467
|
|
67799
|
truthscope by @bakshit624 | Stardance
|
bakshit624
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: truthscope by @bakshit624 | Stardance
|
1793735388.4736974
|
1794340188.4736974
|
|
16547
|
RomeoGPT by @xinyulyu | Stardance
|
xinyulyu
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T13:22:37Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Building RomeoGPT was an interesting challenge because I had to implement semantic search using embeddings and retrieve the most relevant text passages from Romeo and Juliet before generating an answer. I’m most proud of creating a complete question-answering system with FastAPI and Azure OpenAI that can answer questions based on the book’s content. The live API is not publicly available because every request generates Azure OpenAI costs, and opening it to everyone could result in high expenses. However, the “Try project” link provides a downloadable executable (.exe) version that can be run directly on your computer for testing.", "repo": "https://github.com/xinyulyuonline/romeo_julia_search", "demo": "https://github.com/xinyulyuonline/romeo_julia_search/blob/main/dist/romeo_julia_search.exe"}]...
|
[{"post_id": 6815, "ts": "2026 [{"post_id": 6815, "ts": "2026-06-11T13:12:24Z", "hours": 1.7928, "text": "RomeoGPT is finish! Its working well! I might add some graphics later."}]...
|
Title: RomeoGPT by @xinyulyu | Stardance
Devlogs: Title: RomeoGPT by @xinyulyu | Stardance
Devlogs:
RomeoGPT is finish! Its working well! I might add some graphics later.
Ships:
Building RomeoGPT was an interesting challenge because I had to implement semantic search using embeddings and retrieve the most relevant text passages from Romeo and Juliet before generating an answer. I’m most proud of creating a complete question-answering system with FastAPI and Azure OpenAI that can answer questions based on the book’s content. The live API is not publicly available because every request generates Azure OpenAI costs, and opening it to everyone could result in high expenses. However, the “Try project” link provides a downloadable executable (.exe) version that can be run directly on your computer for testing....
|
1793735389.328771
|
1793821789.328771
|
|
67800
|
BLARE by @waruingi | Stardance
|
waruingi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BLARE by @waruingi | Stardance
|
1793735390.5090506
|
1794340190.5090506
|
|
19223
|
Desktop Conductor - Audio/Music Controller by @Lia Desktop Conductor - Audio/Music Controller by @LiamCasperite | Stardance...
|
LiamCasperite
|
1
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T01:12:36Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Desktop Macropad with 3 keys, a rotary encoder, and an OLED display. It was difficult learning Kicad and fusion and the project was a little overwhelming. As of now the firmware does not consist of actual media controls but instead placeholder key binds for customizability. In the future I hope to make it simpler, add some more uniqueness to the case design, and go deeper into the firmware (it is hard without the physical product). I am overall happy with how It turned out for my first project shipped!", "repo": "https://github.com/LiamCasperite/Desktop-Conductor", "demo": ""}]...
|
[{"post_id": 14557, "ts": "202 [{"post_id": 14557, "ts": "2026-06-23T18:38:15Z", "hours": 0.7756, "text": "Wrote firmware using CircuitPython, finished Fusion model, and compiled everything in github! I spent a lot more than 45 minutes (more like 3 hours) But I forgot to install hackatime when I worked in VScode and I forgot to use lapse for 3d modling. Overall I am very happy with the finished product however and excited to see it in real life!"}, {"post_id": 13243, "ts": "2026-06-21T18:05:15Z", "hours": 3.3856, "text": "I finished iteration 1 of a PCB and a case for it. I designed the PCB in KiCad to have the microcontroller, a knob, 3 keys, and an OLED. I then designed the case in Fusion so that it can stand up and face the user. This is only iteration 1 and serves as a rough draft given this is my first ever hardware project."}]...
|
Title: Desktop Conductor - Audio/Music Controller Title: Desktop Conductor - Audio/Music Controller by @LiamCasperite | Stardance
Devlogs:
I finished iteration 1 of a PCB and a case for it. I designed the PCB in KiCad to have the microcontroller, a knob, 3 keys, and an OLED. I then designed the case in Fusion so that it can stand up and face the user. This is only iteration 1 and serves as a rough draft given this is my first ever hardware project.
Wrote firmware using CircuitPython, finished Fusion model, and compiled everything in github! I spent a lot more than 45 minutes (more like 3 hours) But I forgot to install hackatime when I worked in VScode and I forgot to use lapse for 3d modling. Overall I am very happy with the finished product however and excited to see it in real life!
Ships:
I made a Desktop Macropad with 3 keys, a rotary encoder, and an OLED display. It was difficult learning Kicad and fusion and the project was a little overwhelming. As of now the firmware does not consist of actual media controls but instead placeholder key binds for customizability. In the future I hope to make it simpler, add some more uniqueness to the case design, and go deeper into the firmware (it is hard without the physical product). I am overall happy with how It turned out for my first project shipped!...
|
1793735391.4019234
|
1793821791.4019234
|
|
35853
|
My own site! by @anaskilled | Stardance
|
anaskilled
|
1
|
3.27
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T13:49:28Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i made a small html, css website about my with new information that never been in any of y websites. There isn’t any challenges since it’s not my first time I make a html website. I kind proud of remembering the html and css which I haven’t used for a long time. Nothing just click the link.", "repo": "https://github.com/Anas-hessein/personal-website", "demo": "https://anas-hessein.github.io/personal-website/"}]...
|
[{"post_id": 31262, "ts": "202 [{"post_id": 31262, "ts": "2026-07-19T15:10:08Z", "hours": 0.2653, "text": "added a contact me section"}, {"post_id": 30681, "ts": "2026-07-18T13:46:17Z", "hours": 2.8089, "text": "I made the html, and designed the css with specific classes. Wrote the readme."}]...
|
Title: My own site! by @anaskilled | Stardance
De Title: My own site! by @anaskilled | Stardance
Devlogs:
I made the html, and designed the css with specific classes. Wrote the readme.
added a contact me section
Ships:
i made a small html, css website about my with new information that never been in any of y websites. There isn’t any challenges since it’s not my first time I make a html website. I kind proud of remembering the html and css which I haven’t used for a long time. Nothing just click the link....
|
1793735395.1263516
|
1793821795.1263516
|
|
67801
|
My awesome macropad! by @Aiknoor | Stardance
|
Aiknoor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Aiknoor | Stardanc Title: My awesome macropad! by @Aiknoor | Stardance...
|
1793735396.2924423
|
1794340196.2924423
|
|
32994
|
XXHash.js by @taisan11 | Stardance
|
taisan11
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T11:53:51Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I optimized both by properly using the DataView API and reducing unnecessary variables!!", "repo": "https://github.com/taisan11/xxhash", "demo": "https://www.npmjs.com/package/@taisan11/xxhash"}]...
|
[{"post_id": 25891, "ts": "202 [{"post_id": 25891, "ts": "2026-07-10T11:50:10Z", "hours": 0.3075, "text": "I optimized both by properly using the DataView API and reducing unnecessary variables!!"}, {"post_id": 25887, "ts": "2026-07-10T11:31:47Z", "hours": 0.4064, "text": "It’s slightly slower due to BigInt implementation, but I’ve managed to get something working. Still, it’s faster than the reference implementation!! Well, maybe returning BigInt instead of converting to number or string might be problematic though…"}, {"post_id": 25872, "ts": "2026-07-10T11:04:59Z", "hours": 1.41, "text": "Implementing the hash algorithm was challenging for the first time. I think I could implement it much faster for 64-bit systems."}]...
|
Title: XXHash.js by @taisan11 | Stardance
Devlogs Title: XXHash.js by @taisan11 | Stardance
Devlogs:
Implementing the hash algorithm was challenging for the first time. I think I could implement it much faster for 64-bit systems.
It’s slightly slower due to BigInt implementation, but I’ve managed to get something working. Still, it’s faster than the reference implementation!! Well, maybe returning BigInt instead of converting to number or string might be problematic though…
I optimized both by properly using the DataView API and reducing unnecessary variables!!
Ships:
I optimized both by properly using the DataView API and reducing unnecessary variables!!...
|
1793735397.1663604
|
1793821797.1663604
|
|
45370
|
Temperature-Tracker by @AwesomeFreshDay | Stardanc Temperature-Tracker by @AwesomeFreshDay | Stardance...
|
AwesomeFreshDay
|
1
|
14.0
|
146
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-29T05:17:43Z", "hours": 14.0, "multiplier": 10.23, "payout": 146, "blessing": "neutral", "text": "INSTALLATION WINDOWS SUPPORT ONLY Download the setup file on github release page, proceed through the setup and launch the program AS ADMISTRATOR After you finish the setup you see a checkbox to click launch after setup it will not work because the setup automatically runs the program with regular perms so you have to search for the program and run as admin. This is due to WinTMP requiring admistrator privilleges to read hall sensor temps. Hello everyone. This is my first python project that I made and spent a lot of time working on it especially since I had to research and google lots of guides and documentation. I made a temperature tracking app with 2 tabs one being the main and the other being the feature of tracking computer data over time. So for the main tab, shows pc stats such as data about CPU Usage, Ram usage, and the temperatures in Celcius of the CPU and GPU. I am proud of the 2 sliders which are temperature caps the user sets for the CPU and GPU Temps. When their own computer temps reaches the temp cap they put on the slider, a messagebox appears and notifies with a sound explaining that they have reached the temp of their desired cap and their temps when they went over the cap. This is to help inform people of their pc temperatures and to take notice whether or not they could be throttling and having reduced performance from high temps. It could inform people to put caps if they want to focus on being notified that oh no their temps are higher than what they wanted and that maybe it could be a sign to clean or change thermal paste of course every computer is different and we all have different expectations but yea. So the other thing I am proud of is the temperature tracker. User picks an amount of time to set so that their pc data is recorded over that set amount of time showing patterns and useful data towards their computer stats and that they would be informed of a lot of stuff they open on their computer is impacting the usage of their pc. Anyways this was my first python project and one that I put effort in so it was a nice jounry and I would probably miss doing this. I am planning to make one other project but still going to find out.", "repo": "https://github.com/AwesomeFreshDay/Temperature-Tracker", "demo": "https://github.com/AwesomeFreshDay/Temperature-Tracker/releases/tag/v1.0"}]...
|
[{"post_id": 57029, "ts": "202 [{"post_id": 57029, "ts": "2026-08-29T03:16:52Z", "hours": 3.3219, "text": "The final dev log before the first ship. I have finished creating the program now just need to turn it into an exe app. Since my last dev log, I have added a tabview to toggle between the main and this new feature. Temperature tracker. There is a combo box where the user selects a value and sets as the time until data from their pc stats are shown and for what time which can be used to show patterns in their hardware. A pause, reset, and unpause button has been added. This was a pretty fun first python project and the first one where I put effort in. Now I just need to watch a tutorial to make this an app."}, {"post_id": 55709, "ts": "2026-08-27T17:55:20Z", "hours": 4.7264, "text": "Since my last dev log, I have imported customtkinter library for better and a modern aesthetic compared to regular tkinter, added a toggle switch button for dark and light mode. The program now uses threading for the stats for optimization. Before it was lagging very bad where it was just barely usable. Right now its a lot less laggy like way smoother but still lags a little occasionally. Changed the entry box and submit button for temp cap to simple sliders that is inputted and outputted after 1 second of release. Added slider for gpu. Finally fixed the annoying messagebox spam after temp cap reached. What happened was the temperature cap messagebox would show up and when you exited it would keep showing up a milisecond later upon close. Now the program uses a boolean that is set tot rue whenever the messagebox appears so that you acn just exit the box once and it will not pop up again until you changed the desired tempearture. Now i will be adding the anticiapted feature i want and a tab."}, {"post_id": 45418, "ts": "2026-08-11T21:03:02Z", "hours": 3.49, "text": "Since my last dev log I have added 4 more labels. The CPU Temp, GPU Temp, ram usage, and the clock all these features update every second the program is running. I set a temp cap in celcius which is a little buggy right now sometimes it works and sometimes it doesnt I will have to figure that out but there is an entry box the user types in to cap their temperature and the warning box pops up when the cpu tempearture cap has exceeded to inform the user that their cpu temperature is exceeding what they want. The user puts their temp cap to their desired amount to safely monitor their desired temps."}, {"post_id": 43715, "ts": "2026-08-09T03:57:38Z", "hours": 1.6058, "text": "Found a guide to install tkinter in python created a button and label. Had so many issues with creating the data to automatically update in GUI so now the cpu usage ACTUALLY changes every second I can’t believe it finally worked I know my time logged doesnt reflect it but I searched for documentations and guides and was able to incorporate it into my project! The app does lag/freeze for a sec when the data changes but hopefully it can be optimized soon"}, {"post_id": 43092, "ts": "2026-08-08T05:27:43Z", "hours": 0.8147, "text": "Got the time and WinTMP Library installed and working ran into a huge issue while trying to install the WinTMP library. It is a library from last year and when I installed the library and tired using the commands. it would give some huge error about a .dll file failed to inialize. So I went to install LibreHardwareMonitor the trusted offical app for checking temps and the same dll it has so i put it in my folder but that didnt work because the verison is too new so we found out in the terminal its using verison llike 1.4.1 i think int he dll of course now its been udpated from last year and its newer so i found the install of the older dll put it into the folder and it worked thanks to AI for helping me because I was stuck on this for lik ean hour but anyways the dll that is being used is a year old but i hope the future of that problems dont arise"}, {"post_id": 43046, "ts": "2026-08-08T03:11:10Z", "hours": 0.3394, "text": "Got started in my project had trouble starting the project in vscode so had to use AI for help in importing/finding the library that checks CPU and Ram usage and how to even install the library so it helped me get started. Right now I was able to print the cpu and ram usage in the terminal and hopefully add csv file to track the usage overtime"}]...
|
Title: Temperature-Tracker by @AwesomeFreshDay | S Title: Temperature-Tracker by @AwesomeFreshDay | Stardance
Devlogs:
Got started in my project had trouble starting the project in vscode so had to use AI for help in importing/finding the library that checks CPU and Ram usage and how to even install the library so it helped me get started. Right now I was able to print the cpu and ram usage in the terminal and hopefully add csv file to track the usage overtime
Got the time and WinTMP Library installed and working ran into a huge issue while trying to install the WinTMP library. It is a library from last year and when I installed the library and tired using the commands. it would give some huge error about a .dll file failed to inialize. So I went to install LibreHardwareMonitor the trusted offical app for checking temps and the same dll it has so i put it in my folder but that didnt work because the verison is too new so we found out in the terminal its using verison llike 1.4.1 i think int he dll of course now its been udpated from last year and its newer so i found the install of the older dll put it into the folder and it worked thanks to AI for helping me because I was stuck on this for lik ean hour but anyways the dll that is being used is a year old but i hope the future of that problems dont arise
Found a guide to install tkinter in python created a button and label. Had so many issues with creating the data to automatically update in GUI so now the cpu usage ACTUALLY changes every second I can’t believe it finally worked I know my time logged doesnt reflect it but I searched for documentations and guides and was able to incorporate it into my project! The app does lag/freeze for a sec when the data changes but hopefully it can be optimized soon
Since my last dev log I have added 4 more labels. The CPU Temp, GPU Temp, ram usage, and the clock all these features update every second the program is running. I set a temp cap in celcius which is a little buggy right now sometimes it works and sometimes it doesnt I will have to figure that out but there is an entry box the user types in to cap their temperature and the warning box pops up when the cpu tempearture cap has exceeded to inform the user that their cpu temperature is exceeding what they want. The user puts their temp cap to their desired amount to safely monitor their desired temps.
Since my last dev log, I have imported customtkinter library for better and a modern aesthetic compared to regular tkinter, added a toggle switch button for dark and light mode. The program now uses threading for the stats for optimization. Before it was lagging very bad where it was just barely usable. Right now its a lot less laggy like way smoother but still lags a little occasionally. Changed the entry box and submit button for temp cap to simple sliders that is inputted and outputted after 1 second of release. Added slider for gpu. Finally fixed the annoying messagebox spam after temp cap reached. What happened was the temperature cap messagebox would show up and when you exited it would keep showing up a milisecond later upon close. Now the program uses a boolean that is set tot rue whenever the messagebox appears so that you acn just exit the box once and it will not pop up again until you changed the desired tempearture. Now i will be adding the anticiapted feature i want and a tab.
The final dev log before the first ship. I have finished creating the program now just need to turn it into an exe app. Since my last dev log, I have added a tabview to toggle between the main and this new feature. Temperature tracker. There is a combo box where the user selects a value and sets as the time until data from their pc stats are shown and for what time which can be used to show patterns in their hardware. A pause, reset, and unpause button has been added. This was a pretty fun first python project and the first one where I put effort in. Now I just need to watch a tutorial to make this an app.
Ships:
INSTALLATION WINDOWS SUPPORT ONLY Download the setup file on github release page, proceed through the setup and launch the program AS ADMISTRATOR After you finish the setup you see a checkbox to click launch after setup it will not work because the setup automatically runs the program with regular perms so you have to search for the program and run as admin. This is due to WinTMP requiring admistrator privilleges to read hall sensor temps. Hello everyone. This is my first python project that I made and spent a lot of time working on it especially since I had to research and google lots of guides and documentation. I made a temperature tracking app with 2 tabs one being the main and the other being the feature of tracking computer data over time. So for the main tab, shows pc stats such as data about CPU Usage, Ram usage, and the temperatures in Celcius of the CPU and GPU. I am proud of the 2 sliders which are temperature caps the user sets for the CPU and GPU Temps. When their own computer temps reaches the temp cap they put on the slider, a messagebox appears and notifies with a sound explaining that they have reached the temp of their desired cap and their temps when they went over the cap. This is to help inform people of their pc temperatures and to take notice whether or not they could be throttling and having reduced performance from high temps. It could inform people to put caps if they want to focus on being notified that oh no their temps are higher than what they wanted and that maybe it could be a sign to clean or change thermal paste of course every computer is different and we all have different expectations but yea. So the other thing I am proud of is the temperature tracker. User picks an amount of time to set so that their pc data is recorded over that set amount of time showing patterns and useful data towards their computer stats and that they would be informed of a lot of stuff they open on their computer is impacting the usage of their pc. Anyways this was my first python project and one that I put effort in so it was a nice jounry and I would probably miss doing this. I am planning to make one other project but still going to find out....
|
1793735399.108247
|
1793821799.108247
|
|
18228
|
Lando Norris Fan OS by @F1_ms | Stardance
|
F1_ms
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-21T18:31:03Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make? I built Lando Norris Fan WebOS, an interactive, simulated desktop operating system themed around F1 driver Lando Norris (LN4). Running entirely in the browser, it features a glassmorphic taskbar with a live real-time clock, draggable windows, and three core applications: Welcome Screen: A landing page with links to Lando’s social media. Race Weekends (F1 Calendar): An app showing upcoming/past 2026 races and active race reports. F1 Standings: A beautiful dashboard tracking the latest 2026 championship points for drivers and teams. What was challenging? One of the biggest hurdles was managing window layers (z-index) so that clicking any window automatically brings it to the top. I also struggled with JavaScript event listeners not firing correctly due to a script loading conflict (type=“module” vs standard scripts), which caused the close buttons to freeze. I resolved this by building a dedicated debugging script checker that automatically verifies button IDs and implements safety click fallbacks. What are you proud of? I am incredibly proud of building the F1 Standings App! I structured the tabs myself to let users toggle between Drivers and Constructors. I customized the styling using custom CSS so that championship leaders (like Kimi Antonelli) have a golden-shimmer highlight, podium positions look like gold, silver, and bronze, and Lando/McLaren have the iconic signature orange branding. What should people know so they can test your project? Double-click the desktop icons to launch apps! You can drag windows around by clicking and holding their headers. Click anywhere inside an open window to bring it to the foreground. Use the navigation buttons inside the apps to toggle between Calendar/Reports or Drivers/Teams. Click the ✕ button on the top right of any window to close it.", "repo": "https://github.com/F1ms-maker/Webos", "demo": "https://f1ms-maker.github.io/Webos/"}]...
|
[{"post_id": 13259, "ts": "202 [{"post_id": 13259, "ts": "2026-06-21T18:26:36Z", "hours": 0.3069, "text": "Finishing Last Infos"}, {"post_id": 8633, "ts": "2026-06-14T10:59:00Z", "hours": 1.5644, "text": "Some good Progress and the first App!!!"}, {"post_id": 8400, "ts": "2026-06-13T23:31:55Z", "hours": 1.0858, "text": "Finished for Today first steps done"}]...
|
Title: Lando Norris Fan OS by @F1_ms | Stardance
Title: Lando Norris Fan OS by @F1_ms | Stardance
Devlogs:
Finished for Today first steps done
Some good Progress and the first App!!!
Finishing Last Infos
Ships:
What did you make? I built Lando Norris Fan WebOS, an interactive, simulated desktop operating system themed around F1 driver Lando Norris (LN4). Running entirely in the browser, it features a glassmorphic taskbar with a live real-time clock, draggable windows, and three core applications: Welcome Screen: A landing page with links to Lando’s social media. Race Weekends (F1 Calendar): An app showing upcoming/past 2026 races and active race reports. F1 Standings: A beautiful dashboard tracking the latest 2026 championship points for drivers and teams. What was challenging? One of the biggest hurdles was managing window layers (z-index) so that clicking any window automatically brings it to the top. I also struggled with JavaScript event listeners not firing correctly due to a script loading conflict (type=“module” vs standard scripts), which caused the close buttons to freeze. I resolved this by building a dedicated debugging script checker that automatically verifies button IDs and implements safety click fallbacks. What are you proud of? I am incredibly proud of building the F1 Standings App! I structured the tabs myself to let users toggle between Drivers and Constructors. I customized the styling using custom CSS so that championship leaders (like Kimi Antonelli) have a golden-shimmer highlight, podium positions look like gold, silver, and bronze, and Lando/McLaren have the iconic signature orange branding. What should people know so they can test your project? Double-click the desktop icons to launch apps! You can drag windows around by clicking and holding their headers. Click anywhere inside an open window to bring it to the foreground. Use the navigation buttons inside the apps to toggle between Calendar/Reports or Drivers/Teams. Click the ✕ button on the top right of any window to close it....
|
1793735400.4125438
|
1793821800.4125438
|
|
17184
|
Flag Matcher by @yellowissuchanoverratedcolor | St Flag Matcher by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
1
|
13.25
|
149
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T18:28:03Z", "hours": 11.0, "multiplier": 13.57, "payout": 149, "blessing": "neutral", "text": "I am kinda obsessed with country flags so I created a fun browser game about them. The mission is to recreate colors of country flags as close as possible using HSL sliders. I added both a daily challenge that is the same for everyone and a random challenge for when the daily challenge isn’t enough :) Features 🎨 Match hidden flag colors using Hue, Saturation and Lightness sliders 🌍 Country flags from all around the world 🏆 A challenging scoring system 📅 Daily challenges 🎲 Random challenges for when the daily challenge isn’t enough 🔗 Shareable links so you can easily challenge your friends 🌐 Runs entirely in your browser, no need to download anything It would mean the world to me if you give it a try <3 https://floopus44.github.io/Flag-Matcher/ (UI is WIP)", "repo": "https://github.com/floopus44/Flag-Matcher", "demo": "https://floopus44.github.io/Flag-Matcher/"}]...
|
[{"post_id": 21067, "ts": "202 [{"post_id": 21067, "ts": "2026-07-02T20:55:27Z", "hours": 2.2497, "text": "Flag-Matcher - a fun flag game that runs in your browser - Devlog 5 Thank you so much for all the feedback, I really appreciate it!! <3 Today I improved the UI of the landing page a little bit. Should feel way more straightforward now!! (I am planning to add pics to the front page in the future but I kinda suck at designing stuff) I then looked through the feedback I got and one of the most common complaints was that the design of the timer was kinda annoying so I replaced it with a circular SVG timer. When time runs out it also changes the color and starts to blink as a small little visual indicator. It was kinda my first time actually doing stuff with SVG instead of just downloading them lol and it was kinda exciting figuring all of it out. For the next devlog, I am planning to add a few sound indicators to the timer. Other suggestions I got, that I definitely want to implement: Custom timer options (also no timer) Easy mode Mobile version (working on it!!) (PS: the first pic shows the new landing page, and the other ones show the new timer design)"}, {"post_id": 17492, "ts": "2026-06-28T09:21:59Z", "hours": 4.3247, "text": "Flag-Matcher - a fun flag game that runs in your browser - Devlog 4 (How I spent 2 hours trying to fix a bug that did not exist) I thought I had discovered a bug in my browser game about flags. The game uses a seed system to generate random challenges as well as daily challenges. So yesterday, I tried taking the daily challenge and opened the website right around midnight. But, to my surprise, the challenge was the same one as the day before.. After panicking quite a bit, I tried to find the bug. I think I spent like two hours in total trying to find it. But, just as I was about to rewrite the code, it hit me: Maybe I opened the site right before 0:00 (like probably two seconds before). My PC’s clock is a bit out of sync so that was most likely the cause of it all. But fixing imaginary bugs wasn’t the only thing I did that day as I then changed up the scoring system a little bit: Previously, I just simply took the difference of the target and the guess HSL values and put them in a non-linear formula. This kinda sucked because HSL works like this: A hue of 0 is the color red, BUT a hue of 359 is also red (kinda like a circle). So, as you can probably guess, that lead to some weird scores in the past. To fix it, I now convert the HSL to RGB values, take the difference of those and then calculate the scores. I added two parameters to tweak the algorithm: punishFactor and curveFactor. The higher the punishFactor, the harder the game will be and if you lower the curveFactor, it will be more forgiving for close guesses. Those modifications should make the scoring system feel way better now. Planned additions for the next day: Mobile version Finally fix some of those buggy flags"}, {"post_id": 15658, "ts": "2026-06-25T13:49:37Z", "hours": 0.8686, "text": "Flag-Matcher - a fun flag game that runs in your browser - Devlog 3 Ugghhhhh I hate writing readmes so much but I finally wrote one for my project today :)) I then spent like 30 minutes trying to improve the scoring system but all my ideas kinda sucked so I gave up. (Please contact me if you have any idea on how to implement a better one!!) And that was kinda it for the day.. Oh and also I removed a lot of buggy flags to it should be playable now: https://floopus44.github.io/Flag-Matcher/"}, {"post_id": 14964, "ts": "2026-06-24T09:24:46Z", "hours": 1.6019, "text": "I finally implemented the scoring system (needs some improvements but still) and added a round-end and game-end screen showing the user some stats about how they performed. I had to temporarily remove some flags as they were kinda buggy but they will be added back in the future :)"}, {"post_id": 14285, "ts": "2026-06-23T10:39:39Z", "hours": 4.2842, "text": "Heyy, I am kinda obsessed with flags so that is why I’m working on a fun little browser game about them. Here is how it works: You will be presented a random country flag, but one color is missing. Your mission is to then recreate the missing color within a set time by using HSL sliders. Each game consists of 5 rounds and you will be rewarded points depending on the accuracy of your recreation. I spent the first two days setting up some boilerplate code and preparing the flag SVGs. I then implemented a seed system which allows users to challenge their friends. This system can also be used to generate daily challenges. Then I spent some time trying to fix up some flags because some of the SVGs were kinda buggy but I still did not find a real solution. BUT the game is kinda playable already. Next steps: implement a scoring system fix up the buggy flags make it FUN 🌟 to use maybe add none-country flags (?)"}]...
|
Title: Flag Matcher by @yellowissuchanoverratedcol Title: Flag Matcher by @yellowissuchanoverratedcolor | Stardance
Devlogs:
Heyy, I am kinda obsessed with flags so that is why I’m working on a fun little browser game about them. Here is how it works: You will be presented a random country flag, but one color is missing. Your mission is to then recreate the missing color within a set time by using HSL sliders. Each game consists of 5 rounds and you will be rewarded points depending on the accuracy of your recreation. I spent the first two days setting up some boilerplate code and preparing the flag SVGs. I then implemented a seed system which allows users to challenge their friends. This system can also be used to generate daily challenges. Then I spent some time trying to fix up some flags because some of the SVGs were kinda buggy but I still did not find a real solution. BUT the game is kinda playable already. Next steps: implement a scoring system fix up the buggy flags make it FUN 🌟 to use maybe add none-country flags (?)
I finally implemented the scoring system (needs some improvements but still) and added a round-end and game-end screen showing the user some stats about how they performed. I had to temporarily remove some flags as they were kinda buggy but they will be added back in the future :)
Flag-Matcher - a fun flag game that runs in your browser - Devlog 3 Ugghhhhh I hate writing readmes so much but I finally wrote one for my project today :)) I then spent like 30 minutes trying to improve the scoring system but all my ideas kinda sucked so I gave up. (Please contact me if you have any idea on how to implement a better one!!) And that was kinda it for the day.. Oh and also I removed a lot of buggy flags to it should be playable now: https://floopus44.github.io/Flag-Matcher/
Flag-Matcher - a fun flag game that runs in your browser - Devlog 4 (How I spent 2 hours trying to fix a bug that did not exist) I thought I had discovered a bug in my browser game about flags. The game uses a seed system to generate random challenges as well as daily challenges. So yesterday, I tried taking the daily challenge and opened the website right around midnight. But, to my surprise, the challenge was the same one as the day before.. After panicking quite a bit, I tried to find the bug. I think I spent like two hours in total trying to find it. But, just as I was about to rewrite the code, it hit me: Maybe I opened the site right before 0:00 (like probably two seconds before). My PC’s clock is a bit out of sync so that was most likely the cause of it all. But fixing imaginary bugs wasn’t the only thing I did that day as I then changed up the scoring system a little bit: Previously, I just simply took the difference of the target and the guess HSL values and put them in a non-linear formula. This kinda sucked because HSL works like this: A hue of 0 is the color red, BUT a hue of 359 is also red (kinda like a circle). So, as you can probably guess, that lead to some weird scores in the past. To fix it, I now convert the HSL to RGB values, take the difference of those and then calculate the scores. I added two parameters to tweak the algorithm: punishFactor and curveFactor. The higher the punishFactor, the harder the game will be and if you lower the curveFactor, it will be more forgiving for close guesses. Those modifications should make the scoring system feel way better now. Planned additions for the next day: Mobile version Finally fix some of those buggy flags
Flag-Matcher - a fun flag game that runs in your browser - Devlog 5 Thank you so much for all the feedback, I really appreciate it!! <3 Today I improved the UI of the landing page a little bit. Should feel way more straightforward now!! (I am planning to add pics to the front page in the future but I kinda suck at designing stuff) I then looked through the feedback I got and one of the most common complaints was that the design of the timer was kinda annoying so I replaced it with a circular SVG timer. When time runs out it also changes the color and starts to blink as a small little visual indicator. It was kinda my first time actually doing stuff with SVG instead of just downloading them lol and it was kinda exciting figuring all of it out. For the next devlog, I am planning to add a few sound indicators to the timer. Other suggestions I got, that I definitely want to implement: Custom timer options (also no timer) Easy mode Mobile version (working on it!!) (PS: the first pic shows the new landing page, and the other ones show the new timer design)
Ships:
I am kinda obsessed with country flags so I created a fun browser game about them. The mission is to recreate colors of country flags as close as possible using HSL sliders. I added both a daily challenge that is the same for everyone and a random challenge for when the daily challenge isn’t enough :) Features 🎨 Match hidden flag colors using Hue, Saturation and Lightness sliders 🌍 Country flags from all around the world 🏆 A challenging scoring system 📅 Daily challenges 🎲 Random challenges for when the daily challenge isn’t enough 🔗 Shareable links so you can easily challenge your friends 🌐 Runs entirely in your browser, no need to download anything It would mean the world to me if you give it a try <3 https://floopus44.github.io/Flag-Matcher/ (UI is WIP)...
|
1793735401.5903227
|
1793821801.5903227
|
|
67802
|
My own site! by @27_jamesclark | Stardance
|
27_jamesclark
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @27_jamesclark | Stardance
|
1793735402.7608116
|
1794340202.7608116
|
|
33225
|
My own site! by @BoltOneUp | Stardance
|
BoltOneUp
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-19T02:43:00Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a personal website, well, sort of. The website parodies what a personal website is, including sections about themselves, their projects, and their accomplishments. Despite having “placeholder stock imagery”, the website is interesting and funny to read. This website, like many others, is built with HTML and CSS. I learned a lot about how websites function and their underlying architecture during this development process, and it’s no easy task to ensure that what you code is what you want it to be. I also did some creative work, including a repeating pattern and a favicon. Please have a look!", "repo": "https://github.com/BoltOneUp/personal-site", "demo": "https://boltoneup.github.io/personal-site/"}]...
|
[{"post_id": 31023, "ts": "202 [{"post_id": 31023, "ts": "2026-07-19T02:35:23Z", "hours": 1.6594, "text": "Devlog #3: All Done! I finally finished my website. Compare it to when we just started, and it is thousands of miles better. I learned a lot about coding in HTML and CSS and how websites function. Here is a picture of the finished product:"}, {"post_id": 30485, "ts": "2026-07-18T03:06:33Z", "hours": 1.1794, "text": "Devlog #2: More tutorials, and now here’s some sick CSS to make the website look a bit decent. Obviously, it’s a bit cumbersome to keep deploying it to GitHub Pages every time I make changes, but for an hour of work, I think it turned out really well, and I’m satisfied so far. It features a repeating stripe pattern I created in Affinity Designer, a revamped navigation bar, and a hero section that introduces visitors to my website. It continues the trend of adding funny placeholder stock images, which is the website’s theme. I also added a disclosure banner at the top to prevent confusion. I plan to expand the website’s actual content (ie, the important stuff) by the next devlog."}, {"post_id": 29630, "ts": "2026-07-16T18:04:36Z", "hours": 0.3181, "text": "Devlog #1: Finally got hackatime to work because Visual Studio Code didn’t count my hours (yay!). I got it set up in GitHub Codespaces and transferred the code from my computer to Codespaces, as well as committing it to the GitHub repo. For the actual stuff, I started learning how to create a website! I used the Stardancee guide to learn the basics and how to get started, and watched a few YouTube tutorials on HTML basics. I also learned how CSS works, and I started giving my website some personality. Obviously, there’s a lot of placeholder content, but it should be going together soon!"}]...
|
Title: My own site! by @BoltOneUp | Stardance
Dev Title: My own site! by @BoltOneUp | Stardance
Devlogs:
Devlog #1: Finally got hackatime to work because Visual Studio Code didn’t count my hours (yay!). I got it set up in GitHub Codespaces and transferred the code from my computer to Codespaces, as well as committing it to the GitHub repo. For the actual stuff, I started learning how to create a website! I used the Stardancee guide to learn the basics and how to get started, and watched a few YouTube tutorials on HTML basics. I also learned how CSS works, and I started giving my website some personality. Obviously, there’s a lot of placeholder content, but it should be going together soon!
Devlog #2: More tutorials, and now here’s some sick CSS to make the website look a bit decent. Obviously, it’s a bit cumbersome to keep deploying it to GitHub Pages every time I make changes, but for an hour of work, I think it turned out really well, and I’m satisfied so far. It features a repeating stripe pattern I created in Affinity Designer, a revamped navigation bar, and a hero section that introduces visitors to my website. It continues the trend of adding funny placeholder stock images, which is the website’s theme. I also added a disclosure banner at the top to prevent confusion. I plan to expand the website’s actual content (ie, the important stuff) by the next devlog.
Devlog #3: All Done! I finally finished my website. Compare it to when we just started, and it is thousands of miles better. I learned a lot about coding in HTML and CSS and how websites function. Here is a picture of the finished product:
Ships:
I created a personal website, well, sort of. The website parodies what a personal website is, including sections about themselves, their projects, and their accomplishments. Despite having “placeholder stock imagery”, the website is interesting and funny to read. This website, like many others, is built with HTML and CSS. I learned a lot about how websites function and their underlying architecture during this development process, and it’s no easy task to ensure that what you code is what you want it to be. I also did some creative work, including a repeating pattern and a favicon. Please have a look!...
|
1793735403.653411
|
1793821803.653411
|
|
14349
|
RetrOS by @SirYanni | Stardance
|
SirYanni
|
2
|
6.0
|
10
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T18:47:51Z", "hours": 1.0, "multiplier": 7.55, "payout": 10, "blessing": "neutral", "text": "For WebOS 2, I made four for additions to RetrOS, wich are a new font, a calculator (!!!), an export feature for MicroMemo and a Taskbar. For further info on the apps, please see the last devlog. I’m really proud of how this turned out, and will definitely continue building on this. Hope y’all enjoy it!", "repo": "https://github.com/siryanni/RetrOS", "demo": "https://siryanni.github.io/RetrOS/"}, {"ship_num": 2, "ts": "2026-06-16T13:40:13Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "RetrOS shipping I made a Retro-Themed WebOS (hence the name), using the given Guide. I myself added my own apps, such as HobbyTrack, MicroMemo, PixelPainter and RetroPet. I am really proud of integrating HobbyTrack, as I find it very useful, and hope yall will too! The Project was a very fun journey, especially considering it was my (kind of) first real HTML Project. I hope enjoy using RetrOS just as much as I do.", "repo": "https://github.com/siryanni/RetrOS", "demo": "https://siryanni.github.io/RetrOS/"}]...
|
[{"post_id": 20178, "ts": "202 [{"post_id": 20178, "ts": "2026-07-01T18:44:02Z", "hours": 1.3281, "text": "WebOS 2 RetrOS additions Today I added 4 new features: New Font! New App, the “Calc-95” A Taskbar Export feature for MicroMemo 1. The new font The new System-Font is now “VT323” 2.Calc-95 The new app, “Calc-95” is a basic calculator using Js-logic 3.The Taskbar The new Taskbar allows to minimize apps and see wich are currently open, as before you could only overlap apps wich just wasnt great tbh. 4.Export for MicroMemo You can now export your notes written in MicroMemo using the “export” button, wich will then download a .txt to save any important notes! Hope yall enjoy the features I made for WebOS 2, cya!"}, {"post_id": 9933, "ts": "2026-06-16T13:34:18Z", "hours": 0.9514, "text": "Finalized the new Apps! I just pushed the final updates for RetrOS. PixelPaint and RetroPet are officially implemented, working and the design look clean with the new icons! Also cleaned up some code before pushing everything to GitHub. The project is basically done now and ready for review. Thanks for checking out RetrOS!"}, {"post_id": 7090, "ts": "2026-06-11T21:18:54Z", "hours": 1.8456, "text": "Got A LOT done today I managed to finalize HobbyTrack and overhauled my Code to make it mor comfortable for me to keep building on it. Im going to add 1-2 more Apps the coming days, tho so far the GitHub Pages Site is now up and running, so feel free to go test RetrOS! ( Also learned how to use Markdown as you can see hehe )"}, {"post_id": 6442, "ts": "2026-06-10T20:34:45Z", "hours": 1.4033, "text": "Did a “little” rebranding, just felt more appropriate. Hope yall like the new RetrOS as much as I do! (vers0.1.5)"}, {"post_id": 5867, "ts": "2026-06-09T20:20:23Z", "hours": 1.1867, "text": "Got alot done, following the tutorial helps!"}]...
|
Title: RetrOS by @SirYanni | Stardance
Devlogs:
G Title: RetrOS by @SirYanni | Stardance
Devlogs:
Got alot done, following the tutorial helps!
Did a “little” rebranding, just felt more appropriate. Hope yall like the new RetrOS as much as I do! (vers0.1.5)
Got A LOT done today I managed to finalize HobbyTrack and overhauled my Code to make it mor comfortable for me to keep building on it. Im going to add 1-2 more Apps the coming days, tho so far the GitHub Pages Site is now up and running, so feel free to go test RetrOS! ( Also learned how to use Markdown as you can see hehe )
Finalized the new Apps! I just pushed the final updates for RetrOS. PixelPaint and RetroPet are officially implemented, working and the design look clean with the new icons! Also cleaned up some code before pushing everything to GitHub. The project is basically done now and ready for review. Thanks for checking out RetrOS!
WebOS 2 RetrOS additions Today I added 4 new features: New Font! New App, the “Calc-95” A Taskbar Export feature for MicroMemo 1. The new font The new System-Font is now “VT323” 2.Calc-95 The new app, “Calc-95” is a basic calculator using Js-logic 3.The Taskbar The new Taskbar allows to minimize apps and see wich are currently open, as before you could only overlap apps wich just wasnt great tbh. 4.Export for MicroMemo You can now export your notes written in MicroMemo using the “export” button, wich will then download a .txt to save any important notes! Hope yall enjoy the features I made for WebOS 2, cya!
Ships:
RetrOS shipping I made a Retro-Themed WebOS (hence the name), using the given Guide. I myself added my own apps, such as HobbyTrack, MicroMemo, PixelPainter and RetroPet. I am really proud of integrating HobbyTrack, as I find it very useful, and hope yall will too! The Project was a very fun journey, especially considering it was my (kind of) first real HTML Project. I hope enjoy using RetrOS just as much as I do.
For WebOS 2, I made four for additions to RetrOS, wich are a new font, a calculator (!!!), an export feature for MicroMemo and a Taskbar. For further info on the apps, please see the last devlog. I’m really proud of how this turned out, and will definitely continue building on this. Hope y’all enjoy it!...
|
1793735404.792045
|
1793821804.792045
|