|
14218
|
MilkyWay Cookie OS! by @Chronos | Stardance
|
Chronos
|
0
|
21.15
|
0
|
[]
|
[{"post_id": 77176, "ts": "202 [{"post_id": 77176, "ts": "2026-10-05T22:32:23Z", "hours": 14.2447, "text": "Devlog! The Milkyway cookie Reminders are done! And so is the welcome tabs! (( yes there are two of them )) What’s left to do now? I have to go fix the analog clock and see what’s causing it to act weirdly with the other divs, and make the music player actually playable, and add notification buttons that are buttonable and of course the flashcards to be able to flip. Welp off I go I guess!"}, {"post_id": 65542, "ts": "2026-09-10T19:03:40Z", "hours": 2.9431, "text": "Finally actually finalized the drafting! Annddddd everything is spinning wow- ok alexa play centrifudge from phm- Being honest I am very very slow lamaoooo It looks more like a wiki page / blog than a webos QWQ ( HOPEFULLY IT WILL TRUST IN TEH PROCESS- ) If I’m being honest, I just input the spinning for ONE thing that was supposed to be like on a seperate tab and window that pops out BUT LIKE EVERYTHING IS SPINNING NOW SO I HAVE TOO FIGGURE OUT WHY IS EVERYTHING SPIINNING AND HOW TO ONLY LET ONE THING SPIN SOBS So uh if I’m being honest, the multiple things spinning ALL AT ONCE is not intentional, it was supposed to be the one thing spinning on A SEPERATE WINDOW POPUP NO LESS QWQ ( great now I have to figure out a way on how to make everything less spinning and only one thing spin on click- )"}, {"post_id": 64364, "ts": "2026-09-08T17:49:02Z", "hours": 3.3342, "text": "I am REALLLYYYYY slow… Ok! So! I’ve made some art for it (!!!!) and planned out what I want to do! However i am really slow lamaoo Now I just have to make like the uhh background art for when you open the applications and make the clock art aughhdsmnmdshjks ( Also I will have to like draw DreamJelly cookie some time hahaaaaaaa ( Yeahhh I’ll change the charmed umbrella project name thing in a bit or two.. )"}, {"post_id": 29158, "ts": "2026-07-15T21:21:25Z", "hours": 0.6325, "text": "I am so tired but excited at this point. Very excited to see how this could go, everything is still a mess and I still have a long way to go before I can fully flesh out everything that I have been planning. Hopefully I have the capabilities to bring what I want into the real world.( and as you can tell… this is just straight up I learn the path with what I wanna make first- )"}]...
|
Title: MilkyWay Cookie OS! by @Chronos | Stardance Title: MilkyWay Cookie OS! by @Chronos | Stardance
Devlogs:
I am so tired but excited at this point. Very excited to see how this could go, everything is still a mess and I still have a long way to go before I can fully flesh out everything that I have been planning. Hopefully I have the capabilities to bring what I want into the real world.( and as you can tell… this is just straight up I learn the path with what I wanna make first- )
I am REALLLYYYYY slow… Ok! So! I’ve made some art for it (!!!!) and planned out what I want to do! However i am really slow lamaoo Now I just have to make like the uhh background art for when you open the applications and make the clock art aughhdsmnmdshjks ( Also I will have to like draw DreamJelly cookie some time hahaaaaaaa ( Yeahhh I’ll change the charmed umbrella project name thing in a bit or two.. )
Finally actually finalized the drafting! Annddddd everything is spinning wow- ok alexa play centrifudge from phm- Being honest I am very very slow lamaoooo It looks more like a wiki page / blog than a webos QWQ ( HOPEFULLY IT WILL TRUST IN TEH PROCESS- ) If I’m being honest, I just input the spinning for ONE thing that was supposed to be like on a seperate tab and window that pops out BUT LIKE EVERYTHING IS SPINNING NOW SO I HAVE TOO FIGGURE OUT WHY IS EVERYTHING SPIINNING AND HOW TO ONLY LET ONE THING SPIN SOBS So uh if I’m being honest, the multiple things spinning ALL AT ONCE is not intentional, it was supposed to be the one thing spinning on A SEPERATE WINDOW POPUP NO LESS QWQ ( great now I have to figure out a way on how to make everything less spinning and only one thing spin on click- )
Devlog! The Milkyway cookie Reminders are done! And so is the welcome tabs! (( yes there are two of them )) What’s left to do now? I have to go fix the analog clock and see what’s causing it to act weirdly with the other divs, and make the music player actually playable, and add notification buttons that are buttonable and of course the flashcards to be able to flip. Welp off I go I guess!...
|
1792640896.3145587
|
1793245696.3145587
|
|
29801
|
Tecora by @hariharann | Stardance
|
hariharann
|
1
|
21.14
|
299
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-23T16:38:54Z", "hours": 19.0, "multiplier": 17.85, "payout": 299, "blessing": "neutral", "text": "Tecora — local Chrome extension that puts Claude, ChatGPT, and Gemini chats in one library. Problem: AI history is scattered across platforms/accounts. Searching, organizing, and exporting is painful. QoL: Cross-platform capture + folders/tags/resume in one place Ctrl/Cmd+K search over your chats Local export (md/json/zip) + privacy toggles — nothing leaves the device a lot more tbh Test: download the release zip → Load unpacked → open Claude/ChatGPT/Gemini logged in. https://github.com/nothariharan/Tecora/releases/tag/v0.1.0", "repo": "https://github.com/nothariharan/Tecora", "demo": "https://github.com/nothariharan/Tecora/releases/tag/v0.1.0"}]...
|
[{"post_id": 46103, "ts": "202 [{"post_id": 46103, "ts": "2026-08-13T02:40:09Z", "hours": 2.1411, "text": "published my extension !!!! after massive support and reach from the github release of my extension ( 70+ downloads just via github lmao ) i released it in chrome webstore now so do check it out and let me know what u think or if there is any bugs https://chromewebstore.google.com/detail/tecora/ihagfljacjognebfcmcmcbddjlonpifn"}, {"post_id": 33321, "ts": "2026-07-23T03:55:21Z", "hours": 1.6594, "text": "posted a demo comprising all the features to get feedback from people on x / reddit etc ( had to use clideo to compress 🥀🥀)"}, {"post_id": 32734, "ts": "2026-07-22T02:23:09Z", "hours": 5.9694, "text": "update 3 — usage · today · code · digests τ last update was three platforms. this one is where tecora stops being “a nicer chat list” and starts helping with the actual day what shipped real usage claude + chatgpt live quota from the open tab — % · reset · plan badge local estimates stay separate on purpose. gemini has no endpoint so we dont fake one projects chatgpt + claude project chats finally show up in the library today panel tasks (manual + auto from chats) · notes scratchpad · cached yesterday recap all on device draggable τ dock drag anywhere · Search / Today / Library · position remembered on-device digests chrome summarizer (gemini nano) + extractive fallback cached on resume cards · nothing uploaded dev layer code gallery + language-aware “code only” search jump-to-code in the palette zip exports code as real files copy-with-context · > prompt snippets secret warn-before-send (never blocks) why it mattered folders alone was organizer energy quota + today + digests + code is what makes the τ dock feel worth keeping open across all three ais still local first no backend · no cloud · no tecora account just a layer on the sites you already live in next up canvas / artifact gallery · less fragile folders/tags · native rename/delete more sooooooooooooooooooooooon"}, {"post_id": 31714, "ts": "2026-07-20T10:28:00Z", "hours": 8.9928, "text": "Tecora – update 2 — three platforms + a real mark ✨ heyyyyy back again last time tecora only really lived on claude. that was the plan on purpose. this update is the one where chatgpt and gemini actually show up too, and the extension stops lying about which site youre on what shipped all three big boys in the side panel claude · chatgpt · gemini same folders search export vibe — just not stuck on one site anymore gemini was being weird for a bit the in-page ctrl/cmd+k palette knew it was gemini the side panel still said “on claude” and showed claude chats 😭 fixed that — the panel now follows the actual tab youre looking at instead of whatever chat got upserted last also stopped patching fetch on gemini for no reason. it was just making google’s own csp noise look like our fault branding tecora mark is now lowercase greek tau τ floating overlay is a circle bottom right with a white outline a bit bigger so you can actually find it proper claude / chatgpt / gemini logos wired in too i felt like it was sick idk why lol physics memories hit me other polish palette doesnt fake “1d ago” on every gemini chat anymore (gemini doesnt give real timestamps so we just dropped the fake days) overlay + side panel finally agree on which platform youre on still local first nothing leaves your machine no backend no cloud just a layer on top of the sites you already live in why this update mattered ( earlier one was shi :/) i use all three ais at once so a claude-only tool was only solving like 1/3 of the chaos getting gemini + chatgpt in, and making the panel trust the tab youre on, is what makes tecora feel like one product instead of a claude plugin with hopes and dreams next up more hardening on export make folders / tags feel less fragile keep cleaning the rough edges from living inside someone elses spa maybe ship a build that doesnt need a console archaeology session to debug platform detection lol more so000oon"}, {"post_id": 28874, "ts": "2026-07-15T13:22:30Z", "hours": 2.3828, "text": "Tecora - - first look ^_____^ hey this is my first update on tecora tecora is a browser extension that sits on top of your ai and helps you actually manage your chats , personalize them , export them and many more the idea is simple local first nothing leaves your machine no backend no cloud just folders search and export on your own device ( probably expand further ) what works so far pulls your claude chat list into a side panel folders so you can file chats (like the hari folder in the screenshot) move chats into folders from the menu title search + ctrl/cmd+k palette on the page export chats to markdown single chat or a whole folder flat black and white ui nothing fancy why im building this i use ai a lot on browser like chatgpt , gemini etc i use many at once thus not able to manage context properly so i am building something which can helm me do this claude is first chatgpt and gemini come later once this core feels solid next up hardening export making sure folders stay reliable and cleaning up the rough edges from living inside someone elses spa more updates soon"}]...
|
Title: Tecora by @hariharann | Stardance
Devlogs: Title: Tecora by @hariharann | Stardance
Devlogs:
Tecora - - first look ^_____^ hey this is my first update on tecora tecora is a browser extension that sits on top of your ai and helps you actually manage your chats , personalize them , export them and many more the idea is simple local first nothing leaves your machine no backend no cloud just folders search and export on your own device ( probably expand further ) what works so far pulls your claude chat list into a side panel folders so you can file chats (like the hari folder in the screenshot) move chats into folders from the menu title search + ctrl/cmd+k palette on the page export chats to markdown single chat or a whole folder flat black and white ui nothing fancy why im building this i use ai a lot on browser like chatgpt , gemini etc i use many at once thus not able to manage context properly so i am building something which can helm me do this claude is first chatgpt and gemini come later once this core feels solid next up hardening export making sure folders stay reliable and cleaning up the rough edges from living inside someone elses spa more updates soon
Tecora – update 2 — three platforms + a real mark ✨ heyyyyy back again last time tecora only really lived on claude. that was the plan on purpose. this update is the one where chatgpt and gemini actually show up too, and the extension stops lying about which site youre on what shipped all three big boys in the side panel claude · chatgpt · gemini same folders search export vibe — just not stuck on one site anymore gemini was being weird for a bit the in-page ctrl/cmd+k palette knew it was gemini the side panel still said “on claude” and showed claude chats 😭 fixed that — the panel now follows the actual tab youre looking at instead of whatever chat got upserted last also stopped patching fetch on gemini for no reason. it was just making google’s own csp noise look like our fault branding tecora mark is now lowercase greek tau τ floating overlay is a circle bottom right with a white outline a bit bigger so you can actually find it proper claude / chatgpt / gemini logos wired in too i felt like it was sick idk why lol physics memories hit me other polish palette doesnt fake “1d ago” on every gemini chat anymore (gemini doesnt give real timestamps so we just dropped the fake days) overlay + side panel finally agree on which platform youre on still local first nothing leaves your machine no backend no cloud just a layer on top of the sites you already live in why this update mattered ( earlier one was shi :/) i use all three ais at once so a claude-only tool was only solving like 1/3 of the chaos getting gemini + chatgpt in, and making the panel trust the tab youre on, is what makes tecora feel like one product instead of a claude plugin with hopes and dreams next up more hardening on export make folders / tags feel less fragile keep cleaning the rough edges from living inside someone elses spa maybe ship a build that doesnt need a console archaeology session to debug platform detection lol more so000oon
update 3 — usage · today · code · digests τ last update was three platforms. this one is where tecora stops being “a nicer chat list” and starts helping with the actual day what shipped real usage claude + chatgpt live quota from the open tab — % · reset · plan badge local estimates stay separate on purpose. gemini has no endpoint so we dont fake one projects chatgpt + claude project chats finally show up in the library today panel tasks (manual + auto from chats) · notes scratchpad · cached yesterday recap all on device draggable τ dock drag anywhere · Search / Today / Library · position remembered on-device digests chrome summarizer (gemini nano) + extractive fallback cached on resume cards · nothing uploaded dev layer code gallery + language-aware “code only” search jump-to-code in the palette zip exports code as real files copy-with-context · > prompt snippets secret warn-before-send (never blocks) why it mattered folders alone was organizer energy quota + today + digests + code is what makes the τ dock feel worth keeping open across all three ais still local first no backend · no cloud · no tecora account just a layer on the sites you already live in next up canvas / artifact gallery · less fragile folders/tags · native rename/delete more sooooooooooooooooooooooon
posted a demo comprising all the features to get feedback from people on x / reddit etc ( had to use clideo to compress 🥀🥀)
published my extension !!!! after massive support and reach from the github release of my extension ( 70+ downloads just via github lmao ) i released it in chrome webstore now so do check it out and let me know what u think or if there is any bugs https://chromewebstore.google.com/detail/tecora/ihagfljacjognebfcmcmcbddjlonpifn
Ships:
Tecora — local Chrome extension that puts Claude, ChatGPT, and Gemini chats in one library. Problem: AI history is scattered across platforms/accounts. Searching, organizing, and exporting is painful. QoL: Cross-platform capture + folders/tags/resume in one place Ctrl/Cmd+K search over your chats Local export (md/json/zip) + privacy toggles — nothing leaves the device a lot more tbh Test: download the release zip → Load unpacked → open Claude/ChatGPT/Gemini logged in. https://github.com/nothariharan/Tecora/releases/tag/v0.1.0...
|
1793271033.891617
|
1793357433.891617
|
|
26937
|
LM399 Voltage Standard by @IndexJson | Stardance
|
IndexJson
|
0
|
21.13
|
0
|
[]
|
[{"post_id": 79772, "ts": "202 [{"post_id": 79772, "ts": "2026-10-15T10:38:09Z", "hours": 6.5269, "text": "Devlog #10 Overview I did a lot of work. And I can proudly say that software is finished! Now I can connect to it via USB and read all the stats: uptime, voltage on power rails and heater current. And of course I can manage all the calibration data and everything else. Interface I made it as a CLI-like interface. Code is well… it works. It’s not my best piece of code but if it works then don’t touch it. The problem is that I can’t really type in commands. Every line must be sent as continuous stream. Currently I do it by copying lines from a file and pasting them into picocom. I will write a proper helper program in c++ with a proper gui, but it’s out of scope for this project. Calibration In order to calibrate the device you must use following command: BEGIN CAL <hex number representing value of binary trim network> <voltage before calibration> <date of calibration> END It will automatically fill the uptime and temperature fields. Initial calibration is a little different. It is only meant to be done once, and does not contain fields like normal calibration, therefore normal cal still must be done after initial cal. BEGIN INIT_CAL <LM399 Serial Number> <Date of calibration> <LM399 Voltage> END It also has some other commands. INIT_FULL - resets calibration header to default settings CLEAR_STATS - clears uptime RESET - resets the MCU GET_INFO - returns the calibration header GET_INIT_CAL - returns initial calibration GET - returns basic stats (uptime, voltages on power rails, heater current, temp) returns calibration at specific index BEGIN GET_CAL <cal index> END"}, {"post_id": 76474, "ts": "2026-10-03T17:11:17Z", "hours": 1.83, "text": "Devlog #09 I implemented some cool things, so let’s look at them. printf I got tired of the old way of sending data via USB (via snprintf and CDC_Transmit_FS) so I made my own USB_printf. It works almost like a regular printf. By almost I mean it does not work with floats, but that’s limited by the environment. If I ran it on linux or windows (just the formatting part) it would work fine, but on STM32 it’s a little different. The function is just a wrapper for the old way, but with added timeout. It also checks whether any device is connected to usb, but it’s kinda weird. This way the function does not block the rest of the program when host is not connected. Here’s how it looks: uint8_t USB_printf ( const char * fmt , ...); So really nothing special, looks just like regular printf Saving uptime data Now via WriteHourStats I am able to write data about total uptime to eeprom. Inside the implementation I used something that I rarely use: union. Many people never even heard of it. Union makes all the inner properties share the same address. Example from the source code: union HourBuffer { uint8_t b8 [ 2 ]; uint16_t b16 ; } buffer ; No matter what I try to access, whether its b8[0] or b16 I get the same value. Well, not exactly. By accessing b8[0] i get lower part of b16, its the same as doing b16 & 0xff. Here I am writing data so I need to set b16 to a certain value. This also meant that it sets b8[0] and b[1]. This does not impact performance nor does it increase memory usage. The union is still just 16 bits. It can be done simpler but it is more readable and I wanted to use a union :) All it does is that it avoids weird pointer casting or shifting the value. Next Steps Now I’ll focus either on saving calibration data, that I started a little, or do something with the adc, like measuring temperature of the reference section, heater current and voltage on both +15V rails."}, {"post_id": 76142, "ts": "2026-10-02T14:12:27Z", "hours": 1.5047, "text": "Devlog #08 Overview It’s really coming together. I added support for devices that use I2C: TMP102 temperature sensor and M24C64 EEPROM. TMP102 I created a function in TMP102.c that reads the current temperature. It communicates with the IC using I2C. M24C64 I created a basic library in M24Cxx.c that can read and write data to the IC. It’s fully configurable and easy to use."}, {"post_id": 75947, "ts": "2026-10-01T18:04:06Z", "hours": 1.5739, "text": "Devlog #07 Overview I managed to get a basic program running on the STM32. It is my first time using such an MCU on a custom PCB, but it was quite easy. Also I am still learning the platform, everything is quite different from arduino. I like it though. USB It was the hardest part, and I spent most of my time on it. Besides issues with my code (that was expected since it’s my first project with USB on STM32) I had problems with my hardware. I spent quite a bit of time on it and solution was simple. I just had to connect it to my PC… Well, guess things work better when they’re actually connected, don’t they? Anyway, it works now. It logs it’s uptime every seconds. LED Also the RGB LED is red when the device is heating up and green when it’s ready to be used. Simple yet useful. I’ll have to adjust the heat up time to 15 minutes, but for development time it’s fine as is."}, {"post_id": 73925, "ts": "2026-09-26T10:44:33Z", "hours": 4.0886, "text": "Devlog #06 Overview I finished soldering the PCB! It looks awesome. I quickly tested some parts of it and it seems to be working. Soldering Most of it was easy to solder but some components weren’t easy at all. The 3V3 regulator was very annoying because of its small footprint. The same goes for I2C temperature sensor. I barely soldered them. That being said, I would still do the same in my next PCB. (I once used a 4-pad BGA sensor. At least I learned to not use those😅 ) Problems with MCU I encountered an issue with the circuit: reset line had no pullup and capacitor. This was a big problem since it could lead to power cycling. Fortunately I fixed it by using some copper wire and some passives. It isn’t the most pretty solution but it works. I still can’t believe I forgot to add those components. At least it’s fixed now. As for the analog part, everything seems to be just fine, still requires calibration though. Now I should focus on the software part of the project."}, {"post_id": 27645, "ts": "2026-07-13T12:25:42Z", "hours": 2.6331, "text": "Devlog #05 The design step is finished! I fully designed the PCB. The precision section is separated from the rest, PSU is far away and everything looks nice. Digital section I added an STM32, it tracks uptime, manages calibration data, measures temperature, measures heater current and all 15V rails. It can be connection to a PCB via USB. Silkscreen I left a few text fields on the silkscreen in order to write down initial LM399 voltage and other stuff: temperature during calibration, date and Serial Number."}, {"post_id": 26705, "ts": "2026-07-11T17:31:06Z", "hours": 0.7522, "text": "Devlog #04 — PCB — I added shielding for the precision section. All that’s left to do here is to route power, but I will do that after I route the PSU. — PSU — I added a 3.3V regulator for an STM32. It will use 1 16V transformer and make: 15V for reference, 15V for heater, 5V and 3.3V. — MCU — I am planning to add an STM32G431. To it I’ll connect and EEPROM that would store some calibration data, like date and drift."}, {"post_id": 25898, "ts": "2026-07-10T12:07:31Z", "hours": 1.1222, "text": "Devlog #03 I have mostly finished reference. I’ll tell you a few interesting things about it. — Schematic — Not much changed. I simply added footprints. But the thing I have to point out is the added filter. I decided to go with 50ohm resistor, 10uF aluminum cap and 100nF MLCC cap. — Stackup — I went with a 4-layer board. That allowed me to have a dedicated ground plane on second layer. It will improve the performance. — Layout — I tried to keep everything together, so all the parts will have similar temperature. Also the reference part will be on opposite side of the board compared to PSU. That would be all. It looks like I will soon finish this project, but that will take me just a little more time."}, {"post_id": 25407, "ts": "2026-07-09T17:44:36Z", "hours": 0.4003, "text": "Devlog #02 — Power Supply — I made schematic for power supply. To make 15V for the zener, I decided to go with LT3045 and 7018 for a pre-regulator. 7818 will help with noise and ripple. Also LT3045 cannot handle input voltage so 7818 steps it down first, then it is regulated to 15V. — Transformers — I decided to go with 2 DP-241-4-20 20V transformers. The datasheet states that it has low capacitive coupling, which is crucial for such precision standard. Higher capacitance between windings means higher common mode currents, that could potentially make measurement inaccurate. This specific type of transformer has been tested by Marco Reps in his Extreme Isolation video , with quite good result. This transformer has lower leakage that Fluke 732A. which is much better than any standard based on LM399. It is a 20V transformer, so after rectification there will no more than 28V - voltage drop on rectifiers without a load. That’s why pre-regulator is necessary, otherwise it would fry the main LDO. Also I used low leakage diodes as the rectifier. The heater supply isn’t too interesting - just a 7815. I am wondering whether I should switch to 16V transformers or not. I am not concerned about ref supply, since it draws very little current. What may be a problem is the heater supply, but i will have to do some more calculations."}, {"post_id": 25299, "ts": "2026-07-09T14:40:24Z", "hours": 0.6939, "text": "Devlog #01 I am making a precision 10V Standard based on LM399. — Reference schematic — I managed to make a schematic for the reference, gain stage and calibration resistors. The output can be calibrated by soldering required jumpers that connect trim resistors. I want to achieve sub 5ppm stability, so the resistors for the gain stage must be precise and stable. — Power supply — Now I should focus on power supply. The heater will be powered from a separate source. Another important thing about building the PSU is isolation. It has to be isolated from mains quite well so leakage currents will not mess up the measurements. Capacitance between transformer windings is a problem."}]...
|
Title: LM399 Voltage Standard by @IndexJson | Star Title: LM399 Voltage Standard by @IndexJson | Stardance
Devlogs:
Devlog #01 I am making a precision 10V Standard based on LM399. — Reference schematic — I managed to make a schematic for the reference, gain stage and calibration resistors. The output can be calibrated by soldering required jumpers that connect trim resistors. I want to achieve sub 5ppm stability, so the resistors for the gain stage must be precise and stable. — Power supply — Now I should focus on power supply. The heater will be powered from a separate source. Another important thing about building the PSU is isolation. It has to be isolated from mains quite well so leakage currents will not mess up the measurements. Capacitance between transformer windings is a problem.
Devlog #02 — Power Supply — I made schematic for power supply. To make 15V for the zener, I decided to go with LT3045 and 7018 for a pre-regulator. 7818 will help with noise and ripple. Also LT3045 cannot handle input voltage so 7818 steps it down first, then it is regulated to 15V. — Transformers — I decided to go with 2 DP-241-4-20 20V transformers. The datasheet states that it has low capacitive coupling, which is crucial for such precision standard. Higher capacitance between windings means higher common mode currents, that could potentially make measurement inaccurate. This specific type of transformer has been tested by Marco Reps in his Extreme Isolation video , with quite good result. This transformer has lower leakage that Fluke 732A. which is much better than any standard based on LM399. It is a 20V transformer, so after rectification there will no more than 28V - voltage drop on rectifiers without a load. That’s why pre-regulator is necessary, otherwise it would fry the main LDO. Also I used low leakage diodes as the rectifier. The heater supply isn’t too interesting - just a 7815. I am wondering whether I should switch to 16V transformers or not. I am not concerned about ref supply, since it draws very little current. What may be a problem is the heater supply, but i will have to do some more calculations.
Devlog #03 I have mostly finished reference. I’ll tell you a few interesting things about it. — Schematic — Not much changed. I simply added footprints. But the thing I have to point out is the added filter. I decided to go with 50ohm resistor, 10uF aluminum cap and 100nF MLCC cap. — Stackup — I went with a 4-layer board. That allowed me to have a dedicated ground plane on second layer. It will improve the performance. — Layout — I tried to keep everything together, so all the parts will have similar temperature. Also the reference part will be on opposite side of the board compared to PSU. That would be all. It looks like I will soon finish this project, but that will take me just a little more time.
Devlog #04 — PCB — I added shielding for the precision section. All that’s left to do here is to route power, but I will do that after I route the PSU. — PSU — I added a 3.3V regulator for an STM32. It will use 1 16V transformer and make: 15V for reference, 15V for heater, 5V and 3.3V. — MCU — I am planning to add an STM32G431. To it I’ll connect and EEPROM that would store some calibration data, like date and drift.
Devlog #05 The design step is finished! I fully designed the PCB. The precision section is separated from the rest, PSU is far away and everything looks nice. Digital section I added an STM32, it tracks uptime, manages calibration data, measures temperature, measures heater current and all 15V rails. It can be connection to a PCB via USB. Silkscreen I left a few text fields on the silkscreen in order to write down initial LM399 voltage and other stuff: temperature during calibration, date and Serial Number.
Devlog #06 Overview I finished soldering the PCB! It looks awesome. I quickly tested some parts of it and it seems to be working. Soldering Most of it was easy to solder but some components weren’t easy at all. The 3V3 regulator was very annoying because of its small footprint. The same goes for I2C temperature sensor. I barely soldered them. That being said, I would still do the same in my next PCB. (I once used a 4-pad BGA sensor. At least I learned to not use those😅 ) Problems with MCU I encountered an issue with the circuit: reset line had no pullup and capacitor. This was a big problem since it could lead to power cycling. Fortunately I fixed it by using some copper wire and some passives. It isn’t the most pretty solution but it works. I still can’t believe I forgot to add those components. At least it’s fixed now. As for the analog part, everything seems to be just fine, still requires calibration though. Now I should focus on the software part of the project.
Devlog #07 Overview I managed to get a basic program running on the STM32. It is my first time using such an MCU on a custom PCB, but it was quite easy. Also I am still learning the platform, everything is quite different from arduino. I like it though. USB It was the hardest part, and I spent most of my time on it. Besides issues with my code (that was expected since it’s my first project with USB on STM32) I had problems with my hardware. I spent quite a bit of time on it and solution was simple. I just had to connect it to my PC… Well, guess things work better when they’re actually connected, don’t they? Anyway, it works now. It logs it’s uptime every seconds. LED Also the RGB LED is red when the device is heating up and green when it’s ready to be used. Simple yet useful. I’ll have to adjust the heat up time to 15 minutes, but for development time it’s fine as is.
Devlog #08 Overview It’s really coming together. I added support for devices that use I2C: TMP102 temperature sensor and M24C64 EEPROM. TMP102 I created a function in TMP102.c that reads the current temperature. It communicates with the IC using I2C. M24C64 I created a basic library in M24Cxx.c that can read and write data to the IC. It’s fully configurable and easy to use.
Devlog #09 I implemented some cool things, so let’s look at them. printf I got tired of the old way of sending data via USB (via snprintf and CDC_Transmit_FS) so I made my own USB_printf. It works almost like a regular printf. By almost I mean it does not work with floats, but that’s limited by the environment. If I ran it on linux or windows (just the formatting part) it would work fine, but on STM32 it’s a little different. The function is just a wrapper for the old way, but with added timeout. It also checks whether any device is connected to usb, but it’s kinda weird. This way the function does not block the rest of the program when host is not connected. Here’s how it looks: uint8_t USB_printf ( const char * fmt , ...); So really nothing special, looks just like regular printf Saving uptime data Now via WriteHourStats I am able to write data about total uptime to eeprom. Inside the implementation I used something that I rarely use: union. Many people never even heard of it. Union makes all the inner properties share the same address. Example from the source code: union HourBuffer { uint8_t b8 [ 2 ]; uint16_t b16 ; } buffer ; No matter what I try to access, whether its b8[0] or b16 I get the same value. Well, not exactly. By accessing b8[0] i get lower part of b16, its the same as doing b16 & 0xff. Here I am writing data so I need to set b16 to a certain value. This also meant that it sets b8[0] and b[1]. This does not impact performance nor does it increase memory usage. The union is still just 16 bits. It can be done simpler but it is more readable and I wanted to use a union :) All it does is that it avoids weird pointer casting or shifting the value. Next Steps Now I’ll focus either on saving calibration data, that I started a little, or do something with the adc, like measuring temperature of the reference section, heater current and voltage on both +15V rails.
Devlog #10 Overview I did a lot of work. And I can proudly say that software is finished! Now I can connect to it via USB and read all the stats: uptime, voltage on power rails and heater current. And of course I can manage all the calibration data and everything else. Interface I made it as a CLI-like interface. Code is well… it works. It’s not my best piece of code but if it works then don’t touch it. The problem is that I can’t really type in commands. Every line must be sent as continuous stream. Currently I do it by copying lines from a file and pasting them into picocom. I will write a proper helper program in c++ with a proper gui, but it’s out of scope for this project. Calibration In order to calibrate the device you must use following command: BEGIN CAL <hex number representing value of binary trim network> <voltage before calibration> <date of calibration> END It will automatically fill the uptime and temperature fields. Initial calibration is a little different. It is only meant to be done once, and does not contain fields like normal calibration, therefore normal cal still must be done after initial cal. BEGIN INIT_CAL <LM399 Serial Number> <Date of calibration> <LM399 Voltage> END It also has some other commands. INIT_FULL - resets calibration header to default settings CLEAR_STATS - clears uptime RESET - resets the MCU GET_INFO - returns the calibration header GET_INIT_CAL - returns initial calibration GET - returns basic stats (uptime, voltages on power rails, heater current, temp) returns calibration at specific index BEGIN GET_CAL <cal index> END...
|
1792788803.2876952
|
1793393603.2876952
|
|
65471
|
stud.io by @fraunzen07 | Stardance
|
fraunzen07
|
0
|
21.1
|
0
|
[]
|
[{"post_id": 75501, "ts": "202 [{"post_id": 75501, "ts": "2026-09-30T09:16:01Z", "hours": 9.5933, "text": "Improved notes generating section, added all the functions i wanted in the site, still got a lot of problems to fix but i am quite happy on how it came out!"}, {"post_id": 74383, "ts": "2026-09-27T09:04:37Z", "hours": 11.5019, "text": "This is the first version of the app, i worked a lot on this, and now it has all the basic functions i wanted. Anyway it still works really bad, so i will spend the next hours working on the layout"}]...
|
Title: stud.io by @fraunzen07 | Stardance
Devlogs Title: stud.io by @fraunzen07 | Stardance
Devlogs:
This is the first version of the app, i worked a lot on this, and now it has all the basic functions i wanted. Anyway it still works really bad, so i will spend the next hours working on the layout
Improved notes generating section, added all the functions i wanted in the site, still got a lot of problems to fix but i am quite happy on how it came out!...
|
1793087543.6393878
|
1793692343.6393878
|
|
44201
|
FFACore by @Polokalap | Stardance
|
Polokalap
|
1
|
21.09
|
135
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T15:21:54Z", "hours": 17.0, "multiplier": 9.06, "payout": 135, "blessing": "neutral", "text": "Minecraft FFA Plugin This is a Minecraft FFA plugin designed to make it easy to create and manage arenas where players can fight each other. The plugin comes with a variety of configurable options, including things like: Block-breaking permissions Arena regeneration times Arena-specific settings And other options to help customize how each arena works The goal was to keep the plugin as simple and minimal as possible. You can use it as the foundation for a complete FFA server, similar to servers like Stray.gg, especially when combined with NPC plugins and other server-side tools. I intentionally kept the plugin lightweight and didn’t add things like custom death messages. The idea is to provide the core functionality without adding unnecessary features or complexity. Requirements Server software: Paper 1.21.11 Java: Java 25 recommended You can get Paper from the official website: PaperMC Java versions lower than 25 should work in theory, although Java 25 is the version I personally use and recommend. Don’t want to set up a server? Watch this video! Yes I also hate AI, but I wanted to make this as easy to read and understand as possible. Unlike other people, I actually read the stuff it gave me.", "repo": "https://github.com/Polokalap/FFACore", "demo": "https://github.com/Polokalap/FFACore/releases/tag/v1.0"}]...
|
[{"post_id": 57510, "ts": "202 [{"post_id": 57510, "ts": "2026-08-29T17:55:26Z", "hours": 3.1914, "text": "Added filters :o Added a filter system that basically doesn’t allow the users to break, place or craft certain blocks."}, {"post_id": 53256, "ts": "2026-08-23T18:15:24Z", "hours": 0.8972, "text": "Message to the reviewer (image unreleated) EDIT!!!!!! In slack, they told this should be fine!!!"}, {"post_id": 44910, "ts": "2026-08-10T23:42:54Z", "hours": 0.5347, "text": "Cleaning up some stuff, edited readme"}, {"post_id": 44886, "ts": "2026-08-10T22:38:16Z", "hours": 3.6814, "text": "Added Combat System, Warps and Item Dropping option! The latest version includes a combat system. Here’s how it works: If a user is in an arena and attacks/is attacked by another player, they get tagged and cannot log on until it expires . The tag gets set to 30 seconds by default. This helps prevent combat logging , which is basically leaving from a fight to save your K/D ratio or items. If you log off while tagged, you die . Drop option You can now enable or disable if items should be dropped after death. Warps Users can now type /warp to warp to an arena. They cannot do that in combat to prevent combat logging."}, {"post_id": 42273, "ts": "2026-08-06T22:04:47Z", "hours": 0.4386, "text": "Added more options to arena editing Now you can access the arena adding options to the arena editing menu!"}, {"post_id": 42242, "ts": "2026-08-06T21:11:43Z", "hours": 0.2536, "text": "Added arena system! An arena system has been added that allows you to make arenas with: Block Break/Place permissions Block decay time Explosion Damage/Block breaking Map regeneration time When creating the arena, you need to select 2 points with a wand you get from the /selection-wand command. Then, you can type the /add-arena <name> command, that opens the menu you can view in the first picture. When you are done configuring the arena, you can click the Confirm button which saves the map as a schematic and creates the arena. If you want to edit the map, or you simply just want to regenerate it, you can enter the /arenas <name> command, which brings up the menu seen in the third image, or you can just simply type /arenas to open the menu seen in the second image, where you can browse the arenas. When editing an arena, currently you can only reset it, delete it and rename it. In a future update, I’ll add the other settings too. If you are wondering, yes this was written by me. I just use a frick ton of markdown, and like to format my messages. AI wasn’t used in this message at all."}, {"post_id": 42153, "ts": "2026-08-06T19:18:41Z", "hours": 11.6236, "text": "Still creating stuff, don’t worry! A big devlog will be created soon of how stuff works. I am just creating an arena system and don’t want to lose hours on it."}]...
|
Title: FFACore by @Polokalap | Stardance
Devlogs: Title: FFACore by @Polokalap | Stardance
Devlogs:
Still creating stuff, don’t worry! A big devlog will be created soon of how stuff works. I am just creating an arena system and don’t want to lose hours on it.
Added arena system! An arena system has been added that allows you to make arenas with: Block Break/Place permissions Block decay time Explosion Damage/Block breaking Map regeneration time When creating the arena, you need to select 2 points with a wand you get from the /selection-wand command. Then, you can type the /add-arena <name> command, that opens the menu you can view in the first picture. When you are done configuring the arena, you can click the Confirm button which saves the map as a schematic and creates the arena. If you want to edit the map, or you simply just want to regenerate it, you can enter the /arenas <name> command, which brings up the menu seen in the third image, or you can just simply type /arenas to open the menu seen in the second image, where you can browse the arenas. When editing an arena, currently you can only reset it, delete it and rename it. In a future update, I’ll add the other settings too. If you are wondering, yes this was written by me. I just use a frick ton of markdown, and like to format my messages. AI wasn’t used in this message at all.
Added more options to arena editing Now you can access the arena adding options to the arena editing menu!
Added Combat System, Warps and Item Dropping option! The latest version includes a combat system. Here’s how it works: If a user is in an arena and attacks/is attacked by another player, they get tagged and cannot log on until it expires . The tag gets set to 30 seconds by default. This helps prevent combat logging , which is basically leaving from a fight to save your K/D ratio or items. If you log off while tagged, you die . Drop option You can now enable or disable if items should be dropped after death. Warps Users can now type /warp to warp to an arena. They cannot do that in combat to prevent combat logging.
Cleaning up some stuff, edited readme
Message to the reviewer (image unreleated) EDIT!!!!!! In slack, they told this should be fine!!!
Added filters :o Added a filter system that basically doesn’t allow the users to break, place or craft certain blocks.
Ships:
Minecraft FFA Plugin This is a Minecraft FFA plugin designed to make it easy to create and manage arenas where players can fight each other. The plugin comes with a variety of configurable options, including things like: Block-breaking permissions Arena regeneration times Arena-specific settings And other options to help customize how each arena works The goal was to keep the plugin as simple and minimal as possible. You can use it as the foundation for a complete FFA server, similar to servers like Stray.gg, especially when combined with NPC plugins and other server-side tools. I intentionally kept the plugin lightweight and didn’t add things like custom death messages. The idea is to provide the core functionality without adding unnecessary features or complexity. Requirements Server software: Paper 1.21.11 Java: Java 25 recommended You can get Paper from the official website: PaperMC Java versions lower than 25 should work in theory, although Java 25 is the version I personally use and recommend. Don’t want to set up a server? Watch this video! Yes I also hate AI, but I wanted to make this as easy to read and understand as possible. Unlike other people, I actually read the stuff it gave me....
|
1793134167.1384165
|
1793220567.1384165
|
|
57418
|
skysynth @ svelte by @manystarsapart | Stardance
|
manystarsapart
|
0
|
21.08
|
0
|
[]
|
[{"post_id": 72082, "ts": "202 [{"post_id": 72082, "ts": "2026-09-22T04:06:56Z", "hours": 6.0558, "text": "hey! just made the settings menu & added the settings preset feature. you can now quickswap into preset preferences while playing! here’s a demo: あいつら全員同窓会 (Aitsura Zenin Dousoukai) / inside joke by ZUTOMAYO."}, {"post_id": 63380, "ts": "2026-09-07T05:23:13Z", "hours": 4.4556, "text": "progress: animations animations animations! added animation when a note is played. you can also play the notes via touchscreen now! more optimisations to come later. try it yourself: https://www.beta.skysynth.space/player"}, {"post_id": 63036, "ts": "2026-09-06T16:35:37Z", "hours": 2.5722, "text": "audio engine should be fully working! here’s a demo clip of me playing MILABO - zutomayo. fully on my laptop keyboard. try it out yourself! http://www.beta.skysynth.space/player (” \" to switch between key release modes)"}, {"post_id": 61340, "ts": "2026-09-04T06:37:20Z", "hours": 0.5128, "text": "successfully deployed! i was just missing curly brackets. check it out at: http://www.beta.skysynth.space/player warning: only devices with a keyboard can interact with the page. for now."}, {"post_id": 61329, "ts": "2026-09-04T05:48:34Z", "hours": 1.4903, "text": "finished the prototype for the core audio logic! you can only play one instrument for now, but all the features are present. i will deploy it soon. there is absolutely ZERO UI/UX though. it is just an empty html with full capabilities of playing an instrument. if it helps, try opening the console."}, {"post_id": 61127, "ts": "2026-09-03T21:33:21Z", "hours": 1.7975, "text": "LOL i rewrote my logic for the handler because it was starting to feel like my old projects again. meaning they would just be one big singleton thing dependent on one another. now i have a single builder function that can be reused elsewhere. lets hope this works."}, {"post_id": 60727, "ts": "2026-09-03T09:08:13Z", "hours": 3.2022, "text": "just finished the core logic for keypress & MIDI note derivation (+ a whole other bunch of misc helper / handler code)! we are one step closer to playing music. i added many additional functionalities too."}, {"post_id": 60106, "ts": "2026-09-02T08:07:41Z", "hours": 0.9903, "text": "set up a basic file structure. let’s keep this going"}]...
|
Title: skysynth @ svelte by @manystarsapart | Star Title: skysynth @ svelte by @manystarsapart | Stardance
Devlogs:
set up a basic file structure. let’s keep this going
just finished the core logic for keypress & MIDI note derivation (+ a whole other bunch of misc helper / handler code)! we are one step closer to playing music. i added many additional functionalities too.
LOL i rewrote my logic for the handler because it was starting to feel like my old projects again. meaning they would just be one big singleton thing dependent on one another. now i have a single builder function that can be reused elsewhere. lets hope this works.
finished the prototype for the core audio logic! you can only play one instrument for now, but all the features are present. i will deploy it soon. there is absolutely ZERO UI/UX though. it is just an empty html with full capabilities of playing an instrument. if it helps, try opening the console.
successfully deployed! i was just missing curly brackets. check it out at: http://www.beta.skysynth.space/player warning: only devices with a keyboard can interact with the page. for now.
audio engine should be fully working! here’s a demo clip of me playing MILABO - zutomayo. fully on my laptop keyboard. try it out yourself! http://www.beta.skysynth.space/player (” " to switch between key release modes)
progress: animations animations animations! added animation when a note is played. you can also play the notes via touchscreen now! more optimisations to come later. try it yourself: https://www.beta.skysynth.space/player
hey! just made the settings menu & added the settings preset feature. you can now quickswap into preset preferences while playing! here’s a demo: あいつら全員同窓会 (Aitsura Zenin Dousoukai) / inside joke by ZUTOMAYO....
|
1792705910.7488558
|
1793310710.7488558
|
|
67964
|
POCKET-PLANET by @RIOJJIXX889 | Stardance
|
RIOJJIXX889
|
1
|
21.08
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-21T11:06:36Z", "hours": 20.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "SO HI MY NAME IS RIO AND THE PROJECT I MADE WILL MAKE YOU GUYS AMAZED THE CHALLENGING THING WAS FIXING BUGS AND SO MANY ERRROS BUT I USED AI BUT ALSO TRIED MY BEST.. I LOVED THIS 20 HOUR JOURNEY THANKS TO HACKCLUB FOR THIS OPPURTUNITY… ALSO I THING YOU WILL LOVE IT GIVE A GOOD RATING …………… BYEEEEEEEEEEE…", "repo": "https://github.com/FALCON-LAB889/pocket-planet", "demo": "https://falcon-lab889.github.io/pocket-planet/"}]...
|
[{"post_id": 83222, "ts": "202 [{"post_id": 83222, "ts": "2026-10-27T12:06:56Z", "hours": 1.0797, "text": "HEY GUYS SO MY PROJECT WAS SAID TO CHANGES REQUESTED because i used more ai i was very sad but i managed to make another web but i deleted the iss and telescope whch had complex code written by ai ………. thank you"}, {"post_id": 81452, "ts": "2026-10-21T10:38:20Z", "hours": 0.2694, "text": "so today is the last …day and i added so many things such as now we can change the color of the moon also its size orbit radius etc….. also the best part is that i also added a fantastic item such as we can now add and atmosphere layer to the planet also we can adjust it it took long time making it with java and the html and css … its great also for a fun play i mad one thing such as you can launch meteorites to plane and it will make craters and shatter ……………. also i had made that we can adjust the size of the meteorite ……. next thing is allowing the atmosphere we can also apply storms with more and more density also you can expand the view of your planet …. finally i finished with making it a little more premium looking and now you can download your universe backup ………… check it out … i also fixed so many bugs suchs=as not putting colons and spelling etcc Used Three.js for 3D effects (atmosphere, meteors). Used JavaScript + HTML/CSS for UI and logic. Fixed bugs by testing each feature carefully….. .. give a good rate byeee ………….. also thank you for the oppurtunity by HACKCLUB/STARDANCE EVENT …. IT WAS A GREAT JOURNEY OF 20 HOURS"}, {"post_id": 81446, "ts": "2026-10-21T09:52:40Z", "hours": 0.3111, "text": "soo, i have used trackball control for the viewing of the planets in the customization panel also used three.js for the 3d sphere for the planet it was little bit difficult but done also i solved so many issues about the three.js there were so many errors doing this it helped me study and understand…………// next i will make improvement in downloading the universe backup moon size etc…"}, {"post_id": 81442, "ts": "2026-10-21T09:29:26Z", "hours": 4.5208, "text": "so i bassicaly started with nothing from scratch but now i have made a good orbit for my planet and the 3 planets and the designs are really great …… i have taken the pic of ISS from nasa for the iss video play"}, {"post_id": 80441, "ts": "2026-10-17T17:07:12Z", "hours": 3.3969, "text": "so today i added clouds storms and moon colour"}, {"post_id": 79065, "ts": "2026-10-12T15:33:26Z", "hours": 0.8958, "text": "so i just added more items and entertainment like launch a meteorite to the planet with differernt sizes meteor also i have polished it more"}, {"post_id": 78723, "ts": "2026-10-11T12:28:38Z", "hours": 2.5628, "text": "I JUST ATTACHED AN ISS AND YOU CAN SEE LIVE VISUALS OF THIS ……….. ALSO THE HUBBLE TELESCOPE ……….. THI IS AMAZING HUBBLE TELESCOPE SHOWS THE PICS TOOK BY IT"}, {"post_id": 78121, "ts": "2026-10-09T17:02:14Z", "hours": 1.3864, "text": "so today i made my writings into a better and amazing view also the background i had made amazing…………//"}, {"post_id": 77610, "ts": "2026-10-07T16:44:13Z", "hours": 2.0111, "text": "so i have made an drastic changes in my pocket-planet .. i think you will love it . so basically for more beauty and professionality i used THREE.JS for 3d view of the planets and now i made a drastic change the adding of rings by making it 3d also and3 types of rings …. also next is gona be the planet 3 types of planet …… pls support me …………. thank you ……..//"}, {"post_id": 77072, "ts": "2026-10-05T15:32:33Z", "hours": 4.7622, "text": "pocket-planet. its a web were you can make your own planets adding rings moons changing colors etc… and change the name and save as your own planet…. A PLANET THATS YOURS"}]...
|
Title: POCKET-PLANET by @RIOJJIXX889 | Stardance
Title: POCKET-PLANET by @RIOJJIXX889 | Stardance
Devlogs:
pocket-planet. its a web were you can make your own planets adding rings moons changing colors etc… and change the name and save as your own planet…. A PLANET THATS YOURS
so i have made an drastic changes in my pocket-planet .. i think you will love it . so basically for more beauty and professionality i used THREE.JS for 3d view of the planets and now i made a drastic change the adding of rings by making it 3d also and3 types of rings …. also next is gona be the planet 3 types of planet …… pls support me …………. thank you ……..//
so today i made my writings into a better and amazing view also the background i had made amazing…………//
I JUST ATTACHED AN ISS AND YOU CAN SEE LIVE VISUALS OF THIS ……….. ALSO THE HUBBLE TELESCOPE ……….. THI IS AMAZING HUBBLE TELESCOPE SHOWS THE PICS TOOK BY IT
so i just added more items and entertainment like launch a meteorite to the planet with differernt sizes meteor also i have polished it more
so today i added clouds storms and moon colour
so i bassicaly started with nothing from scratch but now i have made a good orbit for my planet and the 3 planets and the designs are really great …… i have taken the pic of ISS from nasa for the iss video play
soo, i have used trackball control for the viewing of the planets in the customization panel also used three.js for the 3d sphere for the planet it was little bit difficult but done also i solved so many issues about the three.js there were so many errors doing this it helped me study and understand…………// next i will make improvement in downloading the universe backup moon size etc…
so today is the last …day and i added so many things such as now we can change the color of the moon also its size orbit radius etc….. also the best part is that i also added a fantastic item such as we can now add and atmosphere layer to the planet also we can adjust it it took long time making it with java and the html and css … its great also for a fun play i mad one thing such as you can launch meteorites to plane and it will make craters and shatter ……………. also i had made that we can adjust the size of the meteorite ……. next thing is allowing the atmosphere we can also apply storms with more and more density also you can expand the view of your planet …. finally i finished with making it a little more premium looking and now you can download your universe backup ………… check it out … i also fixed so many bugs suchs=as not putting colons and spelling etcc Used Three.js for 3D effects (atmosphere, meteors). Used JavaScript + HTML/CSS for UI and logic. Fixed bugs by testing each feature carefully….. .. give a good rate byeee ………….. also thank you for the oppurtunity by HACKCLUB/STARDANCE EVENT …. IT WAS A GREAT JOURNEY OF 20 HOURS
HEY GUYS SO MY PROJECT WAS SAID TO CHANGES REQUESTED because i used more ai i was very sad but i managed to make another web but i deleted the iss and telescope whch had complex code written by ai ………. thank you
Ships:
SO HI MY NAME IS RIO AND THE PROJECT I MADE WILL MAKE YOU GUYS AMAZED THE CHALLENGING THING WAS FIXING BUGS AND SO MANY ERRROS BUT I USED AI BUT ALSO TRIED MY BEST.. I LOVED THIS 20 HOUR JOURNEY THANKS TO HACKCLUB FOR THIS OPPURTUNITY… ALSO I THING YOU WILL LOVE IT GIVE A GOOD RATING …………… BYEEEEEEEEEEE…...
|
1793116267.0899236
|
1793202667.0899236
|
|
33295
|
Siamese Network by @Clark | Stardance
|
Clark
|
0
|
21.06
|
0
|
[]
|
[{"post_id": 32816, "ts": "202 [{"post_id": 32816, "ts": "2026-07-22T06:33:00Z", "hours": 10.2358, "text": "These past 10 hours of coding have been absolute hell. I have tried to make images with the same label closer in the embedding space, but then everything else broke. After about a week, I just gave up on it entirely and accepted that it was only going to aim for differentiating images, not caring about the image labels. After making this change(a very saddening one, pouring all that time down the drain), I was able to spike model performance greatly. I have practically come full circle, with my model hardly different from what it was at my last devlog, but I have learnt some valuable stuff. I have improved the loss function, giving a much cleaner way to compare embedding vectors and calculate their (dis)similarity. Additionally, I have created a few pieces of code that allow me to visualise various aspects of my model. All in all, I wouldn’t consider this time to be a total waste, as I have learned some valuable stuff. If you want to take a look at the various parts I have added, check out the images attached below and read my explanation of what they do: The first image shows all the kernels in the first convolutional layer of my network. The second image shows a tree with all the operations applied to the images, converting them from an image to an embedding vector. The third image shows the process of my model being trained"}, {"post_id": 27938, "ts": "2026-07-13T21:33:58Z", "hours": 4.1658, "text": "I have made a couple of changes to the embedding of this network. Firstly, I have increased the embedding dimension from 16 to 128, allowing it to capture much more information about the image. I have added a couple of new files to my Github repo, allowing me to view the corrupted images, run the model already trained and have started work on a classifier based on my Siamese Network. Additionally, I realised what was causing my model to be terrible at predicting two similar images: I had accidentally weighted it to focus on different images at a 10x higher rate than similar images. With these out of the way, I have been able to lower the error rate of my model drastically. Another thing I have done is change how the corruption function works. Previously, it would normalise the RGB colours to 0-1 by simply dividing by a factor. This caused the images to get darker, lowering my model’s performance. By switching this to a sigmoidal function, I was able to achieve much better results. I also changed the different img target to rely on the labels. If the two images had the same label but were different, they would be related with a dot product of about 0.9, drastically improving my model’s organizational abilities. By which I mean that the embeddings for similar concepts are themselves similar. Seems obvious, but I forgot to do it until this point."}, {"post_id": 27479, "ts": "2026-07-13T02:27:57Z", "hours": 2.5186, "text": "I have been working on an improved optimization algorithm for my Siamese network. I have done this using a dot matrix. What this means is that I have taken the pairwise dot product between the embeddings of two images. These two images are either the corrupted and non-corrupted versions of the same image, or two different images. The two different images will be referred to as Set A, and the two same images will be referred to as Set B. Set A, the cosine similarity matrix(same image) in the image below, shows very promising results, matching up with what is hoped. A majority of the image is random noise, representing a low correlation between different parts of the embedding vector. This is intended because I want to maximize entropy, meaning it can store the most information in each part of the embedding vector. The main diagonal of Set A(the one going from the top left to the bottom right) shows a very high value. This means that the embedding vectors of the corrupted and non-corrupted versions of an image are very similar. Set B is very noisy, meaning that the embedding vectors of unrelated images are very dissimilar, exactly what I want. These results are very promising, allowing me to work on interesting uses of this model, which will be the focus of my next few devlogs."}, {"post_id": 27042, "ts": "2026-07-12T07:02:21Z", "hours": 2.1236, "text": "I have added an optimization function to my Siamese Network! For some information on these images, the difference error graph(the one on the right) is measuring the difference between the high-dimensional representations, or embeddings of different images. I want this graph to be as high as possible, meaning each image gets its own unique embedding. The graph on the left, however, measures the difference in embeddings between corrupted and uncorrupted versions of the *same * image. This should be as low as possible, meaning corrupted and uncorrupted versions of an image are converted into very similar embeddings. Unfortunately, it is struggling to make the embedding of different images distinct, shown through a very low difference. This may seem bad, but it is working EXACTLY AS EXPECTED. In many papers on these types of neural networks, cosine similarity is used to reduce feature collapse. I will get into cosine similarity in a later devlog, but for now, I will explain feature collapse. Feature collapse is a phenomenon in neural networks in which all outputs of a network collapse to a single value. This causes the network to always spew the same output value, regardless of the input. In my network, this would show up as a very low similarity error and a very low difference. This is exactly what is shown in the image below. Therefore, I am on the right track!"}, {"post_id": 26851, "ts": "2026-07-11T21:28:16Z", "hours": 2.02, "text": "Hey there! I have been working on a Siamese network, and this is my first devlog. A Siamese network is a type of neural network akin to an advanced compression algorithm. It works by converting an image into an abstract list of numbers, known as an embedding. It teaches the network to make these abstract numbers as close as possible for corrupted and uncorrupted versions of the same image, and as different as possible for different images. At the moment, I have just been working on the corruption algorithm, which I have got working. Siamese Networks were some of the earliest neural networks applied to real problems, that of recognising handwritten digits for an ATM."}]...
|
Title: Siamese Network by @Clark | Stardance
Devl Title: Siamese Network by @Clark | Stardance
Devlogs:
Hey there! I have been working on a Siamese network, and this is my first devlog. A Siamese network is a type of neural network akin to an advanced compression algorithm. It works by converting an image into an abstract list of numbers, known as an embedding. It teaches the network to make these abstract numbers as close as possible for corrupted and uncorrupted versions of the same image, and as different as possible for different images. At the moment, I have just been working on the corruption algorithm, which I have got working. Siamese Networks were some of the earliest neural networks applied to real problems, that of recognising handwritten digits for an ATM.
I have added an optimization function to my Siamese Network! For some information on these images, the difference error graph(the one on the right) is measuring the difference between the high-dimensional representations, or embeddings of different images. I want this graph to be as high as possible, meaning each image gets its own unique embedding. The graph on the left, however, measures the difference in embeddings between corrupted and uncorrupted versions of the *same * image. This should be as low as possible, meaning corrupted and uncorrupted versions of an image are converted into very similar embeddings. Unfortunately, it is struggling to make the embedding of different images distinct, shown through a very low difference. This may seem bad, but it is working EXACTLY AS EXPECTED. In many papers on these types of neural networks, cosine similarity is used to reduce feature collapse. I will get into cosine similarity in a later devlog, but for now, I will explain feature collapse. Feature collapse is a phenomenon in neural networks in which all outputs of a network collapse to a single value. This causes the network to always spew the same output value, regardless of the input. In my network, this would show up as a very low similarity error and a very low difference. This is exactly what is shown in the image below. Therefore, I am on the right track!
I have been working on an improved optimization algorithm for my Siamese network. I have done this using a dot matrix. What this means is that I have taken the pairwise dot product between the embeddings of two images. These two images are either the corrupted and non-corrupted versions of the same image, or two different images. The two different images will be referred to as Set A, and the two same images will be referred to as Set B. Set A, the cosine similarity matrix(same image) in the image below, shows very promising results, matching up with what is hoped. A majority of the image is random noise, representing a low correlation between different parts of the embedding vector. This is intended because I want to maximize entropy, meaning it can store the most information in each part of the embedding vector. The main diagonal of Set A(the one going from the top left to the bottom right) shows a very high value. This means that the embedding vectors of the corrupted and non-corrupted versions of an image are very similar. Set B is very noisy, meaning that the embedding vectors of unrelated images are very dissimilar, exactly what I want. These results are very promising, allowing me to work on interesting uses of this model, which will be the focus of my next few devlogs.
I have made a couple of changes to the embedding of this network. Firstly, I have increased the embedding dimension from 16 to 128, allowing it to capture much more information about the image. I have added a couple of new files to my Github repo, allowing me to view the corrupted images, run the model already trained and have started work on a classifier based on my Siamese Network. Additionally, I realised what was causing my model to be terrible at predicting two similar images: I had accidentally weighted it to focus on different images at a 10x higher rate than similar images. With these out of the way, I have been able to lower the error rate of my model drastically. Another thing I have done is change how the corruption function works. Previously, it would normalise the RGB colours to 0-1 by simply dividing by a factor. This caused the images to get darker, lowering my model’s performance. By switching this to a sigmoidal function, I was able to achieve much better results. I also changed the different img target to rely on the labels. If the two images had the same label but were different, they would be related with a dot product of about 0.9, drastically improving my model’s organizational abilities. By which I mean that the embeddings for similar concepts are themselves similar. Seems obvious, but I forgot to do it until this point.
These past 10 hours of coding have been absolute hell. I have tried to make images with the same label closer in the embedding space, but then everything else broke. After about a week, I just gave up on it entirely and accepted that it was only going to aim for differentiating images, not caring about the image labels. After making this change(a very saddening one, pouring all that time down the drain), I was able to spike model performance greatly. I have practically come full circle, with my model hardly different from what it was at my last devlog, but I have learnt some valuable stuff. I have improved the loss function, giving a much cleaner way to compare embedding vectors and calculate their (dis)similarity. Additionally, I have created a few pieces of code that allow me to visualise various aspects of my model. All in all, I wouldn’t consider this time to be a total waste, as I have learned some valuable stuff. If you want to take a look at the various parts I have added, check out the images attached below and read my explanation of what they do: The first image shows all the kernels in the first convolutional layer of my network. The second image shows a tree with all the operations applied to the images, converting them from an image to an embedding vector. The third image shows the process of my model being trained...
|
1793242539.5882523
|
1793847339.5882523
|
|
33484
|
Learning FRC Stuff by @jin6135 | Stardance
|
jin6135
|
0
|
21.04
|
0
|
[]
|
[{"post_id": 51736, "ts": "202 [{"post_id": 51736, "ts": "2026-08-21T15:54:34Z", "hours": 6.0442, "text": "Devlog 1 - Stage 1C (Exercises 1 & 2) On the left, I created a Flat Intake powered by a NEO Brushless Motor . The gear ratio for the intake is 30:12 , which means that the output torque is 30/12 or approximately 2.5x more, while the output speed is 12/30 , so 2.5x slower. The biggest challenge for this project was that a lot of the featurescripts have been updated, which made it overall harder to use since I would always have to be finding loopholes to achieve the final result. Additionally, at the beginning of the project, I set one of the mate connectors incorrectly (it needed to be located 4 inches in the x-direction from the origin, but I placed the mate connector and offset by that specific distance from the edge of the Origin Cube ), messing up all the dimensions and requiring me to re-do the entire intake subsystem. On the right, I created some Dead Axle Rollers, which were powered by a Kraken X60 Brushless Motor on the right. I connected the motor to the pulleys by having a belt of HTD 5mm , 9mm width for pulleys with 12 teeth ( driving ) and 24 teeth ( driven ), resulting in the gear ratio 24:12 . This means that you would be exchanging for double the output torque and half the output speed in an ideal world. I also have another belt on the left side of the rollers connecting the first to the second, and an identical one located on the right side connecting the second roller to the third. Next Steps: Stage 1C Exercise 3: Shooter Mechanism"}, {"post_id": 47263, "ts": "2026-08-15T02:30:04Z", "hours": 6.8767, "text": "Devlog - Section 1B This section, I learned about Power Transmission in FRC! I learned about speed, torque, and mechanical advantage concepts in FRC, as well as various featurescripts in the FRCDesign library (including Belt & Chain Gen , Robot Shaft , and Part Lighten using pocketing sketches. I also learned about belts/chains and how to use various dimensions in OnShape to create models of them effectively (including using the Origin Cube). In Section 1B, I created three different types of gearboxes, utilizing gear ratios to exchange torque for speed (and vice versa), and assembling various parts together."}, {"post_id": 32021, "ts": "2026-07-20T21:48:34Z", "hours": 3.9078, "text": "Devlog 2 - Section 1A I finished Section 1A, where I completed the Plates and Assemblies subsections! This past week, I learned about how I could create sketches and use a variety of features to make my work easier, such as centre point arc, mirror, use/project, tangent, coincident, etc. I used some of them (like the use/project or centre point arc to create gussets). I also learned about how to create assemblies, add elements to them (either through Insert or through the FRCDesign Inserter), and assemble everything (replicate, fastened mate, etc.) On to Section 1B!"}, {"post_id": 29784, "ts": "2026-07-16T21:46:59Z", "hours": 4.2072, "text": "Devlog 1 - Section 1A This past week, I focused on CADing for the FIRST Robotics Competition, using Onshape! My team, Arctos 6135, is apparently shifting to Onshape, so this is a good opportunity for me to learn the concepts while everyone is transitioning to this new platform. I started using FRCDesign.org to teach me the various design concepts, and I am proud to say that I have finished 1A! In Section 1A, I learned about various box tubes (1x1, 1x2), how to CAD them in Onshape, and started learning basic sketching (such as using features like the various rectangles, coincident/tangent, dimension, projection, etc.). I also learned how to create a drivetrain frame and add either boxes (1.5) or triangles (1.6) on the frame. The attached image shows my drivetrain frame with a triangle, to complete Exercise 6 in 1A:"}]...
|
Title: Learning FRC Stuff by @jin6135 | Stardance
Title: Learning FRC Stuff by @jin6135 | Stardance
Devlogs:
Devlog 1 - Section 1A This past week, I focused on CADing for the FIRST Robotics Competition, using Onshape! My team, Arctos 6135, is apparently shifting to Onshape, so this is a good opportunity for me to learn the concepts while everyone is transitioning to this new platform. I started using FRCDesign.org to teach me the various design concepts, and I am proud to say that I have finished 1A! In Section 1A, I learned about various box tubes (1x1, 1x2), how to CAD them in Onshape, and started learning basic sketching (such as using features like the various rectangles, coincident/tangent, dimension, projection, etc.). I also learned how to create a drivetrain frame and add either boxes (1.5) or triangles (1.6) on the frame. The attached image shows my drivetrain frame with a triangle, to complete Exercise 6 in 1A:
Devlog 2 - Section 1A I finished Section 1A, where I completed the Plates and Assemblies subsections! This past week, I learned about how I could create sketches and use a variety of features to make my work easier, such as centre point arc, mirror, use/project, tangent, coincident, etc. I used some of them (like the use/project or centre point arc to create gussets). I also learned about how to create assemblies, add elements to them (either through Insert or through the FRCDesign Inserter), and assemble everything (replicate, fastened mate, etc.) On to Section 1B!
Devlog - Section 1B This section, I learned about Power Transmission in FRC! I learned about speed, torque, and mechanical advantage concepts in FRC, as well as various featurescripts in the FRCDesign library (including Belt & Chain Gen , Robot Shaft , and Part Lighten using pocketing sketches. I also learned about belts/chains and how to use various dimensions in OnShape to create models of them effectively (including using the Origin Cube). In Section 1B, I created three different types of gearboxes, utilizing gear ratios to exchange torque for speed (and vice versa), and assembling various parts together.
Devlog 1 - Stage 1C (Exercises 1 & 2) On the left, I created a Flat Intake powered by a NEO Brushless Motor . The gear ratio for the intake is 30:12 , which means that the output torque is 30/12 or approximately 2.5x more, while the output speed is 12/30 , so 2.5x slower. The biggest challenge for this project was that a lot of the featurescripts have been updated, which made it overall harder to use since I would always have to be finding loopholes to achieve the final result. Additionally, at the beginning of the project, I set one of the mate connectors incorrectly (it needed to be located 4 inches in the x-direction from the origin, but I placed the mate connector and offset by that specific distance from the edge of the Origin Cube ), messing up all the dimensions and requiring me to re-do the entire intake subsystem. On the right, I created some Dead Axle Rollers, which were powered by a Kraken X60 Brushless Motor on the right. I connected the motor to the pulleys by having a belt of HTD 5mm , 9mm width for pulleys with 12 teeth ( driving ) and 24 teeth ( driven ), resulting in the gear ratio 24:12 . This means that you would be exchanging for double the output torque and half the output speed in an ideal world. I also have another belt on the left side of the rollers connecting the first to the second, and an identical one located on the right side connecting the second roller to the third. Next Steps: Stage 1C Exercise 3: Shooter Mechanism...
|
1793263876.526924
|
1793868676.526924
|
|
33671
|
jelly by @zephrxq | Stardance
|
zephrxq
|
0
|
21.02
|
0
|
[]
|
[{"post_id": 26503, "ts": "202 [{"post_id": 26503, "ts": "2026-07-11T10:34:48Z", "hours": 21.0156, "text": "fixed time not syncing when the room is paused, added a loading screen, and fixed other small bugs."}]...
|
Title: jelly by @zephrxq | Stardance
Devlogs:
fix Title: jelly by @zephrxq | Stardance
Devlogs:
fixed time not syncing when the room is paused, added a loading screen, and fixed other small bugs....
|
1793177343.3223894
|
1793782143.3223894
|
|
51943
|
Conlang Classifier by @ElffawIThink | Stardance
|
ElffawIThink
|
0
|
21.02
|
0
|
[]
|
[{"post_id": 75966, "ts": "202 [{"post_id": 75966, "ts": "2026-10-01T19:14:12Z", "hours": 12.0031, "text": "There’s a storage system now! almost… Anyway. I’ve been working pretty hard on building a pretty cool storage system for storing your language. I wanted it to be: platform agnostic, easily human modifiable, efficient, and future-proof. I achieved platform agnostic by using the lovely directories crate. For human-modifiable, I used toml, also making each word into a separate file for ease of use. For efficiency, I implemented a system for only writing to modified words when the program closes, rather than re-adding every single word. Finally, for future-proof, I made sure to leave space for more fields in the future."}, {"post_id": 57812, "ts": "2026-08-30T03:27:08Z", "hours": 9.02, "text": "This is my first devlog. I’ve been working on a program called conlang classifier for a while, which is a tool to help create and classify your constructed languages (or non-constructed languages). The current set of features isn’t particularly comprehensive, but I aim to expand it. The topic of this devlog is the search bar. I’ve written code for a search feature before, but I wanted this one to be a lot faster. I would say I got closer, but there are still improvements to be made. Some re-computations are uneeded. I feel like I’ve done enough for now though. Thanks for reading, Waffle"}]...
|
Title: Conlang Classifier by @ElffawIThink | Stard Title: Conlang Classifier by @ElffawIThink | Stardance
Devlogs:
This is my first devlog. I’ve been working on a program called conlang classifier for a while, which is a tool to help create and classify your constructed languages (or non-constructed languages). The current set of features isn’t particularly comprehensive, but I aim to expand it. The topic of this devlog is the search bar. I’ve written code for a search feature before, but I wanted this one to be a lot faster. I would say I got closer, but there are still improvements to be made. Some re-computations are uneeded. I feel like I’ve done enough for now though. Thanks for reading, Waffle
There’s a storage system now! almost… Anyway. I’ve been working pretty hard on building a pretty cool storage system for storing your language. I wanted it to be: platform agnostic, easily human modifiable, efficient, and future-proof. I achieved platform agnostic by using the lovely directories crate. For human-modifiable, I used toml, also making each word into a separate file for ease of use. For efficiency, I implemented a system for only writing to modified words when the program closes, rather than re-adding every single word. Finally, for future-proof, I made sure to leave space for more fields in the future....
|
1792688129.3461933
|
1793292929.3461933
|
|
9801
|
eggooo by @matikda | Stardance
|
matikda
|
0
|
21.01
|
0
|
[]
|
[{"post_id": 7894, "ts": "2026 [{"post_id": 7894, "ts": "2026-06-13T05:21:10Z", "hours": 6.6747, "text": "I added the shop menu. I was confused why the hover and click functions were not working, but I realized that the text was completely covering the actuall button. That was a pretty easy fix. I used arrays with all the sprites, so I can iterate over all the buttons at once, which made my code much easier to follow. I might go back and add arrays to more parts, but it will not be as neat as this was. Lastly, I use graphics to create my text, so it is easily manipulatable, but it is making the game crash, so I will ned to go in and use real text next. Not looking forward to that."}, {"post_id": 5440, "ts": "2026-06-09T06:39:30Z", "hours": 4.6447, "text": "I finished the settings page sans a small volume bug. It now has the ability to skip and replay songs, turn music on and off, adjust the volume, and open an info page. I had a lot of trouble getting the text to update, as graphic updates are banned to prevent crashing. I just made a function to create brand new graphics as needed. I also added a favicon. I am realizing that I have barely touched the actual game part, though… next time."}, {"post_id": 5170, "ts": "2026-06-08T21:04:41Z", "hours": 2.6842, "text": "I added a settings menu with some text and buttons. I took a call for an hour and I then spent ~2 hours wondering why all my text suddenly wasn’t aligned. I finally realized that I had zoomed in to 110% and the code was fine🤦. Massive waste of time haha! I’m a bit worried that this could cause an issue on devices that have varying pixel densities but I am not going to worry about that for now."}, {"post_id": 4743, "ts": "2026-06-08T06:08:53Z", "hours": 7.0036, "text": "I am making a clicker game called eggooo! (I just realized I like the lowercase E better…). Today I worked on getting the starting screen working. I wanted the buttons to go down slightly when pressed to match the animation, but I had a lot of trouble, as I also had it dip when the mouse was hovering. When the mouse hovered above the dip but below the up limit, the button would freak out and rapidly switch between up and down. It looked like it was having a seizure. I fixed it by lowering just the image, not the hitbox, although now the hitbox is a bit off when the button is being hovered over. Oh well."}]...
|
Title: eggooo by @matikda | Stardance
Devlogs:
I Title: eggooo by @matikda | Stardance
Devlogs:
I am making a clicker game called eggooo! (I just realized I like the lowercase E better…). Today I worked on getting the starting screen working. I wanted the buttons to go down slightly when pressed to match the animation, but I had a lot of trouble, as I also had it dip when the mouse was hovering. When the mouse hovered above the dip but below the up limit, the button would freak out and rapidly switch between up and down. It looked like it was having a seizure. I fixed it by lowering just the image, not the hitbox, although now the hitbox is a bit off when the button is being hovered over. Oh well.
I added a settings menu with some text and buttons. I took a call for an hour and I then spent ~2 hours wondering why all my text suddenly wasn’t aligned. I finally realized that I had zoomed in to 110% and the code was fine🤦. Massive waste of time haha! I’m a bit worried that this could cause an issue on devices that have varying pixel densities but I am not going to worry about that for now.
I finished the settings page sans a small volume bug. It now has the ability to skip and replay songs, turn music on and off, adjust the volume, and open an info page. I had a lot of trouble getting the text to update, as graphic updates are banned to prevent crashing. I just made a function to create brand new graphics as needed. I also added a favicon. I am realizing that I have barely touched the actual game part, though… next time.
I added the shop menu. I was confused why the hover and click functions were not working, but I realized that the text was completely covering the actuall button. That was a pretty easy fix. I used arrays with all the sprites, so I can iterate over all the buttons at once, which made my code much easier to follow. I might go back and add arrays to more parts, but it will not be as neat as this was. Lastly, I use graphics to create my text, so it is easily manipulatable, but it is making the game crash, so I will ned to go in and use real text next. Not looking forward to that....
|
1792641082.5304234
|
1793245882.5304234
|
|
38055
|
Smartwatch by @Kaku | Stardance
|
Kaku
|
0
|
21.01
|
0
|
[]
|
[{"post_id": 55032, "ts": "202 [{"post_id": 55032, "ts": "2026-08-26T13:44:51Z", "hours": 9.6767, "text": "The project is still going strong. It may look like I did not do much but I had a bug that needed 4-5 hours to solve, just to realise it was a NULL value"}, {"post_id": 40186, "ts": "2026-08-03T16:18:59Z", "hours": 9.6289, "text": "The settings update is on the way!. Though there is not a lot to be seen on this screen. I gotta say a lot of things like build time and trying to get the UI right is slowing the process. Plus summer vacation and other activities are holding me back from working more(a bit of summer laziness sprinkled here and there). Not to worry, cause the project is not stopping! The filemanager is done so the only thing remaining is UI and some logic. Until the release I will think about what to make next, but any idea is welcome as well."}, {"post_id": 33170, "ts": "2026-07-22T20:42:51Z", "hours": 1.7025, "text": "Happy to announce that the from now on the Clock app is officially done and working with no problem. Future updates to the project will be commenting all the current code, making a proper readme so everybody knows what this project should do and how its planned to be developed and to create the settings app this way finally learning and using littleFS in the project. This is a very exciting moment for me, cause I was finally able to finish this app and learn so much about lvgl and how it works with the T -Display S3 AMOLED. I wanna apologize for the project not having a demo, a proper readme and commented code, but it should be done in the next few days."}]...
|
Title: Smartwatch by @Kaku | Stardance
Devlogs:
H Title: Smartwatch by @Kaku | Stardance
Devlogs:
Happy to announce that the from now on the Clock app is officially done and working with no problem. Future updates to the project will be commenting all the current code, making a proper readme so everybody knows what this project should do and how its planned to be developed and to create the settings app this way finally learning and using littleFS in the project. This is a very exciting moment for me, cause I was finally able to finish this app and learn so much about lvgl and how it works with the T -Display S3 AMOLED. I wanna apologize for the project not having a demo, a proper readme and commented code, but it should be done in the next few days.
The settings update is on the way!. Though there is not a lot to be seen on this screen. I gotta say a lot of things like build time and trying to get the UI right is slowing the process. Plus summer vacation and other activities are holding me back from working more(a bit of summer laziness sprinkled here and there). Not to worry, cause the project is not stopping! The filemanager is done so the only thing remaining is UI and some logic. Until the release I will think about what to make next, but any idea is welcome as well.
The project is still going strong. It may look like I did not do much but I had a bug that needed 4-5 hours to solve, just to realise it was a NULL value...
|
1793144954.4503284
|
1793749754.4503284
|
|
32
|
Terrain Simulator by @Shuflduf | Stardance
|
Shuflduf
|
1
|
21.0
|
230
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-09T20:18:17Z", "hours": 21.0, "multiplier": 11.51, "payout": 230, "blessing": "neutral", "text": "I made a terrain generator and renderer. It uses the WebGPU standard through the wgpu library for Rust for rendering, and uses a bunch of stacked perlin noise for the generation. Works on EVERY platform (including web) since Rust is just that sigma. Hardest part was learning wgpu in the first place, but the docs had a REALLY good guide/tutorial thing I followed, and a lot of my code is based off of it, including everything needed to get it to work in web. If I were to work on this project more, I’d optimize it a bit more so it’d run better, like 500fps on web somehow or smth. Or to add LODs or smth.", "repo": "https://github.com/Shuflduf/Terrain-Simulator", "demo": "https://shuflduf.github.io/Terrain-Simulator/"}]...
|
[{"post_id": 5859, "ts": "2026 [{"post_id": 5859, "ts": "2026-06-09T20:09:51Z", "hours": 1.7136, "text": "final polishes, random seed on every load, small changes like that MORE IMPORTANTLY setup a github action that auto builds for EVERY SINGLE PLATFORM, PUSHES TO CRATES.IO, AND DEPLOYS TO GITHUB PAGES https://shuflduf.github.io/Terrain-Simulator/"}, {"post_id": 5668, "ts": "2026-06-09T15:27:02Z", "hours": 2.4275, "text": "lots and lots of little optimizations and QOL things the project is basically done already. heap allocated some stuff that really shouldnt be on the stack made the textures actually tile each other instead of having harsh borders vsync toggle text rendering for overlay (using glyphon) Q and E for camera controls etc etc cant upload video because sd crashes every time i try to"}, {"post_id": 4939, "ts": "2026-06-08T15:41:41Z", "hours": 0.7283, "text": "frustum culling ! now chunks that you cant see arent rendered. i actually have no idea if its working or not because if the chunks are behind me then i cant see tham get culled anyways"}, {"post_id": 4710, "ts": "2026-06-08T04:11:07Z", "hours": 0.7336, "text": "procedural chunk loading so YOU CAN FLY FOREVER"}, {"post_id": 4690, "ts": "2026-06-08T03:25:47Z", "hours": 0.6975, "text": "SKYBOXXXXX i have a massive physics test tmw and my diploma is in 5 days ANYWAYS its cool because it draws over the water that draws over nothing, so when you go below the map you dont see the water plane since the skybox draws over it its so cool"}, {"post_id": 4679, "ts": "2026-06-08T02:37:08Z", "hours": 0.4097, "text": "ANIMATED WATERR!!!"}, {"post_id": 4667, "ts": "2026-06-08T02:09:50Z", "hours": 0.8589, "text": "WATER!!!!!!!!!!!!!!!!! IM PROCRASTINATING SCHOOL SO HARD RIGHT NOW!!!!!!!!! BUT IT LOOOKS SOOOO GOOOOOOD!!!!!!!!!!"}, {"post_id": 4641, "ts": "2026-06-08T01:17:27Z", "hours": 1.4264, "text": "FINALLY different textures depending on height right now theres 4, going from sand, grass, stone (mountain) to snow. and they all have their various blend thesrholds and widths and its so sigma next step is adding like water or smth"}, {"post_id": 3780, "ts": "2026-06-06T20:38:24Z", "hours": 0.6803, "text": "improve terrain generation, minor refactors, etc etc This is a video of me flying around the terrain while Chris Christodoulou’s “…con lentitud poderosa” from Risk of Rain 2 plays in it’s entirety."}, {"post_id": 3338, "ts": "2026-06-06T06:57:24Z", "hours": 0.2514, "text": "depth buffer was so light 15 minutes like holy the docs are just that good and wgpu is just that good code is becoming a mess tho might refactor that soon (again) it doesnt look very impressive but like the hills IN THE FRONT are IN FRONT of the hills IN THE BACK"}, {"post_id": 3330, "ts": "2026-06-06T06:34:33Z", "hours": 0.3664, "text": "lfkdslfsd vsync without vsync my laptop just renders so many frames and cpu usage spikes to 10% on idle like wtf with vsync it goes to a much more reasonable 2% also grass texture next step is to add a depth buffer because as you can see some chunks are clipping in front of chunks that are in front of them"}, {"post_id": 3313, "ts": "2026-06-06T05:35:42Z", "hours": 0.8303, "text": "big refactoring made it so the assets (textures and shaders) are basically created (not really) at compile time, so i can reference them using just their name (ex: “frog”) instead of the relative path from the file its being referenced in (ex: “../../assets/images/frog.png”) AND it lets me make sure the file exists at compile time AND it makes sure the final binary is completely standalone (i think)"}, {"post_id": 2798, "ts": "2026-06-05T16:45:06Z", "hours": 1.9056, "text": "implementing terrain now! the code is good now i think"}, {"post_id": 2444, "ts": "2026-06-04T22:50:18Z", "hours": 1.2917, "text": "camera system was lowk ass so i fixed it planning to add Q and E to move up and down relative to camera"}, {"post_id": 2269, "ts": "2026-06-04T17:42:13Z", "hours": 1.4847, "text": "so so so much refactoring i still don’t think its organized enough but i got the camera to work so thats cool"}, {"post_id": 1950, "ts": "2026-06-04T06:18:11Z", "hours": 1.555, "text": "Mostly just refactoring. I still have almost no idea how wgpu works, but at least everything is organized! One of the benefits of Factorio is knowing when something should be it’s own module that other parts of the program can interact with. Instead of having a massive main.rs, i split it up into like 4 different modules, the biggest ones being GpuContext, which handles setting up the wgpu backend stuff, Renderer, which renders stuff through wgpu, and Application, which handles the window management stuff."}, {"post_id": 1805, "ts": "2026-06-04T00:57:33Z", "hours": 1.8222, "text": "Shapes and stuff! I’m actually making draw calls with like shader info or smth. Buffers are weird I still don’t get them. I got the famous triangle thing and textures both working (not at the same time). The code is a mess that I no longer understand, and the docs I’ve been relying so much on are outdated for the latest version of wgpu, so that was painful (thank goodness for rust-analyzer). Next steps are to organize the codebase so that I don’t have a massive 433 line main.rs and to properly understand uniforms and buffers and layouts and primitives and bind groups and views and queues and attachments and"}, {"post_id": 1570, "ts": "2026-06-03T17:45:56Z", "hours": 0.7056, "text": "Continuing to follow the docs I’m now sending render passes to the window, which basically draws to the screen. Right now it just clears the screen with a certain color. Next step would be shaders I think, so I can get a triangle soon"}, {"post_id": 1546, "ts": "2026-06-03T16:58:54Z", "hours": 0.8783, "text": "First time using wgpu so I followed the docs to get started with it. So far I have a single window through winit, which should work cross platform on native. Might add web support later. Next step is getting something on the screen."}]...
|
Title: Terrain Simulator by @Shuflduf | Stardance
Title: Terrain Simulator by @Shuflduf | Stardance
Devlogs:
First time using wgpu so I followed the docs to get started with it. So far I have a single window through winit, which should work cross platform on native. Might add web support later. Next step is getting something on the screen.
Continuing to follow the docs I’m now sending render passes to the window, which basically draws to the screen. Right now it just clears the screen with a certain color. Next step would be shaders I think, so I can get a triangle soon
Shapes and stuff! I’m actually making draw calls with like shader info or smth. Buffers are weird I still don’t get them. I got the famous triangle thing and textures both working (not at the same time). The code is a mess that I no longer understand, and the docs I’ve been relying so much on are outdated for the latest version of wgpu, so that was painful (thank goodness for rust-analyzer). Next steps are to organize the codebase so that I don’t have a massive 433 line main.rs and to properly understand uniforms and buffers and layouts and primitives and bind groups and views and queues and attachments and
Mostly just refactoring. I still have almost no idea how wgpu works, but at least everything is organized! One of the benefits of Factorio is knowing when something should be it’s own module that other parts of the program can interact with. Instead of having a massive main.rs, i split it up into like 4 different modules, the biggest ones being GpuContext, which handles setting up the wgpu backend stuff, Renderer, which renders stuff through wgpu, and Application, which handles the window management stuff.
so so so much refactoring i still don’t think its organized enough but i got the camera to work so thats cool
camera system was lowk ass so i fixed it planning to add Q and E to move up and down relative to camera
implementing terrain now! the code is good now i think
big refactoring made it so the assets (textures and shaders) are basically created (not really) at compile time, so i can reference them using just their name (ex: “frog”) instead of the relative path from the file its being referenced in (ex: “../../assets/images/frog.png”) AND it lets me make sure the file exists at compile time AND it makes sure the final binary is completely standalone (i think)
lfkdslfsd vsync without vsync my laptop just renders so many frames and cpu usage spikes to 10% on idle like wtf with vsync it goes to a much more reasonable 2% also grass texture next step is to add a depth buffer because as you can see some chunks are clipping in front of chunks that are in front of them
depth buffer was so light 15 minutes like holy the docs are just that good and wgpu is just that good code is becoming a mess tho might refactor that soon (again) it doesnt look very impressive but like the hills IN THE FRONT are IN FRONT of the hills IN THE BACK
improve terrain generation, minor refactors, etc etc This is a video of me flying around the terrain while Chris Christodoulou’s “…con lentitud poderosa” from Risk of Rain 2 plays in it’s entirety.
FINALLY different textures depending on height right now theres 4, going from sand, grass, stone (mountain) to snow. and they all have their various blend thesrholds and widths and its so sigma next step is adding like water or smth
WATER!!!!!!!!!!!!!!!!! IM PROCRASTINATING SCHOOL SO HARD RIGHT NOW!!!!!!!!! BUT IT LOOOKS SOOOO GOOOOOOD!!!!!!!!!!
ANIMATED WATERR!!!
SKYBOXXXXX i have a massive physics test tmw and my diploma is in 5 days ANYWAYS its cool because it draws over the water that draws over nothing, so when you go below the map you dont see the water plane since the skybox draws over it its so cool
procedural chunk loading so YOU CAN FLY FOREVER
frustum culling ! now chunks that you cant see arent rendered. i actually have no idea if its working or not because if the chunks are behind me then i cant see tham get culled anyways
lots and lots of little optimizations and QOL things the project is basically done already. heap allocated some stuff that really shouldnt be on the stack made the textures actually tile each other instead of having harsh borders vsync toggle text rendering for overlay (using glyphon) Q and E for camera controls etc etc cant upload video because sd crashes every time i try to
final polishes, random seed on every load, small changes like that MORE IMPORTANTLY setup a github action that auto builds for EVERY SINGLE PLATFORM, PUSHES TO CRATES.IO, AND DEPLOYS TO GITHUB PAGES https://shuflduf.github.io/Terrain-Simulator/
Ships:
I made a terrain generator and renderer. It uses the WebGPU standard through the wgpu library for Rust for rendering, and uses a bunch of stacked perlin noise for the generation. Works on EVERY platform (including web) since Rust is just that sigma. Hardest part was learning wgpu in the first place, but the docs had a REALLY good guide/tutorial thing I followed, and a lot of my code is based off of it, including everything needed to get it to work in web. If I were to work on this project more, I’d optimize it a bit more so it’d run better, like 500fps on web somehow or smth. Or to add LODs or smth....
|
1793116483.572303
|
1793202883.572303
|
|
198
|
Calamity Engine by @zrl | Stardance
|
zrl
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T20:24:10Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Calamity Engine Alpha v1.1.0 Calamity Engine is a small, portable, 2D game engine made with retro/underpowered platforms in mind, written in C++. I worked on maintaining and updating Calamity Engine with new features, such as multi-window support, raycasts, collision signals, a bunch of refactoring/restructuring, etc… I also wrote 4 new examples that showcase these new features! I recommend checking out the website where you will find (almost) every example compiled to the web, so you can try them out without leaving your browser! Please consider checking it out, I put a lot of work into it.", "repo": "https://github.com/sl4shed/calamity-engine", "demo": "https://calamity.sl4shed.xyz/"}]...
|
[{"post_id": 16912, "ts": "202 [{"post_id": 16912, "ts": "2026-06-27T13:51:30Z", "hours": 11.8522, "text": "Calamity engine devlog 3 we back baby Fixed the github workflow!! I finally figured out what was going on with the github workflow! The issue was that I was using an outdated version of download-emscripten and the emscripten version being downloaded was fried and that would mess up the loading. In the process of fixing the runner, i also migrated it to an arch container for no specific reason other than I like arch. New examples and refactoring I refactored every example (except graphics-settings and multi-window ) to run on console platforms and work with controllers! The code in the examples is now a better resource for learning the ins and outs of Calamity Engine. Input service fixes You can now see what modifiers are active in a key event now (look at InputEventWithModifiers ) visible and enabled properties on Nodes Before alpha 1.1, components (i.e. sprites) handled visibility individually but I decided that I don’t like that and now visibility a property of the node class! It is also inherited down the node tree to the children of the node. I also added the enabled property to Nodes! While visibility affects the rendering, the enabled property basically stops all lifetime functions such as update , physicsUpdate and input along with render . Full Windows support Windows is now fully supported and every issue I have encountered is ironed out. The console is now hidden in release builds, etc, etc New examples I added the graphics-settings , multi-window , button and raycast examples. You can check these out on the website (except for graphics-settings and multi-window because those are desktop specific)! Alpha 1.1 And with this devlog, I will be publishing Calamity Engine 1.1! i really don’t know what else to say so i attached a video of the new node-tree example"}, {"post_id": 8612, "ts": "2026-06-14T09:50:57Z", "hours": 7.24, "text": "Calamity engine devlog 2 i’m back with another fire devlog Physics changes I made a lot of changes to the Physics service, including adding the SegmentShape, Raycasts and overall tidying up the service by creating the PhysicsBody class. Every physics body (Rigidbody, Staticbody) inherits this class. Also, every physics body now has a signal for when the mouse enters and leaves the shape! This allows the creation of ui elements (i.e. look at the button example)! Windows is supported again You can build the game on Windows either using mingw64 or MSVC! There are a couple of issues though… Windows support isn’t necessarily a top priority for me right now, but I will be working on it and hopefully getting it ready for when I create the next release! (also there’s some edge cases regarding the calamity folder on MSVC and especially on mingw64 where you have to manually copy over the dll of every vendored library) Example changes I’m working on tidying up all the example code and adding console platform support to every example! (for example, the node-tree example didn’t have any console support). I also added two new examples - button and raycast. These demonstrate how to use the new additions to the Physics service! Stuff that’s planned for the next minor release I want to fix the GitHub workflow that runs every push, it compiles every example for emscripten and builds the website. But, for some reason, the examples don’t load properly when the runner pushes the website. It works properly when I do it manually and the workflow runs the exact same commands I do… It’s a pretty weird issue and it’s very hard to debug but I want to get it fixed for alpha 1.1. New minor release After I fix the runner and finish tidying up the examples, I will create a new alpha 1.1 release! I don’t know if I will ship the project yet, I don’t think I have enough hours and I kinda want a bigger payout xD that’s it scooby gang. please like and subscribe and make sure to share this devlog to every family member in your vicinity! That also includes your grandmother."}, {"post_id": 383, "ts": "2026-06-01T18:54:17Z", "hours": 1.7694, "text": "Calamity engine devlog 1 Because of a lot of internal changes (i.e. multi-window support), the node-tree example broke :( Saving and loading sprites and textures was broken however i got it working again! Saving and loading any physics shape was also broken but now it’s also fixed! (i still have to fix loading for animated sprites/animations which will also be a pain in the bum bum but it is what it is…) Changes that occurred between Flavortown and Stardance Added multi-window support Started working on 3DS support (wasn’t able to finish in time unfortunately) Added collision detection signals to every physics body Added mouse hover detection signals to every physics body Made an example project of a button Added tracy support Added some QOL functions, such as lookAt() on Transforms “Fixed” github runner that compiles the website (it’s still broken 😭) Goals with development Primarily, I want to ship a more definitive version of Calamity Engine. I want to expand to more platforms, add networking, improve audio, add a ui library among other smaller things. Instead of one big release (alpha 1.0), i will probably be splitting ships across smaller releases (i.e. i want to release an alpha 1.1 version when i’m done with some smaller fixes and physics additions). When all of my goals are achieved with Calamity Engine, I want to work on a separate project that uses Calamity Engine - a cross-platform Navidrome client! I’ve always wanted to use my PSP as a music player but because I can’t be bothered to keep updating my playlist/redownloading music, I never got around to it… I also want to remake simulator canalizare 2019 in Calamity Engine and ship it to whatever platforms my engine will eventually support (technically, PS2 support is possible! Cross platform support really depends on how good the homebrew SDK’s are though. For each and every platform I want to get Calamity working on, I basically have to port spdlog , cereal , fmt and box2d myself unless i get really lucky and there are already maintained packages for all of those like on the PSP .)"}, {"post_id": 26, "ts": "2026-05-31T08:48:10Z", "hours": 0.4903, "text": "calamity engine will resume development on stardance"}]...
|
Title: Calamity Engine by @zrl | Stardance
Devlog Title: Calamity Engine by @zrl | Stardance
Devlogs:
calamity engine will resume development on stardance
Calamity engine devlog 1 Because of a lot of internal changes (i.e. multi-window support), the node-tree example broke :( Saving and loading sprites and textures was broken however i got it working again! Saving and loading any physics shape was also broken but now it’s also fixed! (i still have to fix loading for animated sprites/animations which will also be a pain in the bum bum but it is what it is…) Changes that occurred between Flavortown and Stardance Added multi-window support Started working on 3DS support (wasn’t able to finish in time unfortunately) Added collision detection signals to every physics body Added mouse hover detection signals to every physics body Made an example project of a button Added tracy support Added some QOL functions, such as lookAt() on Transforms “Fixed” github runner that compiles the website (it’s still broken 😭) Goals with development Primarily, I want to ship a more definitive version of Calamity Engine. I want to expand to more platforms, add networking, improve audio, add a ui library among other smaller things. Instead of one big release (alpha 1.0), i will probably be splitting ships across smaller releases (i.e. i want to release an alpha 1.1 version when i’m done with some smaller fixes and physics additions). When all of my goals are achieved with Calamity Engine, I want to work on a separate project that uses Calamity Engine - a cross-platform Navidrome client! I’ve always wanted to use my PSP as a music player but because I can’t be bothered to keep updating my playlist/redownloading music, I never got around to it… I also want to remake simulator canalizare 2019 in Calamity Engine and ship it to whatever platforms my engine will eventually support (technically, PS2 support is possible! Cross platform support really depends on how good the homebrew SDK’s are though. For each and every platform I want to get Calamity working on, I basically have to port spdlog , cereal , fmt and box2d myself unless i get really lucky and there are already maintained packages for all of those like on the PSP .)
Calamity engine devlog 2 i’m back with another fire devlog Physics changes I made a lot of changes to the Physics service, including adding the SegmentShape, Raycasts and overall tidying up the service by creating the PhysicsBody class. Every physics body (Rigidbody, Staticbody) inherits this class. Also, every physics body now has a signal for when the mouse enters and leaves the shape! This allows the creation of ui elements (i.e. look at the button example)! Windows is supported again You can build the game on Windows either using mingw64 or MSVC! There are a couple of issues though… Windows support isn’t necessarily a top priority for me right now, but I will be working on it and hopefully getting it ready for when I create the next release! (also there’s some edge cases regarding the calamity folder on MSVC and especially on mingw64 where you have to manually copy over the dll of every vendored library) Example changes I’m working on tidying up all the example code and adding console platform support to every example! (for example, the node-tree example didn’t have any console support). I also added two new examples - button and raycast. These demonstrate how to use the new additions to the Physics service! Stuff that’s planned for the next minor release I want to fix the GitHub workflow that runs every push, it compiles every example for emscripten and builds the website. But, for some reason, the examples don’t load properly when the runner pushes the website. It works properly when I do it manually and the workflow runs the exact same commands I do… It’s a pretty weird issue and it’s very hard to debug but I want to get it fixed for alpha 1.1. New minor release After I fix the runner and finish tidying up the examples, I will create a new alpha 1.1 release! I don’t know if I will ship the project yet, I don’t think I have enough hours and I kinda want a bigger payout xD that’s it scooby gang. please like and subscribe and make sure to share this devlog to every family member in your vicinity! That also includes your grandmother.
Calamity engine devlog 3 we back baby Fixed the github workflow!! I finally figured out what was going on with the github workflow! The issue was that I was using an outdated version of download-emscripten and the emscripten version being downloaded was fried and that would mess up the loading. In the process of fixing the runner, i also migrated it to an arch container for no specific reason other than I like arch. New examples and refactoring I refactored every example (except graphics-settings and multi-window ) to run on console platforms and work with controllers! The code in the examples is now a better resource for learning the ins and outs of Calamity Engine. Input service fixes You can now see what modifiers are active in a key event now (look at InputEventWithModifiers ) visible and enabled properties on Nodes Before alpha 1.1, components (i.e. sprites) handled visibility individually but I decided that I don’t like that and now visibility a property of the node class! It is also inherited down the node tree to the children of the node. I also added the enabled property to Nodes! While visibility affects the rendering, the enabled property basically stops all lifetime functions such as update , physicsUpdate and input along with render . Full Windows support Windows is now fully supported and every issue I have encountered is ironed out. The console is now hidden in release builds, etc, etc New examples I added the graphics-settings , multi-window , button and raycast examples. You can check these out on the website (except for graphics-settings and multi-window because those are desktop specific)! Alpha 1.1 And with this devlog, I will be publishing Calamity Engine 1.1! i really don’t know what else to say so i attached a video of the new node-tree example
Ships:
Calamity Engine Alpha v1.1.0 Calamity Engine is a small, portable, 2D game engine made with retro/underpowered platforms in mind, written in C++. I worked on maintaining and updating Calamity Engine with new features, such as multi-window support, raycasts, collision signals, a bunch of refactoring/restructuring, etc… I also wrote 4 new examples that showcase these new features! I recommend checking out the website where you will find (almost) every example compiled to the web, so you can try them out without leaving your browser! Please consider checking it out, I put a lot of work into it....
|
1793252918.9349194
|
1793339318.9349194
|
|
1250
|
MonkeyLogs538 by @OffsetMonkey538 | Stardance
|
OffsetMonkey538
|
1
|
21.0
|
337
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-12T11:14:33Z", "hours": 21.0, "multiplier": 15.96, "payout": 337, "blessing": "neutral", "text": "I was annoyed that people still upload plain log files in the support discord for my Minecraft mods, when I clearly say that using mclogs, a pastebin for minecraft logs with syntax highlighting and whatnot, makes debugging much easier. So I made a Discord bot to fix that! It detects logs sent as attachments by their name and uploads them to mclogs. It can also be added as a user application, which will allow using the /upload-logs command anywhere. This is my first full project written in Kotlin (previously I’ve only used it for Gradle buildscripts), so there were some initial challenges with Kotlin syntax for things like lambdas and also how instead of static functions you have companion objects, but Kotlin’s documentation is pretty good. What documentation wasn’t so good though was Kord, the library I used for interacting with the Discord API. It required quite a bit of guesswork to figure out how it works and should be used, the Discord API docs made it a bit easier though at least. I’ve set up a discord server with an instance of the bot running, which can be used to test it out. There are also self-hosting instructions on the readme.", "repo": "https://git.offsetmonkey538.top/OffsetMonkey538/MonkeyLogs538", "demo": "https://discord.gg/nBqpn2gBsK"}]...
|
[{"post_id": 7407, "ts": "2026 [{"post_id": 7407, "ts": "2026-06-12T10:36:43Z", "hours": 4.5442, "text": "Made it now packaged as a docker container, fixed some bugs and wrote a readme with instructions for self-hosting Also now have an instance of it running on my homelab"}, {"post_id": 6252, "ts": "2026-06-10T14:41:07Z", "hours": 7.0514, "text": "Some changes over the past few days: Multiple logs can be uploaded at once Http requests and json parsing now done with kotlin’s own libraries instead of java HttpClient and Jankson. Kotlin serialization stuff is actually pretty great! Errors aren’t silently ignored anymore and other logs added in the same batch can still be uploaded even when some fail. Much less readable code, kotlin is great for that"}, {"post_id": 3728, "ts": "2026-06-06T19:30:32Z", "hours": 2.8181, "text": "Log files will now automatically be detected (current filter is any file ending in .log ) and uploaded 🎉"}, {"post_id": 3497, "ts": "2026-06-06T13:45:01Z", "hours": 6.0436, "text": "I have now fully implemented the command for uploading a log. It now rejects binary files like images or videos, correctly reads when the file isn’t UTF8 formatted and allows deleting the uploaded log in case it was the wrong file or something. I’ve found that Kotlin is actually really nice. I especially like how it allows writing such unreadable code that I can’t understand it even 5 minutes after writing it I also spent an hour or so in termux on my phone (was bored on a bus) setting up an instance of mclogs on my homelab and the bot now allows setting a custom instance url as well. Next step will be having it detect sent log files and automatically upload them"}, {"post_id": 304, "ts": "2026-06-01T15:44:43Z", "hours": 0.6719, "text": "I really liked the nullability stuff Kotlin has when I was writing a multiloader/version convention plugin for my mods, so I decided to use Kotlin to get more familiar with it in general usage. I saw someone talking about the Kord library a while back, so I went with that. Safe to say that I’m still quite unfamiliar with Kotlin’s syntax (using it in gradle buildscripts is much much simpler), and I couldn’t really find anything great on Kord other than the simple example usage https://github.com/kordlib/kord/tree/main/core , but it definitely is able to play ping-pong at the very least :D"}]...
|
Title: MonkeyLogs538 by @OffsetMonkey538 | Stardan Title: MonkeyLogs538 by @OffsetMonkey538 | Stardance
Devlogs:
I really liked the nullability stuff Kotlin has when I was writing a multiloader/version convention plugin for my mods, so I decided to use Kotlin to get more familiar with it in general usage. I saw someone talking about the Kord library a while back, so I went with that. Safe to say that I’m still quite unfamiliar with Kotlin’s syntax (using it in gradle buildscripts is much much simpler), and I couldn’t really find anything great on Kord other than the simple example usage https://github.com/kordlib/kord/tree/main/core , but it definitely is able to play ping-pong at the very least :D
I have now fully implemented the command for uploading a log. It now rejects binary files like images or videos, correctly reads when the file isn’t UTF8 formatted and allows deleting the uploaded log in case it was the wrong file or something. I’ve found that Kotlin is actually really nice. I especially like how it allows writing such unreadable code that I can’t understand it even 5 minutes after writing it I also spent an hour or so in termux on my phone (was bored on a bus) setting up an instance of mclogs on my homelab and the bot now allows setting a custom instance url as well. Next step will be having it detect sent log files and automatically upload them
Log files will now automatically be detected (current filter is any file ending in .log ) and uploaded 🎉
Some changes over the past few days: Multiple logs can be uploaded at once Http requests and json parsing now done with kotlin’s own libraries instead of java HttpClient and Jankson. Kotlin serialization stuff is actually pretty great! Errors aren’t silently ignored anymore and other logs added in the same batch can still be uploaded even when some fail. Much less readable code, kotlin is great for that
Made it now packaged as a docker container, fixed some bugs and wrote a readme with instructions for self-hosting Also now have an instance of it running on my homelab
Ships:
I was annoyed that people still upload plain log files in the support discord for my Minecraft mods, when I clearly say that using mclogs, a pastebin for minecraft logs with syntax highlighting and whatnot, makes debugging much easier. So I made a Discord bot to fix that! It detects logs sent as attachments by their name and uploads them to mclogs. It can also be added as a user application, which will allow using the /upload-logs command anywhere. This is my first full project written in Kotlin (previously I’ve only used it for Gradle buildscripts), so there were some initial challenges with Kotlin syntax for things like lambdas and also how instead of static functions you have companion objects, but Kotlin’s documentation is pretty good. What documentation wasn’t so good though was Kord, the library I used for interacting with the Discord API. It required quite a bit of guesswork to figure out how it works and should be used, the Discord API docs made it a bit easier though at least. I’ve set up a discord server with an instance of the bot running, which can be used to test it out. There are also self-hosting instructions on the readme....
|
1793202613.2728992
|
1793289013.2728992
|
|
2322
|
Coding Boss Fight by @Xfhe | Stardance
|
|
2
|
21.0
|
370
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T19:04:23Z", "hours": 3.0, "multiplier": 18.35, "payout": 53, "blessing": "neutral", "text": "Player Health and Game Over Players now have a persistent health bar starting at 100 HP. Incorrect code submissions are no longer consequence-free. Every failed attempt causes the boss to attack, dealing 15 damage to the player. If the player’s health reaches zero, a Game Over screen is triggered, wiping all progress and forcing a complete restart. Combo System and Healing To balance the strict punishment for errors, the combo system has been fully integrated into the gameplay loop. The UI now features dynamic combo badges that appear over the boss when players submit consecutive correct answers. Reaching a 3x combo mechanically rewards the player by healing them for 15 HP. This encourages careful code construction over brute-force trial and error. Live Speedrun Timer A live timer has been added to the top navigation bar. It actively tracks the time spent on the current boss combined with the historical time from previously defeated bosses. This adds a subtle layer of pressure and allows players to track their speedrun performance in real time.", "repo": "https://github.com/XfheDev/Coding-Boss-Fight", "demo": "https://coding-boss-fight.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-02T15:22:40Z", "hours": 18.0, "multiplier": 18.19, "payout": 317, "blessing": "neutral", "text": "I built “Coding Boss Fight”, a browser-based RPG where players defeat bosses by solving real JavaScript coding challenges. The main challenge was managing complex game states across multiple screens (Intro, Boss Defeated, Victory) and building a custom sound system using the native Web Audio API instead of relying on external audio files. I am particularly proud of the smooth routing between different bosses and the minimalist, distraction-free UI design. To test the project, simply open the app, read the boss’s task requirements, write valid JavaScript in the built-in editor, and press Ctrl+Enter (or click Run) to attack.", "repo": "https://github.com/XfheDev/Coding-Boss-Fight", "demo": "https://coding-boss-fight.vercel.app/"}]...
|
[{"post_id": 20200, "ts": "202 [{"post_id": 20200, "ts": "2026-07-01T19:03:53Z", "hours": 2.5139, "text": "Player Health and Game OverPlayers now have a persistent health bar starting at 100 HP. Incorrect code submissions are no longer consequence-free. Every failed attempt causes the boss to attack, dealing 15 damage to the player. If the player’s health reaches zero, a Game Over screen is triggered, wiping all progress and forcing a complete restart.Combo System and HealingTo balance the strict punishment for errors, the combo system has been fully integrated into the gameplay loop. The UI now features dynamic combo badges that appear over the boss when players submit consecutive correct answers. Reaching a 3x combo mechanically rewards the player by healing them for 15 HP. This encourages careful code construction over brute-force trial and error.Live Speedrun TimerA live timer has been added to the top navigation bar. It actively tracks the time spent on the current boss combined with the historical time from previously defeated bosses. This adds a subtle layer of pressure and allows players to track their speedrun performance in real time."}, {"post_id": 2777, "ts": "2026-06-05T16:08:29Z", "hours": 0.4514, "text": "New Feature Update We have added a new boss to the game to increase the challenge and cover more JavaScript concepts. Syntax Sorcerer The Syntax Sorcerer is the third boss you will face. This boss has 150 Health Points and tests your knowledge of more advanced JavaScript syntax. Tasks included for this boss: Arrow Functions: You must write an arrow function that returns a specific value. This helps practice modern function syntax. Error Handling: You are required to write a try-catch block. This is essential for managing errors in real applications. Spread Operator: You need to use the spread operator on an array. This tests your understanding of array manipulation. DOM Demon The DOM Demon is the fourth and final boss. This boss has 200 Health Points and tests your ability to interact with the Document Object Model (DOM). Tasks included for this boss: Selecting Elements: You must use methods like getElementById. Creating Elements: You need to create new HTML elements dynamically using createElement. Modifying Classes: You are required to manipulate an element’s classList. Event Listeners: You need to attach event listeners to elements to make them interactive. Combo System We introduced a Combo System to reward accurate coding. How it works: If you complete a task correctly on your very first try, your combo increases. Visuals: Your current combo is displayed at the top of the game interface during a run. Reset: If you make a mistake and get the answer wrong, your combo resets to zero. These additions make the game longer, provide a better learning curve, and add a layer of challenge for skilled players who want to maintain a high combo."}, {"post_id": 845, "ts": "2026-06-02T15:21:36Z", "hours": 10.1433, "text": "Architecture and Routing The application now supports multiple distinct screens and states, moving beyond a single static view: Intro Screen: A landing page that introduces the game, lists the available bosses, and explains the rules. Boss Defeated Screen: A transition state that displays the player’s statistics for the defeated boss and previews the next challenge. Victory Screen: The final state reached after completing all content, presenting a summary of the player’s total time, attempts, and overall accuracy. Multi-Boss Support The hardcoded single-boss logic has been refactored. The game state now imports a structured array of bosses. A second boss, “Array Alchemist”, has been integrated into the loop. When a boss reaches zero HP, the game seamlessly transitions to the next boss in the sequence, resetting health while preserving total accumulated statistics. Audio Feedback To improve interaction, a lightweight audio system was introduced using the native Web Audio API. This avoids the need to load external MP3 files. Synthesized tones are now played during specific events: Correct submission (Hit) Incorrect submission (Miss) Boss Defeated Game Completed (Victory) Quality of Life Improvements Keyboard Shortcuts: Added a global event listener to the Monaco Editor. Players can now execute their code using Ctrl + Enter (or Cmd + Enter), greatly speeding up the trial-and-error process. Auto-dismissing Alerts: Feedback banners (success/error messages) are now automatically cleared after 2.5 seconds to prevent visual clutter on the screen. Visual Polish: The boss UI was updated to include a brief description of the current boss, and the health/task progress bars were refined to match the strict minimalist aesthetic."}, {"post_id": 623, "ts": "2026-06-02T03:55:14Z", "hours": 7.1894, "text": "Overview This session focused entirely on improving the visual interface. No new game mechanics were added. The goal was to make the layout clearer, more informative, and more polished without introducing gradients or heavy visual effects. Changes Boss Panel The boss panel was restructured. The boss name and HP bar are now displayed in a compact stat block below the sprite. The HP bar was thinned down and simplified. A row of task progress dots was added beneath it, one dot per task. Each dot fills white when a task is completed. The active task pulses dimly to show the current position. This gives the player a clear sense of progress at a glance without needing to count tasks. A damage flash effect was also added. When the boss takes a hit, a red ring briefly expands around the sprite and fades out. This makes successful submissions feel more impactful. Task Panel The task panel was redesigned with a header row containing two badges: one showing the current task number out of the total, and one showing the HP damage the task will deal. The description is now treated as the main heading. The example code block was simplified with a minimal left border accent. The victory screen was also cleaned up. It now shows a small “BOSS DEFEATED” label above the title, consistent with the badge style used throughout the rest of the UI. Global Styles Google Fonts were loaded globally for Inter and JetBrains Mono. Custom scrollbar styles were applied to keep the dark theme consistent throughout. Default browser margin and padding resets were added. Notes The color palette is strictly black, white, and grays. No gradients, no colored backgrounds, no glow effects. The only color exception is the red damage badge and the low-HP bar state, which are intentional signals to the player."}, {"post_id": 401, "ts": "2026-06-01T19:53:37Z", "hours": 0.4581, "text": "Project Setup We initialized a React application using Vite for fast development and bundling. For the code editing experience, we integrated the Monaco Editor ( @monaco-editor /react) to provide a realistic coding interface. State Management We implemented a custom hook, useGameState, to handle the game’s state. This tracks the boss’s HP, current level, and player progress. All progress is persisted using localStorage so players can refresh the page without losing their game. User Interface We designed a dark-mode interface with a split layout. The left panel displays the “Loop Goblin” boss, their current HP, and a dynamic health bar. The right panel contains the task description and the Monaco Editor. We added CSS animations for taking damage and completing tasks to make the gameplay feel responsive. Gameplay Logic The first boss, Loop Goblin, starts with 100 HP. We implemented four introductory coding tasks: Writing a loop from 1 to 3 Creating a variable with the value 10 Writing a function named ‘attack’ Creating an array and using the ‘.length’ property For the MVP, code validation is handled through fast string matching rather than executing arbitrary JavaScript. This ensures security and simplicity while verifying the core concepts of the user’s input. Next Steps Deploy the initial MVP to Vercel. Add additional bosses and more complex tasks. Consider implementing a secure sandbox for executing user code in future versions."}]...
|
Title: Coding Boss Fight by @Xfhe | Stardance
Dev Title: Coding Boss Fight by @Xfhe | Stardance
Devlogs:
Project Setup We initialized a React application using Vite for fast development and bundling. For the code editing experience, we integrated the Monaco Editor ( @monaco-editor /react) to provide a realistic coding interface. State Management We implemented a custom hook, useGameState, to handle the game’s state. This tracks the boss’s HP, current level, and player progress. All progress is persisted using localStorage so players can refresh the page without losing their game. User Interface We designed a dark-mode interface with a split layout. The left panel displays the “Loop Goblin” boss, their current HP, and a dynamic health bar. The right panel contains the task description and the Monaco Editor. We added CSS animations for taking damage and completing tasks to make the gameplay feel responsive. Gameplay Logic The first boss, Loop Goblin, starts with 100 HP. We implemented four introductory coding tasks: Writing a loop from 1 to 3 Creating a variable with the value 10 Writing a function named ‘attack’ Creating an array and using the ‘.length’ property For the MVP, code validation is handled through fast string matching rather than executing arbitrary JavaScript. This ensures security and simplicity while verifying the core concepts of the user’s input. Next Steps Deploy the initial MVP to Vercel. Add additional bosses and more complex tasks. Consider implementing a secure sandbox for executing user code in future versions.
Overview This session focused entirely on improving the visual interface. No new game mechanics were added. The goal was to make the layout clearer, more informative, and more polished without introducing gradients or heavy visual effects. Changes Boss Panel The boss panel was restructured. The boss name and HP bar are now displayed in a compact stat block below the sprite. The HP bar was thinned down and simplified. A row of task progress dots was added beneath it, one dot per task. Each dot fills white when a task is completed. The active task pulses dimly to show the current position. This gives the player a clear sense of progress at a glance without needing to count tasks. A damage flash effect was also added. When the boss takes a hit, a red ring briefly expands around the sprite and fades out. This makes successful submissions feel more impactful. Task Panel The task panel was redesigned with a header row containing two badges: one showing the current task number out of the total, and one showing the HP damage the task will deal. The description is now treated as the main heading. The example code block was simplified with a minimal left border accent. The victory screen was also cleaned up. It now shows a small “BOSS DEFEATED” label above the title, consistent with the badge style used throughout the rest of the UI. Global Styles Google Fonts were loaded globally for Inter and JetBrains Mono. Custom scrollbar styles were applied to keep the dark theme consistent throughout. Default browser margin and padding resets were added. Notes The color palette is strictly black, white, and grays. No gradients, no colored backgrounds, no glow effects. The only color exception is the red damage badge and the low-HP bar state, which are intentional signals to the player.
Architecture and Routing The application now supports multiple distinct screens and states, moving beyond a single static view: Intro Screen: A landing page that introduces the game, lists the available bosses, and explains the rules. Boss Defeated Screen: A transition state that displays the player’s statistics for the defeated boss and previews the next challenge. Victory Screen: The final state reached after completing all content, presenting a summary of the player’s total time, attempts, and overall accuracy. Multi-Boss Support The hardcoded single-boss logic has been refactored. The game state now imports a structured array of bosses. A second boss, “Array Alchemist”, has been integrated into the loop. When a boss reaches zero HP, the game seamlessly transitions to the next boss in the sequence, resetting health while preserving total accumulated statistics. Audio Feedback To improve interaction, a lightweight audio system was introduced using the native Web Audio API. This avoids the need to load external MP3 files. Synthesized tones are now played during specific events: Correct submission (Hit) Incorrect submission (Miss) Boss Defeated Game Completed (Victory) Quality of Life Improvements Keyboard Shortcuts: Added a global event listener to the Monaco Editor. Players can now execute their code using Ctrl + Enter (or Cmd + Enter), greatly speeding up the trial-and-error process. Auto-dismissing Alerts: Feedback banners (success/error messages) are now automatically cleared after 2.5 seconds to prevent visual clutter on the screen. Visual Polish: The boss UI was updated to include a brief description of the current boss, and the health/task progress bars were refined to match the strict minimalist aesthetic.
New Feature Update We have added a new boss to the game to increase the challenge and cover more JavaScript concepts. Syntax Sorcerer The Syntax Sorcerer is the third boss you will face. This boss has 150 Health Points and tests your knowledge of more advanced JavaScript syntax. Tasks included for this boss: Arrow Functions: You must write an arrow function that returns a specific value. This helps practice modern function syntax. Error Handling: You are required to write a try-catch block. This is essential for managing errors in real applications. Spread Operator: You need to use the spread operator on an array. This tests your understanding of array manipulation. DOM Demon The DOM Demon is the fourth and final boss. This boss has 200 Health Points and tests your ability to interact with the Document Object Model (DOM). Tasks included for this boss: Selecting Elements: You must use methods like getElementById. Creating Elements: You need to create new HTML elements dynamically using createElement. Modifying Classes: You are required to manipulate an element’s classList. Event Listeners: You need to attach event listeners to elements to make them interactive. Combo System We introduced a Combo System to reward accurate coding. How it works: If you complete a task correctly on your very first try, your combo increases. Visuals: Your current combo is displayed at the top of the game interface during a run. Reset: If you make a mistake and get the answer wrong, your combo resets to zero. These additions make the game longer, provide a better learning curve, and add a layer of challenge for skilled players who want to maintain a high combo.
Player Health and Game OverPlayers now have a persistent health bar starting at 100 HP. Incorrect code submissions are no longer consequence-free. Every failed attempt causes the boss to attack, dealing 15 damage to the player. If the player’s health reaches zero, a Game Over screen is triggered, wiping all progress and forcing a complete restart.Combo System and HealingTo balance the strict punishment for errors, the combo system has been fully integrated into the gameplay loop. The UI now features dynamic combo badges that appear over the boss when players submit consecutive correct answers. Reaching a 3x combo mechanically rewards the player by healing them for 15 HP. This encourages careful code construction over brute-force trial and error.Live Speedrun TimerA live timer has been added to the top navigation bar. It actively tracks the time spent on the current boss combined with the historical time from previously defeated bosses. This adds a subtle layer of pressure and allows players to track their speedrun performance in real time.
Ships:
I built “Coding Boss Fight”, a browser-based RPG where players defeat bosses by solving real JavaScript coding challenges. The main challenge was managing complex game states across multiple screens (Intro, Boss Defeated, Victory) and building a custom sound system using the native Web Audio API instead of relying on external audio files. I am particularly proud of the smooth routing between different bosses and the minimalist, distraction-free UI design. To test the project, simply open the app, read the boss’s task requirements, write valid JavaScript in the built-in editor, and press Ctrl+Enter (or click Run) to attack.
Player Health and Game Over Players now have a persistent health bar starting at 100 HP. Incorrect code submissions are no longer consequence-free. Every failed attempt causes the boss to attack, dealing 15 damage to the player. If the player’s health reaches zero, a Game Over screen is triggered, wiping all progress and forcing a complete restart. Combo System and Healing To balance the strict punishment for errors, the combo system has been fully integrated into the gameplay loop. The UI now features dynamic combo badges that appear over the boss when players submit consecutive correct answers. Reaching a 3x combo mechanically rewards the player by healing them for 15 HP. This encourages careful code construction over brute-force trial and error. Live Speedrun Timer A live timer has been added to the top navigation bar. It actively tracks the time spent on the current boss combined with the historical time from previously defeated bosses. This adds a subtle layer of pressure and allows players to track their speedrun performance in real time....
|
1793249634.2030618
|
1793336034.2030618
|
|
3140
|
禅文 Zenwen by @dylank | Stardance
|
dylank
|
1
|
21.0
|
243
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T00:49:03Z", "hours": 21.0, "multiplier": 11.65, "payout": 243, "blessing": "neutral", "text": "🏯 禅文 Zenwen Ship #1 Learning Chinese is hard, Zenwen makes it easier. Use the live page here: Zenwen Demo Bear in mind, it’s a demo, so no data is saved. As soon as you reload it’ll be lost. More info on running locally here: Main Repository What even is 禅文 Zenwen? Zenwen is an app to help you learn Chinese, and other languages if you wish. As of this ship, Zenwen is a vocab system designed to work for just about any need a user wants, while simple and easy to use. What was challenging First and foremost, learning Flutter was challenging. Dart is simple enough, but Flutter was something I had never seen before. The second challenge was figuring out an efficient data structure to store the many things users can create. This was challenging because I had to figure out how to store many decks with many vocab, while also being able to sort through them, search them, delete data, and access them quickly. Why I am proud! What makes me proud is that I learned an entire new framework and a lot about data storage that I had previously never touched. Learning this unlocks a whole world of coding opportunities that I’m excited to explore! Another thing I’m proud about is that I’ve learned how to debug better. I have learned how to use print functions usefully as well as things I previously didn’t know would cause errors.", "repo": "https://github.com/RandoWhoCodes/Zenwen/", "demo": "https://randowhocodes.github.io/Zenwen_Demo/"}]...
|
[{"post_id": 21193, "ts": "202 [{"post_id": 21193, "ts": "2026-07-03T00:20:20Z", "hours": 0.4414, "text": "🏯 禅文 Zenwen Day 11: SHIIIIIIIP!!!! Finally! Zenwen is shipped for the first time! (but expect lots more to come) Live demo here: Zenwen Demo , bear in mind all data is temporary and will be lost if you refresh. QoL Improvements Learning languages is no longer tedious. Handle everything you need in 1 place without complications. Supports every language! There are 3 things you can add when creating vocab: character, pronunciation, meaning. This means you could translate Egyptian hieroglyphics to Hindi as a French speaker if you really wanted to. Search for decks, and vocab! Forgot what deck some vocab is in, or just have way too many decks? No worries, just search for it! My Dictionary, all your vocab in 1 place! Simply want to see how much vocab you have or are just skimming through what you know? This is the perfect feature for you. 🐉 Chinese word of the day: 进步: progress, to make progress Pronounced: jìnbù Example: “我有了一点进步”, “I have made a little progress”"}, {"post_id": 20482, "ts": "2026-07-02T02:45:29Z", "hours": 0.7764, "text": "🏯 禅文 Zenwen Day 10: EVERYTHING WORKS!!! Finally! What I did during these 44 minutes Long story short, there was an indexing error when a search result wasn’t found. It was supposed to give a message like “no results matched your search”, but instead, it gave a big scary red screen saying “index is supposed to be less than 1: 1”. I had no clue what was wrong. Took a while to figure it out. Turns out I was stupid and trying to do widget.myDictionary.length when I was supposed to do widget.myDictionary[\"vocab\"].length . What’s coming next Ship! Everything is ready. Expect a ship tomorrow if I can set up the demo correctly! 🀄 Chinese word of the day Word: 买 Pronounced: mǎi Example: “我买了筷子。“ - “I bought chopsticks.”"}, {"post_id": 16117, "ts": "2026-06-26T06:28:13Z", "hours": 0.8953, "text": "🏯 Zenwen Day 9: everything works! Well, for now, at least. Overall, pretty quick and easy day. Simple bug fixes, simple feature expansions. What I did Fixed logic for when it was searching through My Dictionary for Strings that match the search Switched some 0s to 1s and stuff so it wouldn’t make duplicate search results or have indexing errors Added a search bar to the edit deck page so now you can search from every screen! What this means I’m almost ready to ship! Project works well enough to be tested, GitHub is up to date with commits. All I need to do is make the README and get a live web demo up and running! 🀄 Chinese word of the day 绿茶 (lǜ chá): Green Tea 我喜欢喝绿茶! I like drinking green tea!"}, {"post_id": 13968, "ts": "2026-06-22T22:33:18Z", "hours": 2.3914, "text": "🏯 禅文 Zenwen Day 8, SEARCH BAR WORKS (mostly)!!!! Learning Chinese is hard. Zenwen makes it easier. Create infinite decks and vocab and find them easily! Apparently Expanded() widgets can only go in certain other widgets, so I was stuck solving bugs for nearly 45 minutes. Sometimes I question why I like coding. The logic for searching vocab is broken, but that was just me being dumb. Should be easy enough to fix. Will need to do heavy optimizing after I ship because I wrote it in probably the least efficient way possible, but it’s fine for now. Chinese word of the day: 飞机 (fēi jī) Means “airplane” ”这是飞机” = “this is an airplane”"}, {"post_id": 12895, "ts": "2026-06-21T03:44:53Z", "hours": 3.4953, "text": "🏯 禅文 Zenwen Day 6 & 7 (I swear that isn’t on purpose) TL;DR Finished My Dictionary; now there’s a master list of all your vocab! Great for if you want to see your progress or just forget a word. Starded working on a search bar! Worked on making my computer less laggy (no time logged for this) The Search Bar What’s the point in being able to make a bunch of decks and vocab if it takes too long to find them? Exactly, there is none. Today I started working on adding a search bar to the header of the app. Surprisingly, the logic behind it is pretty simple. Just iterate through the Maps and Lists . If an item matches your search, add it to a results Map . What I Learned You know those simple, boring headers at the top of basically every app? That’s what us Flutter devs call an AppBar . Apparently, AppBars have multiple parts: leading title (already knew about this one) trailing actions bottom The bottom is what I use for the search bar. Essentially, the bottom is an extension of widgets that are below the title. In order to make it work, you need to give the Scaffold (the parent of the AppBar ) specific details about the extension so that it renders properly. Specifically the height, which can’t be dynamic. 🀄 Since you made it this far Chinese word of the day: 吗 (pronounced “ma”) used to turn a statement into a yes or no question 你喜欢茶: You like tea. 你喜欢茶 吗 : Do you like tea?"}, {"post_id": 11430, "ts": "2026-06-18T18:14:30Z", "hours": 2.6472, "text": "🏯 禅文 Zenwen Day 5: documenting & my favorite feature! (and fixing 1028 issues with my computer) ⌚ TL;DR I added lots of comments to the code so that future me & other people can easily understand the code. Also started adding a cool feature called My Dictionary. 📝 Adding comments (finally) Wanna know something I never do? Add comments. Well at least not until today. Today I spent most of my time doing a well needed cleanup of the codebase, adding comments and making it readable to future me and other people. Since flutter can quickly start looking like a random jumble of widgets, adding these comments really helped me understand exactly what everything is doing and will help others understand as well. 📕 My Dictionary, my favorite feature! I also started working on adding a major QoL improvement, a deck that contains all the vocab you’ve created. Have you ever had a word on the tip of your tongue but just can’t quite remember it? That’s no longer a problem. With My Dictionary, you can open it up and quickly search up that word in just 3 clicks. You can also see how much vocab you have created, which feels amazing when you see how much you’ve learned! 🪲 1028 issues with my computer Don’t ask. I don’t have any answers for you. I checked Lenovo Vantage and now it finally makes sense why my computer struggled to run the file explorer. After a few hours of a well needed scan and fix by Lenovo Smart Performance, my computer now runs (mostly) smoothly once again."}, {"post_id": 10470, "ts": "2026-06-17T06:26:24Z", "hours": 2.2861, "text": "🏯 禅文 Zenwen - Devlog 4️⃣ 👋 你好! Zenwen is an app to help people learn Chinese. As someone with a 970 day Duolingo streak, I know what us language learners need. ⌚ TL;DR HIT THE 10 HOUR MARK 🎉 Today I made the vocab page and made it so you can delete decks. I also polished up the graphics a bit. 📕 What I Learned Today I learned lots of useful things! I learned about some new styling for Material() widgets, along with 4 new widgets: Stack() IntrinsicHeight() Expanded() Padding() Also learned how to make if else statements in ListView.builders! 🗣️ In depth summary Today’s main objective was making the vocab page. To do this I used a simple ListView.builder to iterate through the vocab lists. One issue I had was the layout of the vocab. I wanted an equally spaced horizontal layout with a delete button floating at the right. This was a problem because I only knew about the Row() widget. In order to get the layout I wanted, I had to learn about Stack() and IntrinsicHeight() and Padding() and Expanded(). Another thing I ran into was that it crashed when I deleted all the decks or all the vocab. In order to fix this I learned about if else statements to create different widgets based on the conditions! 👣 Next Steps I’m almost ready to ship! I still have to make a few things though: a master vocab deck, and ideally a search bar. If the search bar goes well then I can also add filters for the decks if I decide it’s worth it."}, {"post_id": 9750, "ts": "2026-06-16T05:30:36Z", "hours": 2.9556, "text": "🏯 禅文 Zenwen - Devlog 3️⃣ 你好! Zenwen is an app to help people ACTUALLY learn languages. As someone with a 970 day Duolingo streak, I know what us learners need. The first thing I’m making for the app is vocab decks, and I’m almost ready to ship this! Today was focused on displaying the actual vocab in the decks as well as being able to add new vocab. Learned a lot about how to handle inputs in Flutter. This morning I realized my button layout wasn’t very convenient for users, so I had to rearrange it, which forced me to learn about InkWell, which will help me learn a lot moving forward."}, {"post_id": 9005, "ts": "2026-06-15T00:43:06Z", "hours": 1.8233, "text": "🏯 禅文 Zenwen - Devlog 2️⃣ 你好! Zenwen is an app I’m making with Flutter to help people ACRUALLY learn languages. As someone with a 970 day Duolingo streak, I know what us language learners need to actually be successful. Made a lot of progress today! I developed a basic display of vocab decks, which includes: title, description, practice button, edit button. Also made a way to create new vocab decks, by clicking the button at the bottom right. You can’t view or add vocab yet, that’s hopefully coming tomorrow. The UI is pretty bare bones right now. I’m focused on functionality before I make it look good. As for bugs I encountered, the entire app crashed when I switched from using a stateless widget to a stateful widget. Quickly discovered this was me being stupid because I forgot to restart the app. Apparently hot reload doesn’t like big changes between stateless and stateful."}, {"post_id": 8526, "ts": "2026-06-14T05:35:36Z", "hours": 3.3131, "text": "🏯 禅文 Zenwen - Devlog 1️⃣ Zenwen is (will be) an app to help people ACTUALLY learn languages like Chinese. As someone with a 960 day Duolingo streak, I know exactly what us language learners need. My first ship will be a tool for making and studying vocab decks to seamlessly fit in with your day. Today was a short but productive. The app is basically just a blank screen on the front end, but the systems are falling into place in the code. Today I developed the system for storing vocab decks. Now it should be fairly easy to add flashcards and other study tools. The first hour or so of the day was spent fixing VSCode because lots of things were breaking. It said my phone was connected, but it wouldn’t show up. The Flutter extension also stopped working. Changed the name from Zhenwen to Zenwen. Zhenwen has religious cultural meanings, so I want to respect that. 真文 means “true text”, which has meanings in Taoism. 禅文 (technically chánwén) essentially means “peaceful language”. For your entertainment here is a screenshot of a stupid bug that confused me for 30 minutes. 99k pixel overflow. Can’t wait to see what the next week will bring and watch this app come to life!"}]...
|
Title: 禅文 Zenwen by @dylank | Stardance
Devlogs:
Title: 禅文 Zenwen by @dylank | Stardance
Devlogs:
🏯 禅文 Zenwen - Devlog 1️⃣ Zenwen is (will be) an app to help people ACTUALLY learn languages like Chinese. As someone with a 960 day Duolingo streak, I know exactly what us language learners need. My first ship will be a tool for making and studying vocab decks to seamlessly fit in with your day. Today was a short but productive. The app is basically just a blank screen on the front end, but the systems are falling into place in the code. Today I developed the system for storing vocab decks. Now it should be fairly easy to add flashcards and other study tools. The first hour or so of the day was spent fixing VSCode because lots of things were breaking. It said my phone was connected, but it wouldn’t show up. The Flutter extension also stopped working. Changed the name from Zhenwen to Zenwen. Zhenwen has religious cultural meanings, so I want to respect that. 真文 means “true text”, which has meanings in Taoism. 禅文 (technically chánwén) essentially means “peaceful language”. For your entertainment here is a screenshot of a stupid bug that confused me for 30 minutes. 99k pixel overflow. Can’t wait to see what the next week will bring and watch this app come to life!
🏯 禅文 Zenwen - Devlog 2️⃣ 你好! Zenwen is an app I’m making with Flutter to help people ACRUALLY learn languages. As someone with a 970 day Duolingo streak, I know what us language learners need to actually be successful. Made a lot of progress today! I developed a basic display of vocab decks, which includes: title, description, practice button, edit button. Also made a way to create new vocab decks, by clicking the button at the bottom right. You can’t view or add vocab yet, that’s hopefully coming tomorrow. The UI is pretty bare bones right now. I’m focused on functionality before I make it look good. As for bugs I encountered, the entire app crashed when I switched from using a stateless widget to a stateful widget. Quickly discovered this was me being stupid because I forgot to restart the app. Apparently hot reload doesn’t like big changes between stateless and stateful.
🏯 禅文 Zenwen - Devlog 3️⃣ 你好! Zenwen is an app to help people ACTUALLY learn languages. As someone with a 970 day Duolingo streak, I know what us learners need. The first thing I’m making for the app is vocab decks, and I’m almost ready to ship this! Today was focused on displaying the actual vocab in the decks as well as being able to add new vocab. Learned a lot about how to handle inputs in Flutter. This morning I realized my button layout wasn’t very convenient for users, so I had to rearrange it, which forced me to learn about InkWell, which will help me learn a lot moving forward.
🏯 禅文 Zenwen - Devlog 4️⃣ 👋 你好! Zenwen is an app to help people learn Chinese. As someone with a 970 day Duolingo streak, I know what us language learners need. ⌚ TL;DR HIT THE 10 HOUR MARK 🎉 Today I made the vocab page and made it so you can delete decks. I also polished up the graphics a bit. 📕 What I Learned Today I learned lots of useful things! I learned about some new styling for Material() widgets, along with 4 new widgets: Stack() IntrinsicHeight() Expanded() Padding() Also learned how to make if else statements in ListView.builders! 🗣️ In depth summary Today’s main objective was making the vocab page. To do this I used a simple ListView.builder to iterate through the vocab lists. One issue I had was the layout of the vocab. I wanted an equally spaced horizontal layout with a delete button floating at the right. This was a problem because I only knew about the Row() widget. In order to get the layout I wanted, I had to learn about Stack() and IntrinsicHeight() and Padding() and Expanded(). Another thing I ran into was that it crashed when I deleted all the decks or all the vocab. In order to fix this I learned about if else statements to create different widgets based on the conditions! 👣 Next Steps I’m almost ready to ship! I still have to make a few things though: a master vocab deck, and ideally a search bar. If the search bar goes well then I can also add filters for the decks if I decide it’s worth it.
🏯 禅文 Zenwen Day 5: documenting & my favorite feature! (and fixing 1028 issues with my computer) ⌚ TL;DR I added lots of comments to the code so that future me & other people can easily understand the code. Also started adding a cool feature called My Dictionary. 📝 Adding comments (finally) Wanna know something I never do? Add comments. Well at least not until today. Today I spent most of my time doing a well needed cleanup of the codebase, adding comments and making it readable to future me and other people. Since flutter can quickly start looking like a random jumble of widgets, adding these comments really helped me understand exactly what everything is doing and will help others understand as well. 📕 My Dictionary, my favorite feature! I also started working on adding a major QoL improvement, a deck that contains all the vocab you’ve created. Have you ever had a word on the tip of your tongue but just can’t quite remember it? That’s no longer a problem. With My Dictionary, you can open it up and quickly search up that word in just 3 clicks. You can also see how much vocab you have created, which feels amazing when you see how much you’ve learned! 🪲 1028 issues with my computer Don’t ask. I don’t have any answers for you. I checked Lenovo Vantage and now it finally makes sense why my computer struggled to run the file explorer. After a few hours of a well needed scan and fix by Lenovo Smart Performance, my computer now runs (mostly) smoothly once again.
🏯 禅文 Zenwen Day 6 & 7 (I swear that isn’t on purpose) TL;DR Finished My Dictionary; now there’s a master list of all your vocab! Great for if you want to see your progress or just forget a word. Starded working on a search bar! Worked on making my computer less laggy (no time logged for this) The Search Bar What’s the point in being able to make a bunch of decks and vocab if it takes too long to find them? Exactly, there is none. Today I started working on adding a search bar to the header of the app. Surprisingly, the logic behind it is pretty simple. Just iterate through the Maps and Lists . If an item matches your search, add it to a results Map . What I Learned You know those simple, boring headers at the top of basically every app? That’s what us Flutter devs call an AppBar . Apparently, AppBars have multiple parts: leading title (already knew about this one) trailing actions bottom The bottom is what I use for the search bar. Essentially, the bottom is an extension of widgets that are below the title. In order to make it work, you need to give the Scaffold (the parent of the AppBar ) specific details about the extension so that it renders properly. Specifically the height, which can’t be dynamic. 🀄 Since you made it this far Chinese word of the day: 吗 (pronounced “ma”) used to turn a statement into a yes or no question 你喜欢茶: You like tea. 你喜欢茶 吗 : Do you like tea?
🏯 禅文 Zenwen Day 8, SEARCH BAR WORKS (mostly)!!!! Learning Chinese is hard. Zenwen makes it easier. Create infinite decks and vocab and find them easily! Apparently Expanded() widgets can only go in certain other widgets, so I was stuck solving bugs for nearly 45 minutes. Sometimes I question why I like coding. The logic for searching vocab is broken, but that was just me being dumb. Should be easy enough to fix. Will need to do heavy optimizing after I ship because I wrote it in probably the least efficient way possible, but it’s fine for now. Chinese word of the day: 飞机 (fēi jī) Means “airplane” ”这是飞机” = “this is an airplane”
🏯 Zenwen Day 9: everything works! Well, for now, at least. Overall, pretty quick and easy day. Simple bug fixes, simple feature expansions. What I did Fixed logic for when it was searching through My Dictionary for Strings that match the search Switched some 0s to 1s and stuff so it wouldn’t make duplicate search results or have indexing errors Added a search bar to the edit deck page so now you can search from every screen! What this means I’m almost ready to ship! Project works well enough to be tested, GitHub is up to date with commits. All I need to do is make the README and get a live web demo up and running! 🀄 Chinese word of the day 绿茶 (lǜ chá): Green Tea 我喜欢喝绿茶! I like drinking green tea!
🏯 禅文 Zenwen Day 10: EVERYTHING WORKS!!! Finally! What I did during these 44 minutes Long story short, there was an indexing error when a search result wasn’t found. It was supposed to give a message like “no results matched your search”, but instead, it gave a big scary red screen saying “index is supposed to be less than 1: 1”. I had no clue what was wrong. Took a while to figure it out. Turns out I was stupid and trying to do widget.myDictionary.length when I was supposed to do widget.myDictionary["vocab"].length . What’s coming next Ship! Everything is ready. Expect a ship tomorrow if I can set up the demo correctly! 🀄 Chinese word of the day Word: 买 Pronounced: mǎi Example: “我买了筷子。“ - “I bought chopsticks.”
🏯 禅文 Zenwen Day 11: SHIIIIIIIP!!!! Finally! Zenwen is shipped for the first time! (but expect lots more to come) Live demo here: Zenwen Demo , bear in mind all data is temporary and will be lost if you refresh. QoL Improvements Learning languages is no longer tedious. Handle everything you need in 1 place without complications. Supports every language! There are 3 things you can add when creating vocab: character, pronunciation, meaning. This means you could translate Egyptian hieroglyphics to Hindi as a French speaker if you really wanted to. Search for decks, and vocab! Forgot what deck some vocab is in, or just have way too many decks? No worries, just search for it! My Dictionary, all your vocab in 1 place! Simply want to see how much vocab you have or are just skimming through what you know? This is the perfect feature for you. 🐉 Chinese word of the day: 进步: progress, to make progress Pronounced: jìnbù Example: “我有了一点进步”, “I have made a little progress”
Ships:
🏯 禅文 Zenwen Ship #1 Learning Chinese is hard, Zenwen makes it easier. Use the live page here: Zenwen Demo Bear in mind, it’s a demo, so no data is saved. As soon as you reload it’ll be lost. More info on running locally here: Main Repository What even is 禅文 Zenwen? Zenwen is an app to help you learn Chinese, and other languages if you wish. As of this ship, Zenwen is a vocab system designed to work for just about any need a user wants, while simple and easy to use. What was challenging First and foremost, learning Flutter was challenging. Dart is simple enough, but Flutter was something I had never seen before. The second challenge was figuring out an efficient data structure to store the many things users can create. This was challenging because I had to figure out how to store many decks with many vocab, while also being able to sort through them, search them, delete data, and access them quickly. Why I am proud! What makes me proud is that I learned an entire new framework and a lot about data storage that I had previously never touched. Learning this unlocks a whole world of coding opportunities that I’m excited to explore! Another thing I’m proud about is that I’ve learned how to debug better. I have learned how to use print functions usefully as well as things I previously didn’t know would cause errors....
|
1793285831.8878
|
1793372231.8878
|
|
7489
|
Weather app by @jupeme6 | Stardance
|
jupeme6
|
2
|
21.0
|
251
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-09T03:15:38Z", "hours": 7.0, "multiplier": 14.13, "payout": 93, "blessing": "neutral", "text": "What did you make? A weather app that lets you search the current weather of any city and get a 5-day forecast. Each search shows temperature, humidity, wind speed, feels-like, and a description, with a GIF background that matches the weather condition (sun, rain, snow, storm, etc.). Built in four betas: basic lookup, glassmorphism redesign with weather GIFs, 5-day forecast with a temperature chart drawn on canvas, and the final version with geolocation, favorites, PWA support, plus a settings panel with language (ES/EN) and units (Celsius/Fahrenheit) toggles added in response to reviewer feedback. The app is installable on desktop and mobile, works offline, and uses OpenWeatherMap + Giphy APIs. What was challenging? Two bugs almost broke me. My editor’s autocomplete kept rewriting value to ariaValueMax , which silently broke the search button in two projects. Later, when I tried to extend my mostrarClima function by saving the old one and redefining it, I caused infinite recursion because of JavaScript hoisting. Fix was to use a function expression instead. Also, the Giphy search API returned random GIFs that didn’t represent the weather (got a dancing water drop for London), so I picked one fixed GIF per weather type by hand and hardcoded the URLs. The internationalization had a sneaky bug too. The language toggle translated the main UI but left the forecast section in Spanish because that code was hardcoded from an earlier beta. Had to re-query the API with the correct lang parameter and re-translate the forecast cards, the canvas day labels, and the legend separately. What are you proud of? The temperature chart is drawn with vanilla canvas, no Chart.js, just moveTo/lineTo/arc. About 60 lines of code, exactly the result I wanted. Also the weather GIF backgrounds: each weather type has a fixed GIF picked by hand, so it feels like you’re actually looking at the sky of that city. And the whole thing works as an installable PWA with offline support, plus now supports English and Fahrenheit for international users. What should people know so they can test your project? Open the demo URL and type a city name (Madrid, London, Tokyo, New York). You’ll see the current weather with a matching GIF background, plus a 5-day forecast with a temperature chart below. Click the gear icon in the top right to open settings and switch between Spanish / English and Celsius / Fahrenheit. Click the star next to the city name to add it to favorites. Click “My location” to get weather for your actual coordinates. On Chrome you can install the app from the address bar icon. Live demo: https://notjuangamer10.github.io/weather-app/ Source: https://github.com/notjuangamer10/weather-app", "repo": "https://github.com/NOTJuangamer10/weather-app", "demo": "https://notjuangamer10.github.io/weather-app/"}, {"ship_num": 2, "ts": "2026-08-01T12:18:21Z", "hours": 14.0, "multiplier": 11.24, "payout": 158, "blessing": "neutral", "text": "What did you make? A weather app that lets you search the current weather of any city and get a 5-day forecast. Each search shows temperature, humidity, wind speed, feels-like, and a description, with a GIF background that matches the weather condition (sun, rain, snow, storm, etc.). Built in four betas: basic lookup, glassmorphism redesign with weather GIFs, 5-day forecast with a temperature chart drawn on canvas, and the final version with geolocation, favorites and PWA support. The app is installable on desktop and mobile, works offline, and uses OpenWeatherMap + Giphy APIs. What was challenging? Two bugs almost broke me. My editor’s autocomplete kept rewriting value to ariaValueMax , which silently broke the search button in two projects. Later, when I tried to extend my mostrarClima function by saving the old one and redefining it, I caused infinite recursion because of JavaScript hoisting - function declarations get hoisted, so I was saving the new function instead of the old one. Fix was to use a function expression instead. Also, the Giphy search API returned random GIFs that didn’t represent the weather (got a dancing water drop for London), so I picked one fixed GIF per weather type by hand and hardcoded the URLs. What are you proud of? The temperature chart is drawn with vanilla canvas - no Chart.js, just moveTo/lineTo/arc. About 60 lines of code, exactly the result I wanted. Also the weather GIF backgrounds: instead of a static gradient or random GIFs, each weather type has a fixed GIF picked by hand, so it feels like you’re actually looking at the sky of that city. And the whole thing works as an installable PWA with offline support. What should people know so they can test your project? Open the demo URL and type a city name (Madrid, London, Tokyo, New York). You’ll see the current weather with a matching GIF background, plus a 5-day forecast with a temperature chart below. Click the star next to the city name to add it to favorites — they show up as chips and persist across reloads. Click “My location” to get weather for your actual coordinates (browser will ask for permission). On Chrome you can install the app from the address bar icon, after that it opens in its own window and works offline. Live demo: https://notjuangamer10.github.io/weather-app/ Source: https://github.com/notjuangamer10/weather-app", "repo": "https://github.com/NOTJuangamer10/weather-app", "demo": "https://notjuangamer10.github.io/weather-app/"}]...
|
[{"post_id": 43697, "ts": "202 [{"post_id": 43697, "ts": "2026-08-09T03:14:25Z", "hours": 6.5617, "text": "Small patch for the Weather App based on reviewer feedback. Three fixes. First, the language toggle now actually translates the full UI. Before, switching to English left several strings in Spanish: the forecast heading, the day labels in both the cards and the canvas chart, the “highs / lows” legend, and most embarrassingly, the weather description itself (“algo de nubes” instead of “scattered clouds”). The issue was that the forecast code was hardcoded in Spanish. Now it queries the OpenWeatherMap API with the correct lang parameter, and re-translates the forecast cards, the canvas labels, and the legend when the language changes. Second, the units toggle (Celsius / Fahrenheit) was already working but now also converts wind speed from km/h to mph when Fahrenheit is selected, which makes sense for imperial users. Third, the welcome state is in place. First-time visitors now see a pulsing sun icon and a short prompt instead of a blank page with just a search bar. Thanks to everyone who tested and left feedback. Three reviewers asked for multi-language support and one asked for unit conversion, so those were the top requested features."}, {"post_id": 38538, "ts": "2026-08-01T00:07:24Z", "hours": 3.4889, "text": "Beta 4, the final version of the Weather App, is up. Three new things: Geolocation: there’s a “My location” button next to the search bar that uses the browser’s geolocation API to get your coordinates, then queries OpenWeatherMap by lat/lon instead of city name. Useful when you don’t know the exact city name or just want your local weather fast. Favorites: each result has a star icon next to the city name. Click it to add the city to your favorites, which show up as chips below the search bar. Click a chip to search that city again, click the × to remove it. Favorites are stored in localStorage so they survive reloads. PWA: added a manifest and a service worker, so the app is now installable on desktop and mobile. Once installed it opens in its own window without the browser chrome, and the service worker caches the main files so it works offline too. Also changed the font from system-ui to Space Grotesk. The default sans-serif felt a bit generic, Space Grotesk gives it more character, especially on the big temperature numbers. This is the last beta for this project. Calling Weather App done."}, {"post_id": 37533, "ts": "2026-07-30T10:47:19Z", "hours": 3.8489, "text": "Beta 3 of the Weather App is up. Now after the current weather you get a 5-day forecast with the day name, weather icon and max/min temperature for each day!!!(kinda usefull i know), plus a small chart below showing the max (red) and min (blue) temperatures across the week. The chart is drawn on a canvas with vanilla JS, no Chart.js or any library, just moveto/lineTo/arc. The tricky part was the forecast API. It returns a data point every 3 hours, so I had to filter and group them by day, taking the actual max and min of all the 3-hour readings inside each day. Otherwise the “max” was just the temperature at a random hour, not the real daily high. I also had to redefine my existing mostrarClima function to also trigger the forecast fetch - I kept the old function in a variable and called it inside the new one, so the GIF background logic I had before still runs. Took me a while to figure that pattern out. Next version will probably be the last: geolocation + favorites + installable PWA. But i don`t really know if geolocation is a good idea Update:Hit a nasty bug in this version: every search returned “city not found” even for Madrid, (which definitely works). Turns out the pattern I used to extend mostrarClima (saving the old function and redefining it) caused an infinite recursion because of JavaScript hoisting -function declarations get hoisted to the top, so when I saved “the old function” I was actually saving the new one, which then called itself forever. Changed function mostrarClima() to mostrarClima = function() (function expression instead of declaration) and it fixed it. Took me way too long to figure out."}, {"post_id": 36722, "ts": "2026-07-28T23:22:38Z", "hours": 4.1825, "text": "Beta 2 of the Weather App is up. The UI got a real redesign: the background is now a GIF that matches the weather condition based on the info that OpenWeathermap gave me: a sunny sky for clear weather, falling rain for rainy cities, snow for cold ones, lightning for storms, etc. Cards use glassmorphism (frosted glass) so the GIF shows through while the text stays readable, with a dark overlay to keep contrast. Originally I called the Giphy API on every search and got a random GIF, but the results were inconsistent, for example, once I searched London and got a dancing water drop instead of actual rain. So I picked one fixed GIF per weather type by hand and hardcoded them. Now it feels like you’re actually looking at the sky of that city, same view every time. Next version will add a 5-day forecast below the current weather."}, {"post_id": 36048, "ts": "2026-07-27T21:28:29Z", "hours": 2.5794, "text": "First version of my Weather App is up. You type a city name, hit Search, and it pulls temperature, humidity, wind, feels-like and a short description from OpenWeatherMap. UI is intentionally plain cuz I wanted to make sure the API actually works before making it pretty. Fought my editor’s autocomplete again: it kept rewriting value to ariaValueMax , which silently broke the search button. Same bug as in my last project, should really disable that suggestion. Also took me a while to get the .then / .catch / .finally chain right, especially handling 404 when the city doesn’t exist without crashing the page. Next version will be a proper redesign. Right now it works but it’s ugly."}]...
|
Title: Weather app by @jupeme6 | Stardance
Devlog Title: Weather app by @jupeme6 | Stardance
Devlogs:
First version of my Weather App is up. You type a city name, hit Search, and it pulls temperature, humidity, wind, feels-like and a short description from OpenWeatherMap. UI is intentionally plain cuz I wanted to make sure the API actually works before making it pretty. Fought my editor’s autocomplete again: it kept rewriting value to ariaValueMax , which silently broke the search button. Same bug as in my last project, should really disable that suggestion. Also took me a while to get the .then / .catch / .finally chain right, especially handling 404 when the city doesn’t exist without crashing the page. Next version will be a proper redesign. Right now it works but it’s ugly.
Beta 2 of the Weather App is up. The UI got a real redesign: the background is now a GIF that matches the weather condition based on the info that OpenWeathermap gave me: a sunny sky for clear weather, falling rain for rainy cities, snow for cold ones, lightning for storms, etc. Cards use glassmorphism (frosted glass) so the GIF shows through while the text stays readable, with a dark overlay to keep contrast. Originally I called the Giphy API on every search and got a random GIF, but the results were inconsistent, for example, once I searched London and got a dancing water drop instead of actual rain. So I picked one fixed GIF per weather type by hand and hardcoded them. Now it feels like you’re actually looking at the sky of that city, same view every time. Next version will add a 5-day forecast below the current weather.
Beta 3 of the Weather App is up. Now after the current weather you get a 5-day forecast with the day name, weather icon and max/min temperature for each day!!!(kinda usefull i know), plus a small chart below showing the max (red) and min (blue) temperatures across the week. The chart is drawn on a canvas with vanilla JS, no Chart.js or any library, just moveto/lineTo/arc. The tricky part was the forecast API. It returns a data point every 3 hours, so I had to filter and group them by day, taking the actual max and min of all the 3-hour readings inside each day. Otherwise the “max” was just the temperature at a random hour, not the real daily high. I also had to redefine my existing mostrarClima function to also trigger the forecast fetch - I kept the old function in a variable and called it inside the new one, so the GIF background logic I had before still runs. Took me a while to figure that pattern out. Next version will probably be the last: geolocation + favorites + installable PWA. But i don`t really know if geolocation is a good idea Update:Hit a nasty bug in this version: every search returned “city not found” even for Madrid, (which definitely works). Turns out the pattern I used to extend mostrarClima (saving the old function and redefining it) caused an infinite recursion because of JavaScript hoisting -function declarations get hoisted to the top, so when I saved “the old function” I was actually saving the new one, which then called itself forever. Changed function mostrarClima() to mostrarClima = function() (function expression instead of declaration) and it fixed it. Took me way too long to figure out.
Beta 4, the final version of the Weather App, is up. Three new things: Geolocation: there’s a “My location” button next to the search bar that uses the browser’s geolocation API to get your coordinates, then queries OpenWeatherMap by lat/lon instead of city name. Useful when you don’t know the exact city name or just want your local weather fast. Favorites: each result has a star icon next to the city name. Click it to add the city to your favorites, which show up as chips below the search bar. Click a chip to search that city again, click the × to remove it. Favorites are stored in localStorage so they survive reloads. PWA: added a manifest and a service worker, so the app is now installable on desktop and mobile. Once installed it opens in its own window without the browser chrome, and the service worker caches the main files so it works offline too. Also changed the font from system-ui to Space Grotesk. The default sans-serif felt a bit generic, Space Grotesk gives it more character, especially on the big temperature numbers. This is the last beta for this project. Calling Weather App done.
Small patch for the Weather App based on reviewer feedback. Three fixes. First, the language toggle now actually translates the full UI. Before, switching to English left several strings in Spanish: the forecast heading, the day labels in both the cards and the canvas chart, the “highs / lows” legend, and most embarrassingly, the weather description itself (“algo de nubes” instead of “scattered clouds”). The issue was that the forecast code was hardcoded in Spanish. Now it queries the OpenWeatherMap API with the correct lang parameter, and re-translates the forecast cards, the canvas labels, and the legend when the language changes. Second, the units toggle (Celsius / Fahrenheit) was already working but now also converts wind speed from km/h to mph when Fahrenheit is selected, which makes sense for imperial users. Third, the welcome state is in place. First-time visitors now see a pulsing sun icon and a short prompt instead of a blank page with just a search bar. Thanks to everyone who tested and left feedback. Three reviewers asked for multi-language support and one asked for unit conversion, so those were the top requested features.
Ships:
What did you make? A weather app that lets you search the current weather of any city and get a 5-day forecast. Each search shows temperature, humidity, wind speed, feels-like, and a description, with a GIF background that matches the weather condition (sun, rain, snow, storm, etc.). Built in four betas: basic lookup, glassmorphism redesign with weather GIFs, 5-day forecast with a temperature chart drawn on canvas, and the final version with geolocation, favorites and PWA support. The app is installable on desktop and mobile, works offline, and uses OpenWeatherMap + Giphy APIs. What was challenging? Two bugs almost broke me. My editor’s autocomplete kept rewriting value to ariaValueMax , which silently broke the search button in two projects. Later, when I tried to extend my mostrarClima function by saving the old one and redefining it, I caused infinite recursion because of JavaScript hoisting - function declarations get hoisted, so I was saving the new function instead of the old one. Fix was to use a function expression instead. Also, the Giphy search API returned random GIFs that didn’t represent the weather (got a dancing water drop for London), so I picked one fixed GIF per weather type by hand and hardcoded the URLs. What are you proud of? The temperature chart is drawn with vanilla canvas - no Chart.js, just moveTo/lineTo/arc. About 60 lines of code, exactly the result I wanted. Also the weather GIF backgrounds: instead of a static gradient or random GIFs, each weather type has a fixed GIF picked by hand, so it feels like you’re actually looking at the sky of that city. And the whole thing works as an installable PWA with offline support. What should people know so they can test your project? Open the demo URL and type a city name (Madrid, London, Tokyo, New York). You’ll see the current weather with a matching GIF background, plus a 5-day forecast with a temperature chart below. Click the star next to the city name to add it to favorites — they show up as chips and persist across reloads. Click “My location” to get weather for your actual coordinates (browser will ask for permission). On Chrome you can install the app from the address bar icon, after that it opens in its own window and works offline. Live demo: https://notjuangamer10.github.io/weather-app/ Source: https://github.com/notjuangamer10/weather-app
What did you make? A weather app that lets you search the current weather of any city and get a 5-day forecast. Each search shows temperature, humidity, wind speed, feels-like, and a description, with a GIF background that matches the weather condition (sun, rain, snow, storm, etc.). Built in four betas: basic lookup, glassmorphism redesign with weather GIFs, 5-day forecast with a temperature chart drawn on canvas, and the final version with geolocation, favorites, PWA support, plus a settings panel with language (ES/EN) and units (Celsius/Fahrenheit) toggles added in response to reviewer feedback. The app is installable on desktop and mobile, works offline, and uses OpenWeatherMap + Giphy APIs. What was challenging? Two bugs almost broke me. My editor’s autocomplete kept rewriting value to ariaValueMax , which silently broke the search button in two projects. Later, when I tried to extend my mostrarClima function by saving the old one and redefining it, I caused infinite recursion because of JavaScript hoisting. Fix was to use a function expression instead. Also, the Giphy search API returned random GIFs that didn’t represent the weather (got a dancing water drop for London), so I picked one fixed GIF per weather type by hand and hardcoded the URLs. The internationalization had a sneaky bug too. The language toggle translated the main UI but left the forecast section in Spanish because that code was hardcoded from an earlier beta. Had to re-query the API with the correct lang parameter and re-translate the forecast cards, the canvas day labels, and the legend separately. What are you proud of? The temperature chart is drawn with vanilla canvas, no Chart.js, just moveTo/lineTo/arc. About 60 lines of code, exactly the result I wanted. Also the weather GIF backgrounds: each weather type has a fixed GIF picked by hand, so it feels like you’re actually looking at the sky of that city. And the whole thing works as an installable PWA with offline support, plus now supports English and Fahrenheit for international users. What should people know so they can test your project? Open the demo URL and type a city name (Madrid, London, Tokyo, New York). You’ll see the current weather with a matching GIF background, plus a 5-day forecast with a temperature chart below. Click the gear icon in the top right to open settings and switch between Spanish / English and Celsius / Fahrenheit. Click the star next to the city name to add it to favorites. Click “My location” to get weather for your actual coordinates. On Chrome you can install the app from the address bar icon. Live demo: https://notjuangamer10.github.io/weather-app/ Source: https://github.com/notjuangamer10/weather-app...
|
1792878681.3015943
|
1793742681.3015943
|
|
8385
|
My first slack bot! by @AdaChan | Stardance
|
AdaChan
|
2
|
21.0
|
75
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-06T17:54:11Z", "hours": 17.0, "multiplier": 4.36, "payout": 75, "blessing": "neutral", "text": "I made Koizinho, a Slack bot with several fun and useful commands. Some of my favorite commands are /koi-user, which generates a card with information about a selected user, /koi-sound, which lets you choose and listen to animal sounds, and /koi-tts, which converts text into spoken audio. The most challenging part was definitely /koi-user. I wanted the bot to generate a custom image with information about a user, but working with Canvas in JavaScript was much harder than I expected. I ran into a lot of errors, especially with positioning and generating the image correctly. I also experimented with Python and JavaScript communicating with each other before eventually deciding to keep the image generation in JavaScript. There were many moments where fixing one error somehow created another one. 😭 I’m proud that I managed to keep working on the project even when some parts became really frustrating. I learned a lot about Slack commands, modals, APIs, image generation, audio, and organizing a larger JavaScript project. /koi-user was especially satisfying because it went from being a huge mess of errors to actually working.", "repo": "https://github.com/Hallow303/MySlackBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BJ6DKPT36"}, {"ship_num": 2, "ts": "2026-07-14T22:21:44Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a Slack bot using JavaScript. My bot features nine commands, including /koi-ping, which replies with “Pong!” to check if the bot is online; /koi-apod, which uses the NASA API to send the Astronomy Picture of the Day; commands like /koi-cat, /koi-dog, /koi-fox, and /koi-duck, which use APIs to send random animal images; /koi-sound, which sends MP3 animal sounds; /koi-say, which repeats the user’s message; and /koi-tts, which converts text to speech using Microsoft Edge TTS. To develop the project, I used various APIs, primarily to fetch images from NASA and of animals. I also worked with audio files to implement the commands related to sounds and text-to-speech conversion. The biggest challenge during development was dealing with file paths. Honestly… who decided it had to work that way? 😭 I spent a long time trying to figure out why the files weren’t being found before I managed to organize everything correctly.", "repo": "https://github.com/Hallow303/MySlackBot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BJ6DKPT36"}]...
|
[{"post_id": 63069, "ts": "202 [{"post_id": 63069, "ts": "2026-09-06T17:41:50Z", "hours": 3.6686, "text": "DevLog #22 I finally got it working. I discovered the error was in how the commands were being loaded, since they were all being loaded from a “commands” folder via index.js , they were taking too long to respond; because of the response time limit, an error kept popping up. I managed to fix it, though, and now it works =) I also fixed some bugs in other commands."}, {"post_id": 62211, "ts": "2026-09-05T14:00:46Z", "hours": 0.6558, "text": "DevLog #21 I made some adjustments, I think I’ll rewrite some of the bot’s commands, I fixed some existing errors (and created others =( unfortunately). But I think it’s getting better now."}, {"post_id": 61188, "ts": "2026-09-04T00:12:53Z", "hours": 0.4742, "text": "DevLog #20 I updated the project’s README; it remains quite simple because the bot is also simple, haha. I gave up on the /koi-user command for now, it was giving me too many headaches, so I’ll leave it for later."}, {"post_id": 59935, "ts": "2026-09-02T00:06:33Z", "hours": 0.4239, "text": "DevLog #19 I created a command called /koi-help that lists all the bot’s available commands. This will be useful since we already have quite a few commands; I plan to replace that wall of text with a menu where the user can choose a category (general, animals, utilities, games), and the bot will respond with the commands for that category to avoid cluttering the chat."}, {"post_id": 59929, "ts": "2026-09-01T23:27:35Z", "hours": 1.2503, "text": "DevLog #18 So… this command is really frustrating me; every time I fix something, another error pops up, and I don’t know what to do. At least most of it is already done. I hope I can sort this out soon."}, {"post_id": 58183, "ts": "2026-08-30T15:18:53Z", "hours": 1.08, "text": "DevLog #17 Still struggling with this command ( /koi-user ), it was supposed to be ‘easy,’ but I just ended up complicating the code even further. Well, I’m still trying to organize the elements in the image and fix an error that prevents the bot from sending the card to the user, it’s getting really annoying (why does JS have to be like this?). I hope to finish this command soon; maybe DevLog 18 will be about that, but for now, I’ll keep working on it 🥀🙏"}, {"post_id": 51363, "ts": "2026-08-20T23:57:09Z", "hours": 0.3933, "text": "DevLog #16 Fixing bugs again. I gave up on using Python + JavaScript; honestly, it was getting too difficult. Now I need to sort out the positioning, because when I was porting the code from Python to JS, the elements ended up out of place. I’m not sure if Python and JS handle image pixels differently."}, {"post_id": 50302, "ts": "2026-08-19T13:47:19Z", "hours": 0.5353, "text": "DevLog #15 I’m reviewing some commands I’ve already implemented and fixing a few issues. Strangely, the bot is taking a while to respond; it keeps displaying the message /koi-calc failed because the app did not respond... repeatedly, yet a few seconds later, the bot actually executes the command which is really odd."}, {"post_id": 49987, "ts": "2026-08-19T00:40:21Z", "hours": 0.8622, "text": "DevLog #14 Today I added two more simple commands /koi-rps and /koi-calc . /koi-calc actually already existed, but I had ended up deleting it. /koi-rps is a small Rock, Paper, Scissors game. The user chooses rock, paper, or scissors, and Koizinho makes a random choice. Then, the bot compares the two choices and announces whether the player won, lost, or tied."}, {"post_id": 46635, "ts": "2026-08-14T01:05:51Z", "hours": 1.1544, "text": "DevLogs #13 I didn’t implement any new features today; I just fixed some bugs that were cropping up in Koizinho’s commands."}, {"post_id": 44304, "ts": "2026-08-09T23:34:58Z", "hours": 0.4442, "text": "DevLog #12 I discovered that it’s possible to make .py and .js interact with each other. Now I’m learning how this communication works and trying not to explode in the process. XD"}, {"post_id": 44012, "ts": "2026-08-09T14:39:57Z", "hours": 1.5331, "text": "DevLog #11 Well, I finally finished the Easy-PIL part in Python! The card is ready now. I also set up the system so that data is automatically populated based on a JSON file. When someone uses the /koi-user command, it generates a JSON file with the selected user’s information, and then the Python script uses that data to create the card. I designed the card myself in Canva. I spent way too much time on something so simple XD, but I really liked the result!"}, {"post_id": 43630, "ts": "2026-08-09T00:23:13Z", "hours": 2.215, "text": "DevLog #10 I’m changing the user info card. I’m now using Python to generate the images. Honestly, using the JS Canvas is a real pain, and Python’s Easy-PIL turns out to be much easier. Now, the tricky part will be handling the communication between the .js and .py files."}, {"post_id": 41051, "ts": "2026-08-05T00:23:54Z", "hours": 1.3928, "text": "DevLog #9 I’m developing a new command called /koi-user . It displays information about the user you choose. Since the arguments of slash commands in Slack aren’t very organized (in the sense of having defined types), I had to work around the problem. In Discord, for example, you can define an argument as user_mention , so Discord itself understands that it’s a user. In Slack, it doesn’t work that way. You can’t even pass a mention as an argument to the command, lol. So the solution I found was to create a modal. When you use the command, a window opens with all the users in the workspace, and you can search by name or choose one from the list. After sending, the bot generates an image with some user information and sends the result to you. (Some text is still in Portuguese because I haven’t translated everything into English yet. ;-;)"}, {"post_id": 38937, "ts": "2026-08-01T15:28:57Z", "hours": 1.1856, "text": "DevLog #8 I decided to continue developing the bot, so here’s what I’ve done since the last update: 1. Code organization I improved the project’s organization by separating command groups into different files. Now, each file has a specific responsibility: animals → animal-related commands, such as /koi-duck , /koi-cat , /koi-dog , and others. space → space-related commands, such as /koi-apod . I plan to add more commands in this category later. utility → general commands, such as /koi-say and /koi-tts . This has made the code much easier to maintain and allows for easier addition of new features. 2. Loading system for responses One thing that really bothered me was when a command took a while to respond. On Discord, when a bot is processing something, a “Bot is thinking…” message appears while it works. I couldn’t find an exact equivalent on Slack, so I decided to create my own system. Now, some commands send a loading message first—for example: 🦆 Looking for a duck… Once the command finishes, that message is updated with the final response. This makes for a much better experience; before, it used to look like the bot had stopped working lol. 3. Direct messages with the bot I finally managed to enable DMs for the bot! Now you can chat directly with Koizinho in private. It can already respond to simple messages, for example: User: Hi! Koizinho: Hello! I still want to improve this part. Maybe I’ll add some form of AI or a smarter conversation system in the future."}, {"post_id": 28574, "ts": "2026-07-14T22:13:38Z", "hours": 0.2719, "text": "DevLog #7 The bot is finally online! 🚀 I deployed it to Hack Club Nest, so now it runs 24/7."}, {"post_id": 27993, "ts": "2026-07-13T23:19:54Z", "hours": 0.6744, "text": "DevLog #6 Okay… I finally finished the project’s README! 🎉 I think it turned out pretty cool; it’s not super professional yet, but I think it does a good job of showing what the bot can do. I might improve it in the future whenever I can shake off the laziness, haha. I also realized I used Axios quite a bit in this project. Most of the new commands rely on external APIs. There isn’t much else to add to this devlog; at least I’m happy it’s not just a bot that replies “pong” 😆"}, {"post_id": 27958, "ts": "2026-07-13T22:02:39Z", "hours": 0.6086, "text": "DevLog #5 New command, wow!! 🎉🎉🎉🎉 Person: “Wait… isn’t that just /koi-say ?” Well… sort of. It’s basically an improved /koi-say . Meet the new command: /koi-tts . As the name suggests, TTS stands for Text to Speech . The bot takes the text you send, uses Microsoft Edge’s TTS voices to turn it into an MP3, and then sends the audio back to you. Pretty cool. =) (I hate path 😭)"}, {"post_id": 27928, "ts": "2026-07-13T21:07:14Z", "hours": 0.2622, "text": "DevLog #4 Today I added a very simple command: /koi-say . It does exactly what the name suggests: the bot repeats the message you type. Nothing spectacular, but it’s a classic, useful command for testing interactions. If you don’t type anything, the bot replies by letting you know that text is required. The message might seem a bit blunt… but remember: it’s just a koizinho . 😭 By the way, I was thinking about how to explain the bot’s name in English. I think the closest equivalent would be something like “little koi” . In Portuguese, we use the suffix -zinho to form a diminutive that often conveys affection or cuteness. So, koizinho would be something like a “little koi” or an affectionate way to refer to the bot."}, {"post_id": 27912, "ts": "2026-07-13T20:43:58Z", "hours": 0.6733, "text": "DevLog #3 So… continuing the animal saga, I present to you: /koi-sound . 🐾 This command makes the bot send a humble animal selection menu. Then, you just pick one (there are still only a few, hahaha), and the bot replies with an .mp3 file containing the chosen animal’s sound. The list of animals is still small, but I plan to add many more in future devlogs. And a quick rant: I hate path . 😭 Who decided that handling file paths had to be done this way?"}, {"post_id": 27881, "ts": "2026-07-13T19:50:39Z", "hours": 0.7331, "text": "DevLog #2 Today I added 4 new commands to the bot. To be honest, it wasn’t very difficult. It was basically copying the code from the first command, changing the API, and adapting it to the particularities of each one. (Seriously… who decided that each API would return the data in a different way? 😭 I just wanted to grab a humble image.) The new commands are: 🦆 /koi-duck — shows a picture of a random duck. 🐱 /koi-cat — shows a picture of a random cat. 🐶 /koi-dog — shows a picture of a random dog. 🦊 /koi-fox — shows a picture of a random fox. It was a short devlog, but at least now the bot is becoming more fun."}, {"post_id": 27406, "ts": "2026-07-12T23:10:13Z", "hours": 1.0067, "text": "DevLog #1 For this fresh start, I’ve added two commands: /koi-ping — a command that makes the bot reply with “🏓 Pong!”. /koi-apod — fetches NASA’s Astronomy Picture of the Day (APOD) and sends the image along with its description. Well… I think that’s it for this devlog."}]...
|
Title: My first slack bot! by @AdaChan | Stardance Title: My first slack bot! by @AdaChan | Stardance
Devlogs:
DevLog #1 For this fresh start, I’ve added two commands: /koi-ping — a command that makes the bot reply with “🏓 Pong!”. /koi-apod — fetches NASA’s Astronomy Picture of the Day (APOD) and sends the image along with its description. Well… I think that’s it for this devlog.
DevLog #2 Today I added 4 new commands to the bot. To be honest, it wasn’t very difficult. It was basically copying the code from the first command, changing the API, and adapting it to the particularities of each one. (Seriously… who decided that each API would return the data in a different way? 😭 I just wanted to grab a humble image.) The new commands are: 🦆 /koi-duck — shows a picture of a random duck. 🐱 /koi-cat — shows a picture of a random cat. 🐶 /koi-dog — shows a picture of a random dog. 🦊 /koi-fox — shows a picture of a random fox. It was a short devlog, but at least now the bot is becoming more fun.
DevLog #3 So… continuing the animal saga, I present to you: /koi-sound . 🐾 This command makes the bot send a humble animal selection menu. Then, you just pick one (there are still only a few, hahaha), and the bot replies with an .mp3 file containing the chosen animal’s sound. The list of animals is still small, but I plan to add many more in future devlogs. And a quick rant: I hate path . 😭 Who decided that handling file paths had to be done this way?
DevLog #4 Today I added a very simple command: /koi-say . It does exactly what the name suggests: the bot repeats the message you type. Nothing spectacular, but it’s a classic, useful command for testing interactions. If you don’t type anything, the bot replies by letting you know that text is required. The message might seem a bit blunt… but remember: it’s just a koizinho . 😭 By the way, I was thinking about how to explain the bot’s name in English. I think the closest equivalent would be something like “little koi” . In Portuguese, we use the suffix -zinho to form a diminutive that often conveys affection or cuteness. So, koizinho would be something like a “little koi” or an affectionate way to refer to the bot.
DevLog #5 New command, wow!! 🎉🎉🎉🎉 Person: “Wait… isn’t that just /koi-say ?” Well… sort of. It’s basically an improved /koi-say . Meet the new command: /koi-tts . As the name suggests, TTS stands for Text to Speech . The bot takes the text you send, uses Microsoft Edge’s TTS voices to turn it into an MP3, and then sends the audio back to you. Pretty cool. =) (I hate path 😭)
DevLog #6 Okay… I finally finished the project’s README! 🎉 I think it turned out pretty cool; it’s not super professional yet, but I think it does a good job of showing what the bot can do. I might improve it in the future whenever I can shake off the laziness, haha. I also realized I used Axios quite a bit in this project. Most of the new commands rely on external APIs. There isn’t much else to add to this devlog; at least I’m happy it’s not just a bot that replies “pong” 😆
DevLog #7 The bot is finally online! 🚀 I deployed it to Hack Club Nest, so now it runs 24/7.
DevLog #8 I decided to continue developing the bot, so here’s what I’ve done since the last update: 1. Code organization I improved the project’s organization by separating command groups into different files. Now, each file has a specific responsibility: animals → animal-related commands, such as /koi-duck , /koi-cat , /koi-dog , and others. space → space-related commands, such as /koi-apod . I plan to add more commands in this category later. utility → general commands, such as /koi-say and /koi-tts . This has made the code much easier to maintain and allows for easier addition of new features. 2. Loading system for responses One thing that really bothered me was when a command took a while to respond. On Discord, when a bot is processing something, a “Bot is thinking…” message appears while it works. I couldn’t find an exact equivalent on Slack, so I decided to create my own system. Now, some commands send a loading message first—for example: 🦆 Looking for a duck… Once the command finishes, that message is updated with the final response. This makes for a much better experience; before, it used to look like the bot had stopped working lol. 3. Direct messages with the bot I finally managed to enable DMs for the bot! Now you can chat directly with Koizinho in private. It can already respond to simple messages, for example: User: Hi! Koizinho: Hello! I still want to improve this part. Maybe I’ll add some form of AI or a smarter conversation system in the future.
DevLog #9 I’m developing a new command called /koi-user . It displays information about the user you choose. Since the arguments of slash commands in Slack aren’t very organized (in the sense of having defined types), I had to work around the problem. In Discord, for example, you can define an argument as user_mention , so Discord itself understands that it’s a user. In Slack, it doesn’t work that way. You can’t even pass a mention as an argument to the command, lol. So the solution I found was to create a modal. When you use the command, a window opens with all the users in the workspace, and you can search by name or choose one from the list. After sending, the bot generates an image with some user information and sends the result to you. (Some text is still in Portuguese because I haven’t translated everything into English yet. ;-;)
DevLog #10 I’m changing the user info card. I’m now using Python to generate the images. Honestly, using the JS Canvas is a real pain, and Python’s Easy-PIL turns out to be much easier. Now, the tricky part will be handling the communication between the .js and .py files.
DevLog #11 Well, I finally finished the Easy-PIL part in Python! The card is ready now. I also set up the system so that data is automatically populated based on a JSON file. When someone uses the /koi-user command, it generates a JSON file with the selected user’s information, and then the Python script uses that data to create the card. I designed the card myself in Canva. I spent way too much time on something so simple XD, but I really liked the result!
DevLog #12 I discovered that it’s possible to make .py and .js interact with each other. Now I’m learning how this communication works and trying not to explode in the process. XD
DevLogs #13 I didn’t implement any new features today; I just fixed some bugs that were cropping up in Koizinho’s commands.
DevLog #14 Today I added two more simple commands /koi-rps and /koi-calc . /koi-calc actually already existed, but I had ended up deleting it. /koi-rps is a small Rock, Paper, Scissors game. The user chooses rock, paper, or scissors, and Koizinho makes a random choice. Then, the bot compares the two choices and announces whether the player won, lost, or tied.
DevLog #15 I’m reviewing some commands I’ve already implemented and fixing a few issues. Strangely, the bot is taking a while to respond; it keeps displaying the message /koi-calc failed because the app did not respond... repeatedly, yet a few seconds later, the bot actually executes the command which is really odd.
DevLog #16 Fixing bugs again. I gave up on using Python + JavaScript; honestly, it was getting too difficult. Now I need to sort out the positioning, because when I was porting the code from Python to JS, the elements ended up out of place. I’m not sure if Python and JS handle image pixels differently.
DevLog #17 Still struggling with this command ( /koi-user ), it was supposed to be ‘easy,’ but I just ended up complicating the code even further. Well, I’m still trying to organize the elements in the image and fix an error that prevents the bot from sending the card to the user, it’s getting really annoying (why does JS have to be like this?). I hope to finish this command soon; maybe DevLog 18 will be about that, but for now, I’ll keep working on it 🥀🙏
DevLog #18 So… this command is really frustrating me; every time I fix something, another error pops up, and I don’t know what to do. At least most of it is already done. I hope I can sort this out soon.
DevLog #19 I created a command called /koi-help that lists all the bot’s available commands. This will be useful since we already have quite a few commands; I plan to replace that wall of text with a menu where the user can choose a category (general, animals, utilities, games), and the bot will respond with the commands for that category to avoid cluttering the chat.
DevLog #20 I updated the project’s README; it remains quite simple because the bot is also simple, haha. I gave up on the /koi-user command for now, it was giving me too many headaches, so I’ll leave it for later.
DevLog #21 I made some adjustments, I think I’ll rewrite some of the bot’s commands, I fixed some existing errors (and created others =( unfortunately). But I think it’s getting better now.
DevLog #22 I finally got it working. I discovered the error was in how the commands were being loaded, since they were all being loaded from a “commands” folder via index.js , they were taking too long to respond; because of the response time limit, an error kept popping up. I managed to fix it, though, and now it works =) I also fixed some bugs in other commands.
Ships:
I created a Slack bot using JavaScript. My bot features nine commands, including /koi-ping, which replies with “Pong!” to check if the bot is online; /koi-apod, which uses the NASA API to send the Astronomy Picture of the Day; commands like /koi-cat, /koi-dog, /koi-fox, and /koi-duck, which use APIs to send random animal images; /koi-sound, which sends MP3 animal sounds; /koi-say, which repeats the user’s message; and /koi-tts, which converts text to speech using Microsoft Edge TTS. To develop the project, I used various APIs, primarily to fetch images from NASA and of animals. I also worked with audio files to implement the commands related to sounds and text-to-speech conversion. The biggest challenge during development was dealing with file paths. Honestly… who decided it had to work that way? 😭 I spent a long time trying to figure out why the files weren’t being found before I managed to organize everything correctly.
I made Koizinho, a Slack bot with several fun and useful commands. Some of my favorite commands are /koi-user, which generates a card with information about a selected user, /koi-sound, which lets you choose and listen to animal sounds, and /koi-tts, which converts text into spoken audio. The most challenging part was definitely /koi-user. I wanted the bot to generate a custom image with information about a user, but working with Canvas in JavaScript was much harder than I expected. I ran into a lot of errors, especially with positioning and generating the image correctly. I also experimented with Python and JavaScript communicating with each other before eventually deciding to keep the image generation in JavaScript. There were many moments where fixing one error somehow created another one. 😭 I’m proud that I managed to keep working on the project even when some parts became really frustrating. I learned a lot about Slack commands, modals, APIs, image generation, audio, and organizing a larger JavaScript project. /koi-user was especially satisfying because it went from being a huge mess of errors to actually working....
|
1793127351.7577357
|
1793213751.7577357
|
|
10343
|
Untitled Gull Game by @dannium | Stardance
|
dannium
|
1
|
21.0
|
333
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-18T01:50:38Z", "hours": 21.0, "multiplier": 17.08, "payout": 333, "blessing": "neutral", "text": "This is a Unity tower defense-ish game I made where the goal is to protect your sandcastle from enemies. The twist was that I had to add all of the suggestions from comments on my yt and after over 60 suggestions, I finished the game. It’s out on itch if you wanna play :)", "repo": "https://github.com/dannium/untitledgullgame", "demo": "https://dannium.itch.io/untitled-gull-game?secret=RCBhq5pTYKEbQkCBGfJDVuZ1zAI"}]...
|
[{"post_id": 30467, "ts": "202 [{"post_id": 30467, "ts": "2026-07-18T01:43:39Z", "hours": 4.9658, "text": "gull game final update Basically all I did was bug fixes for this one, there were some problems with inconsistent UI scaling with different screen resolutions, so I fixed that. I also made a github repo to put the game on, although I made it after making the game so unfortunately you can’t see the version history and stuff."}, {"post_id": 26652, "ts": "2026-07-11T16:18:08Z", "hours": 11.7972, "text": "Gull game is out!!!!!!! ok so a while back I started working on this tower defense-ish game where you have to protect your sandcastle from enemies. The whole point was that I had to add all the suggestions that commenters gave, and after over 60 suggestions, I finally finished. There’s still a few bugs, so any playtesting would be appreciated :) https://dannium.itch.io/untitled-gull-game?secret=RCBhq5pTYKEbQkCBGfJDVuZ1zAI"}, {"post_id": 18530, "ts": "2026-06-29T18:27:57Z", "hours": 4.5, "text": "Final suggestion! So this is a project I started a few months back, the whole premise was to make a game that I had to add every suggestion from comments on my yt channel to. I was supposed to finish it in a week or two but everything took a LOT longer than I anticipated, with over 60 suggestions, this is my final suggestion to be added though! The idea for the suggestion was basically to have a clone of the player and to cut to a monolouge of the player beating the clone. I kinda saved this one for last cause I thought it would be the worst to implement, but I think it ended up going pretty well. All I have left to do is some bug fixing and then I’ll have the game done and published on itch :)"}]...
|
Title: Untitled Gull Game by @dannium | Stardance
Title: Untitled Gull Game by @dannium | Stardance
Devlogs:
Final suggestion! So this is a project I started a few months back, the whole premise was to make a game that I had to add every suggestion from comments on my yt channel to. I was supposed to finish it in a week or two but everything took a LOT longer than I anticipated, with over 60 suggestions, this is my final suggestion to be added though! The idea for the suggestion was basically to have a clone of the player and to cut to a monolouge of the player beating the clone. I kinda saved this one for last cause I thought it would be the worst to implement, but I think it ended up going pretty well. All I have left to do is some bug fixing and then I’ll have the game done and published on itch :)
Gull game is out!!!!!!! ok so a while back I started working on this tower defense-ish game where you have to protect your sandcastle from enemies. The whole point was that I had to add all the suggestions that commenters gave, and after over 60 suggestions, I finally finished. There’s still a few bugs, so any playtesting would be appreciated :) https://dannium.itch.io/untitled-gull-game?secret=RCBhq5pTYKEbQkCBGfJDVuZ1zAI
gull game final update Basically all I did was bug fixes for this one, there were some problems with inconsistent UI scaling with different screen resolutions, so I fixed that. I also made a github repo to put the game on, although I made it after making the game so unfortunately you can’t see the version history and stuff.
Ships:
This is a Unity tower defense-ish game I made where the goal is to protect your sandcastle from enemies. The twist was that I had to add all of the suggestions from comments on my yt and after over 60 suggestions, I finished the game. It’s out on itch if you wanna play :)...
|
1793202559.734705
|
1793288959.734705
|
|
17830
|
UTAU.js by @NellowTCS | Stardance
|
NellowTCS
|
1
|
21.0
|
349
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-18T06:38:31Z", "hours": 21.0, "multiplier": 17.25, "payout": 349, "blessing": "neutral", "text": "I built UTAU.js, a fully synthetic singing voice engine that runs in the browser using pure DSP instead of samples or AI. It supports English, Japanese, and Mandarin, and it can import almost every major vocal synth format through a unified score system. The demo includes a piano roll editor, real-time streaming playback, voice presets, and a full set of controls for shaping the glottal source and formant model. I am proud of the coarticulation system, the pitch bend renderer, and the fact that the entire engine sings from math alone. You can try the demo, draw notes, type lyrics, and hear it perform immediately!!!!!!!!!!", "repo": "https://github.com/NellowTCS/UTAU.js", "demo": "https://nellowtcs.me/UTAU.js/"}]...
|
[{"post_id": 11132, "ts": "202 [{"post_id": 11132, "ts": "2026-06-18T06:36:00Z", "hours": 0.2928, "text": "v0.1.0 Well Stardance told me this: Warning You have 1h 14m logged that you haven't posted a devlog for. If you ship without posting a devlog, this time will be lost! IDK why, but i was planning to devlog my silly anyways so: five commits. all tagged v0.1.0. all fixing things that should have been done before I said “the project is ready.” the classic “wait I forgot” sequence. “Oops” - CI was trying to build docs without running npm ci first. added the install step. three words of actual code change. (this was wrong) “Huh. where did that come from.” - the pages deploy was creating a docs/ directory but the docs copy was still commented out. the demo was deploying fine but docs were going nowhere. fixed the mkdir. “Oooops guess who forgot to uncomment some code” - uncommented the actual docs copy in static.yml. also fixed the docs URL from nisoku.org (wrong domain) to nellowtcs.me/UTAU.js/docs. details. “You never saw that coming did you /sarc” - added all the npm publish metadata to package.json. license, author, repository, homepage, bugs URL, and keywords. the keywords are: utau, synthesis, singing, voice, speech, audio, dsp, lf-glottal, source-filter, formant. so if you npm search for any of those things, maybe you’ll find this. someday. (NPM release failed lol, that’s why I did this) “Badges hehe” - npm version badge, CI status badge, MIT license badge at the top of the README. because a project isn’t real until it has badges. everyone knows that. (/j) five commits to go from “done” to actually done. four of them are CI fixes. like i just said, this is software development. CI is green. docs are deployed. npm metadata is set. badges are shiny. v0.1.0 is tagged. so. that’s UTAU.js. six days. from “idk my voice tho” in an Obsidian doc to a parametric singing synthesizer with three languages, 14+ import/export formats, a Svelte demo app, a docs site, 160+ tests, and a v0.1.0 tag. it sounds mid. like, genuinely. the vowels are recognizable but the consonants are strange and the whole thing has this uncanny valley quality where you can tell it’s trying to be a voice but isn’t quite there. it’s really adorable when it tries :3 but it makes sound. from math. in a browser. and that’s the whole point of v0.1.0. it doesn’t have to be good. it has to exist. it exists now. :)"}, {"post_id": 11120, "ts": "2026-06-18T05:56:37Z", "hours": 1.6403, "text": "the docs exist and the README isn’t “Web-Template” anymore so uh. the README has said “Web-Template: My typical web dev starter project” for the entire life of this repo. six days. dozens of commits. a full synthesizer. and the README was still introducing it as a starter template. fixed that. also wrote an entire documentation site. in one sitting. because apparently that’s how I do things now. the README 133 lines replacing the 3-line placeholder. features list, quickstart code (Node.js WAV rendering + browser streaming in like 10 lines each), API overview table with every public export, development instructions, and a Mermaid architecture diagram. the mermaid diagram is a mindmap and it renders SO PRETTY on GitHub. multicolored branches for Core DSP, Languages, Synth, Voices, and IO. each branch fans out into its components. it’s AMAZINGGGGGGGGGGG I spent way too long picking which mermaid diagram type to use and I regret nothing. the docs site ten markdown pages built with DocMD. custom Ruby theme with blue/cyan gradient accents, dark mode support, semantic search via HuggingFace transformers, and a proper navigation structure: getting started : quickstart (5-step guide with code), installation (npm/CDN/source), core concepts (source-filter model explanation with a Mermaid flowchart showing glottal source -> formant cascade -> output) guide : architecture (module layout, data flow diagram, design decisions), renderer (6-step pipeline walkthrough from lyric to audio), languages (built-in language docs + how to register custom languages + cross-language aliasing) API reference : full export table, DSP primitives with code examples, VoiceConfig reference (264 lines of parameter documentation with perceptual effect tables for every single field. “openQuotient 0.3 = pressed tense voice, 0.5 = neutral modal voice, 0.7 = breathy soft voice.” that kind of detail.), import/export format support table the VoiceConfig page alone is probably the most thorough documentation of a formant synthesizer’s parameter space I’ve ever seen in a JS library. I might be biased. I’ve not seen many others. We don’t talk about that. also added UST and TSSLN to the export format list (they were import-only before). fixed the export function to handle generators that return arrays instead of single Uint8Arrays. CI workflows now build and audit the docs workspace too. the TODO is almost empty. just “README: quickstart, API overview, architecture diagram” which is now done. the project has: a synthesizer, three languages, 14+ import formats, 14+ export formats, a demo app with a piano roll, voice presets, undo/redo, settings, file import/export, WAV export, tempo control, buffer management, 160+ tests, JSDoc on everything, a full documentation site, and CI that’s green. six days :O"}, {"post_id": 11091, "ts": "2026-06-18T04:09:58Z", "hours": 0.5989, "text": "the documentation commit (part 1) JSDoc everywhere this is the kind of commit where the line count looks impressive and the actual behavior changes are zero. 118 lines became 216 lines in types.ts alone. every interface, every field, every function got documented. some highlights: (don’t ask why i did a double dash. i was being silly and just noticed somehow idk how) openQuotient : “fraction of the glottal cycle the vocal folds are open. Higher values produce a breathier, softer sound (0.2–0.9)” speedQuotient : “ratio of the opening phase to the closing phase. Higher values give a faster closure, increasing brightness (0.3–3.0)” FormantCascade : “cascade of anti-resonators followed by resonators, modelling the vocal-tract transfer function. Anti-resonators (zeros) come first, followed by resonators (poles), matching the source-filter model: S(f) = G(f) * Z(f) / P(f)” LFGlottalSource : “Liljencrants-Fant (LF) glottal pulse source with jitter, shimmer, aspiration noise, and DC blocking. See Fant (1986), Liljencrants (1985)” renderNote : documents the full pipeline: “lyric -> phoneme symbols -> phoneme lookup -> LF glottal pulse -> formant cascade -> noise mix -> amplitude envelope -> normalisation” every DSP class, every language module, every player method, every import/export function. the person reading this code in six months (probably me) will thank me. docs soon Docs next time, I will not be long heheeee TODO cleanup the languages section is fully checked off now. English CMUDict (124,911 words), Japanese EDICT2 (224,808 kanji-to-kana entries), Mandarin with full pinyin decomposition, and phoneme alias maps for cross-language compatibility. all done. all in previous commits I apparently forgot to devlog. oops. reorganized the remaining items: Documentation (JSDoc done, README and docs site still needed) and Future (scroll-to-playhead, seek, loop, Web Worker rendering). the TODO is getting short. that’s a weird feeling for a project that’s six days old."}, {"post_id": 11073, "ts": "2026-06-18T03:30:48Z", "hours": 3.4428, "text": "567,211 lines of “code” so about that line count. I added the CMU Pronouncing Dictionary as a git submodule. 134,000+ English words with their ARPABET pronunciations. the cmudict repo is… large. like, genuinely enormous. the diff says 567k lines and it’s almost entirely a text file of words and their phoneme sequences. the actual code changes across these four commits? probably 280 lines. the submodule? 567,131 lines. software engineering. the real G2P Build/data/cmudict is now a submodule pointing to cmusphinx/cmudict. this is THE pronunciation dictionary. the one that every TTS and speech recognition system uses. “BEAUTIFUL” -> “B Y UW1 T AH0 F AH0 L”. “SQUIRREL” -> “S K W ER1 AH0 L”. every word, every pronunciation variant, every stress marker. the 100-word hand-rolled dictionary was cute. this is the real thing. (chunk size warning in vite went from 500 to 13000 because bundling the dictionary is… yeah.) glottal pulse fix the LF glottal source had an audible click on every single cycle. the return phase (after the glottis closes) was a bare exponential decay: -exp(-epsilon * x * period) . the problem: it starts at -1 with non-zero slope, so at the boundary between cycles there’s a discontinuity. click. every. cycle. fix: multiply by sin(pi * x) . the sine term makes the slope match the open phase at t=te (C1 continuity) and reach 0 at t=tc. smooth transition. no click. this is how the actual LF model paper describes it but I’d skipped the sine modulation the first time around because I thought it was just cosmetic. it was not cosmetic. also killed the 0.8/0.2 smoothing filter. it was supposed to prevent clicks but was actually just low-passing the glottal pulse and adding phase distortion. the DC blocker handles drift on its own. coefficient went from 0.995 to 0.99 for faster response. renderer performance formant coefficient updates were happening every sample. that’s setFormants() with trig functions 44,100 times per second. formants don’t actually change that fast. throttled to every 5ms (221 samples at 44.1k). no audible difference, meaningful CPU savings. cascade reset came back at phoneme boundaries. I removed it two commits ago thinking filter state carryover was smoother. it is smoother, but it also causes wideband clicks when the coefficients jump. the reset is the right call. aspiration lowpass aspiration noise on vowels was full-spectrum white noise. real breathy voice has most of its noise energy below 4kHz. added a one-pole lowpass at 4kHz on the aspiration path. sounds warmer and less harsh. also re-added parallel filter resets at phoneme boundaries (matched the cascade reset fix). signal quality tests new test category: signal quality. a long 8-beat note must stay in [-1, 1], be finite throughout, and not be dominated by white noise. the “not white noise” check uses a crude HF proxy: ratio of RMS(sample-to-sample difference) to RMS(signal) in the steady state portion. pure white noise scores ~1.4, a clean tonal signal scores ~0.2. test asserts between 0.05 and 0.8. wrote these tests because the glottal fix could have easily introduced NaN propagation or DC drift and I wanted to catch it automatically."}, {"post_id": 10947, "ts": "2026-06-17T23:12:38Z", "hours": 7.0989, "text": "four commits, and failure I did not intend to do all of this in one sitting. and yet. player batching + buffer pool the player was creating a new AudioBuffer for every single chunk. for a 100-note score that’s 200 buffer allocations (stereo) plus 200 BufferSourceNodes. the garbage collector was not happy. rewrote the scheduling layer. chunks now accumulate into batches (~0.5s each) and get merged into a single AudioBuffer per channel before scheduling. acquireBuffer() checks a pool of previously used buffers by sampleRate and length before allocating new ones. onended releases them back to the pool. pre-buffer threshold bumped to 1.0s for more runway. the result: way fewer Web Audio nodes, way less GC pressure, smoother playback on longer scores. japanese UTAU compatibility imported UST files from real UTAU projects were breaking because Japanese has a bunch of special lyric conventions I didn’t handle: っ (sokuon) : geminate consonant marker. maps to a new sil (silence) phoneme. ※ (pronunciation alias) : text after ※ is the actual pronunciation. あ※ka uses “ka” not “あ”. dot-prefixed lyrics ( .sil , .S ): UTAU rest/silence commands. treated as empty. @ and % : stripped. @ also acts as a note-join marker in the renderer: if present, the initial consonant gets suppressed so the vowel carries through from the previous note. also removed the cascade.reset() between phonemes. filter state now carries through for smoother formant transitions instead of clicking at every phoneme boundary. settings panel new SettingsPanel.svelte . modal overlay, dark theme, closes on Escape or click-outside. currently has one setting: auto-scroll toggle (for a future scroll-to-playhead feature). settings gear icon in the header bar. undo/redo integrated undora for undo/redo history. 50-state capacity. snapshots are saved on mouse-up in the piano roll, delete key, pitch point changes, and lyric/note-number edits (on blur, not on every keystroke). Ctrl/Cmd+Z to undo. Ctrl/Cmd+Shift+Z or Ctrl/Cmd+Y to redo. Undo2 and Redo2 icons in the header bar, disabled when there’s nothing to undo/redo. history clears on language switch and file import. the formatting commit ran prettier again. removed a dead MIN_POOL_SIZE constant and an unused import. cleaned up a few TODO items. the usual. scrollToNotes also got a fix: it was centering on the midpoint of all notes which looked weird when the first note started late. now it clamps to the start of the earliest note so you always see the beginning. also I tried to fix the hissing and static and clicking but to no avail. i tried fixing a LOT of stuff. but. sadly ir only made things worse, so I had to retry. and retry. and retry. and retry. with no luck I’m not sure what the problem is tbh. Let me use Satori to debug some stuff ig"}, {"post_id": 8849, "ts": "2026-06-14T18:34:21Z", "hours": 1.2458, "text": "making it sound less terrible (two commits, one mission) these two commits are about one thing: the output was robotic and buzzy and I was tired of it. every change here is about making the synthesizer sound more like a voice and less like a modem. the renderer got smarter cross-note co-articulation. renderNote() now returns { chunk, finalFormants } . the stream passes the previous note’s final formants into the next note’s renderer, and the first phoneme interpolates from those formants instead of jumping cold. gaps between notes reset the chain. notes that follow each other seamlessly now blend their formants across the boundary. per-phoneme envelopes. the old global 5ms attack / 10ms release is gone. replaced with getPhonemeEnvelopeSamples() which gives each phoneme type its own envelope: plosives get 2ms attack / 15ms decay (sharp burst), consonants and vowels get 5ms / 3ms. every phoneme segment fades independently. diphthong formant sweeping. PhonemeDef got an endFormants field. if a diphthong has both formants and endFormants , the renderer sweeps between them over the phoneme duration. AY now actually glides from /aa/ to /ih/. EY glides from /eh/ to /ih/. OW glides from /oh/ to /uh/. they sound like diphthongs now instead of static vowels. vibratoOverride. was defined on Note but never read. now it is. per-note vibrato control works. everything got retuned glottal source. added shimmer (per-cycle amplitude variation driven by jitter, so the volume wobbles slightly like a real voice). aspiration noise is now high-pass filtered (subtract a lowpass from the raw noise) so it’s airy instead of muddy. aspiration gain bumped from 0.1 to 0.15. plosive bursts. noise envelope for plosives changed from symmetric fade to a fast 12ms exponential decay. “pa” now sounds like a burst instead of a pop. formant data for everything. Z, ZH, V, DH, Y, W, HH, JH in English all got formant targets. same for z, h, y, w, j in Japanese. consonants that were previously just noise bursts now resonate through the vocal tract. the difference is huge. vowel bandwidths tightened. defaults went from 80/100/120 to 70/90/130 Hz. narrower bandwidths = sharper resonant peaks = more vowel-like quality. voice presets retuned. male voice: lower open quotient (0.4), lower speed quotient (0.65), higher tenseness (0.65), less aspiration (0.05). sounds less breathy, more chest voice. female: formant scale 1.18. gender slider in scaleVoice now affects speed quotient and has a gender-dependent tenseness base. pitch accent. Japanese got resolveAccents() implementing heiban pattern (low first mora, high rest). the stream groups consecutive notes into phrases, calls resolveAccents, and applies the offsets as constant pitch shifts. it’s basic but it makes Japanese phrases have some melodic contour beyond what the score provides. four TODO items checked off in one go: co-articulation, phoneme envelopes, diphthong sweeping, vibratoOverride. pitch accent too. it still doesn’t sound human. but it’s starting to sound like it’s trying. and that’s a big step from where it was. if you can identify the song in the editor image, good job, you’re cool :D"}, {"post_id": 8467, "ts": "2026-06-14T02:23:14Z", "hours": 1.0867, "text": "CI arc (three commits, one story) three commits that are really one story: getting CI from “permanently red” to green. the setup “wrote” (aka copied and modified) six GitHub Actions workflows in one go: ci.yml : lint + test + build on push/PR. matrix tests Node 20 and 22. builds the library first, then typechecks the demo. (docs build is commented out because docs don’t exist yet. they will. eventually.) test.yml : dedicated test runner. same Node 20/22 matrix. runs jest in the Build workspace. release-npm.yml : publishes to npm on GitHub release. strips private/scripts/devDependencies from package.json, copies README and LICENSE into Build/, publishes with --provenance . has a workflow_dispatch with a dry-run option so I can test without actually publishing. security-audit.yml : runs npm audit --audit-level=high on all three workspaces (root, Build, Demo). daily cron plus on push when package files change. static.yml : reworked the GitHub Pages deployment. it was pointed at Build/dist (wrong, that’s the library output). now it builds the library, builds the demo, and deploys Demo/dist as the pages root. docs will go in pages-root/docs/ when they exist. single-file.yml : was still referencing Web-Template (the old template name). fixed to point at Demo, output file is now UTAUjsEditor.html. also integrated Updato (my own auto-updater library) into the demo. on load it checks the current build hash against the latest commit on main and shows an update notification if there’s a newer version. the build hash gets injected at build time via __BUILD_HASH__ in the vite config. cleaned up the TODO: removed all the completed checkboxes (they were cluttering the file), added detail to the remaining items. the fixes CI was 0/3 passing. then 1/8 passing. then 2/8. then eventually 8/8. the classic experience. the single-file and updato workflows needed the library built before the demo (workspace dependency). added npm ci at root level and a “Build Library” step before the demo build. also added vite-plugin-singlefile and cross-env for the build:single script. second fix commit added ts-node and unrun as dev deps because the ESM config loading was unhappy without them. three commits to go from red to green. could be worse honestly but whatever"}, {"post_id": 8388, "ts": "2026-06-13T23:00:15Z", "hours": 0.6642, "text": "the prettier commit (and a tiny bugfix) two commits. one has 19 lines of actual code. the other touched every single file in the project. the bugfix the piano roll’s resize handle wasn’t working for already-selected notes. you could resize on first click, but if you clicked a note to select it and THEN tried to drag the right edge, it would move the note instead of resizing. added a resize zone check that fires before the drag-to-move handler when a note is already selected. 19 lines. the formatting pass ran prettier on the entire codebase. every file. the diff is enormous and the actual logic changes are: zero. added .prettierrc (semicolons, double quotes, trailing commas, 140 char width, svelte plugin), .prettierignore , and eslint.config.ts . bumped eslint to 10.5 and typescript-eslint to 8.61. added jiti for ESM config loading. the one real improvement buried in here: replaced the Function type in ufdata.ts with a proper ParseFn type alias. eslint was right to yell at me for using bare Function . everything else is semicolons and line breaks. the codebase has a consistent style now. that’s the whole commit. sometimes you just gotta."}, {"post_id": 8353, "ts": "2026-06-13T21:40:48Z", "hours": 0.5894, "text": "open any vocal synth file ever made so you know how the TODO said “MIDI file import” as one little checkbox? I may have slightly exceeded scope on that one. UTAU.js can now import UST, USTX, VPR, VSQX, VSQ, SVP, MIDI, MusicXML, PPSF, S5P, TSSLN, CCS, DV, and UFData files. that’s UTAU, OpenUTAU, Vocaloid, Synthesizer V, Piapro Studio, CeVIO, DeepVocal, and standard MIDI. basically every vocal synth format that exists. this is thanks to utaformatix-ts by sevenc-nanashi, which is a universal parser for vocal synth project files. it converts everything into a common UfData format. I wrote a 145-line adapter ( ufdata.ts ) that converts UfData into UTAU.js Scores. lazy-loaded so the parser only gets pulled in when you actually import a file. pitch bends this was the hard part. vocal synth files have pitch curves. track-level arrays of tick-value pairs that describe how the pitch deviates from the written note. the importer splits the track-level curve into per-note pitch bends, handling absolute-to-relative conversion, null value filtering, start/end padding, and extrapolation from preceding points. the renderer now reads note.pitchBend and interpolates it per-sample alongside vibrato. the math: f0 = baseF0 * 2^((bendSemitones * 100 + vibratoCents) / 1200) . pitch bends and vibrato stack correctly in cents space. piano roll overhaul the piano roll was hardcoded to 3 octaves (ik bad, but will fix soon) and a fixed width. now it covers the full MIDI range (0-127) with virtual scrolling. wheel scrolls vertically, shift+wheel or trackpad scrolls horizontally. viewport culling so only visible notes and key labels get drawn. auto-scrolls to center on notes when you import a file. also: pitch curves render as yellow lines overlaid on note blocks. you can see the imported pitch data right there on the piano roll. other stuff added await setTimeout(0) in the streaming loop so the UI doesn’t freeze during long scores. the demo has an “Open” button that accepts all 14 supported file extensions. TODO got updated with a lot of checkboxes ticked. Some amount of lines of import tests covering note mapping, tempo conversion, pitch splitting (absolute, relative, null filtering, extrapolation, out-of-range skipping, pitch:false opt-out), and edge cases."}, {"post_id": 8316, "ts": "2026-06-13T20:40:13Z", "hours": 0.7764, "text": "uhhh tests (that was fast huh) the commit message says it all. 961 lines added. 10 test files. plus a WAV encoder, a bunch of bug fixes, and the entire player got an upgrade. in one sitting. tests jest config, ts-jest, ESM mode. ten test files covering everything that exists: envelope.test.ts : attack/release shape, mixBuffers offset and gain, edge cases filter.test.ts : FormantFilter resonator, FormantCascade noise.test.ts : NoiseSource output oscillator.test.ts : LFGlottalSource waveform shape wav.test.ts : encodeWav RIFF header english.test.ts : lexicon hits and fallback japanese.test.ts : hiragana, romaji, special cases renderer.test.ts : renderNote output shape, sample count, non-zero output stream.test.ts : streamScore chunk boundaries, mixChunks voices/index.test.ts : buildVoice, scaleVoice parameter ranges writing tests found bugs. writing tests always finds bugs. the bugs tests found OW was missing. the English phoneme table had every ARPABET vowel except OW. “HELLO” ends with OW. the demo word was literally broken and I didn’t notice because the fallback produced silence instead of crashing. added it. F1=470 F2=1000 F3=2400. anti-resonator formula was wrong. the pole radius was hardcoded to 0.99 with a random 0.95 frequency offset. now it derives the pole from bw * 1.5 like a real anti-resonator should. nasals sound less terrible. jitter was per-sample. it was recalculating a random f0 every single sample, which made the pitch wobble chaotically instead of naturally. moved it to recalculate once per glottal cycle. much more realistic. noise fadeout could go negative. phDur - segPos - 1 can be negative at the boundary. clamped to 0. gain normalization could divide by zero. clamped overallPeak to 1e-6 and gain to max 100. buildVoice spread order was wrong. ...overrides was before the sub-objects, so the glottal/formant/vibrato defaults always overwrote user values. flipped the order. WAV encoder (i’ve written manual WAV encoders before, I just copy-pasted that, it’s not that bad tbh) 62 lines. encodeWav() takes AudioChunks and writes a proper RIFF/WAVE file. 16-bit PCM, little-endian, handles mono and stereo. float-to-int16 conversion with clamping. exported from the barrel file. player upgrades setVolume() API. volume parameter on play() . progress events actually fire now (the type existed but was never emitted). stop does a 50ms gain ramp to zero before closing the AudioContext so it doesn’t click. scheduling uses Math.max(ctx.currentTime + 0.01, ...) to prevent scheduling in the past if rendering falls behind. stream tempo handling streamScore() was using a single currentTempo for the whole note. now it has tempoAt() for point lookups and noteSampleDuration() that integrates across tempo changes within a note. a note that spans a tempo change gets the right duration now. also added a cascade reset between phonemes in the renderer (was carrying filter state across phoneme boundaries causing ringing), added a missing phoneme console.warn so you can actually debug G2P failures, and fixed the Japanese romaji parser to skip spaces instead of treating them as unknown consonants. the TODO list is getting shorter. slowly but surely. …and i forgot to update it oops"}, {"post_id": 8294, "ts": "2026-06-13T19:45:25Z", "hours": 1.8264, "text": "it makes sound now okay so. I may have blacked out and written an entire synthesizer in one commit. 210 lines of renderer, 65 lines of streaming, a full Svelte demo app with a piano roll, and a dozen DSP fixes. this is flo-era hyperfocus energy except I can HEAR it this time. (well I could hear flo, it’s a audio format, so like, duh, but yk what i mean loll) the renderer renderNote() takes a Note + VoiceConfig + LanguageModule and produces actual audio. per-sample processing: vibrato with attack ramp, 30ms smoothstep formant interpolation between phonemes, glottal pulse through the cascade, shaped noise for consonants with per-segment fade in/out, smoothstep attack/release envelope, peak normalization. consonants get their default duration, vowels split the remaining time. if consonants would eat more than 40% of the note they get compressed. every filter, oscillator, and cascade got refactored from batch to per-sample. slower but I can morph formants sample-by-sample for smooth transitions. DSP fixes (there were several) the LF oscillator’s open phase was inverted. added a DC blocking filter because the pulse was making everything drift. added jitter for natural-sounding pitch variation. the resonator gain formula was wrong ( b0 = 1 - r*r should be b0 = 1 - B - C ). FormantCascade now runs anti-resonators before resonators (correct order for nasals). added setPassthrough() for unused filter slots. female formant scale went from 0.88 to 1.15. I had it backwards. scaling down shrinks the tract and sounds childlike. scaling up is what you want. streaming + demo streamScore() is an async generator. walks the score note by note, handles tempo changes, yields chunks. player starts playing before the score finishes rendering. the demo is a full Svelte 5 app. canvas piano roll (click to create, drag to move/resize, delete to remove), voice panel with easy sliders + expandable advanced params, transport bar, language switcher. Japanese demo says “ka na ta shi i ne”. English says “HELLO WORLD THIS IS A TEST”. press play and it synthesizes through Web Audio in real time. from math. everything else Japanese plosives got formant data (were noise-only). added “l” as an r-alias for loanwords. barrel file exports the full public API. wrote a comprehensive TODO.md because the list of things that aren’t done is very long. it sounds terrible. robotic and buzzy and the consonants are more like clicks. but it’s SOUND. generated from MATH. in a BROWSER. Peterson and Barney would be proud. (or horrified.)"}, {"post_id": 7973, "ts": "2026-06-13T09:17:37Z", "hours": 0.3825, "text": "voices, a player, and oh look a demo app three things in one commit because I couldn’t decide which to work on so I did all of them. voice presets two built-in voices: Male and Female. the male voice has a lower open quotient (0.45, vocal folds close faster), lower aspiration (0.08, less breathy), and formant scale of 1.0. the female voice has higher open quotient (0.55), more aspiration (0.12), and formant scale of 0.88 which shifts all the formant frequencies up to simulate a shorter vocal tract. vibrato differs too. male is 5.5 Hz rate with 30 cents depth. female is 6.0 Hz with 40 cents. these are rough averages from the singing voice literature. real vibrato varies wildly between singers but you have to start somewhere. buildVoice() lets you construct a custom voice with partial overrides. scaleVoice() is the fun one. it takes a voice config and five intuitive sliders: gender (-1 to +1), breathiness, tension, brightness, vibratoAmount. the gender parameter interpolates formant scale between 0.88 and 1.0. breathiness maps to open quotient and aspiration. tension maps to glottal tenseness. brightness maps to formant bandwidth (narrower bandwidths = brighter, more resonant sound). vibrato amount scales depth. the idea is you start with a preset and then tweak it with human-readable parameters instead of raw acoustic values. “make this voice breathier” is easier to think about than “increase open quotient to 0.55 and aspiration to 0.12”. registry pattern same as languages. getVoice(\"male\") , registerVoice(\"my-voice\", config) . stream player this is the thing that actually makes sound come out of your speakers. StreamPlayer takes an AsyncGenerator<AudioChunk> and schedules the audio through the Web Audio API. each chunk gets turned into an AudioBuffer, wired through a GainNode (fixed at 0.8 for now), and scheduled at its exact start time using ctx.currentTime + chunk.startSample / sampleRate . the generator can yield chunks as fast or as slow as it wants. the player just keeps scheduling them. async generator as the interface is the key design decision. the synthesizer can stream audio chunk by chunk as it renders each phoneme, and the player starts playing before the whole score is done. no waiting for the full render. just start. pause suspends the AudioContext. resume resumes it. stop aborts the generator via AbortController and closes the context. event system emits stateChange, progress, done, error. on() returns an unsubscribe function. clean lifecycle. the demo app svelte 5 + vite. the Demo/ workspace finally has code in it. just scaffolding for now, no UI components yet. but the package.json is wired up: utaujs as a workspace dependency so it pulls from the Build/ output, @sveltejs /vite-plugin-svelte, vite 8. I picked svelte because it’s the lightest framework that still gives me reactivity and components without a virtual DOM. for a music app where audio timing matters, I don’t want React’s reconciliation cycle anywhere near my render loop. svelte compiles to vanilla JS. no runtime overhead. (also I just like svelte.) the engine is almost wirable end to end now. language module produces phonemes, voice config provides the acoustic parameters, the DSP layer renders audio chunks, the stream player schedules them through Web Audio. the only missing piece is the actual synthesizer that takes a Score + Voice + Language and yields AudioChunks. that’s next. getting close to hearing actual sound."}, {"post_id": 7955, "ts": "2026-06-13T08:49:48Z", "hours": 0.6944, "text": "two languages walk into a synthesizer… so I said “next step is a basic ARPABET phoneme dictionary” and then I just… did both English AND Japanese in one sitting. because apparently my brain doesn’t know how to do things incrementally. english every phoneme in ARPABET, with real formant data from real papers. I’m going to be responsible and cite my sources (gasp): vowel formants are Peterson & Barney 1952 male speaker means. the classic dataset. 76 speakers, 10 monophthongal vowels. /IY/ is F1=270 F2=2290 F3=3010. /AA/ is F1=730 F2=1090 F3=2440. these numbers are from a 74-year-old paper and they’re still the standard reference. wild. consonant noise centres follow Jongman et al. 2000 for fricatives (sibilant spectral peaks), Stevens 1998 for plosive burst loci, and Fujimura 1962 for nasal formants/antiformants. I feel like an actual phonetician typing these citations. I am not an actual phonetician. the full set: 10 vowels, 4 diphthongs, 6 plosives, 9 fricatives, 3 nasals, 4 approximants, 2 affricates. every consonant has its noise shaping config. every nasal has antiformant data. every vowel has 5 formant targets (F1 through F5). there’s also a grapheme-to-phoneme dictionary with like 100 common English words. “HELLO” -> [“HH”, “EH”, “L”, “OW”]. “BEAUTIFUL” -> [“B”, “Y”, “UW”, “T”, “IH”, “F”, “UH”, “L”]. it’s a smol subset but it covers the words you’d actually want a singing synthesizer to say. sun, moon, star, dream, love, forever, together. very anime opening core vocabulary. I should expand it eventually but it’s fine for testing. the fallback for unknown words is fun: first it checks if the input is already ARPABET symbols separated by spaces/underscores. if not, it falls back to a dead simple single-character mapping where each letter gets one phoneme. it’s terrible but it won’t crash. japanese honestly? mapping Japanese to phonemes is SO much easier than English. kana are basically a syllabary. each character maps to exactly one consonant-vowel pair (or just a vowel). no ambiguity. no “through” being pronounced nothing like it looks. English is a disaster and Japanese is a joy. (I still don’t know Japanese. sighhh. but the internet is very helpful.) vowel formants are from Yazawa & Kondo 2019, specifically the short-vowel midpoint averages for male speakers from their ICPhS paper. that Japanese vowel formant displacement paper I was reading earlier today. /a/ F1=687 F2=1283, /i/ F1=301 F2=2154, etc. F3 values come from Kitamura et al. 2009, the ATR MRI vocal tract study. different paper, different research group, but the F3 data fills a gap that Yazawa didn’t cover in detail. the lyric parser handles: raw romaji (“ka”, “shi”, “tsu”), hiragana (あ, き, しゃ), and compound kana (きゃ, しゅ, ちょ). hiragana gets converted to romaji via a lookup table, then romaji gets split into consonant-vowel pairs via romajiToPhonemes() . special cases for し -> “shi”, ち -> “chi”, つ -> “tsu”, ふ -> “fu”. word-final ん becomes the moraic nasal N. geminate consonants (double letters) get handled. it’s not perfect but it covers standard Hepburn romanisation. the registry a Map of language IDs to modules. getLanguage(\"en\") or getLanguage(\"jp\") . registerLanguage() for future additions. both “jp” and “ja” point to Japanese because people use both and I’m not going to pick a side. the LanguageModule interface from types.ts is earning its keep already. both languages implement the same lyricToPhonemes() contract. the synthesizer won’t know or care which language is active. plug in English, plug in Japanese, plug in anything. the architecture handles it. I love this."}, {"post_id": 7946, "ts": "2026-06-13T08:00:27Z", "hours": 0.9586, "text": "new project. yes, another one. (penumbra is on pause btw) so uh. hi. I’m starting a new thing. penumbra is on pause. not abandoned, just… paused. the backend is solid, the architecture is clean, and the UI needs to catch up but I need to do the HTML mockup thing first and I’m not in the headspace for that right now. it’ll come back. I promise. in the meantime: UTAU.js. the idea: a browser-based singing synthesizer inspired by UTAU. but here’s the thing. it’s not sample-based like the original. it’s parametric. formant synthesis. generate the entire voice from math. no voicebank files, no platform dependencies, no 200MB sample libraries. just DSP and physics and the human vocal tract modeled in TypeScript. why TypeScript and not Rust this time? because. I scaffolded the repo from my Web-Template and then immediately ripped out everything that made it a web template. I replaced it with a proper library setup: tsdown for bundling (ESM + CJS + type declarations), npm workspaces (Build for the engine, Demo for a future demo app), TypeScript strict mode. renamed to utaujs. added jest, eslint, prettier, typescript-eslint. the foundation is there. also brought in @nisoku /satori as a dependency because I’ll want observability later and I might as well wire it up now. And like, it’s such a great observatory library like smh my head, why wouldn’t I use it the research rabbit hole (aka I read way too many papers) okay so today was one of those days where hackatime probably says like less than a hour but reality says 4-5. I spent most of half of today reading. papers. reference tables. phonetics Wikipedia articles. I have 20 browser tabs open right now (thank goodness for tab groups) and they’re all about formants and audio and human vocal behaviors. here’s the reading list: Peterson & Barney 1952 (a classic formant frequency dataset, 76 speakers, 10 American English vowels, F0 through F3) the Stanford CCRMA formant table (Peterson’s data averaged by gender and age group, the numbers everyone cites) ARPABET (the phonetic notation system CMU uses, 39 phonemes for General American English) CMU Pronouncing Dictionary (134,000+ words mapped to ARPABET, sheesh) a paper on Japanese vowel formant displacement (short vs long vowels have different formant targets, which matters a lot) Kitamura et al on vocal tract transfer functions from MRI-derived solid models (they literally 3D printed vocal tracts and measured the acoustic response) the MRI one is wild. they took volumetric MRI scans of people saying Japanese vowels, built physical 3D models of their vocal tracts via stereolithography, and then measured the frequency response by pumping sound through the models. but I also wrote code I remember a LOT of this from working on flo. types.ts is the big one. 91 lines of the full type stuff oscillator.ts is the glottal source. an LF (Liljencrants-Fant) model. this is the buzzing sound your vocal folds make before your throat and mouth shape it into speech. lots of math that i don’t want to talk about. filter.ts is the formant cascade. second-order IIR resonator (biquad) that can operate as either a resonator or anti-resonator. noise.ts is simple. white noise generator plus a function to shape it through formant resonators. this is how you get consonants like “s” and “sh”. they’re just filtered noise. envelope.ts is attack/release shaping with smoothstep curves plus a buffer mixing utility. Fun!"}]...
|
Title: UTAU.js by @NellowTCS | Stardance
Devlogs: Title: UTAU.js by @NellowTCS | Stardance
Devlogs:
new project. yes, another one. (penumbra is on pause btw) so uh. hi. I’m starting a new thing. penumbra is on pause. not abandoned, just… paused. the backend is solid, the architecture is clean, and the UI needs to catch up but I need to do the HTML mockup thing first and I’m not in the headspace for that right now. it’ll come back. I promise. in the meantime: UTAU.js. the idea: a browser-based singing synthesizer inspired by UTAU. but here’s the thing. it’s not sample-based like the original. it’s parametric. formant synthesis. generate the entire voice from math. no voicebank files, no platform dependencies, no 200MB sample libraries. just DSP and physics and the human vocal tract modeled in TypeScript. why TypeScript and not Rust this time? because. I scaffolded the repo from my Web-Template and then immediately ripped out everything that made it a web template. I replaced it with a proper library setup: tsdown for bundling (ESM + CJS + type declarations), npm workspaces (Build for the engine, Demo for a future demo app), TypeScript strict mode. renamed to utaujs. added jest, eslint, prettier, typescript-eslint. the foundation is there. also brought in @nisoku /satori as a dependency because I’ll want observability later and I might as well wire it up now. And like, it’s such a great observatory library like smh my head, why wouldn’t I use it the research rabbit hole (aka I read way too many papers) okay so today was one of those days where hackatime probably says like less than a hour but reality says 4-5. I spent most of half of today reading. papers. reference tables. phonetics Wikipedia articles. I have 20 browser tabs open right now (thank goodness for tab groups) and they’re all about formants and audio and human vocal behaviors. here’s the reading list: Peterson & Barney 1952 (a classic formant frequency dataset, 76 speakers, 10 American English vowels, F0 through F3) the Stanford CCRMA formant table (Peterson’s data averaged by gender and age group, the numbers everyone cites) ARPABET (the phonetic notation system CMU uses, 39 phonemes for General American English) CMU Pronouncing Dictionary (134,000+ words mapped to ARPABET, sheesh) a paper on Japanese vowel formant displacement (short vs long vowels have different formant targets, which matters a lot) Kitamura et al on vocal tract transfer functions from MRI-derived solid models (they literally 3D printed vocal tracts and measured the acoustic response) the MRI one is wild. they took volumetric MRI scans of people saying Japanese vowels, built physical 3D models of their vocal tracts via stereolithography, and then measured the frequency response by pumping sound through the models. but I also wrote code I remember a LOT of this from working on flo. types.ts is the big one. 91 lines of the full type stuff oscillator.ts is the glottal source. an LF (Liljencrants-Fant) model. this is the buzzing sound your vocal folds make before your throat and mouth shape it into speech. lots of math that i don’t want to talk about. filter.ts is the formant cascade. second-order IIR resonator (biquad) that can operate as either a resonator or anti-resonator. noise.ts is simple. white noise generator plus a function to shape it through formant resonators. this is how you get consonants like “s” and “sh”. they’re just filtered noise. envelope.ts is attack/release shaping with smoothstep curves plus a buffer mixing utility. Fun!
two languages walk into a synthesizer… so I said “next step is a basic ARPABET phoneme dictionary” and then I just… did both English AND Japanese in one sitting. because apparently my brain doesn’t know how to do things incrementally. english every phoneme in ARPABET, with real formant data from real papers. I’m going to be responsible and cite my sources (gasp): vowel formants are Peterson & Barney 1952 male speaker means. the classic dataset. 76 speakers, 10 monophthongal vowels. /IY/ is F1=270 F2=2290 F3=3010. /AA/ is F1=730 F2=1090 F3=2440. these numbers are from a 74-year-old paper and they’re still the standard reference. wild. consonant noise centres follow Jongman et al. 2000 for fricatives (sibilant spectral peaks), Stevens 1998 for plosive burst loci, and Fujimura 1962 for nasal formants/antiformants. I feel like an actual phonetician typing these citations. I am not an actual phonetician. the full set: 10 vowels, 4 diphthongs, 6 plosives, 9 fricatives, 3 nasals, 4 approximants, 2 affricates. every consonant has its noise shaping config. every nasal has antiformant data. every vowel has 5 formant targets (F1 through F5). there’s also a grapheme-to-phoneme dictionary with like 100 common English words. “HELLO” -> [“HH”, “EH”, “L”, “OW”]. “BEAUTIFUL” -> [“B”, “Y”, “UW”, “T”, “IH”, “F”, “UH”, “L”]. it’s a smol subset but it covers the words you’d actually want a singing synthesizer to say. sun, moon, star, dream, love, forever, together. very anime opening core vocabulary. I should expand it eventually but it’s fine for testing. the fallback for unknown words is fun: first it checks if the input is already ARPABET symbols separated by spaces/underscores. if not, it falls back to a dead simple single-character mapping where each letter gets one phoneme. it’s terrible but it won’t crash. japanese honestly? mapping Japanese to phonemes is SO much easier than English. kana are basically a syllabary. each character maps to exactly one consonant-vowel pair (or just a vowel). no ambiguity. no “through” being pronounced nothing like it looks. English is a disaster and Japanese is a joy. (I still don’t know Japanese. sighhh. but the internet is very helpful.) vowel formants are from Yazawa & Kondo 2019, specifically the short-vowel midpoint averages for male speakers from their ICPhS paper. that Japanese vowel formant displacement paper I was reading earlier today. /a/ F1=687 F2=1283, /i/ F1=301 F2=2154, etc. F3 values come from Kitamura et al. 2009, the ATR MRI vocal tract study. different paper, different research group, but the F3 data fills a gap that Yazawa didn’t cover in detail. the lyric parser handles: raw romaji (“ka”, “shi”, “tsu”), hiragana (あ, き, しゃ), and compound kana (きゃ, しゅ, ちょ). hiragana gets converted to romaji via a lookup table, then romaji gets split into consonant-vowel pairs via romajiToPhonemes() . special cases for し -> “shi”, ち -> “chi”, つ -> “tsu”, ふ -> “fu”. word-final ん becomes the moraic nasal N. geminate consonants (double letters) get handled. it’s not perfect but it covers standard Hepburn romanisation. the registry a Map of language IDs to modules. getLanguage("en") or getLanguage("jp") . registerLanguage() for future additions. both “jp” and “ja” point to Japanese because people use both and I’m not going to pick a side. the LanguageModule interface from types.ts is earning its keep already. both languages implement the same lyricToPhonemes() contract. the synthesizer won’t know or care which language is active. plug in English, plug in Japanese, plug in anything. the architecture handles it. I love this.
voices, a player, and oh look a demo app three things in one commit because I couldn’t decide which to work on so I did all of them. voice presets two built-in voices: Male and Female. the male voice has a lower open quotient (0.45, vocal folds close faster), lower aspiration (0.08, less breathy), and formant scale of 1.0. the female voice has higher open quotient (0.55), more aspiration (0.12), and formant scale of 0.88 which shifts all the formant frequencies up to simulate a shorter vocal tract. vibrato differs too. male is 5.5 Hz rate with 30 cents depth. female is 6.0 Hz with 40 cents. these are rough averages from the singing voice literature. real vibrato varies wildly between singers but you have to start somewhere. buildVoice() lets you construct a custom voice with partial overrides. scaleVoice() is the fun one. it takes a voice config and five intuitive sliders: gender (-1 to +1), breathiness, tension, brightness, vibratoAmount. the gender parameter interpolates formant scale between 0.88 and 1.0. breathiness maps to open quotient and aspiration. tension maps to glottal tenseness. brightness maps to formant bandwidth (narrower bandwidths = brighter, more resonant sound). vibrato amount scales depth. the idea is you start with a preset and then tweak it with human-readable parameters instead of raw acoustic values. “make this voice breathier” is easier to think about than “increase open quotient to 0.55 and aspiration to 0.12”. registry pattern same as languages. getVoice("male") , registerVoice("my-voice", config) . stream player this is the thing that actually makes sound come out of your speakers. StreamPlayer takes an AsyncGenerator<AudioChunk> and schedules the audio through the Web Audio API. each chunk gets turned into an AudioBuffer, wired through a GainNode (fixed at 0.8 for now), and scheduled at its exact start time using ctx.currentTime + chunk.startSample / sampleRate . the generator can yield chunks as fast or as slow as it wants. the player just keeps scheduling them. async generator as the interface is the key design decision. the synthesizer can stream audio chunk by chunk as it renders each phoneme, and the player starts playing before the whole score is done. no waiting for the full render. just start. pause suspends the AudioContext. resume resumes it. stop aborts the generator via AbortController and closes the context. event system emits stateChange, progress, done, error. on() returns an unsubscribe function. clean lifecycle. the demo app svelte 5 + vite. the Demo/ workspace finally has code in it. just scaffolding for now, no UI components yet. but the package.json is wired up: utaujs as a workspace dependency so it pulls from the Build/ output, @sveltejs /vite-plugin-svelte, vite 8. I picked svelte because it’s the lightest framework that still gives me reactivity and components without a virtual DOM. for a music app where audio timing matters, I don’t want React’s reconciliation cycle anywhere near my render loop. svelte compiles to vanilla JS. no runtime overhead. (also I just like svelte.) the engine is almost wirable end to end now. language module produces phonemes, voice config provides the acoustic parameters, the DSP layer renders audio chunks, the stream player schedules them through Web Audio. the only missing piece is the actual synthesizer that takes a Score + Voice + Language and yields AudioChunks. that’s next. getting close to hearing actual sound.
it makes sound now okay so. I may have blacked out and written an entire synthesizer in one commit. 210 lines of renderer, 65 lines of streaming, a full Svelte demo app with a piano roll, and a dozen DSP fixes. this is flo-era hyperfocus energy except I can HEAR it this time. (well I could hear flo, it’s a audio format, so like, duh, but yk what i mean loll) the renderer renderNote() takes a Note + VoiceConfig + LanguageModule and produces actual audio. per-sample processing: vibrato with attack ramp, 30ms smoothstep formant interpolation between phonemes, glottal pulse through the cascade, shaped noise for consonants with per-segment fade in/out, smoothstep attack/release envelope, peak normalization. consonants get their default duration, vowels split the remaining time. if consonants would eat more than 40% of the note they get compressed. every filter, oscillator, and cascade got refactored from batch to per-sample. slower but I can morph formants sample-by-sample for smooth transitions. DSP fixes (there were several) the LF oscillator’s open phase was inverted. added a DC blocking filter because the pulse was making everything drift. added jitter for natural-sounding pitch variation. the resonator gain formula was wrong ( b0 = 1 - r*r should be b0 = 1 - B - C ). FormantCascade now runs anti-resonators before resonators (correct order for nasals). added setPassthrough() for unused filter slots. female formant scale went from 0.88 to 1.15. I had it backwards. scaling down shrinks the tract and sounds childlike. scaling up is what you want. streaming + demo streamScore() is an async generator. walks the score note by note, handles tempo changes, yields chunks. player starts playing before the score finishes rendering. the demo is a full Svelte 5 app. canvas piano roll (click to create, drag to move/resize, delete to remove), voice panel with easy sliders + expandable advanced params, transport bar, language switcher. Japanese demo says “ka na ta shi i ne”. English says “HELLO WORLD THIS IS A TEST”. press play and it synthesizes through Web Audio in real time. from math. everything else Japanese plosives got formant data (were noise-only). added “l” as an r-alias for loanwords. barrel file exports the full public API. wrote a comprehensive TODO.md because the list of things that aren’t done is very long. it sounds terrible. robotic and buzzy and the consonants are more like clicks. but it’s SOUND. generated from MATH. in a BROWSER. Peterson and Barney would be proud. (or horrified.)
uhhh tests (that was fast huh) the commit message says it all. 961 lines added. 10 test files. plus a WAV encoder, a bunch of bug fixes, and the entire player got an upgrade. in one sitting. tests jest config, ts-jest, ESM mode. ten test files covering everything that exists: envelope.test.ts : attack/release shape, mixBuffers offset and gain, edge cases filter.test.ts : FormantFilter resonator, FormantCascade noise.test.ts : NoiseSource output oscillator.test.ts : LFGlottalSource waveform shape wav.test.ts : encodeWav RIFF header english.test.ts : lexicon hits and fallback japanese.test.ts : hiragana, romaji, special cases renderer.test.ts : renderNote output shape, sample count, non-zero output stream.test.ts : streamScore chunk boundaries, mixChunks voices/index.test.ts : buildVoice, scaleVoice parameter ranges writing tests found bugs. writing tests always finds bugs. the bugs tests found OW was missing. the English phoneme table had every ARPABET vowel except OW. “HELLO” ends with OW. the demo word was literally broken and I didn’t notice because the fallback produced silence instead of crashing. added it. F1=470 F2=1000 F3=2400. anti-resonator formula was wrong. the pole radius was hardcoded to 0.99 with a random 0.95 frequency offset. now it derives the pole from bw * 1.5 like a real anti-resonator should. nasals sound less terrible. jitter was per-sample. it was recalculating a random f0 every single sample, which made the pitch wobble chaotically instead of naturally. moved it to recalculate once per glottal cycle. much more realistic. noise fadeout could go negative. phDur - segPos - 1 can be negative at the boundary. clamped to 0. gain normalization could divide by zero. clamped overallPeak to 1e-6 and gain to max 100. buildVoice spread order was wrong. ...overrides was before the sub-objects, so the glottal/formant/vibrato defaults always overwrote user values. flipped the order. WAV encoder (i’ve written manual WAV encoders before, I just copy-pasted that, it’s not that bad tbh) 62 lines. encodeWav() takes AudioChunks and writes a proper RIFF/WAVE file. 16-bit PCM, little-endian, handles mono and stereo. float-to-int16 conversion with clamping. exported from the barrel file. player upgrades setVolume() API. volume parameter on play() . progress events actually fire now (the type existed but was never emitted). stop does a 50ms gain ramp to zero before closing the AudioContext so it doesn’t click. scheduling uses Math.max(ctx.currentTime + 0.01, ...) to prevent scheduling in the past if rendering falls behind. stream tempo handling streamScore() was using a single currentTempo for the whole note. now it has tempoAt() for point lookups and noteSampleDuration() that integrates across tempo changes within a note. a note that spans a tempo change gets the right duration now. also added a cascade reset between phonemes in the renderer (was carrying filter state across phoneme boundaries causing ringing), added a missing phoneme console.warn so you can actually debug G2P failures, and fixed the Japanese romaji parser to skip spaces instead of treating them as unknown consonants. the TODO list is getting shorter. slowly but surely. …and i forgot to update it oops
open any vocal synth file ever made so you know how the TODO said “MIDI file import” as one little checkbox? I may have slightly exceeded scope on that one. UTAU.js can now import UST, USTX, VPR, VSQX, VSQ, SVP, MIDI, MusicXML, PPSF, S5P, TSSLN, CCS, DV, and UFData files. that’s UTAU, OpenUTAU, Vocaloid, Synthesizer V, Piapro Studio, CeVIO, DeepVocal, and standard MIDI. basically every vocal synth format that exists. this is thanks to utaformatix-ts by sevenc-nanashi, which is a universal parser for vocal synth project files. it converts everything into a common UfData format. I wrote a 145-line adapter ( ufdata.ts ) that converts UfData into UTAU.js Scores. lazy-loaded so the parser only gets pulled in when you actually import a file. pitch bends this was the hard part. vocal synth files have pitch curves. track-level arrays of tick-value pairs that describe how the pitch deviates from the written note. the importer splits the track-level curve into per-note pitch bends, handling absolute-to-relative conversion, null value filtering, start/end padding, and extrapolation from preceding points. the renderer now reads note.pitchBend and interpolates it per-sample alongside vibrato. the math: f0 = baseF0 * 2^((bendSemitones * 100 + vibratoCents) / 1200) . pitch bends and vibrato stack correctly in cents space. piano roll overhaul the piano roll was hardcoded to 3 octaves (ik bad, but will fix soon) and a fixed width. now it covers the full MIDI range (0-127) with virtual scrolling. wheel scrolls vertically, shift+wheel or trackpad scrolls horizontally. viewport culling so only visible notes and key labels get drawn. auto-scrolls to center on notes when you import a file. also: pitch curves render as yellow lines overlaid on note blocks. you can see the imported pitch data right there on the piano roll. other stuff added await setTimeout(0) in the streaming loop so the UI doesn’t freeze during long scores. the demo has an “Open” button that accepts all 14 supported file extensions. TODO got updated with a lot of checkboxes ticked. Some amount of lines of import tests covering note mapping, tempo conversion, pitch splitting (absolute, relative, null filtering, extrapolation, out-of-range skipping, pitch:false opt-out), and edge cases.
the prettier commit (and a tiny bugfix) two commits. one has 19 lines of actual code. the other touched every single file in the project. the bugfix the piano roll’s resize handle wasn’t working for already-selected notes. you could resize on first click, but if you clicked a note to select it and THEN tried to drag the right edge, it would move the note instead of resizing. added a resize zone check that fires before the drag-to-move handler when a note is already selected. 19 lines. the formatting pass ran prettier on the entire codebase. every file. the diff is enormous and the actual logic changes are: zero. added .prettierrc (semicolons, double quotes, trailing commas, 140 char width, svelte plugin), .prettierignore , and eslint.config.ts . bumped eslint to 10.5 and typescript-eslint to 8.61. added jiti for ESM config loading. the one real improvement buried in here: replaced the Function type in ufdata.ts with a proper ParseFn type alias. eslint was right to yell at me for using bare Function . everything else is semicolons and line breaks. the codebase has a consistent style now. that’s the whole commit. sometimes you just gotta.
CI arc (three commits, one story) three commits that are really one story: getting CI from “permanently red” to green. the setup “wrote” (aka copied and modified) six GitHub Actions workflows in one go: ci.yml : lint + test + build on push/PR. matrix tests Node 20 and 22. builds the library first, then typechecks the demo. (docs build is commented out because docs don’t exist yet. they will. eventually.) test.yml : dedicated test runner. same Node 20/22 matrix. runs jest in the Build workspace. release-npm.yml : publishes to npm on GitHub release. strips private/scripts/devDependencies from package.json, copies README and LICENSE into Build/, publishes with --provenance . has a workflow_dispatch with a dry-run option so I can test without actually publishing. security-audit.yml : runs npm audit --audit-level=high on all three workspaces (root, Build, Demo). daily cron plus on push when package files change. static.yml : reworked the GitHub Pages deployment. it was pointed at Build/dist (wrong, that’s the library output). now it builds the library, builds the demo, and deploys Demo/dist as the pages root. docs will go in pages-root/docs/ when they exist. single-file.yml : was still referencing Web-Template (the old template name). fixed to point at Demo, output file is now UTAUjsEditor.html. also integrated Updato (my own auto-updater library) into the demo. on load it checks the current build hash against the latest commit on main and shows an update notification if there’s a newer version. the build hash gets injected at build time via __BUILD_HASH__ in the vite config. cleaned up the TODO: removed all the completed checkboxes (they were cluttering the file), added detail to the remaining items. the fixes CI was 0/3 passing. then 1/8 passing. then 2/8. then eventually 8/8. the classic experience. the single-file and updato workflows needed the library built before the demo (workspace dependency). added npm ci at root level and a “Build Library” step before the demo build. also added vite-plugin-singlefile and cross-env for the build:single script. second fix commit added ts-node and unrun as dev deps because the ESM config loading was unhappy without them. three commits to go from red to green. could be worse honestly but whatever
making it sound less terrible (two commits, one mission) these two commits are about one thing: the output was robotic and buzzy and I was tired of it. every change here is about making the synthesizer sound more like a voice and less like a modem. the renderer got smarter cross-note co-articulation. renderNote() now returns { chunk, finalFormants } . the stream passes the previous note’s final formants into the next note’s renderer, and the first phoneme interpolates from those formants instead of jumping cold. gaps between notes reset the chain. notes that follow each other seamlessly now blend their formants across the boundary. per-phoneme envelopes. the old global 5ms attack / 10ms release is gone. replaced with getPhonemeEnvelopeSamples() which gives each phoneme type its own envelope: plosives get 2ms attack / 15ms decay (sharp burst), consonants and vowels get 5ms / 3ms. every phoneme segment fades independently. diphthong formant sweeping. PhonemeDef got an endFormants field. if a diphthong has both formants and endFormants , the renderer sweeps between them over the phoneme duration. AY now actually glides from /aa/ to /ih/. EY glides from /eh/ to /ih/. OW glides from /oh/ to /uh/. they sound like diphthongs now instead of static vowels. vibratoOverride. was defined on Note but never read. now it is. per-note vibrato control works. everything got retuned glottal source. added shimmer (per-cycle amplitude variation driven by jitter, so the volume wobbles slightly like a real voice). aspiration noise is now high-pass filtered (subtract a lowpass from the raw noise) so it’s airy instead of muddy. aspiration gain bumped from 0.1 to 0.15. plosive bursts. noise envelope for plosives changed from symmetric fade to a fast 12ms exponential decay. “pa” now sounds like a burst instead of a pop. formant data for everything. Z, ZH, V, DH, Y, W, HH, JH in English all got formant targets. same for z, h, y, w, j in Japanese. consonants that were previously just noise bursts now resonate through the vocal tract. the difference is huge. vowel bandwidths tightened. defaults went from 80/100/120 to 70/90/130 Hz. narrower bandwidths = sharper resonant peaks = more vowel-like quality. voice presets retuned. male voice: lower open quotient (0.4), lower speed quotient (0.65), higher tenseness (0.65), less aspiration (0.05). sounds less breathy, more chest voice. female: formant scale 1.18. gender slider in scaleVoice now affects speed quotient and has a gender-dependent tenseness base. pitch accent. Japanese got resolveAccents() implementing heiban pattern (low first mora, high rest). the stream groups consecutive notes into phrases, calls resolveAccents, and applies the offsets as constant pitch shifts. it’s basic but it makes Japanese phrases have some melodic contour beyond what the score provides. four TODO items checked off in one go: co-articulation, phoneme envelopes, diphthong sweeping, vibratoOverride. pitch accent too. it still doesn’t sound human. but it’s starting to sound like it’s trying. and that’s a big step from where it was. if you can identify the song in the editor image, good job, you’re cool :D
four commits, and failure I did not intend to do all of this in one sitting. and yet. player batching + buffer pool the player was creating a new AudioBuffer for every single chunk. for a 100-note score that’s 200 buffer allocations (stereo) plus 200 BufferSourceNodes. the garbage collector was not happy. rewrote the scheduling layer. chunks now accumulate into batches (~0.5s each) and get merged into a single AudioBuffer per channel before scheduling. acquireBuffer() checks a pool of previously used buffers by sampleRate and length before allocating new ones. onended releases them back to the pool. pre-buffer threshold bumped to 1.0s for more runway. the result: way fewer Web Audio nodes, way less GC pressure, smoother playback on longer scores. japanese UTAU compatibility imported UST files from real UTAU projects were breaking because Japanese has a bunch of special lyric conventions I didn’t handle: っ (sokuon) : geminate consonant marker. maps to a new sil (silence) phoneme. ※ (pronunciation alias) : text after ※ is the actual pronunciation. あ※ka uses “ka” not “あ”. dot-prefixed lyrics ( .sil , .S ): UTAU rest/silence commands. treated as empty. @ and % : stripped. @ also acts as a note-join marker in the renderer: if present, the initial consonant gets suppressed so the vowel carries through from the previous note. also removed the cascade.reset() between phonemes. filter state now carries through for smoother formant transitions instead of clicking at every phoneme boundary. settings panel new SettingsPanel.svelte . modal overlay, dark theme, closes on Escape or click-outside. currently has one setting: auto-scroll toggle (for a future scroll-to-playhead feature). settings gear icon in the header bar. undo/redo integrated undora for undo/redo history. 50-state capacity. snapshots are saved on mouse-up in the piano roll, delete key, pitch point changes, and lyric/note-number edits (on blur, not on every keystroke). Ctrl/Cmd+Z to undo. Ctrl/Cmd+Shift+Z or Ctrl/Cmd+Y to redo. Undo2 and Redo2 icons in the header bar, disabled when there’s nothing to undo/redo. history clears on language switch and file import. the formatting commit ran prettier again. removed a dead MIN_POOL_SIZE constant and an unused import. cleaned up a few TODO items. the usual. scrollToNotes also got a fix: it was centering on the midpoint of all notes which looked weird when the first note started late. now it clamps to the start of the earliest note so you always see the beginning. also I tried to fix the hissing and static and clicking but to no avail. i tried fixing a LOT of stuff. but. sadly ir only made things worse, so I had to retry. and retry. and retry. and retry. with no luck I’m not sure what the problem is tbh. Let me use Satori to debug some stuff ig
567,211 lines of “code” so about that line count. I added the CMU Pronouncing Dictionary as a git submodule. 134,000+ English words with their ARPABET pronunciations. the cmudict repo is… large. like, genuinely enormous. the diff says 567k lines and it’s almost entirely a text file of words and their phoneme sequences. the actual code changes across these four commits? probably 280 lines. the submodule? 567,131 lines. software engineering. the real G2P Build/data/cmudict is now a submodule pointing to cmusphinx/cmudict. this is THE pronunciation dictionary. the one that every TTS and speech recognition system uses. “BEAUTIFUL” -> “B Y UW1 T AH0 F AH0 L”. “SQUIRREL” -> “S K W ER1 AH0 L”. every word, every pronunciation variant, every stress marker. the 100-word hand-rolled dictionary was cute. this is the real thing. (chunk size warning in vite went from 500 to 13000 because bundling the dictionary is… yeah.) glottal pulse fix the LF glottal source had an audible click on every single cycle. the return phase (after the glottis closes) was a bare exponential decay: -exp(-epsilon * x * period) . the problem: it starts at -1 with non-zero slope, so at the boundary between cycles there’s a discontinuity. click. every. cycle. fix: multiply by sin(pi * x) . the sine term makes the slope match the open phase at t=te (C1 continuity) and reach 0 at t=tc. smooth transition. no click. this is how the actual LF model paper describes it but I’d skipped the sine modulation the first time around because I thought it was just cosmetic. it was not cosmetic. also killed the 0.8/0.2 smoothing filter. it was supposed to prevent clicks but was actually just low-passing the glottal pulse and adding phase distortion. the DC blocker handles drift on its own. coefficient went from 0.995 to 0.99 for faster response. renderer performance formant coefficient updates were happening every sample. that’s setFormants() with trig functions 44,100 times per second. formants don’t actually change that fast. throttled to every 5ms (221 samples at 44.1k). no audible difference, meaningful CPU savings. cascade reset came back at phoneme boundaries. I removed it two commits ago thinking filter state carryover was smoother. it is smoother, but it also causes wideband clicks when the coefficients jump. the reset is the right call. aspiration lowpass aspiration noise on vowels was full-spectrum white noise. real breathy voice has most of its noise energy below 4kHz. added a one-pole lowpass at 4kHz on the aspiration path. sounds warmer and less harsh. also re-added parallel filter resets at phoneme boundaries (matched the cascade reset fix). signal quality tests new test category: signal quality. a long 8-beat note must stay in [-1, 1], be finite throughout, and not be dominated by white noise. the “not white noise” check uses a crude HF proxy: ratio of RMS(sample-to-sample difference) to RMS(signal) in the steady state portion. pure white noise scores ~1.4, a clean tonal signal scores ~0.2. test asserts between 0.05 and 0.8. wrote these tests because the glottal fix could have easily introduced NaN propagation or DC drift and I wanted to catch it automatically.
the documentation commit (part 1) JSDoc everywhere this is the kind of commit where the line count looks impressive and the actual behavior changes are zero. 118 lines became 216 lines in types.ts alone. every interface, every field, every function got documented. some highlights: (don’t ask why i did a double dash. i was being silly and just noticed somehow idk how) openQuotient : “fraction of the glottal cycle the vocal folds are open. Higher values produce a breathier, softer sound (0.2–0.9)” speedQuotient : “ratio of the opening phase to the closing phase. Higher values give a faster closure, increasing brightness (0.3–3.0)” FormantCascade : “cascade of anti-resonators followed by resonators, modelling the vocal-tract transfer function. Anti-resonators (zeros) come first, followed by resonators (poles), matching the source-filter model: S(f) = G(f) * Z(f) / P(f)” LFGlottalSource : “Liljencrants-Fant (LF) glottal pulse source with jitter, shimmer, aspiration noise, and DC blocking. See Fant (1986), Liljencrants (1985)” renderNote : documents the full pipeline: “lyric -> phoneme symbols -> phoneme lookup -> LF glottal pulse -> formant cascade -> noise mix -> amplitude envelope -> normalisation” every DSP class, every language module, every player method, every import/export function. the person reading this code in six months (probably me) will thank me. docs soon Docs next time, I will not be long heheeee TODO cleanup the languages section is fully checked off now. English CMUDict (124,911 words), Japanese EDICT2 (224,808 kanji-to-kana entries), Mandarin with full pinyin decomposition, and phoneme alias maps for cross-language compatibility. all done. all in previous commits I apparently forgot to devlog. oops. reorganized the remaining items: Documentation (JSDoc done, README and docs site still needed) and Future (scroll-to-playhead, seek, loop, Web Worker rendering). the TODO is getting short. that’s a weird feeling for a project that’s six days old.
the docs exist and the README isn’t “Web-Template” anymore so uh. the README has said “Web-Template: My typical web dev starter project” for the entire life of this repo. six days. dozens of commits. a full synthesizer. and the README was still introducing it as a starter template. fixed that. also wrote an entire documentation site. in one sitting. because apparently that’s how I do things now. the README 133 lines replacing the 3-line placeholder. features list, quickstart code (Node.js WAV rendering + browser streaming in like 10 lines each), API overview table with every public export, development instructions, and a Mermaid architecture diagram. the mermaid diagram is a mindmap and it renders SO PRETTY on GitHub. multicolored branches for Core DSP, Languages, Synth, Voices, and IO. each branch fans out into its components. it’s AMAZINGGGGGGGGGGG I spent way too long picking which mermaid diagram type to use and I regret nothing. the docs site ten markdown pages built with DocMD. custom Ruby theme with blue/cyan gradient accents, dark mode support, semantic search via HuggingFace transformers, and a proper navigation structure: getting started : quickstart (5-step guide with code), installation (npm/CDN/source), core concepts (source-filter model explanation with a Mermaid flowchart showing glottal source -> formant cascade -> output) guide : architecture (module layout, data flow diagram, design decisions), renderer (6-step pipeline walkthrough from lyric to audio), languages (built-in language docs + how to register custom languages + cross-language aliasing) API reference : full export table, DSP primitives with code examples, VoiceConfig reference (264 lines of parameter documentation with perceptual effect tables for every single field. “openQuotient 0.3 = pressed tense voice, 0.5 = neutral modal voice, 0.7 = breathy soft voice.” that kind of detail.), import/export format support table the VoiceConfig page alone is probably the most thorough documentation of a formant synthesizer’s parameter space I’ve ever seen in a JS library. I might be biased. I’ve not seen many others. We don’t talk about that. also added UST and TSSLN to the export format list (they were import-only before). fixed the export function to handle generators that return arrays instead of single Uint8Arrays. CI workflows now build and audit the docs workspace too. the TODO is almost empty. just “README: quickstart, API overview, architecture diagram” which is now done. the project has: a synthesizer, three languages, 14+ import formats, 14+ export formats, a demo app with a piano roll, voice presets, undo/redo, settings, file import/export, WAV export, tempo control, buffer management, 160+ tests, JSDoc on everything, a full documentation site, and CI that’s green. six days :O
v0.1.0 Well Stardance told me this: Warning You have 1h 14m logged that you haven't posted a devlog for. If you ship without posting a devlog, this time will be lost! IDK why, but i was planning to devlog my silly anyways so: five commits. all tagged v0.1.0. all fixing things that should have been done before I said “the project is ready.” the classic “wait I forgot” sequence. “Oops” - CI was trying to build docs without running npm ci first. added the install step. three words of actual code change. (this was wrong) “Huh. where did that come from.” - the pages deploy was creating a docs/ directory but the docs copy was still commented out. the demo was deploying fine but docs were going nowhere. fixed the mkdir. “Oooops guess who forgot to uncomment some code” - uncommented the actual docs copy in static.yml. also fixed the docs URL from nisoku.org (wrong domain) to nellowtcs.me/UTAU.js/docs. details. “You never saw that coming did you /sarc” - added all the npm publish metadata to package.json. license, author, repository, homepage, bugs URL, and keywords. the keywords are: utau, synthesis, singing, voice, speech, audio, dsp, lf-glottal, source-filter, formant. so if you npm search for any of those things, maybe you’ll find this. someday. (NPM release failed lol, that’s why I did this) “Badges hehe” - npm version badge, CI status badge, MIT license badge at the top of the README. because a project isn’t real until it has badges. everyone knows that. (/j) five commits to go from “done” to actually done. four of them are CI fixes. like i just said, this is software development. CI is green. docs are deployed. npm metadata is set. badges are shiny. v0.1.0 is tagged. so. that’s UTAU.js. six days. from “idk my voice tho” in an Obsidian doc to a parametric singing synthesizer with three languages, 14+ import/export formats, a Svelte demo app, a docs site, 160+ tests, and a v0.1.0 tag. it sounds mid. like, genuinely. the vowels are recognizable but the consonants are strange and the whole thing has this uncanny valley quality where you can tell it’s trying to be a voice but isn’t quite there. it’s really adorable when it tries :3 but it makes sound. from math. in a browser. and that’s the whole point of v0.1.0. it doesn’t have to be good. it has to exist. it exists now. :)
Ships:
I built UTAU.js, a fully synthetic singing voice engine that runs in the browser using pure DSP instead of samples or AI. It supports English, Japanese, and Mandarin, and it can import almost every major vocal synth format through a unified score system. The demo includes a piano roll editor, real-time streaming playback, voice presets, and a full set of controls for shaping the glottal source and formant model. I am proud of the coarticulation system, the pitch bend renderer, and the fact that the entire engine sings from math alone. You can try the demo, draw notes, type lyrics, and hear it perform immediately!!!!!!!!!!...
|
1793134055.6142983
|
1793220455.6142983
|
|
19656
|
Anukrama by @aashvik | Stardance
|
aashvik
|
2
|
21.0
|
180
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-20T02:47:47Z", "hours": 14.0, "multiplier": 8.67, "payout": 119, "blessing": "neutral", "text": "What did you make? Anukrama is a gita chapter 15 chanting game where you get part of a verse and try to chant the rest. I also made an ai that scores your chanting. What was challenging? Getting the ai running in the browser was the hardest part. I had to move the pytorch model to onnx and recreate the audio processing in JavaScript. What are you proud of? Prob getting the entire ai pipeline working in the actual website. It literally took most of my time and I couldn’t get it to work for like an hour :sob-spin: What should people know when testing? The AI is meant to mainly be a gimmick in beta. It’s only based on around 30 recordings per verse because there is absolutely no gita chanting data. You should test without bg noise and actually chant the verse if u want the best results.", "repo": "https://github.com/koditra/Anukrama", "demo": "https://koditra.github.io/Anukrama/"}, {"ship_num": 2, "ts": "2026-07-04T06:22:09Z", "hours": 7.0, "multiplier": 8.95, "payout": 61, "blessing": "neutral", "text": "Anukrama is a nintendo Switch homebrew app that helps people memorize and practice chanting Bhagavad Gita verses. It gives you the previous quarter of a verse as a clue, and you have to chant the next part from memory. Right now it includes all 20 verses of Chapter 15 with audio prompts and easy controller navigation. The biggest challenge was getting the audio system and verse progression working smoothly on the Switch. I also spent a lot of time organizing the verse metadata and making everything load quickly. Thanks for following my journey!", "repo": "https://github.com/koditra/Anukrama", "demo": "https://koditra.github.io/Anukrama/"}]...
|
[{"post_id": 67766, "ts": "202 [{"post_id": 67766, "ts": "2026-09-14T00:35:29Z", "hours": 4.8522, "text": "Final update/devlog !!!! I finally finished integrating the AI pronunciation system into Anukrama. This ended up being way more complicated than I originally thought. The model itself was trained in PyTorch using MFCCs, spectral features, and DTW comparisons against multiple good chanting recordings. The problem was that the .pt model couldn’t just be dropped into a website, so I had to export everything to ONNX and basically rebuild the preprocessing pipeline in JavaScript so the browser could generate the same kind of audio features from a recording. I also changed how I stored the scaler data by putting the normalization values into the .npz files, then wrote the JavaScript to load the model, scaler, reference audio, process the recording, calculate the features, and pass everything through the ONNX model. There were a bunch of stupid issues along the way too, including the ONNX runtime conflicting with a variable in my JS and the scaler data not loading correctly lol. After all of that I added the actual score display to the site, so the recording can go through the whole pipeline and come back as a pronunciation score out of 100. This took way longer than I expected lol, but I finally got it working. This is prob the end of this project!!!!"}, {"post_id": 53354, "ts": "2026-08-23T21:13:09Z", "hours": 3.5311, "text": "AI Pronunciation Model I worked on the AI pronunciation system for Anukrama! I used PyTorch to train models that compare your chanting to good reference recordings and give u a score out of 100. I made models for Verse 1 and Verse 2 using things like MFCCs and DTW. The models are trained, but I need way more data because there isn’t really a big dataset of Bhagavad Gita chanting recordings. I still need to record a lot of the data myself. I haven’t added the AI to the website yet. If u wanna help me record data for the model, pls DM me ( @aashvik )!"}, {"post_id": 47192, "ts": "2026-08-14T22:33:31Z", "hours": 3.0061, "text": "Devlog Update Today I worked on the browser version of Anukrama. i added: A browser demo at game.html GitHub-hosted verse data using the meta , verses , and audio folders Devanagari support in the browser Automatic prompt audio Special handling for Verse 1 since it has no prompt Audio fade-outs when switching verses quickly Fade animations between game states i also updated the landing page with a Try Browser Demo button. i added a short explanation of what the Bhagavad Gita is, including a comparison to the Bible to help people unfamiliar with Hinduism understand it. i might need to fix the landing page css because the buttons look a bit squished also, i learned how to type in markdown recently so tell me if u have any advice! :)"}, {"post_id": 32324, "ts": "2026-07-21T12:51:13Z", "hours": 2.3922, "text": "Final Devlog! Hi! whats up? So basically, I worked on the website and worked on rewriting it in my style because I used way too much AI for the last one, so it seemed vibecoded. I started out with a really basic page and slowly added more css. I chose a paper brown color scheme for the UI bc i think it fits the Bhagavad Gita app idea better. I also spent a while practicing css and finally understand flexbox. here are the things i added: navbar hack club flag that waves around chinmaya mission logo hover animations gameplay section with a youtube video minimalist layout i made the hack club logo wave constantly, then stop and get a little bigger when you hover over it. that was fun. Thats all! I also wanted to thank and give Chinmaya Mission credit for the audio recordings. (They didn’t even want recognition!)"}, {"post_id": 21407, "ts": "2026-07-03T10:20:08Z", "hours": 1.8864, "text": "I made a landing page for the website! I tried to make my own css but it looked kinda ahh so i ended up using a mixture of ChatGPT and Gemini to make the effects look way better. I still changed a bunch of stuff myself and messed around with the layout until it looked how i wanted. I also added my own screenshots to the website so people could actually see what it looks like instead of just reading about it. I spent some time changing little things like the spacing, colors, and animations to make it feel nicer overall. After i finished everything, i used git to upload all of the code to github so i could keep track of my changes and have it all backed up. Thats pretty much everything i worked on for the landing page!"}, {"post_id": 12464, "ts": "2026-06-20T11:03:02Z", "hours": 4.3567, "text": "Today ended up being a much bigger update than I originally planned. The original goal was simply to improve audio playback and make the application a little easier to use, but it gradually turned into a complete overhaul of the project. Earlier versions of Anukrama were entirely terminal-based and focused mainly on functionality rather than presentation. While they worked well enough for testing and practicing verses, they did not really feel like a finished Nintendo Switch application. As I continued working on the project, I decided it was time to build a proper interface. I started by experimenting with a few graphics libraries, but that quickly became frustrating due to dependency problems, linker errors, and build issues that consumed far more development time than expected. After spending a considerable amount of time trying to make those libraries cooperate, I eventually decided to take a different approach and build the rendering system myself using the Switch framebuffer along with FreeType for font rendering. This ended up being a much better solution because it gave me direct control over how text and graphics were displayed. One of the most important improvements from this change was proper Unicode support. Earlier versions struggled with Sanskrit transliteration characters, often displaying missing glyphs, incorrect symbols, or unreadable text. The new rendering system finally allowed me to render Unicode properly, which means verses and prompts can now appear correctly on screen. During the process I also redesigned the entire user interface, added larger text, created menu screens, introduced animated backgrounds, improved readability, added color-coded sections, and included a “Made by Aashvik Goel” credit within the application. Looking back, the difference between the original terminal version and the new interface is much larger than I expected when I first started making changes. The audio system also received significant improvements during this update. The application now supports separate prompt and answer recordings, allowing users to hear a prompt before revealing the complete verse. Implementing this required converting recordings into the correct PCM format, debugging playback issues, testing different audio configurations, and tracking down several recordings that did not behave as expected. While a small number of recordings still need additional work, the overall system is now much more reliable. Alongside the audio improvements, I added multiple study modes to make practice sessions more engaging. There is now a Solo Practice mode as well as a pass-and-play VS Mode where two players can take turns answering verses and earning points. Another major focus was testing on actual hardware rather than relying entirely on emulation. Although Ryujinx was extremely useful throughout development, I regularly installed builds directly onto my Nintendo Switch to verify that rendering, controls, performance, and audio behaved correctly on the real device. This helped uncover issues that would have been easy to miss in an emulator and made the project feel much more like a genuine homebrew application. By the end of this development cycle, Anukrama had gained a completely new rendering engine, proper Unicode support, improved audio playback, multiple study modes, a full menu system, animated visual effects, and a far more polished overall presentation. What originally started as a simple terminal-based study tool has now begun to feel like a complete Switch application designed specifically for practicing Bhagavad Gita verses."}, {"post_id": 9784, "ts": "2026-06-16T07:02:35Z", "hours": 0.3319, "text": "hi again, i finally got a proper shell/menu system working for the app now. right now it’s still really basic and mostly just a text UI, but it’s the first version where everything is structured properly instead of just random test code. you can move up and down with the dpad, press A to select options, and it switches between different states like practice, quiz, and settings. it doesn’t actually do much yet in those modes, but that’s kind of the point of this step. i basically wanted to build a shell first so all the core navigation and input handling is stable before i start adding the real features. before this, everything was just separate test snippets, but now it’s all inside one loop with proper states, so it’s way easier to expand without breaking things. pressing + still quits the app, and i made sure the input system is using the correct libnx setup from the examples, so the controls actually work properly on real hardware instead of randomly failing like before. now that this shell is done, i can actually start building the real parts of the project. the plan is to plug in the verse system into practice mode first, where it shows a prompt and then eventually makes you continue the verse. quiz mode will probably come after that once the structure is solid. Anyways, here is a pic of the shell from an emulator:"}, {"post_id": 9770, "ts": "2026-06-16T06:33:48Z", "hours": 0.6058, "text": "Hi everyone! I just started this project so i can get more comfortable with making my own games/apps, and I rlly wanted to make a switch app! So here’s my plan: I want to make a fully interactive and immersive 2d UI but i think ill make a text shell first so all the features work and ill make the UI later. when i was starting to make the code, I made a screen which said press + to exit. I pressed plus, but the game didn’t quit like it was supposed to. After making a test code to print all buttons pressed, I found out my code wasn’t even receiving any inputs. I had to ask on reddit and I still couldn’t find any answers so i looked in the demo folder of the library I installed and was able to fix my code after reading the proper controller initialization that I should have used. Here is a picture from an emulator of what the output is supposed to look like:"}]...
|
Title: Anukrama by @aashvik | Stardance
Devlogs:
Title: Anukrama by @aashvik | Stardance
Devlogs:
Hi everyone! I just started this project so i can get more comfortable with making my own games/apps, and I rlly wanted to make a switch app! So here’s my plan: I want to make a fully interactive and immersive 2d UI but i think ill make a text shell first so all the features work and ill make the UI later. when i was starting to make the code, I made a screen which said press + to exit. I pressed plus, but the game didn’t quit like it was supposed to. After making a test code to print all buttons pressed, I found out my code wasn’t even receiving any inputs. I had to ask on reddit and I still couldn’t find any answers so i looked in the demo folder of the library I installed and was able to fix my code after reading the proper controller initialization that I should have used. Here is a picture from an emulator of what the output is supposed to look like:
hi again, i finally got a proper shell/menu system working for the app now. right now it’s still really basic and mostly just a text UI, but it’s the first version where everything is structured properly instead of just random test code. you can move up and down with the dpad, press A to select options, and it switches between different states like practice, quiz, and settings. it doesn’t actually do much yet in those modes, but that’s kind of the point of this step. i basically wanted to build a shell first so all the core navigation and input handling is stable before i start adding the real features. before this, everything was just separate test snippets, but now it’s all inside one loop with proper states, so it’s way easier to expand without breaking things. pressing + still quits the app, and i made sure the input system is using the correct libnx setup from the examples, so the controls actually work properly on real hardware instead of randomly failing like before. now that this shell is done, i can actually start building the real parts of the project. the plan is to plug in the verse system into practice mode first, where it shows a prompt and then eventually makes you continue the verse. quiz mode will probably come after that once the structure is solid. Anyways, here is a pic of the shell from an emulator:
Today ended up being a much bigger update than I originally planned. The original goal was simply to improve audio playback and make the application a little easier to use, but it gradually turned into a complete overhaul of the project. Earlier versions of Anukrama were entirely terminal-based and focused mainly on functionality rather than presentation. While they worked well enough for testing and practicing verses, they did not really feel like a finished Nintendo Switch application. As I continued working on the project, I decided it was time to build a proper interface. I started by experimenting with a few graphics libraries, but that quickly became frustrating due to dependency problems, linker errors, and build issues that consumed far more development time than expected. After spending a considerable amount of time trying to make those libraries cooperate, I eventually decided to take a different approach and build the rendering system myself using the Switch framebuffer along with FreeType for font rendering. This ended up being a much better solution because it gave me direct control over how text and graphics were displayed. One of the most important improvements from this change was proper Unicode support. Earlier versions struggled with Sanskrit transliteration characters, often displaying missing glyphs, incorrect symbols, or unreadable text. The new rendering system finally allowed me to render Unicode properly, which means verses and prompts can now appear correctly on screen. During the process I also redesigned the entire user interface, added larger text, created menu screens, introduced animated backgrounds, improved readability, added color-coded sections, and included a “Made by Aashvik Goel” credit within the application. Looking back, the difference between the original terminal version and the new interface is much larger than I expected when I first started making changes. The audio system also received significant improvements during this update. The application now supports separate prompt and answer recordings, allowing users to hear a prompt before revealing the complete verse. Implementing this required converting recordings into the correct PCM format, debugging playback issues, testing different audio configurations, and tracking down several recordings that did not behave as expected. While a small number of recordings still need additional work, the overall system is now much more reliable. Alongside the audio improvements, I added multiple study modes to make practice sessions more engaging. There is now a Solo Practice mode as well as a pass-and-play VS Mode where two players can take turns answering verses and earning points. Another major focus was testing on actual hardware rather than relying entirely on emulation. Although Ryujinx was extremely useful throughout development, I regularly installed builds directly onto my Nintendo Switch to verify that rendering, controls, performance, and audio behaved correctly on the real device. This helped uncover issues that would have been easy to miss in an emulator and made the project feel much more like a genuine homebrew application. By the end of this development cycle, Anukrama had gained a completely new rendering engine, proper Unicode support, improved audio playback, multiple study modes, a full menu system, animated visual effects, and a far more polished overall presentation. What originally started as a simple terminal-based study tool has now begun to feel like a complete Switch application designed specifically for practicing Bhagavad Gita verses.
I made a landing page for the website! I tried to make my own css but it looked kinda ahh so i ended up using a mixture of ChatGPT and Gemini to make the effects look way better. I still changed a bunch of stuff myself and messed around with the layout until it looked how i wanted. I also added my own screenshots to the website so people could actually see what it looks like instead of just reading about it. I spent some time changing little things like the spacing, colors, and animations to make it feel nicer overall. After i finished everything, i used git to upload all of the code to github so i could keep track of my changes and have it all backed up. Thats pretty much everything i worked on for the landing page!
Final Devlog! Hi! whats up? So basically, I worked on the website and worked on rewriting it in my style because I used way too much AI for the last one, so it seemed vibecoded. I started out with a really basic page and slowly added more css. I chose a paper brown color scheme for the UI bc i think it fits the Bhagavad Gita app idea better. I also spent a while practicing css and finally understand flexbox. here are the things i added: navbar hack club flag that waves around chinmaya mission logo hover animations gameplay section with a youtube video minimalist layout i made the hack club logo wave constantly, then stop and get a little bigger when you hover over it. that was fun. Thats all! I also wanted to thank and give Chinmaya Mission credit for the audio recordings. (They didn’t even want recognition!)
Devlog Update Today I worked on the browser version of Anukrama. i added: A browser demo at game.html GitHub-hosted verse data using the meta , verses , and audio folders Devanagari support in the browser Automatic prompt audio Special handling for Verse 1 since it has no prompt Audio fade-outs when switching verses quickly Fade animations between game states i also updated the landing page with a Try Browser Demo button. i added a short explanation of what the Bhagavad Gita is, including a comparison to the Bible to help people unfamiliar with Hinduism understand it. i might need to fix the landing page css because the buttons look a bit squished also, i learned how to type in markdown recently so tell me if u have any advice! :)
AI Pronunciation Model I worked on the AI pronunciation system for Anukrama! I used PyTorch to train models that compare your chanting to good reference recordings and give u a score out of 100. I made models for Verse 1 and Verse 2 using things like MFCCs and DTW. The models are trained, but I need way more data because there isn’t really a big dataset of Bhagavad Gita chanting recordings. I still need to record a lot of the data myself. I haven’t added the AI to the website yet. If u wanna help me record data for the model, pls DM me ( @aashvik )!
Final update/devlog !!!! I finally finished integrating the AI pronunciation system into Anukrama. This ended up being way more complicated than I originally thought. The model itself was trained in PyTorch using MFCCs, spectral features, and DTW comparisons against multiple good chanting recordings. The problem was that the .pt model couldn’t just be dropped into a website, so I had to export everything to ONNX and basically rebuild the preprocessing pipeline in JavaScript so the browser could generate the same kind of audio features from a recording. I also changed how I stored the scaler data by putting the normalization values into the .npz files, then wrote the JavaScript to load the model, scaler, reference audio, process the recording, calculate the features, and pass everything through the ONNX model. There were a bunch of stupid issues along the way too, including the ONNX runtime conflicting with a variable in my JS and the scaler data not loading correctly lol. After all of that I added the actual score display to the site, so the recording can go through the whole pipeline and come back as a pronunciation score out of 100. This took way longer than I expected lol, but I finally got it working. This is prob the end of this project!!!!
Ships:
Anukrama is a nintendo Switch homebrew app that helps people memorize and practice chanting Bhagavad Gita verses. It gives you the previous quarter of a verse as a clue, and you have to chant the next part from memory. Right now it includes all 20 verses of Chapter 15 with audio prompts and easy controller navigation. The biggest challenge was getting the audio system and verse progression working smoothly on the Switch. I also spent a lot of time organizing the verse metadata and making everything load quickly. Thanks for following my journey!
What did you make? Anukrama is a gita chapter 15 chanting game where you get part of a verse and try to chant the rest. I also made an ai that scores your chanting. What was challenging? Getting the ai running in the browser was the hardest part. I had to move the pytorch model to onnx and recreate the audio processing in JavaScript. What are you proud of? Prob getting the entire ai pipeline working in the actual website. It literally took most of my time and I couldn’t get it to work for like an hour :sob-spin: What should people know when testing? The AI is meant to mainly be a gimmick in beta. It’s only based on around 30 recordings per verse because there is absolutely no gita chanting data. You should test without bg noise and actually chant the verse if u want the best results....
|
1793220645.7894626
|
1793307045.7894626
|
|
20010
|
FallOS by @Faress | Stardance
|
Faress
|
2
|
21.0
|
25
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T00:46:17Z", "hours": 7.0, "multiplier": 3.71, "payout": 25, "blessing": "neutral", "text": "I made a WebOS called FallOS , its a minimalist and efficient WebOS that contains many features like: Resonant - Music App with a small catalogue of some of my favorite songs, includes a skip/previous button , a progression bar and stop/play button. Vela - Browser Launcher App, a very simple browser launcher with 4 interesting bookmarks Canvas - Wallpaper Changer where you can choose your wallpaper from a selection I made (you guys have to test the WorldCup one it’s beautiful) Clock - The newest app with a worldclock , chronometer and timer. There are a lot of other features present and I invite you to test them, this project was hard because i had to learn a lot of JS (i did a big chunck BUT i’ll admit a loot of the JS logic was made by claude ;( sorry , all the rest is purely me so 100% of CSS and HTML)", "repo": "https://github.com/xReFaLL/FALL_OS", "demo": "https://xrefall.github.io/FALL-OS/"}, {"ship_num": 2, "ts": "2026-06-23T21:59:00Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is my WebOS named FallOS, it’s my first project for this stardance, i hope you guys will like it and give me some points where i could improve on for the next version(s)! I really struggled on the JS part, I had to learn a lot of it but i still had to get most of the logic online from AIs or sketchy websites. The html part was really fun though, organizing my code, separating it with the and using CSS to control it precisely felt like a video game! -The link to test the project is : https://xrefall.github.io/FALL-OS/ -The repo link is : https://github.com/xReFaLL/FALL-OS", "repo": "https://github.com/xReFaLL/FALL_OS", "demo": "https://xrefall.github.io/FALL-OS/"}]...
|
[{"post_id": 20997, "ts": "202 [{"post_id": 20997, "ts": "2026-07-02T18:54:35Z", "hours": 1.6656, "text": "*New App: Clock - 3 tabs with : a Worldclock with 5 big cities around the world, a Chronometer and a Timer *Re-organized the desktop by putting App icons horizontally instead of vertical"}, {"post_id": 17713, "ts": "2026-06-28T17:01:01Z", "hours": 4.4808, "text": "New FALLOS Features Terminal - NEW APP :Acts like a Command Terminal with a couple of basic commands and some easter eggs hidden, You can look through the files or test your luck to find them! Hide and Fullscreen for ALL apps with Yellow and Green Buttons respectively, BONUS:They h Canvas Rework - Changed most of the Default Wallpapers with almost all being now in a higher quality. SideBar Rework - Added all the quick acces for the “Interactable” Apps in the sidebar"}, {"post_id": 16303, "ts": "2026-06-26T15:08:03Z", "hours": 0.5969, "text": "Created an app called Canvas which acts like a Wallpaper changer which has for now 9 default Wallpapers."}, {"post_id": 14689, "ts": "2026-06-23T21:40:13Z", "hours": 2.7506, "text": "New: -Changed all the FALL OS logos to a cleaner aesthetic -Cleaned up the bar at the bottom -Added a advancement bar to songs in Resonant -Created a web launcher named Vela with a couple of pre-installed bookmarks -Created a new Notes app where you can write and store apps (survives reloads too)"}, {"post_id": 13399, "ts": "2026-06-21T22:48:23Z", "hours": 4.4758, "text": "Added New App to FallOS: Resonant - A music player app with 15 songs (some of my favorites) with : Pause/Play Feature, a Custom Rolling list with the song library , a Skip button and Return button. Cleaned up a bit the UI too. Next: Background Changer App, Calendar App and Web Browser App aswell as a search feature for the Resonant App"}, {"post_id": 12174, "ts": "2026-06-19T21:50:55Z", "hours": 6.3125, "text": "Done with the first app(very special for me!) and essentials."}]...
|
Title: FallOS by @Faress | Stardance
Devlogs:
Don Title: FallOS by @Faress | Stardance
Devlogs:
Done with the first app(very special for me!) and essentials.
Added New App to FallOS: Resonant - A music player app with 15 songs (some of my favorites) with : Pause/Play Feature, a Custom Rolling list with the song library , a Skip button and Return button. Cleaned up a bit the UI too. Next: Background Changer App, Calendar App and Web Browser App aswell as a search feature for the Resonant App
New: -Changed all the FALL OS logos to a cleaner aesthetic -Cleaned up the bar at the bottom -Added a advancement bar to songs in Resonant -Created a web launcher named Vela with a couple of pre-installed bookmarks -Created a new Notes app where you can write and store apps (survives reloads too)
Created an app called Canvas which acts like a Wallpaper changer which has for now 9 default Wallpapers.
New FALLOS Features Terminal - NEW APP :Acts like a Command Terminal with a couple of basic commands and some easter eggs hidden, You can look through the files or test your luck to find them! Hide and Fullscreen for ALL apps with Yellow and Green Buttons respectively, BONUS:They h Canvas Rework - Changed most of the Default Wallpapers with almost all being now in a higher quality. SideBar Rework - Added all the quick acces for the “Interactable” Apps in the sidebar
*New App: Clock - 3 tabs with : a Worldclock with 5 big cities around the world, a Chronometer and a Timer *Re-organized the desktop by putting App icons horizontally instead of vertical
Ships:
This is my WebOS named FallOS, it’s my first project for this stardance, i hope you guys will like it and give me some points where i could improve on for the next version(s)! I really struggled on the JS part, I had to learn a lot of it but i still had to get most of the logic online from AIs or sketchy websites. The html part was really fun though, organizing my code, separating it with the and using CSS to control it precisely felt like a video game! -The link to test the project is : https://xrefall.github.io/FALL-OS/ -The repo link is : https://github.com/xReFaLL/FALL-OS
I made a WebOS called FallOS , its a minimalist and efficient WebOS that contains many features like: Resonant - Music App with a small catalogue of some of my favorite songs, includes a skip/previous button , a progression bar and stop/play button. Vela - Browser Launcher App, a very simple browser launcher with 4 interesting bookmarks Canvas - Wallpaper Changer where you can choose your wallpaper from a selection I made (you guys have to test the WorldCup one it’s beautiful) Clock - The newest app with a worldclock , chronometer and timer. There are a lot of other features present and I invite you to test them, this project was hard because i had to learn a lot of JS (i did a big chunck BUT i’ll admit a loot of the JS logic was made by claude ;( sorry , all the rest is purely me so 100% of CSS and HTML)...
|
1793263673.9581187
|
1793350073.9581187
|
|
21003
|
Iss tracker by @huncikoma | Stardance
|
huncikoma
|
1
|
21.0
|
245
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T16:56:38Z", "hours": 21.0, "multiplier": 11.84, "payout": 245, "blessing": "neutral", "text": "I make a real-time ISS tracker with a 3D globe. It shows the station’s live position, altitude, speed and whether it’s sunlit — plus it predicts when the ISS will be visible with the naked eye from your location in the next 6 days. It also shows who’s currently aboard. All the orbital math (SGP4) runs locally with satellite.js, the 3D globe is globe.gl. What was challenging?-Pretty much everything — this is my first web project ever. I’m a Python guy, so I had to learn the whole thing from the ground up: HTML, CSS, JavaScript, all of it. None of this existed in my toolbox before this project. The hardest part by far was the pass prediction: look angles, ECI to ECF conversion, checking if the ISS is sunlit while your sky is dark. Actual orbital mechanics. I used AI as a tutor along the way, but I made sure I understood every part instead of just pasting code. I am proud of that the pass prediction actually works — three conditions lining up (ISS above 10°, sun 6° below your horizon, station still in sunlight) and it tells you exactly when to look up. Also the “mission control” design, built from scratch with CSS variables. And honestly: that as a Python-only dev I had to learn an entirely new stack for this, and it actually came together. From barely knowing what a div is to this, in a few weeks. To test it: Just run start.bat (it starts a small Python webserver and opens the app) — or open the demo URL. Click “Use my location” or type coordinates manually, and the visible passes table fills in. Try the Follow/Rotate camera modes and the Day/Night texture toggle too. Details in the README.", "repo": "https://github.com/huncikoma-code/Iss-tracker", "demo": "https://huncikoma-code.github.io/Iss-tracker/"}]...
|
[{"post_id": 26009, "ts": "202 [{"post_id": 26009, "ts": "2026-07-10T16:00:47Z", "hours": 4.5603, "text": "Devlog #10 — Crew, startup & it’s doneLast pieces today.Crew section first. Pulls from the Open Notify API — who’s on the ISS right now. Had to route it through a CORS proxy because the API is http-only and browsers block that from an https page. Filters for ISS crew specifically, falls back to everyone in space if the filter comes up empty. If the API dies, shows a graceful “unavailable” message instead of breaking.Then the startup section — the part that boots everything. Load saved observer location, fetch TLE, fetch crew, then the intervals: tick() every second, orbit path refresh every minute, fresh TLE every 2 hours, crew every 6 hours. Everything on its own schedule.Finally made it actually easy to run. Wrote a small Python server file that spins up a local webserver — this is where my Python comfort zone finally got to shine in this project. Plus a start.bat that launches the server and opens the app in the browser in one double-click. And a README so anyone can figure out how to run it.That’s it. The tracker is done. Live position, 3D globe, pass predictions, crew list, one-click startup. Started this barely knowing what a div was."}, {"post_id": 25798, "ts": "2026-07-10T08:19:42Z", "hours": 2.5208, "text": "Devlog #9 — Pass predictionThe part I was most scared of. Also the coolest.computePasses() steps through the next 6 days in 30-second jumps, calculates the ISS position at each step, and converts it to look angles from your location. Elevation above 10° = pass starts. Drops below = pass ends.The visibility check is the fun part. You can only see the ISS with your own eyes if three things line up: it’s above 10°, the sun is 6°+ below your horizon , but the ISS up there is still catching sunlight. Basically a sunlit object against a dark sky. That’s what you’re actually seeing.Also finished the geolocation button, the reverse geocoding for your city name, and the pass table — time, duration, max elevation, compass direction. Visible passes get an orange dot.Deepest I’ve been in over my head this whole project. But piece by piece, it makes sense now."}, {"post_id": 25208, "ts": "2026-07-09T09:57:40Z", "hours": 3.0786, "text": "Devlog #8 — TLE age, observer location & localStorageShort but important session.First, finished off the tick() function. Added TLE age display — shows how old the orbital data is. Under an hour it shows minutes, over an hour it shows decimal hours. Small detail but useful, stale TLE data means inaccurate position.Then observer location. This took a bit of thinking. The app needs to know where you are to predict ISS passes — so setObserver() takes lat/lng, validates it (no infinite values, lat within ±90, lng within ±180), converts to radians for the math, and stores it.The localStorage part was new territory for me. Never used it before. Basically the browser remembers your location between sessions — so next time you open the app it loads your saved coordinates automatically via loadObserver(). One line to save, one line to load, JSON in between. Actually really simple once I understood it.The observer marker gets placed on the globe too — same system as the ISS marker but sits almost on the surface (altFrac: 0.005).Input fields update to show the saved coordinates. The location display shows hemisphere format — 47.50° N, 19.04° E style — then “loading…” underneath while it reverse geocodes the place name.Coordinates, radians, localStorage, marker placement — a lot of small things that all had to connect correctly. Felt good when it clicked."}, {"post_id": 24115, "ts": "2026-07-07T14:07:26Z", "hours": 3.0858, "text": "Devlog #7 — Camera, live updates & the tick loopThis session was the one where it started actually feeling alive.Camera controls first. Three modes — follow, rotate, free. “Follow” mode smoothly pans the globe to the ISS position every 2.4 seconds with a 900ms animation. Feels really clean, like the camera is actually tracking something. “Rotate” just spins the globe on its own. “Free” is hands-off, user controls everything. Also wired up the day/night texture toggle — one click switches between the blue marble and the night lights texture.Found a bug: setStatus() is missing a space — “led” + cls produces “ledlive” instead of “led live”. The LED will never change color because the class name is wrong. One character fix.Then the tick() function. This is the heartbeat of the whole app. Runs on an interval, calls stateAt(now), updates the marker position, updates all the telemetry readouts — lat, lng, altitude, speed, orbital period, illumination. Everything live."}, {"post_id": 21368, "ts": "2026-07-03T08:20:22Z", "hours": 0.9267, "text": "Devlog #6 — Markers, orbit track & resizeShort session today but got a few important things done.Set the globe’s starting view — looking down at lat: 20, lng: 0 from altitude 2.4. Basically a nice “overview of Earth” angle when the page loads. Auto-rotate speed set to 0.45, slow and smooth. Small detail but it makes the whole thing feel alive even before any data loads.Then the markers. Two functions — makeIssEl() and makeObsEl() — each just creates a div with the right CSS class and inner HTML. The ISS gets the orange ring, the observer gets a “You” label. Simple.Found two HTML typos in there while writing this. makeIssEl() has </div missing the closing >. makeObsEl() is missing the opening < on the dot div — ‘div class=“dot”>’ instead of ‘’. Both will silently break the markers in the browser. Need to fix those.The orbit track was interesting. It loops from -25 minutes to +70 minutes around now, samples a position every 1.5 minutes, builds a path array. So you see where the ISS came from and where it’s going. Past 25 minutes, future 70. Felt like a very “Python” approach — just loop, collect, feed into the renderer.Also wired up resize handling. Globe redraws to fill its container whenever the window size changes. One listener, one function."}, {"post_id": 16304, "ts": "2026-06-26T15:08:45Z", "hours": 1.685, "text": "Devlog #5 — The JavaScript begins. It’s a lot.Okay. JavaScript. Here we go.Started wiring up the actual logic today. First thing: fetching the TLE data — basically the orbital parameters that tell satellite.js where the ISS is. Hitting the wheretheiss.at API, parsing the two lines, feeding them into satellite.twoline2satrec(). If it fails, the LED goes red. If it works, green. Simple.Then stateAt() — takes a date, runs the SGP4 propagation, converts ECI coordinates to geodetic (lat/lng/altitude). That’s the core of the whole tracker. One function, does a lot.Also wrote sun position math from scratch. Like actual astronomy math — Julian dates, ecliptic longitude, Earth’s axial tilt. Did not expect to be doing orbital mechanics today. The issSunlit() function checks if the ISS is in Earth’s shadow using a dot product. Python brain kicked in here, vector math felt familiar at least.Then the globe. globe.gl is actually pretty nice to work with. Night texture, bump map, atmosphere, star background. Hooked up the HTML markers for the ISS and observer position.Found a few bugs while writing this. Typo in a texture URL — hree-globe instead of three-globe, and earh-blue-marble instead of earth-blue-marble. Also a missing closing parenthesis somewhere in the globe chain that’s going to cause a syntax error. Classic late night coding stuff.JavaScript is definitely harder than HTML and CSS. But the Python background helps more than I expected — the logic side of it feels familiar, just different syntax.I changed my mind about the design and I changed to blue."}, {"post_id": 15006, "ts": "2026-06-24T11:55:00Z", "hours": 1.1847, "text": "Devlog #4 — Location, passes, crew & wrapping up the HTMLFinished the HTML structure today. Three more sections in the sidebar.Observer location first. Two inputs — lat/lon manually, or a “Use my location” button that’ll hit the browser geolocation API. Placeholder values are Budapest coordinates (47.4979, 19.0402) — yeah, I’m Hungarian, felt right, but I live in Romania because of the Trianon.Then the visible passes section. Right now just shows an empty state: “Set an observer location to predict naked-eye visible passes.” There’s a checkbox for showing all passes, not just visible ones. The actual pass prediction math is going to be the hardest part I think. satellite.js can do it but I haven’t figured out that part yet.Crew section is there too. Pulls from Open Notify API — basically just a list of who’s up there right now. Placeholder shows “Loading…” for now.Also noticed a bug writing this: three of the globe control buttons (Rotate, Orbit, Day) all have id=“c-follow”. Duplicate IDs. JavaScript is going to have a bad time with that. Need to fix before I wire anything up.Footer has the data sources listed — wheretheiss.at for live position, satellite.js for the SGP4 math, Open Notify for crew. Felt important to credit them properly.HTML’s basically done. Next session is the scary part — the JavaScript.Honestly, as a beginner with HTML and CSS, I think I actually get it now. I’m not just copy-pasting; I truly understand why things go where they do. Grid, flexbox, CSS variables, pseudo-elements—these were concepts that looked like alien syntax a week ago. AI helped a lot with that. It didn’t do the work for me, but it explained what each part actually does while we built it. I didn’t expect to learn this much so quickly, and I’m very happy for this."}, {"post_id": 14370, "ts": "2026-06-23T14:06:50Z", "hours": 1.1667, "text": "Devlog #3 — Globe markers & the telemetry panelGot the globe section wired up today. The ISS marker is a small orange ring with a dot in the middle — like a crosshair. Took a while to get the centering right with translate(-50%, -50%), kept jumping to weird positions on the globe. CSS ::after pseudo-element for the inner dot. Didn’t know that trick before, actually pretty clean.Also built out the telemetry panel. Latitude, longitude, altitude, orbital speed, orbital period, illumination — all sitting in those readout rows from last session. Right now they just show - as placeholders. Next step is hooking them up to live data so they actually update.One thing I noticed: the status LED up in the header is set to warn (orange) by default — because while the app is still loading TLE data, it shouldn’t show green. Small UX detail but it matters. Green means live, orange means loading, red means something broke.Also added the observer marker for the user’s location on the globe. Different color from the ISS marker — white tag instead of orange — so it’s clear which is which at a glance.Starting to look like an actual mission control dashboard. Not bad for someone who barely knew what CSS grid was two weeks ago."}, {"post_id": 13088, "ts": "2026-06-21T12:50:05Z", "hours": 1.6939, "text": "Devlog #2. Building the sidebar consoleI spent this session working on the sidebar panel. The layout is like a “mission control”. A console on the left and a globe on the right. I used CSS grid to achieve this. The console has a fixed width of 392px and the rest of the space goes to the globe.I built the console piece by piece. First I added a header with a status light. It’s green when live orange when theres a warning and red when theres an error. It’s basic. It gets the job done.Then I added rows to show data. I styled them like telemetry data with a key-value pair format. I used a number format called tabular-nums. This keeps the digits lined up properly when they update.I also added some toggle buttons, location input fields and a table to predict when the ISS will be visible from a location. I tried to use a monospace font for the data and a regular sans font, for the labels. This makes it feel like an instrument panel and less like a website.While writing this I found a typo bug. I had written –line-2 in my root variables. Used var(–line2) in a couple of places. It took me a while to notice why some borders weren’t showing up. It was a mistake.Next I need to hook up ISS position data. I want to wire the readout rows to show numbers instead of placeholders."}, {"post_id": 11934, "ts": "2026-06-19T13:58:09Z", "hours": 0.7636, "text": "I started my ISS Orbital Tracker project. The goal is to create a 3D globe that shows the ISS in real-time as it orbits the planet. For the orbital calculations, I’m using satellite.js, which handles the SGP4 math. For the 3D globe, I’m using globe.gl with WebGL working in the background.Honestly, HTML and frontend work aren’t my strong points. I feel most comfortable with Python. However, “learn web development” has been on my summer to-do list for a long time. Stardance seemed like the perfect opportunity to finally jump in.I began with some help from AI, and I won’t pretend otherwise. However, I’m not just copying and pasting what it produces. I review every line and ask, “Why does this work like that?” I’m making all the decisions myself regarding structure and design. The AI acts more like a tutor beside me than someone doing my work. I want to control this project, not just watch it develop.So far, I’ve set up the basics. The HTML structure is complete. The scripts for satellite.js and globe.gl are loaded and connected. I’ve also created a full color system using CSS variables like –bg and –accent. I’m aiming for that dark “mission control” vibe, similar to the energy in a NASA control room, but within a browser tab.Next, I need to pull the ISS’s live position and display it on the globe. That’s the exciting part"}]...
|
Title: Iss tracker by @huncikoma | Stardance
Devl Title: Iss tracker by @huncikoma | Stardance
Devlogs:
I started my ISS Orbital Tracker project. The goal is to create a 3D globe that shows the ISS in real-time as it orbits the planet. For the orbital calculations, I’m using satellite.js, which handles the SGP4 math. For the 3D globe, I’m using globe.gl with WebGL working in the background.Honestly, HTML and frontend work aren’t my strong points. I feel most comfortable with Python. However, “learn web development” has been on my summer to-do list for a long time. Stardance seemed like the perfect opportunity to finally jump in.I began with some help from AI, and I won’t pretend otherwise. However, I’m not just copying and pasting what it produces. I review every line and ask, “Why does this work like that?” I’m making all the decisions myself regarding structure and design. The AI acts more like a tutor beside me than someone doing my work. I want to control this project, not just watch it develop.So far, I’ve set up the basics. The HTML structure is complete. The scripts for satellite.js and globe.gl are loaded and connected. I’ve also created a full color system using CSS variables like –bg and –accent. I’m aiming for that dark “mission control” vibe, similar to the energy in a NASA control room, but within a browser tab.Next, I need to pull the ISS’s live position and display it on the globe. That’s the exciting part
Devlog #2. Building the sidebar consoleI spent this session working on the sidebar panel. The layout is like a “mission control”. A console on the left and a globe on the right. I used CSS grid to achieve this. The console has a fixed width of 392px and the rest of the space goes to the globe.I built the console piece by piece. First I added a header with a status light. It’s green when live orange when theres a warning and red when theres an error. It’s basic. It gets the job done.Then I added rows to show data. I styled them like telemetry data with a key-value pair format. I used a number format called tabular-nums. This keeps the digits lined up properly when they update.I also added some toggle buttons, location input fields and a table to predict when the ISS will be visible from a location. I tried to use a monospace font for the data and a regular sans font, for the labels. This makes it feel like an instrument panel and less like a website.While writing this I found a typo bug. I had written –line-2 in my root variables. Used var(–line2) in a couple of places. It took me a while to notice why some borders weren’t showing up. It was a mistake.Next I need to hook up ISS position data. I want to wire the readout rows to show numbers instead of placeholders.
Devlog #3 — Globe markers & the telemetry panelGot the globe section wired up today. The ISS marker is a small orange ring with a dot in the middle — like a crosshair. Took a while to get the centering right with translate(-50%, -50%), kept jumping to weird positions on the globe. CSS ::after pseudo-element for the inner dot. Didn’t know that trick before, actually pretty clean.Also built out the telemetry panel. Latitude, longitude, altitude, orbital speed, orbital period, illumination — all sitting in those readout rows from last session. Right now they just show - as placeholders. Next step is hooking them up to live data so they actually update.One thing I noticed: the status LED up in the header is set to warn (orange) by default — because while the app is still loading TLE data, it shouldn’t show green. Small UX detail but it matters. Green means live, orange means loading, red means something broke.Also added the observer marker for the user’s location on the globe. Different color from the ISS marker — white tag instead of orange — so it’s clear which is which at a glance.Starting to look like an actual mission control dashboard. Not bad for someone who barely knew what CSS grid was two weeks ago.
Devlog #4 — Location, passes, crew & wrapping up the HTMLFinished the HTML structure today. Three more sections in the sidebar.Observer location first. Two inputs — lat/lon manually, or a “Use my location” button that’ll hit the browser geolocation API. Placeholder values are Budapest coordinates (47.4979, 19.0402) — yeah, I’m Hungarian, felt right, but I live in Romania because of the Trianon.Then the visible passes section. Right now just shows an empty state: “Set an observer location to predict naked-eye visible passes.” There’s a checkbox for showing all passes, not just visible ones. The actual pass prediction math is going to be the hardest part I think. satellite.js can do it but I haven’t figured out that part yet.Crew section is there too. Pulls from Open Notify API — basically just a list of who’s up there right now. Placeholder shows “Loading…” for now.Also noticed a bug writing this: three of the globe control buttons (Rotate, Orbit, Day) all have id=“c-follow”. Duplicate IDs. JavaScript is going to have a bad time with that. Need to fix before I wire anything up.Footer has the data sources listed — wheretheiss.at for live position, satellite.js for the SGP4 math, Open Notify for crew. Felt important to credit them properly.HTML’s basically done. Next session is the scary part — the JavaScript.Honestly, as a beginner with HTML and CSS, I think I actually get it now. I’m not just copy-pasting; I truly understand why things go where they do. Grid, flexbox, CSS variables, pseudo-elements—these were concepts that looked like alien syntax a week ago. AI helped a lot with that. It didn’t do the work for me, but it explained what each part actually does while we built it. I didn’t expect to learn this much so quickly, and I’m very happy for this.
Devlog #5 — The JavaScript begins. It’s a lot.Okay. JavaScript. Here we go.Started wiring up the actual logic today. First thing: fetching the TLE data — basically the orbital parameters that tell satellite.js where the ISS is. Hitting the wheretheiss.at API, parsing the two lines, feeding them into satellite.twoline2satrec(). If it fails, the LED goes red. If it works, green. Simple.Then stateAt() — takes a date, runs the SGP4 propagation, converts ECI coordinates to geodetic (lat/lng/altitude). That’s the core of the whole tracker. One function, does a lot.Also wrote sun position math from scratch. Like actual astronomy math — Julian dates, ecliptic longitude, Earth’s axial tilt. Did not expect to be doing orbital mechanics today. The issSunlit() function checks if the ISS is in Earth’s shadow using a dot product. Python brain kicked in here, vector math felt familiar at least.Then the globe. globe.gl is actually pretty nice to work with. Night texture, bump map, atmosphere, star background. Hooked up the HTML markers for the ISS and observer position.Found a few bugs while writing this. Typo in a texture URL — hree-globe instead of three-globe, and earh-blue-marble instead of earth-blue-marble. Also a missing closing parenthesis somewhere in the globe chain that’s going to cause a syntax error. Classic late night coding stuff.JavaScript is definitely harder than HTML and CSS. But the Python background helps more than I expected — the logic side of it feels familiar, just different syntax.I changed my mind about the design and I changed to blue.
Devlog #6 — Markers, orbit track & resizeShort session today but got a few important things done.Set the globe’s starting view — looking down at lat: 20, lng: 0 from altitude 2.4. Basically a nice “overview of Earth” angle when the page loads. Auto-rotate speed set to 0.45, slow and smooth. Small detail but it makes the whole thing feel alive even before any data loads.Then the markers. Two functions — makeIssEl() and makeObsEl() — each just creates a div with the right CSS class and inner HTML. The ISS gets the orange ring, the observer gets a “You” label. Simple.Found two HTML typos in there while writing this. makeIssEl() has </div missing the closing >. makeObsEl() is missing the opening < on the dot div — ‘div class=“dot”>’ instead of ‘’. Both will silently break the markers in the browser. Need to fix those.The orbit track was interesting. It loops from -25 minutes to +70 minutes around now, samples a position every 1.5 minutes, builds a path array. So you see where the ISS came from and where it’s going. Past 25 minutes, future 70. Felt like a very “Python” approach — just loop, collect, feed into the renderer.Also wired up resize handling. Globe redraws to fill its container whenever the window size changes. One listener, one function.
Devlog #7 — Camera, live updates & the tick loopThis session was the one where it started actually feeling alive.Camera controls first. Three modes — follow, rotate, free. “Follow” mode smoothly pans the globe to the ISS position every 2.4 seconds with a 900ms animation. Feels really clean, like the camera is actually tracking something. “Rotate” just spins the globe on its own. “Free” is hands-off, user controls everything. Also wired up the day/night texture toggle — one click switches between the blue marble and the night lights texture.Found a bug: setStatus() is missing a space — “led” + cls produces “ledlive” instead of “led live”. The LED will never change color because the class name is wrong. One character fix.Then the tick() function. This is the heartbeat of the whole app. Runs on an interval, calls stateAt(now), updates the marker position, updates all the telemetry readouts — lat, lng, altitude, speed, orbital period, illumination. Everything live.
Devlog #8 — TLE age, observer location & localStorageShort but important session.First, finished off the tick() function. Added TLE age display — shows how old the orbital data is. Under an hour it shows minutes, over an hour it shows decimal hours. Small detail but useful, stale TLE data means inaccurate position.Then observer location. This took a bit of thinking. The app needs to know where you are to predict ISS passes — so setObserver() takes lat/lng, validates it (no infinite values, lat within ±90, lng within ±180), converts to radians for the math, and stores it.The localStorage part was new territory for me. Never used it before. Basically the browser remembers your location between sessions — so next time you open the app it loads your saved coordinates automatically via loadObserver(). One line to save, one line to load, JSON in between. Actually really simple once I understood it.The observer marker gets placed on the globe too — same system as the ISS marker but sits almost on the surface (altFrac: 0.005).Input fields update to show the saved coordinates. The location display shows hemisphere format — 47.50° N, 19.04° E style — then “loading…” underneath while it reverse geocodes the place name.Coordinates, radians, localStorage, marker placement — a lot of small things that all had to connect correctly. Felt good when it clicked.
Devlog #9 — Pass predictionThe part I was most scared of. Also the coolest.computePasses() steps through the next 6 days in 30-second jumps, calculates the ISS position at each step, and converts it to look angles from your location. Elevation above 10° = pass starts. Drops below = pass ends.The visibility check is the fun part. You can only see the ISS with your own eyes if three things line up: it’s above 10°, the sun is 6°+ below your horizon , but the ISS up there is still catching sunlight. Basically a sunlit object against a dark sky. That’s what you’re actually seeing.Also finished the geolocation button, the reverse geocoding for your city name, and the pass table — time, duration, max elevation, compass direction. Visible passes get an orange dot.Deepest I’ve been in over my head this whole project. But piece by piece, it makes sense now.
Devlog #10 — Crew, startup & it’s doneLast pieces today.Crew section first. Pulls from the Open Notify API — who’s on the ISS right now. Had to route it through a CORS proxy because the API is http-only and browsers block that from an https page. Filters for ISS crew specifically, falls back to everyone in space if the filter comes up empty. If the API dies, shows a graceful “unavailable” message instead of breaking.Then the startup section — the part that boots everything. Load saved observer location, fetch TLE, fetch crew, then the intervals: tick() every second, orbit path refresh every minute, fresh TLE every 2 hours, crew every 6 hours. Everything on its own schedule.Finally made it actually easy to run. Wrote a small Python server file that spins up a local webserver — this is where my Python comfort zone finally got to shine in this project. Plus a start.bat that launches the server and opens the app in the browser in one double-click. And a README so anyone can figure out how to run it.That’s it. The tracker is done. Live position, 3D globe, pass predictions, crew list, one-click startup. Started this barely knowing what a div was.
Ships:
I make a real-time ISS tracker with a 3D globe. It shows the station’s live position, altitude, speed and whether it’s sunlit — plus it predicts when the ISS will be visible with the naked eye from your location in the next 6 days. It also shows who’s currently aboard. All the orbital math (SGP4) runs locally with satellite.js, the 3D globe is globe.gl. What was challenging?-Pretty much everything — this is my first web project ever. I’m a Python guy, so I had to learn the whole thing from the ground up: HTML, CSS, JavaScript, all of it. None of this existed in my toolbox before this project. The hardest part by far was the pass prediction: look angles, ECI to ECF conversion, checking if the ISS is sunlit while your sky is dark. Actual orbital mechanics. I used AI as a tutor along the way, but I made sure I understood every part instead of just pasting code. I am proud of that the pass prediction actually works — three conditions lining up (ISS above 10°, sun 6° below your horizon, station still in sunlight) and it tells you exactly when to look up. Also the “mission control” design, built from scratch with CSS variables. And honestly: that as a Python-only dev I had to learn an entirely new stack for this, and it actually came together. From barely knowing what a div is to this, in a few weeks. To test it: Just run start.bat (it starts a small Python webserver and opens the app) — or open the demo URL. Click “Use my location” or type coordinates manually, and the visible passes table fills in. Try the Follow/Rotate camera modes and the Day/Night texture toggle too. Details in the README....
|
1792878675.2463546
|
1793742675.2463546
|
|
21303
|
MultiHeadSubleq by @ciaran | Stardance
|
ciaran
|
1
|
21.0
|
219
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T02:23:04Z", "hours": 21.0, "multiplier": 10.43, "payout": 219, "blessing": "neutral", "text": "Finally done! After quite a bit of issues of the infernal persuasion, its actually done! Somehow, despite this project encompassing emulating an (albeit simple) CPU, multithreading in assembly with zero protections, and writing a bunch of math routines from scratch, the hardest part was probably making things not look horrible.", "repo": "https://github.com/ciaranmcguinness/multisubleq", "demo": "https://cmcg.pyscriptapps.com/jolly-union/"}]...
|
[{"post_id": 23241, "ts": "202 [{"post_id": 23241, "ts": "2026-07-06T02:19:26Z", "hours": 0.4142, "text": "Made a few final touchups to the readme, built a CLI to run asm without having to edit python files."}, {"post_id": 23235, "ts": "2026-07-06T01:48:42Z", "hours": 0.3072, "text": "Punch up my readme in prep for shipping."}, {"post_id": 23220, "ts": "2026-07-06T01:22:24Z", "hours": 1.6681, "text": "I built a TUI version of the webapp! It’s not as pretty as I’d like, but its good enough."}, {"post_id": 23134, "ts": "2026-07-05T22:10:58Z", "hours": 7.2711, "text": "CSS IS PAIN Most of this time was fighting a losing battle against CSS. But in my darkest hour (~2:00 AM, last night), a knight in shining armor came to rescue me, Claude. The actual code part was pretty easy, mostly just hooking up methods to buttons and making my assembler work in micropython. All I have left now is writing a tutorial, so people can better figure out how this works."}, {"post_id": 12235, "ts": "2026-06-19T23:41:01Z", "hours": 8.2114, "text": "I accidentally made a pesudo-compiler. AGAIN. Also, I hate numbers now. So, I’m working on a parallel implementation of an esoteric-ish assembly language called subleq. The defining feature of which is that it only has a single instruction, Subtract and jump if Less than or EQual to zero (hence the name). At first, I thought this was going to be a simple project. Maybe 4 hours writing the implementation and 2 hours writing a frontend. Boy, was I wrong. At first it was all going to plan, I had most of it done. I just needed to write a few demo programs for multiprocessing and then I plonk it into web assembly and give it a UI. Then the worms started talking to me. They said, “you know how painful writing subleq by hand is, you should make some helper functions, like you had when you first learned about subleq.” So I made a few functions, addition, subtraction, jumping, and inverting values. But then I heard the worms voice, echoing from the distance, “Multiplication and division would be easy, and it would mean you could find primes.” Condemnation directly to number hell The worms lied to me, as they often do. It was in fact not easy. Multiplication was less painful. Its just repeated addition. BUT, i have to deal with negatives. So, the simpler of the two became spaghetti. And that was the east one! Next it was time for division. Division (and it’s twin, modulo) legitimately could have been most of this time. I’m not exactly sure how my division routine works, because it was written at midnight. But what I can tell you is that it involves magic numbers, loops, and subtracting zero from zero. Also it broke my compiler, flinging the function pointer directly into my variables, requiring multiple patch jobs to the division function and my compiler. But now! Finally! I have a working calculator! Now to parallelize…"}, {"post_id": 11008, "ts": "2026-06-18T01:06:15Z", "hours": 1.0592, "text": "Got parallel working! Now i just need to hook it up to HTML canvas and maybe make some convenience functions."}, {"post_id": 10966, "ts": "2026-06-17T23:51:58Z", "hours": 2.1264, "text": "Finally got the basics of this done! Assembler is fully working and I have my IO such that I could theoretically glue multiple heads/processors together. Emphasis on theoretically."}]...
|
Title: MultiHeadSubleq by @ciaran | Stardance
Dev Title: MultiHeadSubleq by @ciaran | Stardance
Devlogs:
Finally got the basics of this done! Assembler is fully working and I have my IO such that I could theoretically glue multiple heads/processors together. Emphasis on theoretically.
Got parallel working! Now i just need to hook it up to HTML canvas and maybe make some convenience functions.
I accidentally made a pesudo-compiler. AGAIN. Also, I hate numbers now. So, I’m working on a parallel implementation of an esoteric-ish assembly language called subleq. The defining feature of which is that it only has a single instruction, Subtract and jump if Less than or EQual to zero (hence the name). At first, I thought this was going to be a simple project. Maybe 4 hours writing the implementation and 2 hours writing a frontend. Boy, was I wrong. At first it was all going to plan, I had most of it done. I just needed to write a few demo programs for multiprocessing and then I plonk it into web assembly and give it a UI. Then the worms started talking to me. They said, “you know how painful writing subleq by hand is, you should make some helper functions, like you had when you first learned about subleq.” So I made a few functions, addition, subtraction, jumping, and inverting values. But then I heard the worms voice, echoing from the distance, “Multiplication and division would be easy, and it would mean you could find primes.” Condemnation directly to number hell The worms lied to me, as they often do. It was in fact not easy. Multiplication was less painful. Its just repeated addition. BUT, i have to deal with negatives. So, the simpler of the two became spaghetti. And that was the east one! Next it was time for division. Division (and it’s twin, modulo) legitimately could have been most of this time. I’m not exactly sure how my division routine works, because it was written at midnight. But what I can tell you is that it involves magic numbers, loops, and subtracting zero from zero. Also it broke my compiler, flinging the function pointer directly into my variables, requiring multiple patch jobs to the division function and my compiler. But now! Finally! I have a working calculator! Now to parallelize…
CSS IS PAIN Most of this time was fighting a losing battle against CSS. But in my darkest hour (~2:00 AM, last night), a knight in shining armor came to rescue me, Claude. The actual code part was pretty easy, mostly just hooking up methods to buttons and making my assembler work in micropython. All I have left now is writing a tutorial, so people can better figure out how this works.
I built a TUI version of the webapp! It’s not as pretty as I’d like, but its good enough.
Punch up my readme in prep for shipping.
Made a few final touchups to the readme, built a CLI to run asm without having to edit python files.
Ships:
Finally done! After quite a bit of issues of the infernal persuasion, its actually done! Somehow, despite this project encompassing emulating an (albeit simple) CPU, multithreading in assembly with zero protections, and writing a bunch of math routines from scratch, the hardest part was probably making things not look horrible....
|
1793267412.755737
|
1793353812.755737
|
|
21694
|
Vokul by @Dragon | Stardance
|
Dragon
|
1
|
21.0
|
273
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T14:29:54Z", "hours": 21.0, "multiplier": 13.21, "payout": 273, "blessing": "neutral", "text": "First every ship in star dance. Vokul is a local CLI based password manager where you can store your passwords safely. It has alot of safety mechanisms behind so you don’t have to worry. Stay tuned to get a new chrome extension as well!", "repo": "https://github.com/DevX-Dragon/vokul", "demo": "https://github.com/DevX-Dragon/vokul/releases/tag/v1.0.0"}]...
|
[{"post_id": 20009, "ts": "202 [{"post_id": 20009, "ts": "2026-07-01T14:27:53Z", "hours": 1.3914, "text": "Publishing Did some final stuff and published to PyPi. Add SECURITY.md and `CONTRIBUTION.md Fix workflow to auto-publish to PyPi. Working a landing website. Added a release Published to PyPI Now install via pip install vokul -- upgrade"}, {"post_id": 19953, "ts": "2026-07-01T12:23:39Z", "hours": 7.8642, "text": "Locked TF in I wasnt able to do any devlogs cause my internet was out and yeah. I did alot of work during the 8 hours, Rewrote the entire vault.py script to optimize the encryption and saving passwords. Used the rich library to enhance the GUI. (took the longest) Researched more about other similar tools and made a work plan for future updates. Setting up workflows for auto publishing. Wrote a proper documentation and an attractive readme."}, {"post_id": 15022, "ts": "2026-06-24T12:26:45Z", "hours": 2.8694, "text": "Debugging So i did few changes with the main vault.py to optimize the script. Like making it load only few saves lists and load them when they’re searched for. And alot of backend optimization. Im currently dont have ideas to add new stuff but lets see"}, {"post_id": 14385, "ts": "2026-06-23T14:31:56Z", "hours": 4.95, "text": "Alot of things (forget to sync the hackatime folder) I moved some files and forgot to sync it to hackatime so the hours is kind of high sorry. This session was mostly debugging and testing and nothing much. Did some security patches and got feedback from some people."}, {"post_id": 13157, "ts": "2026-06-21T15:08:06Z", "hours": 0.5764, "text": "More features and fixing Fixing Commands Fixed some existing commands on how they handle errors. Fixed some ghost bugs in it as well. Quick CLI preview edit Added a purple ASCII art to make it look polished Fix recovery Fixed the auto-recovery function for the vault. (<– not fully confident if it works properly, but yeah)"}, {"post_id": 12611, "ts": "2026-06-20T16:37:59Z", "hours": 1.2003, "text": "New Commands and Features Added some new commands and upgraded already existing commands as well. Commands --memorable flag: Added this flag to vokul generate to make the generated string a memorizable string. (in this case, words) vokul edit: I have vokul add and get . So i added vokul edit so you edit passwords or update your TOTP. vokul delete : A simple command to remove a service entry entirely. vokul export : Allow the user to export their vault to a plain-text JSON file (after re-entering the Master Password). This is a “Right to Leave”—users feel safer using a tool if they know they can easily get their data out of it. Features Dry-Run/Validation: Before committing a save() to the file, added a verification check. If the vault file is corrupted during a write operation (e.g., power failure), Vokul will detect it on the next launch and attempt to restore from the last valid .bak file automatically. Lockdown on Error: If a user enters the wrong master password, added a “Cooldown” timer. After 3 failed attempts, force the process to sleep for 5 seconds, increasing exponentially to prevent brute-force attacks on the vault file. (⚠️: Some of these are still in a WIP stage, will update them later. This is the skeleton that i’ll be building around)"}, {"post_id": 12542, "ts": "2026-06-20T14:20:21Z", "hours": 1.0903, "text": "The Base Features So I have developed most of the base features that should be in a password manager. Like adding , viewing , deleting passwords. Searching for the added services , and proper hashing and salting. Adding TOTP Half made a TOTP service where it can generate your 2FA codes without any other external authenticates. It currently works but has some backend issues. Backup system Also half-made. Added a function where it will save a cache copy of the vault before a service is added. So if the vault gets corrupted the cached vault will replace the corrupted vault. Also added an corrupt-check when starting the script itself. Added more hashing and salting for the cache vault as well to prevent leakings. Assets and Logos (not tracked) I made some logos for the app cause why not. I didnt lapse it so It isnt included in the total hours but it took ~1.5 hours."}, {"post_id": 11971, "ts": "2026-06-19T15:17:37Z", "hours": 0.8528, "text": "First Devlog for vokul!! What is this? This is a local-first password manager made in Python. Im planning on making this cross-device compatible with extension , app for windows/mobile and a CLI too. So this will be a big project. The Plan First I’m going to be making the CLI version which will also act as the backbone for other versions. Next the chrome extension and so and on. Progress Currently build the absolute skeleton for the CLI with basic password saving functions. Passwords are properly salted as well. But will improve the security in the future."}]...
|
Title: Vokul by @Dragon | Stardance
Devlogs:
Firs Title: Vokul by @Dragon | Stardance
Devlogs:
First Devlog for vokul!! What is this? This is a local-first password manager made in Python. Im planning on making this cross-device compatible with extension , app for windows/mobile and a CLI too. So this will be a big project. The Plan First I’m going to be making the CLI version which will also act as the backbone for other versions. Next the chrome extension and so and on. Progress Currently build the absolute skeleton for the CLI with basic password saving functions. Passwords are properly salted as well. But will improve the security in the future.
The Base Features So I have developed most of the base features that should be in a password manager. Like adding , viewing , deleting passwords. Searching for the added services , and proper hashing and salting. Adding TOTP Half made a TOTP service where it can generate your 2FA codes without any other external authenticates. It currently works but has some backend issues. Backup system Also half-made. Added a function where it will save a cache copy of the vault before a service is added. So if the vault gets corrupted the cached vault will replace the corrupted vault. Also added an corrupt-check when starting the script itself. Added more hashing and salting for the cache vault as well to prevent leakings. Assets and Logos (not tracked) I made some logos for the app cause why not. I didnt lapse it so It isnt included in the total hours but it took ~1.5 hours.
New Commands and Features Added some new commands and upgraded already existing commands as well. Commands --memorable flag: Added this flag to vokul generate to make the generated string a memorizable string. (in this case, words) vokul edit: I have vokul add and get . So i added vokul edit so you edit passwords or update your TOTP. vokul delete : A simple command to remove a service entry entirely. vokul export : Allow the user to export their vault to a plain-text JSON file (after re-entering the Master Password). This is a “Right to Leave”—users feel safer using a tool if they know they can easily get their data out of it. Features Dry-Run/Validation: Before committing a save() to the file, added a verification check. If the vault file is corrupted during a write operation (e.g., power failure), Vokul will detect it on the next launch and attempt to restore from the last valid .bak file automatically. Lockdown on Error: If a user enters the wrong master password, added a “Cooldown” timer. After 3 failed attempts, force the process to sleep for 5 seconds, increasing exponentially to prevent brute-force attacks on the vault file. (⚠️: Some of these are still in a WIP stage, will update them later. This is the skeleton that i’ll be building around)
More features and fixing Fixing Commands Fixed some existing commands on how they handle errors. Fixed some ghost bugs in it as well. Quick CLI preview edit Added a purple ASCII art to make it look polished Fix recovery Fixed the auto-recovery function for the vault. (<– not fully confident if it works properly, but yeah)
Alot of things (forget to sync the hackatime folder) I moved some files and forgot to sync it to hackatime so the hours is kind of high sorry. This session was mostly debugging and testing and nothing much. Did some security patches and got feedback from some people.
Debugging So i did few changes with the main vault.py to optimize the script. Like making it load only few saves lists and load them when they’re searched for. And alot of backend optimization. Im currently dont have ideas to add new stuff but lets see
Locked TF in I wasnt able to do any devlogs cause my internet was out and yeah. I did alot of work during the 8 hours, Rewrote the entire vault.py script to optimize the encryption and saving passwords. Used the rich library to enhance the GUI. (took the longest) Researched more about other similar tools and made a work plan for future updates. Setting up workflows for auto publishing. Wrote a proper documentation and an attractive readme.
Publishing Did some final stuff and published to PyPi. Add SECURITY.md and `CONTRIBUTION.md Fix workflow to auto-publish to PyPi. Working a landing website. Added a release Published to PyPI Now install via pip install vokul -- upgrade
Ships:
First every ship in star dance. Vokul is a local CLI based password manager where you can store your passwords safely. It has alot of safety mechanisms behind so you don’t have to worry. Stay tuned to get a new chrome extension as well!...
|
1792882119.512995
|
1793746119.512995
|
|
22748
|
Website by @Arnavv | Stardance
|
Arnavv
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T11:33:54Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a professional MVP website for a business. This business is about providing essential support to other businesses, so if any of you need some support, don’t hesitate to contact :). Also the website in this project is static as I haven’t bought a domain yet, however all of the code for a dynamic, clean site exists in the files. Have fun exploring!", "repo": "https://github.com/Arnav-Barhate/Website", "demo": "https://arnav-barhate.github.io/Website/index.html"}]...
|
[{"post_id": 27053, "ts": "202 [{"post_id": 27053, "ts": "2026-07-12T07:47:13Z", "hours": 6.2972, "text": "Final adjustments"}, {"post_id": 19810, "ts": "2026-07-01T06:17:29Z", "hours": 6.6403, "text": "Smooth Animations: Added transitions so the site feels fluid and alive when you navigate around, instead of just being static. ________________________________________________________________________________Fresh Imagery: Uploaded new pictures . _______________________________________________________________________________ UI Glow-Up: Tweaked the layout, colors, and spacing so everything looks clean, polished, and looks great on both desktop and mobile. ________________________________________________________________________________Bug Fixes: Hunted down and squashed those annoying layout glitches that were breaking the mobile view. It’s running much smoother now. _______________________________________________________________________________ Auto-Emailing: Started working on the backend to set up automated emails. Soon, the site will handle things like confirmations and updates completely on its own."}, {"post_id": 16268, "ts": "2026-06-26T13:33:32Z", "hours": 2.4844, "text": "Just experimenting and changing texts and brainstorming for the text."}, {"post_id": 12952, "ts": "2026-06-21T06:13:01Z", "hours": 4.0042, "text": "Just added support for graphs and cool equations if i ever need them in the future."}, {"post_id": 12845, "ts": "2026-06-21T01:07:13Z", "hours": 0.8575, "text": "Just keep working on getting everything set up. Just manipulating the css to fit, and fixed the scrollbar!"}, {"post_id": 12476, "ts": "2026-06-20T11:31:48Z", "hours": 0.2836, "text": "I’m just working on getting everything set up for the website making process. I’ve just copied over a css and html base script as a template which i will be modifying now!"}]...
|
Title: Website by @Arnavv | Stardance
Devlogs:
I’ Title: Website by @Arnavv | Stardance
Devlogs:
I’m just working on getting everything set up for the website making process. I’ve just copied over a css and html base script as a template which i will be modifying now!
Just keep working on getting everything set up. Just manipulating the css to fit, and fixed the scrollbar!
Just added support for graphs and cool equations if i ever need them in the future.
Just experimenting and changing texts and brainstorming for the text.
Smooth Animations: Added transitions so the site feels fluid and alive when you navigate around, instead of just being static. ________________________________________________________________________________Fresh Imagery: Uploaded new pictures . _______________________________________________________________________________ UI Glow-Up: Tweaked the layout, colors, and spacing so everything looks clean, polished, and looks great on both desktop and mobile. ________________________________________________________________________________Bug Fixes: Hunted down and squashed those annoying layout glitches that were breaking the mobile view. It’s running much smoother now. _______________________________________________________________________________ Auto-Emailing: Started working on the backend to set up automated emails. Soon, the site will handle things like confirmations and updates completely on its own.
Final adjustments
Ships:
I made a professional MVP website for a business. This business is about providing essential support to other businesses, so if any of you need some support, don’t hesitate to contact :). Also the website in this project is static as I haven’t bought a domain yet, however all of the code for a dynamic, clean site exists in the files. Have fun exploring!...
|
1793123490.0775092
|
1793209890.0775092
|
|
23039
|
ArasakaNet by @RishuKamboj | Stardance
|
RishuKamboj
|
2
|
21.0
|
53
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-01T15:02:06Z", "hours": 8.0, "multiplier": 6.29, "payout": 53, "blessing": "neutral", "text": "IM SO HAPPY THAT I MADE THIS. Ive made a linux like mini experience but on web by adding desktop styles and a few apps! it features :- a startup screen 2)timer app, starnic(dino game) ,Nasa Redirect’s and a notes app(that saves the notes in localStorage too!) 3)a bottom bar and a sidebar(or menu whatever you wanna call it) 4)and a refined desktop like feel with the draggable,closable and glassy windows. the timer and the notes app made me rethink my decision to make this but it was def worth it. You can head over to https://arasaka-net-sepia.vercel.app/ to try it out for yourself!", "repo": "https://github.com/rydei/ArasakaNet", "demo": "https://arasaka-net-sepia.vercel.app/"}, {"ship_num": 2, "ts": "2026-09-17T15:19:57Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Finished with WebOS 1 !! Gotta say it was really fun and kind of frustrating(im living incarnation of psyduck) anyways my website features:- draggable and closable windows -side bar and a bottombar a start menu 3 apps! (technically 2) my soul head over to https://arasaka-net-sepia.vercel.app/ to try it out! hope you like ittt", "repo": "https://github.com/rydei/ArasakaNet", "demo": "https://arasaka-net-sepia.vercel.app/"}]...
|
[{"post_id": 75866, "ts": "202 [{"post_id": 75866, "ts": "2026-10-01T12:03:51Z", "hours": 1.2072, "text": "added a loading screen and some final touches LETS GO SHIPPIN PIRATES !!!"}, {"post_id": 75851, "ts": "2026-10-01T10:45:27Z", "hours": 3.2997, "text": "DEVELOF PART IDK! added a notes app which can be used to: 1)make notes which are locally saved in localStorage 2)Edit those saved notes 3)Or delete them! other than that i made changes to the side bar and bottom bar to make it look more refined."}, {"post_id": 74854, "ts": "2026-09-28T13:26:08Z", "hours": 3.9031, "text": "NEW ADDITION!! Welcome starnic your own lil dino like game BUT ITS STARSS. also fixed window sizes so now they fit the contents instead of the extra space on the sides"}, {"post_id": 69663, "ts": "2026-09-17T15:03:35Z", "hours": 5.4592, "text": "DEVLOG THREEE!! AND IM BACK AFTER EXAMS!! ok anyways heres what i did:- (1) the icons and sidebar now work (2)there’s two apps and a welcome screen which is basically just system info for now lol. (3) the windows are draggable and hover above the other when selected. well i guess that’s all , i hope yall like it :D"}, {"post_id": 51526, "ts": "2026-08-21T09:05:52Z", "hours": 1.9872, "text": "Devlog Two: Added Draggable and Close-able windows!!! hardest part faced: aligning the header :’)"}, {"post_id": 51091, "ts": "2026-08-20T16:15:36Z", "hours": 5.6867, "text": "Hey There, First Devlog’s here! So far i’ve made the rough design of how the end website will look. Arranged the sidebar and bottom bar using flexbox(i spent way too much time on this wth) 2)Added Background and Favicon Next up im going to make the clock work and add draggable windows and working side buttons!!"}]...
|
Title: ArasakaNet by @RishuKamboj | Stardance
Dev Title: ArasakaNet by @RishuKamboj | Stardance
Devlogs:
Hey There, First Devlog’s here! So far i’ve made the rough design of how the end website will look. Arranged the sidebar and bottom bar using flexbox(i spent way too much time on this wth) 2)Added Background and Favicon Next up im going to make the clock work and add draggable windows and working side buttons!!
Devlog Two: Added Draggable and Close-able windows!!! hardest part faced: aligning the header :’)
DEVLOG THREEE!! AND IM BACK AFTER EXAMS!! ok anyways heres what i did:- (1) the icons and sidebar now work (2)there’s two apps and a welcome screen which is basically just system info for now lol. (3) the windows are draggable and hover above the other when selected. well i guess that’s all , i hope yall like it :D
NEW ADDITION!! Welcome starnic your own lil dino like game BUT ITS STARSS. also fixed window sizes so now they fit the contents instead of the extra space on the sides
DEVELOF PART IDK! added a notes app which can be used to: 1)make notes which are locally saved in localStorage 2)Edit those saved notes 3)Or delete them! other than that i made changes to the side bar and bottom bar to make it look more refined.
added a loading screen and some final touches LETS GO SHIPPIN PIRATES !!!
Ships:
Finished with WebOS 1 !! Gotta say it was really fun and kind of frustrating(im living incarnation of psyduck) anyways my website features:- draggable and closable windows -side bar and a bottombar a start menu 3 apps! (technically 2) my soul head over to https://arasaka-net-sepia.vercel.app/ to try it out! hope you like ittt
IM SO HAPPY THAT I MADE THIS. Ive made a linux like mini experience but on web by adding desktop styles and a few apps! it features :- a startup screen 2)timer app, starnic(dino game) ,Nasa Redirect’s and a notes app(that saves the notes in localStorage too!) 3)a bottom bar and a sidebar(or menu whatever you wanna call it) 4)and a refined desktop like feel with the draggable,closable and glassy windows. the timer and the notes app made me rethink my decision to make this but it was def worth it. You can head over to https://arasaka-net-sepia.vercel.app/ to try it out for yourself!...
|
1793152244.7379324
|
1793238644.7379324
|
|
23456
|
Ramix (LFS) by @pksmkwe26 | Stardance
|
pksmkwe26
|
2
|
21.0
|
232
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T09:57:19Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an Linux Distribution from Scratch following the Linux from Scratch Guide . The Problems i faced were dependency problems and Compiler Issues and also weird version mismatch issues, took a really lot time to sort it out and then there was Time, It took really alot of time to compile heavy packages such as GCC, LLVM, Kernel. . I also made an Custom Package Manager called RXPKG it has an version like symlink structure of installing packages planning to expand it more with version switches and fallbacks and also Online Package Resolving. I had also built rxbuild to build .rx packages for it as well . The Most Challenging part was SystemD Installation it took a really longer time to debug and think what to do along with initramfs booting into SquashFS and assinging OverlayFS to add RW in liveCD . I’ve posted the ISO Link AT : https://github.com/kwe26/ramix-lfs/releases/download/0.1-lfs.3/Ramix-20260719.iso . Compatible Command to Run the ISO file Properly on a QEMU VM", "repo": "https://github.com/kwe26/ramix-lfs", "demo": "https://github.com/kwe26/ramix-lfs/releases/tag/0.1-lfs.3"}, {"ship_num": 2, "ts": "2026-07-19T14:59:44Z", "hours": 19.0, "multiplier": 12.02, "payout": 232, "blessing": "neutral", "text": "I made an Linux Distribution from Scratch following the Linux from Scratch Guide . The Problems i faced were dependency problems and Compiler Issues and also weird version mismatch issues, took a really lot time to sort it out and then there was Time, It took really alot of time to compile heavy packages such as GCC, LLVM, Kernel. . I also made an Custom Package Manager called RXPKG it has an version like symlink structure of installing packages planning to expand it more with version switches and fallbacks and also Online Package Resolving. I had also built rxbuild to build .rx packages for it as well . The Most Challenging part was SystemD Installation it took a really longer time to debug and think what to do along with initramfs booting into SquashFS and assinging OverlayFS to add RW in liveCD . I’ve posted the ISO Link AT : https://github.com/kwe26/ramix-lfs/releases/download/0.1-lfs.3/Ramix-20260719.iso . Compatible Command to Run the ISO file Properly on a QEMU VM . qemu-system-x86_64 \\ -enable-kvm \\ -cpu host \\ -smp 2 \\ -m 2G \\ -cdrom Ramix-20260719.iso \\ \\ -display gtk,gl = on \\ -device virtio-vga-gl \\ \\ -device qemu-xhci \\ \\ -netdev user,id = net0 \\ -device virtio-net-pci,netdev = net0 . Feel free to try it on qemu and drop some feedbacks", "repo": "https://github.com/kwe26/ramix-lfs", "demo": "https://github.com/kwe26/ramix-lfs/releases/tag/0.1-lfs.3"}]...
|
[{"post_id": 83783, "ts": "202 [{"post_id": 83783, "ts": "2026-10-28T16:13:51Z", "hours": 1.6958, "text": "Devlog - 6 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Thanks to Stardance for giving an platform to try out things. Ramix LFS now has an Website (writte by Claude) while most of the OS and Scripts is Human-made. Thanks for reading. Thanks!!"}, {"post_id": 31243, "ts": "2026-07-19T14:28:46Z", "hours": 2.9694, "text": "Devlog - 5 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well FINALLY, SSL WORKS!!! New Features Wayland (No Compositor) Wlroots Mesa OpenSSL as RXPKG CA-Certs Properly Compiled DRM Support GIT!! We can now see the penguins and the new Kernel Panic screen thanks to DRM Support + GPU Support . we only support virtio-gpu right now but planning to expand more! . Hopefully, it’s the last devlog before the 1st Ship of this Project also i couldn’t get tinywl working, will try it in next release 0.2 Thanks for following the dev till now!"}, {"post_id": 26681, "ts": "2026-07-11T16:50:22Z", "hours": 4.6217, "text": "Devlog - 4 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well WOWOWWOW, Finallly own package manager??? New Features iproute2 iputils systemd-confs RX Package Manager About the RX Package Manager The package manager is currently written in dart It currently stores packages at /var/lib/rxpkg/vol/<package>/<version> It symlinks it to main /, So it would be better i thought there’s also rxbuild . command to build .rx package it’s kind of like PKGBUILD sample bash build.toml version = 1 [ build ] system = \"autotools\" out_of_source = true configure = [ \"--prefix=/usr\" , \"--sysconfdir=/etc\" , \"--localstatedir=/var\" , \"--disable-nls\" ] make = [ \"-j${NPROC}\" ] install = [ \"DESTDIR=${DESTDIR}\" ] #sample bash manifest.toml name = \"bash\" version = \"5.3.0\" release = 1 arch = \"x86_64\" license = \"GPL-3.0-or-later\" description = \"GNU Bourne Again Shell\" homepage = \"https://www.gnu.org/software/bash/\" maintainer = \"Ramix Team\" depends = [ \"glibc>=2.43\" , \"readline>=8.3\" , \"ncurses>=6.6\" ] Run rxbuild . and there you go your bash.rx package!! You can find the latest ISO in my github release page! Run it like this in qemu qemu-system-x86_64 \\ -cpu host \\ -m 2G \\ -cdrom Ramix.iso \\ -netdev user,id = net0 \\ -device e1000,netdev = net0 \\ -enable-kvm Share your feedbacks in Comments section, I love it"}, {"post_id": 22694, "ts": "2026-07-05T07:59:50Z", "hours": 5.7103, "text": "Devlog - 3 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, SystemD Support! SystemD now boots as PID 1 at started and now we also have GETTY Support User Management New Features Python 3 Meson, Ninja, CMake Sqlite3, Shadow SystemD!!! Linux-PAM Kmod for modprobe and such commands Login Support!! Upcoming Changes Networking Graphical Interface Recovery Grab the Test Release ISO from Github https://github.com/kwe26/ramix-lfs/releases/tag/0.1 QEMU Command qemu-system-x86_64 \\ -cpu host \\ -m 2G \\ -cdrom Ramix.iso \\ -netdev user,id = net0 \\ -device e1000,netdev = net0 \\ -enable-kvm And it will startup!!! Other Changes *since we had prepared GCC and Compiler Enviorment inside the Chroot, from now all the new libs, programs will be compiled inside the chroot now with the inclusion of scripts_chroot and invoke-chroot.sh *"}, {"post_id": 18175, "ts": "2026-06-29T06:57:07Z", "hours": 3.1797, "text": "Devlog - 2 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, It can Now Boot on QEMU Steps i followed to make it bootable First i Compressed the Rootfs into rootfs.squashfs Created an Initramfs with Busybox to mount and switch root to squashfs Grub to Boot into Kernel using the Initramfs. There’s still some issues with GCC not working properly due to Pass 2 Compiler not being compiled QEMU COMMAND qemu-system-x86_64 -cpu host -m 2G -cdrom Ramix.iso -enable-kvm ISO Link for Testing https://github.com/kwe26/ramix-lfs/releases/tag/testing"}, {"post_id": 13185, "ts": "2026-06-21T16:10:03Z", "hours": 2.8047, "text": "Devlog - 1 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Today I’ve Compiled Basic GCC, Make, GNU Bash And Coreutils, Kernel Headers I’m trying to Get this to around usable-state Distro as TUI and SystemD!! Compiling GMP required an Patch for GCC 16 Which i found on Gitlab, I’ve referenced it on Repo. My Goals Get it Boot on QEMU Basic Internet Access (i doubt) QuickJS & Python Beyond Current Goals X.org/Wayland Support A Basic Desktop Manager Support for Real Hardwares Forgive me for the Logo, I’ll create an proper one in time being"}]...
|
Title: Ramix (LFS) by @pksmkwe26 | Stardance
Devl Title: Ramix (LFS) by @pksmkwe26 | Stardance
Devlogs:
Devlog - 1 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Today I’ve Compiled Basic GCC, Make, GNU Bash And Coreutils, Kernel Headers I’m trying to Get this to around usable-state Distro as TUI and SystemD!! Compiling GMP required an Patch for GCC 16 Which i found on Gitlab, I’ve referenced it on Repo. My Goals Get it Boot on QEMU Basic Internet Access (i doubt) QuickJS & Python Beyond Current Goals X.org/Wayland Support A Basic Desktop Manager Support for Real Hardwares Forgive me for the Logo, I’ll create an proper one in time being
Devlog - 2 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, It can Now Boot on QEMU Steps i followed to make it bootable First i Compressed the Rootfs into rootfs.squashfs Created an Initramfs with Busybox to mount and switch root to squashfs Grub to Boot into Kernel using the Initramfs. There’s still some issues with GCC not working properly due to Pass 2 Compiler not being compiled QEMU COMMAND qemu-system-x86_64 -cpu host -m 2G -cdrom Ramix.iso -enable-kvm ISO Link for Testing https://github.com/kwe26/ramix-lfs/releases/tag/testing
Devlog - 3 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Finally, SystemD Support! SystemD now boots as PID 1 at started and now we also have GETTY Support User Management New Features Python 3 Meson, Ninja, CMake Sqlite3, Shadow SystemD!!! Linux-PAM Kmod for modprobe and such commands Login Support!! Upcoming Changes Networking Graphical Interface Recovery Grab the Test Release ISO from Github https://github.com/kwe26/ramix-lfs/releases/tag/0.1 QEMU Command qemu-system-x86_64 \ -cpu host \ -m 2G \ -cdrom Ramix.iso \ -netdev user,id = net0 \ -device e1000,netdev = net0 \ -enable-kvm And it will startup!!! Other Changes *since we had prepared GCC and Compiler Enviorment inside the Chroot, from now all the new libs, programs will be compiled inside the chroot now with the inclusion of scripts_chroot and invoke-chroot.sh *
Devlog - 4 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well WOWOWWOW, Finallly own package manager??? New Features iproute2 iputils systemd-confs RX Package Manager About the RX Package Manager The package manager is currently written in dart It currently stores packages at /var/lib/rxpkg/vol/<package>/<version> It symlinks it to main /, So it would be better i thought there’s also rxbuild . command to build .rx package it’s kind of like PKGBUILD sample bash build.toml version = 1 [ build ] system = "autotools" out_of_source = true configure = [ "--prefix=/usr" , "--sysconfdir=/etc" , "--localstatedir=/var" , "--disable-nls" ] make = [ "-j${NPROC}" ] install = [ "DESTDIR=${DESTDIR}" ] #sample bash manifest.toml name = "bash" version = "5.3.0" release = 1 arch = "x86_64" license = "GPL-3.0-or-later" description = "GNU Bourne Again Shell" homepage = "https://www.gnu.org/software/bash/" maintainer = "Ramix Team" depends = [ "glibc>=2.43" , "readline>=8.3" , "ncurses>=6.6" ] Run rxbuild . and there you go your bash.rx package!! You can find the latest ISO in my github release page! Run it like this in qemu qemu-system-x86_64 \ -cpu host \ -m 2G \ -cdrom Ramix.iso \ -netdev user,id = net0 \ -device e1000,netdev = net0 \ -enable-kvm Share your feedbacks in Comments section, I love it
Devlog - 5 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well FINALLY, SSL WORKS!!! New Features Wayland (No Compositor) Wlroots Mesa OpenSSL as RXPKG CA-Certs Properly Compiled DRM Support GIT!! We can now see the penguins and the new Kernel Panic screen thanks to DRM Support + GPU Support . we only support virtio-gpu right now but planning to expand more! . Hopefully, it’s the last devlog before the 1st Ship of this Project also i couldn’t get tinywl working, will try it in next release 0.2 Thanks for following the dev till now!
Devlog - 6 Ramix an Simple Linux Distribution Made from Scratching Following the Linux from Scratch Guide with Custom Scripts as well Thanks to Stardance for giving an platform to try out things. Ramix LFS now has an Website (writte by Claude) while most of the OS and Scripts is Human-made. Thanks for reading. Thanks!!
Ships:
I made an Linux Distribution from Scratch following the Linux from Scratch Guide . The Problems i faced were dependency problems and Compiler Issues and also weird version mismatch issues, took a really lot time to sort it out and then there was Time, It took really alot of time to compile heavy packages such as GCC, LLVM, Kernel. . I also made an Custom Package Manager called RXPKG it has an version like symlink structure of installing packages planning to expand it more with version switches and fallbacks and also Online Package Resolving. I had also built rxbuild to build .rx packages for it as well . The Most Challenging part was SystemD Installation it took a really longer time to debug and think what to do along with initramfs booting into SquashFS and assinging OverlayFS to add RW in liveCD . I’ve posted the ISO Link AT : https://github.com/kwe26/ramix-lfs/releases/download/0.1-lfs.3/Ramix-20260719.iso . Compatible Command to Run the ISO file Properly on a QEMU VM . qemu-system-x86_64 \ -enable-kvm \ -cpu host \ -smp 2 \ -m 2G \ -cdrom Ramix-20260719.iso \ \ -display gtk,gl = on \ -device virtio-vga-gl \ \ -device qemu-xhci \ \ -netdev user,id = net0 \ -device virtio-net-pci,netdev = net0 . Feel free to try it on qemu and drop some feedbacks
I made an Linux Distribution from Scratch following the Linux from Scratch Guide . The Problems i faced were dependency problems and Compiler Issues and also weird version mismatch issues, took a really lot time to sort it out and then there was Time, It took really alot of time to compile heavy packages such as GCC, LLVM, Kernel. . I also made an Custom Package Manager called RXPKG it has an version like symlink structure of installing packages planning to expand it more with version switches and fallbacks and also Online Package Resolving. I had also built rxbuild to build .rx packages for it as well . The Most Challenging part was SystemD Installation it took a really longer time to debug and think what to do along with initramfs booting into SquashFS and assinging OverlayFS to add RW in liveCD . I’ve posted the ISO Link AT : https://github.com/kwe26/ramix-lfs/releases/download/0.1-lfs.3/Ramix-20260719.iso . Compatible Command to Run the ISO file Properly on a QEMU VM...
|
1793274620.835714
|
1793361020.835714
|
|
24184
|
Ferris's Game of Life by @polycarbohydrate | S Ferris's Game of Life by @polycarbohydrate | Stardance...
|
polycarbohydrate
|
2
|
21.0
|
298
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T18:39:10Z", "hours": 11.0, "multiplier": 15.5, "payout": 196, "blessing": "neutral", "text": "The next major release of Ferris’s Game of Life is here! The CLI user experience has been greatly improved! Thanks to the reviewers of the first ship, I took their advice and added lots of new features! New features include: CLI display improvements -Text formatting -More standardization in code and printed output -5 preset options so you users don’t need any experience to play/watch. (plus simplier setup) -More customization for custom setup. -Settings for custom setup are all optional so do not feel obligated to fill them all out (unlike v0.1.0). Feedback from the first ship was used, so feel free to give feedback!", "repo": "https://github.com/Polycarbohydrate/FGOL", "demo": "https://github.com/Polycarbohydrate/FGOL/releases/tag/v0.2.0"}, {"ship_num": 2, "ts": "2026-06-28T14:33:11Z", "hours": 10.0, "multiplier": 10.53, "payout": 102, "blessing": "neutral", "text": "Ferris’s Game of Life (FGOL) is Conway’s Game of Life written in Rust. The alive cells are indicated by the crab emoji, a nod to Ferris who is the Rust Langauge’s non-official mascot. I decided on this project because I wanted to build something real for the first time. This project allows me to implement many different features and opens up many pathways to expand on in the future. Currently the project only has a CLI version but I am planning to do a TUI, then progress to a native app UI and then a web UI.", "repo": "https://github.com/Polycarbohydrate/FGOL", "demo": "https://github.com/Polycarbohydrate/FGOL/releases/tag/v0.2.0"}]...
|
[{"post_id": 24265, "ts": "202 [{"post_id": 24265, "ts": "2026-07-07T18:35:56Z", "hours": 7.9539, "text": "Devlog 11 Ferris’s Game of Life (FGOL) v0.2.0 is now released! Check it out here: https://github.com/Polycarbohydrate/FGOL/releases/tag/v0.2.0 What is new? First of all, Ferris, is now in banners that surround text in the CLI! These banners surround important pieces of messages or menus. Text that is used for input will be displayed regularly. Taking into account many of the suggestions from the first ship, I added presets! There are 5 presets with this ship, and I plan to add more, which you can select to skip the hassle of setting up the simulation. These 5 were ones I found interesting and were fun to watch on the CLI. Additionally, you may notice that there are more menus now. In order to accomodate the many changes while keeping the user experience friendly, I decided to use menus instead of forcing you to follow a setup process. You are able to customize the simulation however you want! You are now able to add, remove, and view existing cells before you start the simulation! You can still edit the speed of the simulation, and choose the grid size you want. New settings include choosing when to stop the simulation (if you have an infinite loop) and stopping the simulation once cells move off of the screen. Technical changes: To make the code readable and better to edit (i don’t think a 1000 line file with repetitive text is good), I added banners.rs, which holds all of the banner/text content. Other files use the content by calling functions within banner.rs. This makes it so I can see more logic than text, which is more important with debugging. I added the type SettingsExport to hold all of the information I import into cli_display.rs . This was a suggestion from cargo clippy . As always, all code is linted using cargo clippy and formatted using cargo-fmt . All files besides core.rs were modified to accomodate changes. input.rs was changed the most. All platform binaries are still a modest file size (~100kb) Before releasing, I tested for formatting, bad input, and tried to fix everything. I something doesn’t look right, or you encounter a bug/error. Create an issue on the GitHub so I can quickly fix it. Future plans: Ship this release. Work on more features Transition to web-version. Video demo:"}, {"post_id": 21903, "ts": "2026-07-04T02:24:55Z", "hours": 0.7803, "text": "Devlog 10 Minor changes today I didn’t spend much time today working on this project becuase I have some real world stuff to work on. Changes: I added 2 more presets to the code for a total of 5 presets. Added some additional code comments for better code understanding I did some research on a pause feature that I saw in one of the reviewer’s feedback. It is hard to implement an easy to use pause, as I want to keep the CLI std lib only - no external creates. I may drop that feature or implement it stupidly in the future. Ill do some more research on it in the future. I added 2 additional issues for future features I want in the CLI. Both have to do with detecting a simulation loop. I have also decided that the CLI should remain independent with no external crates."}, {"post_id": 21209, "ts": "2026-07-03T00:55:16Z", "hours": 1.7814, "text": "Devlog 9 Made some improvemets/additions to the CLI today based on some of my own discoveries and feedback from the first ship. Thank you to everyone who voted on my first ship ever! I looked throught the feedback and appreciate the support. I also appreciate the constructive feedback. I took it into consideration and applied changes. Major Changes Biggest change was the addition of preset templates. You can now choose between inputting your own cells through coordinates, or by just selecting a preset template which has hardcoded values for cells and everything else. This was done by adding presets.rs which is mainly for the hardcoded values to be fetched and stored. Additionally inputs.rs was updated and overhauled with more functions to be more readable and easier to edit. main.rs was changed to accomodate the changes in input.rs and presets.rs core.rs and cli_display.rs were not changed Bug fixes Inputting a negative number in the first step of the custom setup process would not have proper program execution. I fixed by checking for negative numbers Personal changes The program now has a dedicated exit and loops after a generation dies so you can keep on testing! Phrasing in one of the prompts in inputs.rs was changed to be more clear. Additional thoughts: I will fix up the CLI a bit more and add a few more features before moving on to TUI development. The release of the TUI will be my second ship. Eventually I plan to have this project with a GUI, TUI, CLI, and a web version. Since I am planning for the CLI to be used on low-end devices, I am going to limit the file size to 1 MB. That is 1 MB across all platform binaries. Someone suggested adding a pause feature. I am currently looking into implementing that. Tldr: I will continue fixing up the CLI and adding features. Have a wonderful day."}, {"post_id": 17138, "ts": "2026-06-27T20:22:18Z", "hours": 1.1733, "text": "Devlog 8 This will likely be the last devlog before my first ship. File changes: cli_display.rs: Removed hardcoded grid constants and added new input parameters for grid size. Experimented with different grid spacing but settled on a dot and space to one emoji (”. “). inputs.rs: Added a new section for grid size selection. There are four choices for selection: Small, Medium, Large, and Custom. I had a little bug with Custom not properly working but that was quickly fixed. main.rs: modified to accomodate variable and parameter changes of the 2 files above. I checked error handling and the spacing of text as well. Everything should be properly handled cargo-fmt & cargo clippy ran. Fixed the old bug of inverted y cells; the problem was because of the way I collected line renders (I rendered the bottom of the grid up, but my string concatenation pushed the bottom lines to the top). To solve I just reversed the loop for the rows (y-value). Plenty of comments In the video attached, at 200ms per frame there is no screen stutter. The new way of displaying frames seems to be good. Future: After this I will update my project GitHub ReadMe and add binaries for Windows, Linux, and MacOS. Then I will add the playable link here. After shipping, if the project passes, I will clean up the code and make the game replayable after all cell dies. Next major modification would to progress to a TUI then a GUI with additional features. Lots of ideas for this one! Other: Self contained Rust, no external crates. Q: Why not GUI? A: I see lots of people on this platform have a GUI. However they are using an easy to use game engine, web render, and/or easy to use applications. Rust is mainly for backend and using Rust for frontend is a pain in the butt. I would have to learn eframe/egui and how to work with web-assembly and convert my code to be compiled that way. A TUI would be my next step. If the TUI works, I may consider an infinite grid project milestone and/or then proceed to do a Rust-based GUI. Attached is the cell pattern known as “diehard”. It contains 7 initial starting cells and goes all the way to generation 129 before dying exacting on generation 130. Feedback is welcome!"}, {"post_id": 16606, "ts": "2026-06-27T00:40:42Z", "hours": 0.6336, "text": "Devlog 7 I didn’t change much during this time. However, I redid the printing to that it prints the frame at once instead of one line at a time so there is less stuttering and screen movement. I spent the majority of the time trying to use eframe and wasm but I had a hard time figuring it out. Additionally to just compile and test my code I had to compile 225+ packages every time which took a long time and if I decided to use wasm, it would be even more packages… Next step is to see if I need to fix the location of the delay (speed) and then ship. After ship, I will use an external crate for the TUI. then if the tui goes well maybe an online thing as well. Majority of projects here are using a framework that is high level for frontend development. Using Rust for frontend is a pain :( I added another video with the famous 7-cell 120+ generation ‘diehard’ to show the cli. I think there is less stutter now (i think the stutter at the end would be reduced if my terminal was not as big). Feedback is welcome!"}, {"post_id": 16468, "ts": "2026-06-26T20:17:55Z", "hours": 1.3767, "text": "Devlog 6 File changes (additions, removals, modification) modification: tui.rs/cli_display.rs -> renamed tui.rs to cli_display.rs to be more accurate since I am not building a TUI-based display/application Non-code changes In Cargo.toml, I changed the package name to FGOL instead of the generic testing name I had before. This will now reflect on compilation. Code changes main.rs: I refactored usage of tui.rs to the new file name. I also added a stop to the program that checks if the cells HashSet is empty. If it is, then the program prints the last empty grid frame and notifies the user before stopping. core.rs: No changes. inputs.rs: Major modification to the code in here. Made the input process look nicer, tested the display spacing (including after error messages), overhauled to ask the number of cells that way it is less repetitive if a user wants to add more cells. Added a seperate function to clean the file up a bit (still have some work to do; I don’t think its very readable). Added the crab emoji as the banner for Ferris. cli_display.rs: Changed the cell char to the crab emoji as the banner for Ferris 🦀. Other Everything is formatted to cargo-fmt & cargo clippy No errors or warnings during compilation. Error handling was tested and the printed lines have spacing to look nice. No external crates or packages; it is entirely self-contained. Future I may ship like this (as a binary) to see what feedback I may get. If my ship passes I will continue and make a GUI and learn an external crates for that. For testing and playing, I think a web UI is the best. A binary application is not the best (and unnecessary). I will see what my time looks like and maybe I will convert to an actual UI on the web before shipping or find another solution. Otherwise I will compile the .exe myself and host on the GitHub. Feedback is welcome! GH: https://github.com/Polycarbohydrate/ferris-s-game-of-life"}, {"post_id": 15369, "ts": "2026-06-25T00:01:49Z", "hours": 1.9031, "text": "Devlog 5 Big changes were made today! main.rs completed core.rs completed input.rs completed tui.rs completed By completed I mean that the program is functional (albeit, not pretty). Program is formatted to cargo-fmt and only one cargo clippy warning is left for me to address. The next step is for me to fix a bug that causes the points to be inverted when plotted (positive y becomes negative y). I also have to figure out the clippy warning which is stumping me (warning on an if-then-else statement). This should not take long. The output is stretched due to the uneven spacing of chars in the terminal. THis will have to be addressed in the future by redesign or switching to a GUI framework (likely eframe/egui). I also need to streamline the user input section and make it easier. I will upload to GitHub soon. I also applied for access to hackclub.app to host it for testing. One thing I will note is that the code currently has no outside crates/dependencies and is entirely self-contained. I have attached a video of the program running. The low quality is from it being cropped from my VSCode terminal…sorry :( Suggestions/feedback is welcome!"}, {"post_id": 15238, "ts": "2026-06-24T18:58:30Z", "hours": 1.4261, "text": "Devlog 4 Big improvements today! I finished the core algorithm and completed the first version of the inputs that a user can provide. I restructured the project with: main.rs (the file that brings everything together) inputs.rs (user input stored and returned to main.rs) core.rs (takes info from inputs.rs to calculate the next generation of cells) tui.rs (im progress; probably the hardest part. I am thinking of doing a gui using egui/eframe. If I don’t I will likely implement a grid in the terminal using a limited space (probably 100 x 100 cells for the initial version) Very good progress so far. Only thing I need to do that is important is display the cells."}, {"post_id": 15074, "ts": "2026-06-24T14:19:25Z", "hours": 1.1589, "text": "Today I had an insight to switch the initial state to a simple vertical 3 cell stack. This was to make it easier to debug since the next generations are periodic and my code should show alternating points. The simplified conditions allowed me to figure out the proper algorithm structure: Find dead cells. Calculate new alive cells. Remove the original dead cells. Generation complete Previously I was checking AND removing dead cells before finding the next generation’s alive cells. The next step is to reorganize my code, verify the results, and then convert to a GUI or TUI."}, {"post_id": 14619, "ts": "2026-06-23T20:00:45Z", "hours": 1.0856, "text": "Decided on data type usage (HashSet mainly for storage of cells, and HashMap to convert dead cells to alive cells.) I am sure it is very unoptimized right now. There is a big bug which I will have to fix later."}, {"post_id": 13926, "ts": "2026-06-22T20:47:31Z", "hours": 1.0264, "text": "Today I started working on a simple game of Conway’s Game of Life. I started coding in Rust. It will be my first ever project/game of this sort and hopefully it will be fun!"}]...
|
Title: Ferris's Game of Life by @polycarbohydr Title: Ferris's Game of Life by @polycarbohydrate | Stardance
Devlogs:
Today I started working on a simple game of Conway’s Game of Life. I started coding in Rust. It will be my first ever project/game of this sort and hopefully it will be fun!
Decided on data type usage (HashSet mainly for storage of cells, and HashMap to convert dead cells to alive cells.) I am sure it is very unoptimized right now. There is a big bug which I will have to fix later.
Today I had an insight to switch the initial state to a simple vertical 3 cell stack. This was to make it easier to debug since the next generations are periodic and my code should show alternating points. The simplified conditions allowed me to figure out the proper algorithm structure: Find dead cells. Calculate new alive cells. Remove the original dead cells. Generation complete Previously I was checking AND removing dead cells before finding the next generation’s alive cells. The next step is to reorganize my code, verify the results, and then convert to a GUI or TUI.
Devlog 4 Big improvements today! I finished the core algorithm and completed the first version of the inputs that a user can provide. I restructured the project with: main.rs (the file that brings everything together) inputs.rs (user input stored and returned to main.rs) core.rs (takes info from inputs.rs to calculate the next generation of cells) tui.rs (im progress; probably the hardest part. I am thinking of doing a gui using egui/eframe. If I don’t I will likely implement a grid in the terminal using a limited space (probably 100 x 100 cells for the initial version) Very good progress so far. Only thing I need to do that is important is display the cells.
Devlog 5 Big changes were made today! main.rs completed core.rs completed input.rs completed tui.rs completed By completed I mean that the program is functional (albeit, not pretty). Program is formatted to cargo-fmt and only one cargo clippy warning is left for me to address. The next step is for me to fix a bug that causes the points to be inverted when plotted (positive y becomes negative y). I also have to figure out the clippy warning which is stumping me (warning on an if-then-else statement). This should not take long. The output is stretched due to the uneven spacing of chars in the terminal. THis will have to be addressed in the future by redesign or switching to a GUI framework (likely eframe/egui). I also need to streamline the user input section and make it easier. I will upload to GitHub soon. I also applied for access to hackclub.app to host it for testing. One thing I will note is that the code currently has no outside crates/dependencies and is entirely self-contained. I have attached a video of the program running. The low quality is from it being cropped from my VSCode terminal…sorry :( Suggestions/feedback is welcome!
Devlog 6 File changes (additions, removals, modification) modification: tui.rs/cli_display.rs -> renamed tui.rs to cli_display.rs to be more accurate since I am not building a TUI-based display/application Non-code changes In Cargo.toml, I changed the package name to FGOL instead of the generic testing name I had before. This will now reflect on compilation. Code changes main.rs: I refactored usage of tui.rs to the new file name. I also added a stop to the program that checks if the cells HashSet is empty. If it is, then the program prints the last empty grid frame and notifies the user before stopping. core.rs: No changes. inputs.rs: Major modification to the code in here. Made the input process look nicer, tested the display spacing (including after error messages), overhauled to ask the number of cells that way it is less repetitive if a user wants to add more cells. Added a seperate function to clean the file up a bit (still have some work to do; I don’t think its very readable). Added the crab emoji as the banner for Ferris. cli_display.rs: Changed the cell char to the crab emoji as the banner for Ferris 🦀. Other Everything is formatted to cargo-fmt & cargo clippy No errors or warnings during compilation. Error handling was tested and the printed lines have spacing to look nice. No external crates or packages; it is entirely self-contained. Future I may ship like this (as a binary) to see what feedback I may get. If my ship passes I will continue and make a GUI and learn an external crates for that. For testing and playing, I think a web UI is the best. A binary application is not the best (and unnecessary). I will see what my time looks like and maybe I will convert to an actual UI on the web before shipping or find another solution. Otherwise I will compile the .exe myself and host on the GitHub. Feedback is welcome! GH: https://github.com/Polycarbohydrate/ferris-s-game-of-life
Devlog 7 I didn’t change much during this time. However, I redid the printing to that it prints the frame at once instead of one line at a time so there is less stuttering and screen movement. I spent the majority of the time trying to use eframe and wasm but I had a hard time figuring it out. Additionally to just compile and test my code I had to compile 225+ packages every time which took a long time and if I decided to use wasm, it would be even more packages… Next step is to see if I need to fix the location of the delay (speed) and then ship. After ship, I will use an external crate for the TUI. then if the tui goes well maybe an online thing as well. Majority of projects here are using a framework that is high level for frontend development. Using Rust for frontend is a pain :( I added another video with the famous 7-cell 120+ generation ‘diehard’ to show the cli. I think there is less stutter now (i think the stutter at the end would be reduced if my terminal was not as big). Feedback is welcome!
Devlog 8 This will likely be the last devlog before my first ship. File changes: cli_display.rs: Removed hardcoded grid constants and added new input parameters for grid size. Experimented with different grid spacing but settled on a dot and space to one emoji (”. “). inputs.rs: Added a new section for grid size selection. There are four choices for selection: Small, Medium, Large, and Custom. I had a little bug with Custom not properly working but that was quickly fixed. main.rs: modified to accomodate variable and parameter changes of the 2 files above. I checked error handling and the spacing of text as well. Everything should be properly handled cargo-fmt & cargo clippy ran. Fixed the old bug of inverted y cells; the problem was because of the way I collected line renders (I rendered the bottom of the grid up, but my string concatenation pushed the bottom lines to the top). To solve I just reversed the loop for the rows (y-value). Plenty of comments In the video attached, at 200ms per frame there is no screen stutter. The new way of displaying frames seems to be good. Future: After this I will update my project GitHub ReadMe and add binaries for Windows, Linux, and MacOS. Then I will add the playable link here. After shipping, if the project passes, I will clean up the code and make the game replayable after all cell dies. Next major modification would to progress to a TUI then a GUI with additional features. Lots of ideas for this one! Other: Self contained Rust, no external crates. Q: Why not GUI? A: I see lots of people on this platform have a GUI. However they are using an easy to use game engine, web render, and/or easy to use applications. Rust is mainly for backend and using Rust for frontend is a pain in the butt. I would have to learn eframe/egui and how to work with web-assembly and convert my code to be compiled that way. A TUI would be my next step. If the TUI works, I may consider an infinite grid project milestone and/or then proceed to do a Rust-based GUI. Attached is the cell pattern known as “diehard”. It contains 7 initial starting cells and goes all the way to generation 129 before dying exacting on generation 130. Feedback is welcome!
Devlog 9 Made some improvemets/additions to the CLI today based on some of my own discoveries and feedback from the first ship. Thank you to everyone who voted on my first ship ever! I looked throught the feedback and appreciate the support. I also appreciate the constructive feedback. I took it into consideration and applied changes. Major Changes Biggest change was the addition of preset templates. You can now choose between inputting your own cells through coordinates, or by just selecting a preset template which has hardcoded values for cells and everything else. This was done by adding presets.rs which is mainly for the hardcoded values to be fetched and stored. Additionally inputs.rs was updated and overhauled with more functions to be more readable and easier to edit. main.rs was changed to accomodate the changes in input.rs and presets.rs core.rs and cli_display.rs were not changed Bug fixes Inputting a negative number in the first step of the custom setup process would not have proper program execution. I fixed by checking for negative numbers Personal changes The program now has a dedicated exit and loops after a generation dies so you can keep on testing! Phrasing in one of the prompts in inputs.rs was changed to be more clear. Additional thoughts: I will fix up the CLI a bit more and add a few more features before moving on to TUI development. The release of the TUI will be my second ship. Eventually I plan to have this project with a GUI, TUI, CLI, and a web version. Since I am planning for the CLI to be used on low-end devices, I am going to limit the file size to 1 MB. That is 1 MB across all platform binaries. Someone suggested adding a pause feature. I am currently looking into implementing that. Tldr: I will continue fixing up the CLI and adding features. Have a wonderful day.
Devlog 10 Minor changes today I didn’t spend much time today working on this project becuase I have some real world stuff to work on. Changes: I added 2 more presets to the code for a total of 5 presets. Added some additional code comments for better code understanding I did some research on a pause feature that I saw in one of the reviewer’s feedback. It is hard to implement an easy to use pause, as I want to keep the CLI std lib only - no external creates. I may drop that feature or implement it stupidly in the future. Ill do some more research on it in the future. I added 2 additional issues for future features I want in the CLI. Both have to do with detecting a simulation loop. I have also decided that the CLI should remain independent with no external crates.
Devlog 11 Ferris’s Game of Life (FGOL) v0.2.0 is now released! Check it out here: https://github.com/Polycarbohydrate/FGOL/releases/tag/v0.2.0 What is new? First of all, Ferris, is now in banners that surround text in the CLI! These banners surround important pieces of messages or menus. Text that is used for input will be displayed regularly. Taking into account many of the suggestions from the first ship, I added presets! There are 5 presets with this ship, and I plan to add more, which you can select to skip the hassle of setting up the simulation. These 5 were ones I found interesting and were fun to watch on the CLI. Additionally, you may notice that there are more menus now. In order to accomodate the many changes while keeping the user experience friendly, I decided to use menus instead of forcing you to follow a setup process. You are able to customize the simulation however you want! You are now able to add, remove, and view existing cells before you start the simulation! You can still edit the speed of the simulation, and choose the grid size you want. New settings include choosing when to stop the simulation (if you have an infinite loop) and stopping the simulation once cells move off of the screen. Technical changes: To make the code readable and better to edit (i don’t think a 1000 line file with repetitive text is good), I added banners.rs, which holds all of the banner/text content. Other files use the content by calling functions within banner.rs. This makes it so I can see more logic than text, which is more important with debugging. I added the type SettingsExport to hold all of the information I import into cli_display.rs . This was a suggestion from cargo clippy . As always, all code is linted using cargo clippy and formatted using cargo-fmt . All files besides core.rs were modified to accomodate changes. input.rs was changed the most. All platform binaries are still a modest file size (~100kb) Before releasing, I tested for formatting, bad input, and tried to fix everything. I something doesn’t look right, or you encounter a bug/error. Create an issue on the GitHub so I can quickly fix it. Future plans: Ship this release. Work on more features Transition to web-version. Video demo:
Ships:
Ferris’s Game of Life (FGOL) is Conway’s Game of Life written in Rust. The alive cells are indicated by the crab emoji, a nod to Ferris who is the Rust Langauge’s non-official mascot. I decided on this project because I wanted to build something real for the first time. This project allows me to implement many different features and opens up many pathways to expand on in the future. Currently the project only has a CLI version but I am planning to do a TUI, then progress to a native app UI and then a web UI.
The next major release of Ferris’s Game of Life is here! The CLI user experience has been greatly improved! Thanks to the reviewers of the first ship, I took their advice and added lots of new features! New features include: CLI display improvements -Text formatting -More standardization in code and printed output -5 preset options so you users don’t need any experience to play/watch. (plus simplier setup) -More customization for custom setup. -Settings for custom setup are all optional so do not feel obligated to fill them all out (unlike v0.1.0). Feedback from the first ship was used, so feel free to give feedback!...
|
1793138156.2250977
|
1793224556.2250977
|
|
27605
|
Password-Generator by @k_nilesh | Stardance
|
k_nilesh
|
2
|
21.0
|
36
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-19T01:02:37Z", "hours": 11.0, "multiplier": 1.54, "payout": 15, "blessing": "neutral", "text": "I made a Password Generator that creates strong, random passwords using letters, numbers, and special characters. The challenging part was handling different password lengths and character options while keeping the generation random. I’m proud that I built a useful project from scratch and improved my JS and problem-solving skills. To test it, simply run the program, choose the desired password length and options, and it will generate a random password.", "repo": "https://github.com/k-nilesh04/password-generator", "demo": "https://password-generator-sandy-zeta.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-28T13:34:24Z", "hours": 10.0, "multiplier": 2.15, "payout": 21, "blessing": "neutral", "text": "I built a Password Generator using React, Vite, and Tailwind CSS that creates secure, customizable passwords with options for length, uppercase, lowercase, numbers, and special characters. The most challenging part was implementing the password generation logic while ensuring all selected character types worked correctly and building a responsive, user-friendly interface. I’m proud of completing a polished React project that strengthened my understanding of state management, event handling, and UI development. To test it, simply choose your preferred options, generate a password, and use the Copy button to copy it instantly.", "repo": "https://github.com/k-nilesh04/password-generator", "demo": "https://password-generator-sandy-zeta.vercel.app/"}]...
|
[{"post_id": 32722, "ts": "202 [{"post_id": 32722, "ts": "2026-07-22T01:44:14Z", "hours": 10.5656, "text": "see my password generator use it and tell me where to modify…"}, {"post_id": 17582, "ts": "2026-06-28T13:07:54Z", "hours": 9.8967, "text": "Password Generator –> My Latest React Project I built a Password Generator using React, Vite, and Tailwind CSS that helps users create strong, secure, and customizable passwords in just a click. Key Features : it can generate secure random passwords, customize password length, uppercase & lowercase options, numbers & special characters options and it has one-click copy to clipboard feature. Fast and responsive user experience project made with react with understanding of React Hooks, state management, event handling, and Tailwind CSS. I’d love to hear your feedback! Feel free to try it out and let me know what features you’d like to see in the next version. visit: https://password-generator-sandy-zeta.vercel.app/"}]...
|
Title: Password-Generator by @k_nilesh | Stardance Title: Password-Generator by @k_nilesh | Stardance
Devlogs:
Password Generator –> My Latest React Project I built a Password Generator using React, Vite, and Tailwind CSS that helps users create strong, secure, and customizable passwords in just a click. Key Features : it can generate secure random passwords, customize password length, uppercase & lowercase options, numbers & special characters options and it has one-click copy to clipboard feature. Fast and responsive user experience project made with react with understanding of React Hooks, state management, event handling, and Tailwind CSS. I’d love to hear your feedback! Feel free to try it out and let me know what features you’d like to see in the next version. visit: https://password-generator-sandy-zeta.vercel.app/
see my password generator use it and tell me where to modify…
Ships:
I built a Password Generator using React, Vite, and Tailwind CSS that creates secure, customizable passwords with options for length, uppercase, lowercase, numbers, and special characters. The most challenging part was implementing the password generation logic while ensuring all selected character types worked correctly and building a responsive, user-friendly interface. I’m proud of completing a polished React project that strengthened my understanding of state management, event handling, and UI development. To test it, simply choose your preferred options, generate a password, and use the Copy button to copy it instantly.
I made a Password Generator that creates strong, random passwords using letters, numbers, and special characters. The challenging part was handling different password lengths and character options while keeping the generation random. I’m proud that I built a useful project from scratch and improved my JS and problem-solving skills. To test it, simply run the program, choose the desired password length and options, and it will generate a random password....
|
1793249463.2325754
|
1793335863.2325754
|
|
27930
|
Manufacturing Process Management System by @umi | Manufacturing Process Management System by @umi | Stardance...
|
umi
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-06T00:48:41Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This is a project I created at a hackathon. This system allows you to manage incoming shipments, outgoing shipments, assembly, inventory, and master data registration all at once. Please bear with me—this page is in Japanese.", "repo": "https://github.com/umi6/factory_manage", "demo": "https://umi6.github.io/factory_manage/#/"}]...
|
[{"post_id": 18027, "ts": "202 [{"post_id": 18027, "ts": "2026-06-29T00:15:15Z", "hours": 21.2536, "text": "I have completed the project."}]...
|
Title: Manufacturing Process Management System by Title: Manufacturing Process Management System by @umi | Stardance
Devlogs:
I have completed the project.
Ships:
This is a project I created at a hackathon. This system allows you to manage incoming shipments, outgoing shipments, assembly, inventory, and master data registration all at once. Please bear with me—this page is in Japanese....
|
1793120107.4018865
|
1793206507.4018865
|
|
28931
|
ploot by @yay | Stardance
|
yay
|
1
|
21.0
|
257
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-27T04:44:39Z", "hours": 21.0, "multiplier": 12.18, "payout": 257, "blessing": "neutral", "text": "this is ploot, an ai powered planner that helps you allocate time to your tasks. you drag your availability on the calendar, write down your tasks in the rich text editor, then it gives you an editable calendar that you can export to a real calendar app(.ics format)! this was my first time making an app like this, so i used a bit of ai in the debugging process, especially for small things that i didn’t notice. there were a lot of challenges, but some of the especially annoying ones were the models returning errors, having signup errors, and timezone mismatches. what i really like about this is that its actually usable in my daily life :D its not something i make and then leave to rot, and is really useful for my indecisiveness. things to note beforehand: its passwordless and uses magic link login, is very slow in loading events(so pls be patient), and the generated schedules are not saved into a database or anything so once you refresh the page they’re gone. also (this probably wont happen) but you might get ratelimited", "repo": "https://github.com/nxzeh727/ploot", "demo": "https://ploot1.vercel.app"}]...
|
[{"post_id": 74296, "ts": "202 [{"post_id": 74296, "ts": "2026-09-27T04:18:39Z", "hours": 4.8806, "text": "ploot devlog #3 :D i added a modifications section so that you can modify your schedule to how you would want it to be. i also changed the ai models so that it would be better and cleaned up remaining bugs. its almost ready to ship! :D"}, {"post_id": 62279, "ts": "2026-09-05T15:58:02Z", "hours": 6.3167, "text": "devlog #2 :D i fixed the ui :D and also got rid of a bunch of bugs related to scheduling and signup/login i also added a dashboard but theres nothing in it so far there are still some problems though, since the ai doesn’t generate schedules half the time. after this, i mostly plan on adding a modification part for the schedule, a place to save the calendar and check it, and some stuff in the dashboard. :D I’m also planning on upgrading the text place into a proper todo-list thanks for reading :D"}, {"post_id": 42754, "ts": "2026-08-07T17:03:52Z", "hours": 9.8656, "text": "ploot devlog #1: so far, I’ve added a lot of things: the basic funciton(a calendar where you select the times available, a somewhat formatted editor where you can put what you need to do for that day, and an AI schedule generated from these pieces of information). i also created authentication(using maigc link only). initially, i stored the events and resulting schedule in a json, but i changed the inputs and put them into a database, and then converted the resulting schedule into .ics format so you can download it. as of right now, its a bit ugly, but that will be fixed in the future!"}]...
|
Title: ploot by @yay | Stardance
Devlogs:
ploot d Title: ploot by @yay | Stardance
Devlogs:
ploot devlog #1: so far, I’ve added a lot of things: the basic funciton(a calendar where you select the times available, a somewhat formatted editor where you can put what you need to do for that day, and an AI schedule generated from these pieces of information). i also created authentication(using maigc link only). initially, i stored the events and resulting schedule in a json, but i changed the inputs and put them into a database, and then converted the resulting schedule into .ics format so you can download it. as of right now, its a bit ugly, but that will be fixed in the future!
devlog #2 :D i fixed the ui :D and also got rid of a bunch of bugs related to scheduling and signup/login i also added a dashboard but theres nothing in it so far there are still some problems though, since the ai doesn’t generate schedules half the time. after this, i mostly plan on adding a modification part for the schedule, a place to save the calendar and check it, and some stuff in the dashboard. :D I’m also planning on upgrading the text place into a proper todo-list thanks for reading :D
ploot devlog #3 :D i added a modifications section so that you can modify your schedule to how you would want it to be. i also changed the ai models so that it would be better and cleaned up remaining bugs. its almost ready to ship! :D
Ships:
this is ploot, an ai powered planner that helps you allocate time to your tasks. you drag your availability on the calendar, write down your tasks in the rich text editor, then it gives you an editable calendar that you can export to a real calendar app(.ics format)! this was my first time making an app like this, so i used a bit of ai in the debugging process, especially for small things that i didn’t notice. there were a lot of challenges, but some of the especially annoying ones were the models returning errors, having signup errors, and timezone mismatches. what i really like about this is that its actually usable in my daily life :D its not something i make and then leave to rot, and is really useful for my indecisiveness. things to note beforehand: its passwordless and uses magic link login, is very slow in loading events(so pls be patient), and the generated schedules are not saved into a database or anything so once you refresh the page they’re gone. also (this probably wont happen) but you might get ratelimited...
|
1793148831.091194
|
1793235231.091194
|
|
30635
|
DoMax.lt by @DoMax | Stardance
|
DoMax
|
1
|
21.0
|
287
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T20:23:38Z", "hours": 21.0, "multiplier": 11.58, "payout": 287, "blessing": "neutral", "text": "After hours of intense rebuilding DoMax.lt, which was left untouched for almost a year, I managed to make it rise from the dead! This isn’t your average, boring portfolio. Instead, I tried to house 12 unique projects and 14 exceptional blog posts that document my chaotic reality of building things. From the highs of creating Matcha Linux and the tactical board game Onlinja, to the brutal honesty of how corporate APIs killed EchoTuner, DoMax.lt captures just how wild can turning ideas into real life get. This site also vaults valuable lessons from my projects that flopped you can’t get anywhere else. The entire website is fully decoupled, lightning-fast, and 100% free, open-source and forkable via GitHub so you can start building yours too!", "repo": "https://github.com/domasles/domax-lt", "demo": "https://domax.lt"}]...
|
[{"post_id": 25462, "ts": "202 [{"post_id": 25462, "ts": "2026-07-09T19:03:35Z", "hours": 7.0461, "text": "The End? After 7 hours and endless memories After spending more than 7 hours , completing the library (which now consists of 12 unique projects and 14 amazing blog posts) and upgrading the viewing experience by MUCH, I can finally state that DoMax.lt is finally COMPLETE! Of course, complete or not, blog library will continue to grow over the years. Honestly, I feel very relieved about the fact that my own site now houses my greatest achievements with crazy stories to share, as new posts are written in a format of a memory tale . I’m hoping the world is going to lean towards Open Source more and more. What new blogs were added? Posts and project descriptions for Matcha Linux and Onlinja are out! I also remembered other successful projects I’m very proud of. One of them caused a snowball effect and started the biggest cross-class collaboration from students’ initiative my school has ever seen. I must mention that it was the first cross-class IT project, and heavily promoted by our school, so you might want to read about it here . If I like the theme, can I fork it? Yes! Like each and every one of my projects (like any other true open-source project) this is forkable, and even has instructions on how to make it truly yours. Check my site’s GitHub to learn more! Visit DoMax.lt and see how ideas or strangest situations turn into real projects!"}, {"post_id": 24381, "ts": "2026-07-07T22:06:05Z", "hours": 3.6597, "text": "Unexpected turn A shift? In the last devlog I told you I’d make posts about Matcha Linux and Onlinja . Well, I LIED , but let me explain: I remembered that I had more interesting stories to uncover, and had to vent a bit xD What I wrote about in my latest blog posts: Pebble revival : I was thrilled to find out what the community has done in favor to preserve a smartwatch. School project and beef with Wordpress : How Wordpress caused a very bumpy development journey, and what I’ve learned from it. That’s it? Structurally speaking, yes. From a visual standpoint you wouldn’t notice anything… Until you turn on dark mode - the site doesn’t change! As a temporary solution I now force light mode on my website. In the future I will probably implement proper dark mode. I also made sure building the site threw no errors I caused. Everything runs smoothly from one end to another. I also made sure that when browsing a project, menu displays “Projects” as a selected option. Previously it was (for some reason) hardcoded to only be affected when viewing a blog post. So are you NOW writing about Matcha Linux and Onlinja? Yes! And then the site will be ready for a ship, with a possible additional blog post about my journey with Hack Club’s Sprig . My life always results in something unusual and exciting (sometimes in goofy ways). To know more, check out DoMax.lt !"}, {"post_id": 23807, "ts": "2026-07-06T23:31:55Z", "hours": 1.7139, "text": "What rises, has to fall How a great project can be killed by bigger 3rd parties Last year, during Summer of Making, one of my largest projects was definitely the EchoTuner - an AI playlist generator. I loved the idea and poured all of myself to it. However, it heavily relied on Spotify’s API that has now become fairly inaccessible due to poor corporate decisions. If you want to see how a project gets killed by a bigger player, read the newest blog here . Another thing I updated was the About Me page. It features less cheap-talk and something that might actually be interesting to read. I highly suggest you checking it out. Some visual elements have also been updated to keep consistency with design language (mostly hover events/animations). Tomorrow I will become a writer I have big plans for tomorrow. I’ll finally get all the missing bits together to post something about my best pair of projects I have ever made. They are Matcha Linux together with its full suite, and Onlinja , which is the best game you’ll ever play. If you want to see great execution of simplicity, wait a day or two, a new devlog is on its way! Is there anything beyond that? No, I don’t think so. Unless some memory or idea comes to mind, I am not planning to post anything before shipping this site on Stardance. That said, I already have many ideas for my other projects. We just have to wait! :D"}, {"post_id": 23166, "ts": "2026-07-05T23:40:47Z", "hours": 3.0172, "text": "More uncovered Quite interesting! In today’s devlog - new posts! I thought about sharing unheard stories of a flop ( Codebase Awareness Protocol ) that I made some time ago, with all the reasons of WHY exactly did it fail, as well as a success ( Raspbery Pi 1 optimization ) and how I utilized an old device that’s in perfect condition. Both are worth reading! You can click on the links above! Bugs can’t hide from me! In addition to 2 amazing blog posts, I both introduced and fixed a very obvious bug. In attempt to make everything look beautiful, with hover animations, I forgot the fact that this site isn’t still fully decoupled . Some elements, instead of being reused, are coded in-place, without newer styling compatibility. Luckily, when I noticed, the fix was a simple line replacement. Everything functions as it should, and the site feels more responsive than ever before. Shaping the site The site is forming beautifully with more content to come. I’m trying to re-read my old project information and catch memories that are floating around. The goal is simple yet obvious - try to make reading my journey be fun and appealing . DoMax.lt won’t stop growing, even after Stardance, so make sure to visit it once in a while! :D"}, {"post_id": 22955, "ts": "2026-07-05T17:04:51Z", "hours": 3.2958, "text": "Something personal What was I cooking ? Behind the scenes, I have greatly redesigned the About Page and added a new post for the Revival of DoMax.lt ! Within these pages is a more raw look at my technological journey, as well as how the site is going to be updated from now on. Do I have any quick plans? Absolutely! I MUST document the deprecation notice of EchoTuner and the challenges of making it. NOTE: the website might not work at the time you’re reading this, but the auth flow should come back online Speaking of challenges, one of my most challenging projects so far was Matcha Linux that you can view on Stardance too! Next will probably come my less-known or failed projects, like CAP , Detention Loop , as well as some of group projects led by me (great example of this is SkyLink ) I think I’ll need some time to think about all of these projects and showcase everything about them. Stay tuned for further updates!"}, {"post_id": 22391, "ts": "2026-07-04T20:55:11Z", "hours": 2.0122, "text": "Back to blogging! In this devlog: how am I trying to revive my personal page - DoMax.lt ! Here I am again! Back to my personal page that’s quite old at this point. Almost a whole year without posting! Time to change that. What technology am I using? I am using Jekyll for page generation. Jekyll’s charm is very simple - it requires everything to be written in Markdown, while the template for a site can just be taken from elsewhere and modified (by editing or adding your own Markdown files). Super useful and super easy for anyone who doesn’t want to mess around setting up a Wordpress machine, but loves to tinker a bit. THAT SAID - modifying the themes can sometimes be painful, as they’re not frequently updated. I got lucky - my chosen template wasn’t too cluttered up, but I remember having to put in some work to clean and update it to a usable, production-ready state. The thing I am happy about though is my Docker workflow. It’s very convenient - lets me preview my page after editing anything locally. And rebuilds the container extremely fast too! Since I said it’s not a new project, well then what IS new? Glad you asked! I always missed a “Featured Projects” section and I want to shape this site not only for projects, but also standalone blogs. Now it was shaped to act only as a project showcase, but there are other things I’m passionate about. What exactly am I planning to add next? First of all: My pile of projects that I have finished to a usable state, but never showcased. They deserve more attention. A couple of blogs. I recently discovered that the old model Pebble Steel still works due to massive preservation efforts and I’m looking forward to getting the new Pebble Time 2, whch is a part of the reboot, also some Raspberry Pi and Alpine/Matcha Linux findings. And the rest we’ll see about! To follow my journey, don’t forget to visit DoMax.lt and the other projects I am hosting or making :D"}]...
|
Title: DoMax.lt by @DoMax | Stardance
Devlogs:
Ba Title: DoMax.lt by @DoMax | Stardance
Devlogs:
Back to blogging! In this devlog: how am I trying to revive my personal page - DoMax.lt ! Here I am again! Back to my personal page that’s quite old at this point. Almost a whole year without posting! Time to change that. What technology am I using? I am using Jekyll for page generation. Jekyll’s charm is very simple - it requires everything to be written in Markdown, while the template for a site can just be taken from elsewhere and modified (by editing or adding your own Markdown files). Super useful and super easy for anyone who doesn’t want to mess around setting up a Wordpress machine, but loves to tinker a bit. THAT SAID - modifying the themes can sometimes be painful, as they’re not frequently updated. I got lucky - my chosen template wasn’t too cluttered up, but I remember having to put in some work to clean and update it to a usable, production-ready state. The thing I am happy about though is my Docker workflow. It’s very convenient - lets me preview my page after editing anything locally. And rebuilds the container extremely fast too! Since I said it’s not a new project, well then what IS new? Glad you asked! I always missed a “Featured Projects” section and I want to shape this site not only for projects, but also standalone blogs. Now it was shaped to act only as a project showcase, but there are other things I’m passionate about. What exactly am I planning to add next? First of all: My pile of projects that I have finished to a usable state, but never showcased. They deserve more attention. A couple of blogs. I recently discovered that the old model Pebble Steel still works due to massive preservation efforts and I’m looking forward to getting the new Pebble Time 2, whch is a part of the reboot, also some Raspberry Pi and Alpine/Matcha Linux findings. And the rest we’ll see about! To follow my journey, don’t forget to visit DoMax.lt and the other projects I am hosting or making :D
Something personal What was I cooking ? Behind the scenes, I have greatly redesigned the About Page and added a new post for the Revival of DoMax.lt ! Within these pages is a more raw look at my technological journey, as well as how the site is going to be updated from now on. Do I have any quick plans? Absolutely! I MUST document the deprecation notice of EchoTuner and the challenges of making it. NOTE: the website might not work at the time you’re reading this, but the auth flow should come back online Speaking of challenges, one of my most challenging projects so far was Matcha Linux that you can view on Stardance too! Next will probably come my less-known or failed projects, like CAP , Detention Loop , as well as some of group projects led by me (great example of this is SkyLink ) I think I’ll need some time to think about all of these projects and showcase everything about them. Stay tuned for further updates!
More uncovered Quite interesting! In today’s devlog - new posts! I thought about sharing unheard stories of a flop ( Codebase Awareness Protocol ) that I made some time ago, with all the reasons of WHY exactly did it fail, as well as a success ( Raspbery Pi 1 optimization ) and how I utilized an old device that’s in perfect condition. Both are worth reading! You can click on the links above! Bugs can’t hide from me! In addition to 2 amazing blog posts, I both introduced and fixed a very obvious bug. In attempt to make everything look beautiful, with hover animations, I forgot the fact that this site isn’t still fully decoupled . Some elements, instead of being reused, are coded in-place, without newer styling compatibility. Luckily, when I noticed, the fix was a simple line replacement. Everything functions as it should, and the site feels more responsive than ever before. Shaping the site The site is forming beautifully with more content to come. I’m trying to re-read my old project information and catch memories that are floating around. The goal is simple yet obvious - try to make reading my journey be fun and appealing . DoMax.lt won’t stop growing, even after Stardance, so make sure to visit it once in a while! :D
What rises, has to fall How a great project can be killed by bigger 3rd parties Last year, during Summer of Making, one of my largest projects was definitely the EchoTuner - an AI playlist generator. I loved the idea and poured all of myself to it. However, it heavily relied on Spotify’s API that has now become fairly inaccessible due to poor corporate decisions. If you want to see how a project gets killed by a bigger player, read the newest blog here . Another thing I updated was the About Me page. It features less cheap-talk and something that might actually be interesting to read. I highly suggest you checking it out. Some visual elements have also been updated to keep consistency with design language (mostly hover events/animations). Tomorrow I will become a writer I have big plans for tomorrow. I’ll finally get all the missing bits together to post something about my best pair of projects I have ever made. They are Matcha Linux together with its full suite, and Onlinja , which is the best game you’ll ever play. If you want to see great execution of simplicity, wait a day or two, a new devlog is on its way! Is there anything beyond that? No, I don’t think so. Unless some memory or idea comes to mind, I am not planning to post anything before shipping this site on Stardance. That said, I already have many ideas for my other projects. We just have to wait! :D
Unexpected turn A shift? In the last devlog I told you I’d make posts about Matcha Linux and Onlinja . Well, I LIED , but let me explain: I remembered that I had more interesting stories to uncover, and had to vent a bit xD What I wrote about in my latest blog posts: Pebble revival : I was thrilled to find out what the community has done in favor to preserve a smartwatch. School project and beef with Wordpress : How Wordpress caused a very bumpy development journey, and what I’ve learned from it. That’s it? Structurally speaking, yes. From a visual standpoint you wouldn’t notice anything… Until you turn on dark mode - the site doesn’t change! As a temporary solution I now force light mode on my website. In the future I will probably implement proper dark mode. I also made sure building the site threw no errors I caused. Everything runs smoothly from one end to another. I also made sure that when browsing a project, menu displays “Projects” as a selected option. Previously it was (for some reason) hardcoded to only be affected when viewing a blog post. So are you NOW writing about Matcha Linux and Onlinja? Yes! And then the site will be ready for a ship, with a possible additional blog post about my journey with Hack Club’s Sprig . My life always results in something unusual and exciting (sometimes in goofy ways). To know more, check out DoMax.lt !
The End? After 7 hours and endless memories After spending more than 7 hours , completing the library (which now consists of 12 unique projects and 14 amazing blog posts) and upgrading the viewing experience by MUCH, I can finally state that DoMax.lt is finally COMPLETE! Of course, complete or not, blog library will continue to grow over the years. Honestly, I feel very relieved about the fact that my own site now houses my greatest achievements with crazy stories to share, as new posts are written in a format of a memory tale . I’m hoping the world is going to lean towards Open Source more and more. What new blogs were added? Posts and project descriptions for Matcha Linux and Onlinja are out! I also remembered other successful projects I’m very proud of. One of them caused a snowball effect and started the biggest cross-class collaboration from students’ initiative my school has ever seen. I must mention that it was the first cross-class IT project, and heavily promoted by our school, so you might want to read about it here . If I like the theme, can I fork it? Yes! Like each and every one of my projects (like any other true open-source project) this is forkable, and even has instructions on how to make it truly yours. Check my site’s GitHub to learn more! Visit DoMax.lt and see how ideas or strangest situations turn into real projects!
Ships:
After hours of intense rebuilding DoMax.lt, which was left untouched for almost a year, I managed to make it rise from the dead! This isn’t your average, boring portfolio. Instead, I tried to house 12 unique projects and 14 exceptional blog posts that document my chaotic reality of building things. From the highs of creating Matcha Linux and the tactical board game Onlinja, to the brutal honesty of how corporate APIs killed EchoTuner, DoMax.lt captures just how wild can turning ideas into real life get. This site also vaults valuable lessons from my projects that flopped you can’t get anywhere else. The entire website is fully decoupled, lightning-fast, and 100% free, open-source and forkable via GitHub so you can start building yours too!...
|
1793271098.4186747
|
1793357498.4186747
|
|
35875
|
tundra by @pinetree182 | Stardance
|
pinetree182
|
2
|
21.0
|
205
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T01:39:49Z", "hours": 18.0, "multiplier": 11.42, "payout": 205, "blessing": "neutral", "text": "tundra OS i made a web OS called tundra. visually, it’s really similar to Serenity OS and it was a whole lot of fun to make. features lots of apps, like a browser, text editor, and file browser a working(ish) filesystem a whole dialog system 3d graphics elite references", "repo": "https://github.com/annaxiomm/tundra", "demo": "https://annaxiomm.github.io/tundra"}, {"ship_num": 2, "ts": "2026-07-17T08:46:49Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "tundra v0.1.0 (alpha) tundra is finally ready to release! it’s currently very much in its infancy and doesn’t have very many features but it meets the requirements of the ship and i’m proud of it! so far we have: multiple draggable windows that are instanceable and defined as classes in javascript (so you can open more than one of the same app!) a welcome message, notes app (which is really an editable changelog), and a nice assortment of images for you to look at a status bar with the date and a handy app drawer so you can access all (3 of) the cool apps on display! a beautiful font (cozette by the-moonwitch) i hope you all like it so far, and plenty more features will follow in the coming weeks", "repo": "https://github.com/annaxiomm/tundra", "demo": "https://annaxiomm.github.io/tundra"}]...
|
[{"post_id": 63300, "ts": "202 [{"post_id": 63300, "ts": "2026-09-07T01:36:33Z", "hours": 3.1278, "text": "devlog #12 - the end? (for now) this is going to be my last devlog before I ship tundra, i’m really proud of how far it’s come and the fact that i’ve actually managed to finish a project for once! I didn’t quite get to add everything I wanted but most of it is there text editor time! i added a real simple text editor that can save and load files from the “disk”. i don’t really have anything else to say about it rated D for dialogs in order for the text editor to work properly, I had to make save and open dialog boxes. these are basically an unholy frankenstein of the normal dialog box and the file browser app, and they work well enough object permanence using JSON and the world’s jankiest serialization/deserialization system I was able to save the user’s filesystem state to localStorage so that even of you reload or close the page, your precious writing will be preserved you’re getting the boot real operating systems don’t open straight to the desktop - theres a whole boot sequence that leads to this (and if you’re cool and use linux it’s all on display for you). inspired by @cooki ’s FPS-OS (go check it out it’s really cool) i added a boot screen that looks pretty alright I guess. visual imagery finally, I got around to adding icons for each app. they’re 16x16, made in aseprite over the course of about 10 minutes, and work just enough that I don’t need to redesign them constantly. next steps ship it!"}, {"post_id": 61451, "ts": "2026-09-04T11:45:40Z", "hours": 0.8858, "text": "devlog #11 - ctrl+alt+delete this is a bit of a shorter devlog since I basically only added one thing - a functioning shutdown sequence! first a little dialog pops up asking if you’re sure, and then the whole screen goes black and says “shutting down…”, finally followed by an elite reference (Progressbar95 players rise up!)"}, {"post_id": 57784, "ts": "2026-08-30T02:28:02Z", "hours": 3.5117, "text": "devlog #10 - new apps after like a month-long hiatus i thought that i ought to add a few more apps - this is meant to be somewhat useful after all! calculator this is a really basic calculator app, basically when you press a button it adds its value (like 2 or + or . ) to an expression, and when you hit the = button it evaluates the expression with eval() . yes, i know its not the safest but it works. colo(u)r picker this one is also really simple: every time you press a key on your keyboard, a new random colour is generated and the rgb and hex values are shown in the bottom. need i say more? file explorer once again, this is really basic. all it does is gets the contents of the current directory (i had to make a new fs function to return each path’s type as well) and then makes a new element for each path with an icon corresponding to what it is. there’s also a back button if you need to… well.. go back next steps file opening from the file explorer text editor more functions in the calculator / better calculator"}, {"post_id": 41048, "ts": "2026-08-05T00:17:34Z", "hours": 3.0744, "text": "devlog #9 - files! what’s an operating system if you can’t have files? so, i decided to write a basic filesystem for tundra. paired with a simple terminal and now tundra is actually kind of cool! the filesystem tundra uses a really simple filesystem model: there’s a File and a Directory class that both inherit from FSNode, Files have names and contents and Directories have names and children. tundra uses a traditional unix file layout (/home, /bin, /etc and so on) because its cool. the terminal i really wanted some way to navigate the filesystem but didn’t feel like implementing an entire file browser so I added a simple terminal. it has a few methods like writeln and readline which you can use. all the commands (including the shell!) are defined in their own classes, just like apps, which makes it really easy to add new ones. so far, i’ve added cd, ls, mkdir, touch, cat, and my own version of neofetch. next steps an actual file browser some more commands ANSI escape codes for colours a text editor to make files for the filesystem"}, {"post_id": 39219, "ts": "2026-08-02T01:30:03Z", "hours": 3.3094, "text": "devlog #8 - too many changes! my devlogs from here on are going to be getting a lot longer now because i’m really settling into the grind, so i’m going to try out a more structured format. dialogs! i implemented a whole dialog box system into caribou (the window manager). so far it only has confirm (cancel/ok) style dialogs but it’s modular so i’ll be sure to add plenty more in the future. dialogs return promises that resolve with a value when an action happens (like when the dialog is closed), and this can then be used to execute code. this all came about because i wanted to add fullscreen mode but apparently browsers don’t like it when you request fullscreen without user interaction so here we are! changelog changes (?) the changelog, as promised, pulls directly from github to ensure you always get the most up-to-date changes with minimal effort on my end ! it uses marked and DOMPurify to parse the CHANGELOG.md from the repo and to make sure you are personally secure from anyone who’s dumb enough to waste their time trying to attack tundra. preparing for themes soon, i’ll work on adding themes to tundra so i decided i’d make it a bit easier for myself by making every single value that might want to be changed in css a variable. this was excruciatingly painful but we got through it in the end (it took like 10 minutes max). also, the background is now loaded dynamically through js which will lead to custom backgrounds at some point (much to the dismay of my browser’s performance) next steps improve the dialog system and add more dialog types add a filesystem (very scary) add more apps add theming and changeable backgrounds"}, {"post_id": 36136, "ts": "2026-07-28T00:56:50Z", "hours": 1.6256, "text": "devlog #7 - now we’re getting somewhere! tundra is starting to take off! i’ve changed the look of the taskbar very slightly (there’s now more padding), and i’ve also revamped the appdrawer so that it looks cleaner (and more like SerenityOS). also, submenus! now the appdrawer can be more organised as I continue to add apps instead of turning into a wastebin of buttons. i deleted all of the original apps and have replaced them with (so far) an updated welcome/about (with wally, the derpy walrus who’s tundra’s new mascot), a proper changelog (eventually i’ll make it pull from github but for now it’s hardcoded), and a cube to test out threejs."}, {"post_id": 32283, "ts": "2026-07-21T11:04:31Z", "hours": 1.3792, "text": "devlog #6 - more taskbar stuff i decided that it’s probably a good idea to be able to see what apps you have open, so i implemented a little window list in the status bar. it’s pretty rudimentary - it just makes an element for each open window and updates any time a window is added or removed. eventually i’ll get around to adding window logos and context menus that let you close and minimise windows from the taskbar but that’s a bit advanced for the minute."}, {"post_id": 30070, "ts": "2026-07-17T11:10:55Z", "hours": 1.0528, "text": "devlog #5 - visual updates i decided i wanted to make tundra look a bit like serenityOS, so i modified the window header to include the distinctive red gradient. i also added a proper focusing system which required a decent rewrite of a portion of caribou (the wm). also, i worked on centralising the wm. previously, windows handled their own focusing and closing but since i’ve discovered customevents windows now request this behaviour from the wm. finally, windows now auto-focus when you open them!"}, {"post_id": 30022, "ts": "2026-07-17T08:30:14Z", "hours": 1.1878, "text": "devlog #4 - almost time to ship ! after much tedious work i added 2 other apps: a notes app that currently has a small TODO list and a changelog; and an image viewer that shows off a random image i’ve taken. i’ve also prettied the whole thing up a little bit by changing the font from [default] to Cozette, a nice cozy bitmap-ish font. finally, i added an app drawer so you can open all the (3) apps available in v0.1.0! i’m really looking forward to adding tons of new features and making it look super awesome!"}, {"post_id": 29369, "ts": "2026-07-16T08:39:15Z", "hours": 0.5478, "text": "devlog #3 - windows (again!) windows and apps are now instanced and defined purely in their own classes in javascript instead of being predefined in HTML and shown / hidden. i know it’s not strictly part of the mission for WebOS 1 but it makes me feel a bit better about myself AND it’ll make things a whole lot easier for me down the line. since apps are instanced, i can have as many welcomes as i want !"}, {"post_id": 29355, "ts": "2026-07-16T07:46:35Z", "hours": 0.9558, "text": "devlog #2 - windows i started working on the first iteration of caribou - tundra’s window manager (aka a window class and a list of open windows). so far, windows can be dragged around using some very janky freestyled code, and can also be closed (one of the can even be opened again !). it’s currently looking quite… webby , so next i’ll probably work on making it look a bit more personal (maybe a bit like my personal homepage??)"}, {"post_id": 29335, "ts": "2026-07-16T06:41:18Z", "hours": 0.5217, "text": "devlog #1 - let’s make an OS (sort of) ! building my own OS has been a dream of mine for a long, long time but i’ve never actually been able to make one before (because i know next to nothing about low-level programming). so imagine my reaction when i saw that i could get 50 stardust for making one? well, one small catch. it had to be a web-based OS. wait, is that really a catch though? its like a thousand times easier, and has just enough instant gratification for my short-form content-fried dopamine-addicted brain. so here we are. so far, tundra has a window and a status bar, and thats about it (also, the wallpaper is a photo i took down at the beach today !). i’m really looking forward to adding a ton more features to tundra in the future."}]...
|
Title: tundra by @pinetree182 | Stardance
Devlogs Title: tundra by @pinetree182 | Stardance
Devlogs:
devlog #1 - let’s make an OS (sort of) ! building my own OS has been a dream of mine for a long, long time but i’ve never actually been able to make one before (because i know next to nothing about low-level programming). so imagine my reaction when i saw that i could get 50 stardust for making one? well, one small catch. it had to be a web-based OS. wait, is that really a catch though? its like a thousand times easier, and has just enough instant gratification for my short-form content-fried dopamine-addicted brain. so here we are. so far, tundra has a window and a status bar, and thats about it (also, the wallpaper is a photo i took down at the beach today !). i’m really looking forward to adding a ton more features to tundra in the future.
devlog #2 - windows i started working on the first iteration of caribou - tundra’s window manager (aka a window class and a list of open windows). so far, windows can be dragged around using some very janky freestyled code, and can also be closed (one of the can even be opened again !). it’s currently looking quite… webby , so next i’ll probably work on making it look a bit more personal (maybe a bit like my personal homepage??)
devlog #3 - windows (again!) windows and apps are now instanced and defined purely in their own classes in javascript instead of being predefined in HTML and shown / hidden. i know it’s not strictly part of the mission for WebOS 1 but it makes me feel a bit better about myself AND it’ll make things a whole lot easier for me down the line. since apps are instanced, i can have as many welcomes as i want !
devlog #4 - almost time to ship ! after much tedious work i added 2 other apps: a notes app that currently has a small TODO list and a changelog; and an image viewer that shows off a random image i’ve taken. i’ve also prettied the whole thing up a little bit by changing the font from [default] to Cozette, a nice cozy bitmap-ish font. finally, i added an app drawer so you can open all the (3) apps available in v0.1.0! i’m really looking forward to adding tons of new features and making it look super awesome!
devlog #5 - visual updates i decided i wanted to make tundra look a bit like serenityOS, so i modified the window header to include the distinctive red gradient. i also added a proper focusing system which required a decent rewrite of a portion of caribou (the wm). also, i worked on centralising the wm. previously, windows handled their own focusing and closing but since i’ve discovered customevents windows now request this behaviour from the wm. finally, windows now auto-focus when you open them!
devlog #6 - more taskbar stuff i decided that it’s probably a good idea to be able to see what apps you have open, so i implemented a little window list in the status bar. it’s pretty rudimentary - it just makes an element for each open window and updates any time a window is added or removed. eventually i’ll get around to adding window logos and context menus that let you close and minimise windows from the taskbar but that’s a bit advanced for the minute.
devlog #7 - now we’re getting somewhere! tundra is starting to take off! i’ve changed the look of the taskbar very slightly (there’s now more padding), and i’ve also revamped the appdrawer so that it looks cleaner (and more like SerenityOS). also, submenus! now the appdrawer can be more organised as I continue to add apps instead of turning into a wastebin of buttons. i deleted all of the original apps and have replaced them with (so far) an updated welcome/about (with wally, the derpy walrus who’s tundra’s new mascot), a proper changelog (eventually i’ll make it pull from github but for now it’s hardcoded), and a cube to test out threejs.
devlog #8 - too many changes! my devlogs from here on are going to be getting a lot longer now because i’m really settling into the grind, so i’m going to try out a more structured format. dialogs! i implemented a whole dialog box system into caribou (the window manager). so far it only has confirm (cancel/ok) style dialogs but it’s modular so i’ll be sure to add plenty more in the future. dialogs return promises that resolve with a value when an action happens (like when the dialog is closed), and this can then be used to execute code. this all came about because i wanted to add fullscreen mode but apparently browsers don’t like it when you request fullscreen without user interaction so here we are! changelog changes (?) the changelog, as promised, pulls directly from github to ensure you always get the most up-to-date changes with minimal effort on my end ! it uses marked and DOMPurify to parse the CHANGELOG.md from the repo and to make sure you are personally secure from anyone who’s dumb enough to waste their time trying to attack tundra. preparing for themes soon, i’ll work on adding themes to tundra so i decided i’d make it a bit easier for myself by making every single value that might want to be changed in css a variable. this was excruciatingly painful but we got through it in the end (it took like 10 minutes max). also, the background is now loaded dynamically through js which will lead to custom backgrounds at some point (much to the dismay of my browser’s performance) next steps improve the dialog system and add more dialog types add a filesystem (very scary) add more apps add theming and changeable backgrounds
devlog #9 - files! what’s an operating system if you can’t have files? so, i decided to write a basic filesystem for tundra. paired with a simple terminal and now tundra is actually kind of cool! the filesystem tundra uses a really simple filesystem model: there’s a File and a Directory class that both inherit from FSNode, Files have names and contents and Directories have names and children. tundra uses a traditional unix file layout (/home, /bin, /etc and so on) because its cool. the terminal i really wanted some way to navigate the filesystem but didn’t feel like implementing an entire file browser so I added a simple terminal. it has a few methods like writeln and readline which you can use. all the commands (including the shell!) are defined in their own classes, just like apps, which makes it really easy to add new ones. so far, i’ve added cd, ls, mkdir, touch, cat, and my own version of neofetch. next steps an actual file browser some more commands ANSI escape codes for colours a text editor to make files for the filesystem
devlog #10 - new apps after like a month-long hiatus i thought that i ought to add a few more apps - this is meant to be somewhat useful after all! calculator this is a really basic calculator app, basically when you press a button it adds its value (like 2 or + or . ) to an expression, and when you hit the = button it evaluates the expression with eval() . yes, i know its not the safest but it works. colo(u)r picker this one is also really simple: every time you press a key on your keyboard, a new random colour is generated and the rgb and hex values are shown in the bottom. need i say more? file explorer once again, this is really basic. all it does is gets the contents of the current directory (i had to make a new fs function to return each path’s type as well) and then makes a new element for each path with an icon corresponding to what it is. there’s also a back button if you need to… well.. go back next steps file opening from the file explorer text editor more functions in the calculator / better calculator
devlog #11 - ctrl+alt+delete this is a bit of a shorter devlog since I basically only added one thing - a functioning shutdown sequence! first a little dialog pops up asking if you’re sure, and then the whole screen goes black and says “shutting down…”, finally followed by an elite reference (Progressbar95 players rise up!)
devlog #12 - the end? (for now) this is going to be my last devlog before I ship tundra, i’m really proud of how far it’s come and the fact that i’ve actually managed to finish a project for once! I didn’t quite get to add everything I wanted but most of it is there text editor time! i added a real simple text editor that can save and load files from the “disk”. i don’t really have anything else to say about it rated D for dialogs in order for the text editor to work properly, I had to make save and open dialog boxes. these are basically an unholy frankenstein of the normal dialog box and the file browser app, and they work well enough object permanence using JSON and the world’s jankiest serialization/deserialization system I was able to save the user’s filesystem state to localStorage so that even of you reload or close the page, your precious writing will be preserved you’re getting the boot real operating systems don’t open straight to the desktop - theres a whole boot sequence that leads to this (and if you’re cool and use linux it’s all on display for you). inspired by @cooki ’s FPS-OS (go check it out it’s really cool) i added a boot screen that looks pretty alright I guess. visual imagery finally, I got around to adding icons for each app. they’re 16x16, made in aseprite over the course of about 10 minutes, and work just enough that I don’t need to redesign them constantly. next steps ship it!
Ships:
tundra v0.1.0 (alpha) tundra is finally ready to release! it’s currently very much in its infancy and doesn’t have very many features but it meets the requirements of the ship and i’m proud of it! so far we have: multiple draggable windows that are instanceable and defined as classes in javascript (so you can open more than one of the same app!) a welcome message, notes app (which is really an editable changelog), and a nice assortment of images for you to look at a status bar with the date and a handy app drawer so you can access all (3 of) the cool apps on display! a beautiful font (cozette by the-moonwitch) i hope you all like it so far, and plenty more features will follow in the coming weeks
tundra OS i made a web OS called tundra. visually, it’s really similar to Serenity OS and it was a whole lot of fun to make. features lots of apps, like a browser, text editor, and file browser a working(ish) filesystem a whole dialog system 3d graphics elite references...
|
1793252901.417988
|
1793339301.417988
|
|
36238
|
DIY Solder Fume Extractor + Air Quality Sensor by DIY Solder Fume Extractor + Air Quality Sensor by @james-lian | Stardance...
|
james-lian
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-21T00:57:44Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a small hobbyist solder fume extractor complete with an air quality sensor for soldering applications. Features include: powered by a 12V DC power supply 0.91inch OLED SSD1306 LM2596-3.3 buck converter for 3V3 supply ENS160+AHT21 sensor to detect VOCs and eCO2 ESP-01S microcontroller custom 3d-printed casing 12V desk fan which pulls solder fumes through an activated carbon filter flip flop switch circuit + MOSFET to control the fan, flyback diode to prevent MOSFET damage A challenge that pushed the project’s completion date back was a manufacturing error that occurred on my PCB. The specific buck converter I ordered from JLCPCB assembly was the LM2596-3.3, but the first batch that was sent to me had the LM2596-ADJ, which output the default ~1.3V instead of 3V3. I only found out about this after soldering on both PCB boards, which meant I had wasted time, effort, and some good usable components which I failed to desolder.", "repo": "https://github.com/James-Lian/Solder-Fume-Extractor", "demo": ""}]...
|
[{"post_id": 71524, "ts": "202 [{"post_id": 71524, "ts": "2026-09-21T00:25:53Z", "hours": 3.2508, "text": "Devlog #7: Completion The replacement PCB board from JLCPCB arrived today, and I spent a couple hours resoldering all the components. Finally, it’s done!"}, {"post_id": 59947, "ts": "2026-09-02T00:32:00Z", "hours": 5.5417, "text": "Devlog #6: Getting throttled Attempting to complete my PCBs, and I’m going through it, fr. Fried transistors + attempted fixes After receiving my PCBs, I got to work to solder my components. I had ordered PCBA for any components I didn’t have, such as inductors, the barrel jack connection, etc., but I was planning to save money by hand-soldering components I DID already have, such as transistors and my entire MCU system. This also gave me the added benefit of testing these components beforehand, and it allowed me to go through several iterations of code on the ESP-01S. The first issue I encountered with hand-soldering was with soldering the tiny, microscopic transistor holes (it was my first time doing so). The copper pads for my PN2222 breadboard transistors are super close together, and with my shaky hands, I accidentally whiffed, put too much solder, and left a solder connection between all three pads. Whoops! I eventually managed to fix it with a solder sucker. But after soldering, I decided to test the transistors with a multimeter to check if they were damaged, and both transistors were duds. I probably spent too long trying to fix it with the soldering iron and ended up frying them both. After this, I attempted to salvage the project by desoldering some of the more expensive components from the board and using it on the second backup PCBA I ordered from JLCPCB. I managed to salvage the OLED screen, but while desoldering the ESP-01S, I broke off several pins, essentially leaving the chip unusable. I decided not to salvage the bigger chips (e.g. ESP-01S, ENS160+AHT21), and decided to just reorder some components instead for the second attempt. New attempt: flip-flop switch fix + MCU not working I managed to solder all components to the second PCB cleanly, without any hiccups. However, on trying my project out, I encountered two issues: The flip flop switch turns on the fan, but it doesn’t turn it off. The 3.3V MCU system (including the OLED, ESP-01S, and ENS160+AHT21 sensor) doesn’t seem to turn on. The first issue was relatively easy to fix. Turns out, I had forgotten to add a pull-up resistor near the bottom of the flip-flop switch, and thus my steering capacitors had no path to VCC to “refill” (reset) their charge after the initial button press. I quickly soldered a pull-up resistor to VCC to fix it. The second issue stumped me for a while. I found out that I had forgotten to connect pin 4 (EN) of the ESP-01S to 3V3, so I quickly soldered a connection, but it still wasn’t working. Eventually, I took a look with my multimeter and found the problem: my 3V3 logic chips were actually running on 1.23V for some reason. It turns out, JLCPCB had sent me PCBA’s with the WRONG BUCK CONVERTER. I had ordered an TDSEMIC LM2596S-3.3, which would normally work perfectly, but JLCPCB had sent me PCBA’s with TDSEMIC LM2596S-ADJ instead. I’ll have to either contact JLCPCB for a refund, or attempt to salvage the PCB myself by modding it. I’ve burnt enough allowance on this ;-; Below: desoldering fail, attempted fixes (2), close-up of LM2596S-ADJ vs what I actually ordered ( https://www.lcsc.com/product-detail/C42421958.html?s_z=n_q_C42421958&globalKeyword=C42421958 )"}, {"post_id": 54994, "ts": "2026-08-26T12:52:38Z", "hours": 5.3325, "text": "Devlog #5 CAD Modeling With the code and PCB done, I needed a frame to hold all of the hardware together. Therefore, I spent a couple hours designing two cases in Fusion360 - one to house the PCB, and one to house the fan and the carbon filter I was using. PCB Case This PCB case is a little different than the ones I’ve designed so far. For one, the MOSFET and the capacitor that arrived on the PCB assembly I ordered from JLCPCB were much larger than I’d imagined, so I needed to design holes in my casing to accommodate for their size. Additionally, the ENS160 + AHT21 sensor needs generous access to air in order to provide accurate readings. I couldn’t encase them in the casing entirely, so I needed several unusual holes in my design so as not to interfere with the placements on my PCB board. I ended up designing a snap-fit housing with two parts - top and bottom (my first time designing a snap-fit joint!). The top part has several holes to ensure enough spacing for PCB components such as the OLED screen and keyswitch. It’s not air tight, but I really only need it to keep the PCB isolated and make things more presentable. Fan Holder Case I also needed to model a CAD case for the desktop fan to hold it and the active carbon filter in place. The fan case itself is actually a very simple design - three separate “panels” held in place with 4 screws and heat inserts."}, {"post_id": 54243, "ts": "2026-08-25T04:02:06Z", "hours": 3.2061, "text": "Devlog #4 Finalizing MCU program I used the breadboard prototype I had from Devlog #1 to finalize a working version of the ENS160 + AHT21 sensor program on the ESP-01S. I use the Adafruit libraries for these components to extract their readings, and then display it on a scrolling background on my 0.91 inch OLED SSD1306. This program is the final step before I solder the remaining components onto my PCB, which conveniently arrived as I was on vacation. It displays the following information: Line 1: Temp (deg C), Temp (deg F), Humidity (relative %) Line 2: Air Quality Index (AQI), Total Volatile Organic Compounds (ppb - TVOC), eCO2 (ppm - estimated CO2)"}, {"post_id": 31068, "ts": "2026-07-19T05:01:26Z", "hours": 1.7156, "text": "Devlog #3 - PCB design Once I had the design finalized from the schematic, it was straightforward enough to convert it into a PCB. I spent some time rearranging components to try and use as little space as possible. I had to leave some extra space for the ENS160+AHT21 air quality sensor, as it doesn’t work without consistent exposure to air."}, {"post_id": 30977, "ts": "2026-07-19T00:12:45Z", "hours": 1.6228, "text": "Devlog #2 - schematic design After confirming that the ESP-01S was a viable microcontroller for this project, I continued with designing the schematic for the PCB. Power Management ESP-01S is a 3.3V native controller, and the ENS160+AHT21 and the I2C OLED both use 3.3V logic. If I plug my 12V DC adapter directly into the ESP-01S, I’ll fry all my MCU components. Thus, I’m using an LM2596 buck converter to step-down some of the charge to 3.3V. Air Quality Sensor + MCU This section contains the sensor components and MCU. The air quality sensors and the OLED both share the same SCL/SDA I2C communication pins, which we established was possible in the previous devlog. Flip-Flop Switch + MOSFET Since the pins on the ESP-01S are being used, I decided to try exploring other options to turn my fan ON/OFF. I decided to use a flip-flop switch circuit. This allows me to persistently alter the fan’s ON/OFF state by simply clicking one pushbutton. The flip-flop switch circuit is a bistable multivibrator. It has two stable states where it can output a persistent signal (either 0 or 1), thus why we say it can represent a single bit of information. One of the states (transistors) is connected to a MOSFET (STP55NF06L), a heavy-duty voltage-controlled component which handles heavy loads much better than a simple transistor. The MOSFET helps control the fan. I attached a flyback diode in parallel to the fan. Because a fan is fundamentally wire coiled around magnets (an inductor), when the flip-flop switch suddenly turns off, the magnetic field of the fan collapses, converting back into an extremely high-voltage electric signal that, if not protected against, could instantly fry my MOSFET. The flyback diode allows the current to loop back around through the inductor until it is harmlessly dissipated as heat. Power-On Circuit On its own, the flip-flop switch’s initial state is hard to control . It’s based on chance, and small manufacturing differences between identical resistors and capacitors used in the circuit. To ensure the flip-flop switch always initializes to an OFF state, I added a tiny 10nF capacitor to one of the transistors. This makes one of the transistors slightly slower, thus ensuring the other one will always “win” the race condition. Next, I’ll be designing the PCB and programming the ESP-01S!"}, {"post_id": 30435, "ts": "2026-07-17T23:44:14Z", "hours": 0.7667, "text": "Devlog #1 - breadboard prototype I’ve been soldering a lot more recently thanks to starting a variety of electronics projects, and I’m starting to feel the need to get a fume extractor and some sort of air quality sensor to monitor my workspace. After some consideration, I decided making my own fume extractor would be a fun project idea, and also a great way to use up some electronics components that I have lying around. Components To make this project, I ordered some cheap $6 12V cooling fans meant for PC setups. For the microcontroller, I’ll be using an ESP-01S, an ENS160+AHT21 (which can measure air quality and VOCs), and an I2C 0.91 inch OLED display, all components I already have. I spent some time desoldering the OLED display from an older PCB project to reuse it in this one. Breadboarding The ESP-01S is an incredibly small controller, with only two pins (GPIO0 and GPIO2) available as digital pins (apart from RX and TX, but I plan to use those for debugging). Since both the OLED and the ENS160+AHT21 are I2C components that communicate with Serial Data (SDA) and Serial Clock (SCL), theoretically these components could share GPIO0 and GPIO2 as SDA and SCL pins if they had different device addresses. However, to be sure, I breadboarded and flashed a quick program to output the addresses and confirm that I had three separate, unique identifiers. Now that I have this information, I’m ready to design the PCB next."}]...
|
Title: DIY Solder Fume Extractor + Air Quality Sen Title: DIY Solder Fume Extractor + Air Quality Sensor by @james-lian | Stardance
Devlogs:
Devlog #1 - breadboard prototype I’ve been soldering a lot more recently thanks to starting a variety of electronics projects, and I’m starting to feel the need to get a fume extractor and some sort of air quality sensor to monitor my workspace. After some consideration, I decided making my own fume extractor would be a fun project idea, and also a great way to use up some electronics components that I have lying around. Components To make this project, I ordered some cheap $6 12V cooling fans meant for PC setups. For the microcontroller, I’ll be using an ESP-01S, an ENS160+AHT21 (which can measure air quality and VOCs), and an I2C 0.91 inch OLED display, all components I already have. I spent some time desoldering the OLED display from an older PCB project to reuse it in this one. Breadboarding The ESP-01S is an incredibly small controller, with only two pins (GPIO0 and GPIO2) available as digital pins (apart from RX and TX, but I plan to use those for debugging). Since both the OLED and the ENS160+AHT21 are I2C components that communicate with Serial Data (SDA) and Serial Clock (SCL), theoretically these components could share GPIO0 and GPIO2 as SDA and SCL pins if they had different device addresses. However, to be sure, I breadboarded and flashed a quick program to output the addresses and confirm that I had three separate, unique identifiers. Now that I have this information, I’m ready to design the PCB next.
Devlog #2 - schematic design After confirming that the ESP-01S was a viable microcontroller for this project, I continued with designing the schematic for the PCB. Power Management ESP-01S is a 3.3V native controller, and the ENS160+AHT21 and the I2C OLED both use 3.3V logic. If I plug my 12V DC adapter directly into the ESP-01S, I’ll fry all my MCU components. Thus, I’m using an LM2596 buck converter to step-down some of the charge to 3.3V. Air Quality Sensor + MCU This section contains the sensor components and MCU. The air quality sensors and the OLED both share the same SCL/SDA I2C communication pins, which we established was possible in the previous devlog. Flip-Flop Switch + MOSFET Since the pins on the ESP-01S are being used, I decided to try exploring other options to turn my fan ON/OFF. I decided to use a flip-flop switch circuit. This allows me to persistently alter the fan’s ON/OFF state by simply clicking one pushbutton. The flip-flop switch circuit is a bistable multivibrator. It has two stable states where it can output a persistent signal (either 0 or 1), thus why we say it can represent a single bit of information. One of the states (transistors) is connected to a MOSFET (STP55NF06L), a heavy-duty voltage-controlled component which handles heavy loads much better than a simple transistor. The MOSFET helps control the fan. I attached a flyback diode in parallel to the fan. Because a fan is fundamentally wire coiled around magnets (an inductor), when the flip-flop switch suddenly turns off, the magnetic field of the fan collapses, converting back into an extremely high-voltage electric signal that, if not protected against, could instantly fry my MOSFET. The flyback diode allows the current to loop back around through the inductor until it is harmlessly dissipated as heat. Power-On Circuit On its own, the flip-flop switch’s initial state is hard to control . It’s based on chance, and small manufacturing differences between identical resistors and capacitors used in the circuit. To ensure the flip-flop switch always initializes to an OFF state, I added a tiny 10nF capacitor to one of the transistors. This makes one of the transistors slightly slower, thus ensuring the other one will always “win” the race condition. Next, I’ll be designing the PCB and programming the ESP-01S!
Devlog #3 - PCB design Once I had the design finalized from the schematic, it was straightforward enough to convert it into a PCB. I spent some time rearranging components to try and use as little space as possible. I had to leave some extra space for the ENS160+AHT21 air quality sensor, as it doesn’t work without consistent exposure to air.
Devlog #4 Finalizing MCU program I used the breadboard prototype I had from Devlog #1 to finalize a working version of the ENS160 + AHT21 sensor program on the ESP-01S. I use the Adafruit libraries for these components to extract their readings, and then display it on a scrolling background on my 0.91 inch OLED SSD1306. This program is the final step before I solder the remaining components onto my PCB, which conveniently arrived as I was on vacation. It displays the following information: Line 1: Temp (deg C), Temp (deg F), Humidity (relative %) Line 2: Air Quality Index (AQI), Total Volatile Organic Compounds (ppb - TVOC), eCO2 (ppm - estimated CO2)
Devlog #5 CAD Modeling With the code and PCB done, I needed a frame to hold all of the hardware together. Therefore, I spent a couple hours designing two cases in Fusion360 - one to house the PCB, and one to house the fan and the carbon filter I was using. PCB Case This PCB case is a little different than the ones I’ve designed so far. For one, the MOSFET and the capacitor that arrived on the PCB assembly I ordered from JLCPCB were much larger than I’d imagined, so I needed to design holes in my casing to accommodate for their size. Additionally, the ENS160 + AHT21 sensor needs generous access to air in order to provide accurate readings. I couldn’t encase them in the casing entirely, so I needed several unusual holes in my design so as not to interfere with the placements on my PCB board. I ended up designing a snap-fit housing with two parts - top and bottom (my first time designing a snap-fit joint!). The top part has several holes to ensure enough spacing for PCB components such as the OLED screen and keyswitch. It’s not air tight, but I really only need it to keep the PCB isolated and make things more presentable. Fan Holder Case I also needed to model a CAD case for the desktop fan to hold it and the active carbon filter in place. The fan case itself is actually a very simple design - three separate “panels” held in place with 4 screws and heat inserts.
Devlog #6: Getting throttled Attempting to complete my PCBs, and I’m going through it, fr. Fried transistors + attempted fixes After receiving my PCBs, I got to work to solder my components. I had ordered PCBA for any components I didn’t have, such as inductors, the barrel jack connection, etc., but I was planning to save money by hand-soldering components I DID already have, such as transistors and my entire MCU system. This also gave me the added benefit of testing these components beforehand, and it allowed me to go through several iterations of code on the ESP-01S. The first issue I encountered with hand-soldering was with soldering the tiny, microscopic transistor holes (it was my first time doing so). The copper pads for my PN2222 breadboard transistors are super close together, and with my shaky hands, I accidentally whiffed, put too much solder, and left a solder connection between all three pads. Whoops! I eventually managed to fix it with a solder sucker. But after soldering, I decided to test the transistors with a multimeter to check if they were damaged, and both transistors were duds. I probably spent too long trying to fix it with the soldering iron and ended up frying them both. After this, I attempted to salvage the project by desoldering some of the more expensive components from the board and using it on the second backup PCBA I ordered from JLCPCB. I managed to salvage the OLED screen, but while desoldering the ESP-01S, I broke off several pins, essentially leaving the chip unusable. I decided not to salvage the bigger chips (e.g. ESP-01S, ENS160+AHT21), and decided to just reorder some components instead for the second attempt. New attempt: flip-flop switch fix + MCU not working I managed to solder all components to the second PCB cleanly, without any hiccups. However, on trying my project out, I encountered two issues: The flip flop switch turns on the fan, but it doesn’t turn it off. The 3.3V MCU system (including the OLED, ESP-01S, and ENS160+AHT21 sensor) doesn’t seem to turn on. The first issue was relatively easy to fix. Turns out, I had forgotten to add a pull-up resistor near the bottom of the flip-flop switch, and thus my steering capacitors had no path to VCC to “refill” (reset) their charge after the initial button press. I quickly soldered a pull-up resistor to VCC to fix it. The second issue stumped me for a while. I found out that I had forgotten to connect pin 4 (EN) of the ESP-01S to 3V3, so I quickly soldered a connection, but it still wasn’t working. Eventually, I took a look with my multimeter and found the problem: my 3V3 logic chips were actually running on 1.23V for some reason. It turns out, JLCPCB had sent me PCBA’s with the WRONG BUCK CONVERTER. I had ordered an TDSEMIC LM2596S-3.3, which would normally work perfectly, but JLCPCB had sent me PCBA’s with TDSEMIC LM2596S-ADJ instead. I’ll have to either contact JLCPCB for a refund, or attempt to salvage the PCB myself by modding it. I’ve burnt enough allowance on this ;-; Below: desoldering fail, attempted fixes (2), close-up of LM2596S-ADJ vs what I actually ordered ( https://www.lcsc.com/product-detail/C42421958.html?s_z=n_q_C42421958&globalKeyword=C42421958 )
Devlog #7: Completion The replacement PCB board from JLCPCB arrived today, and I spent a couple hours resoldering all the components. Finally, it’s done!
Ships:
I made a small hobbyist solder fume extractor complete with an air quality sensor for soldering applications. Features include: powered by a 12V DC power supply 0.91inch OLED SSD1306 LM2596-3.3 buck converter for 3V3 supply ENS160+AHT21 sensor to detect VOCs and eCO2 ESP-01S microcontroller custom 3d-printed casing 12V desk fan which pulls solder fumes through an activated carbon filter flip flop switch circuit + MOSFET to control the fan, flyback diode to prevent MOSFET damage A challenge that pushed the project’s completion date back was a manufacturing error that occurred on my PCB. The specific buck converter I ordered from JLCPCB assembly was the LM2596-3.3, but the first batch that was sent to me had the LM2596-ADJ, which output the default ~1.3V instead of 3V3. I only found out about this after soldering on both PCB boards, which meant I had wasted time, effort, and some good usable components which I failed to desolder....
|
1793152277.519322
|
1793238677.519322
|
|
38578
|
Transcriber vid by @rnabilaltamis14 | Stardance
|
rnabilaltamis14
|
0
|
21.0
|
0
|
[]
|
[{"post_id": 37587, "ts": "202 [{"post_id": 37587, "ts": "2026-07-30T12:47:12Z", "hours": 5.0, "text": "Transcribervid: WIP hello this is finnaly a week project, ive been done building for the basic one (1.0) after some thoughts i think i should make a groq one after the fact that its free than fireworks, what do you think???"}, {"post_id": 36810, "ts": "2026-07-29T03:10:48Z", "hours": 16.0, "text": "WIP, need some debugging, and probably would make it into an app"}]...
|
Title: Transcriber vid by @rnabilaltamis14 | Stard Title: Transcriber vid by @rnabilaltamis14 | Stardance
Devlogs:
WIP, need some debugging, and probably would make it into an app
Transcribervid: WIP hello this is finnaly a week project, ive been done building for the basic one (1.0) after some thoughts i think i should make a groq one after the fact that its free than fireworks, what do you think???...
|
1792903667.4316475
|
1793767667.4316475
|
|
38958
|
TEMPO SURGE by @marygoat | Stardance
|
marygoat
|
3
|
21.0
|
246
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-23T20:03:49Z", "hours": 6.0, "multiplier": 12.39, "payout": 84, "blessing": "neutral", "text": "Tempo Surge A WarioWare like game where you have to complete minigames without losing lives to win! Controls WASD / Arrow keys to move Space / W / Up arrow to jump Mouse click to interact with things 1 2 3 on keyboard to press trumpet keys Q E on the bongos A B C D E F G for the memorization minigame Features 8 fast-paced minigames! Such as: Platformer - Grab the guitar picks as fast as possible Clicker - Collect all the music notes in time Click-Smasher - Tune your sound before time ends Swap Pieces - Swap the xylophone keys into place Click parallel buttons - String the harp as soon as you can Press keyboard numbers - Press the trumpet keys in the right order NEW ONES SINCE LAST SHIP: Memorization - Press the right letters in the right order of the notes that appear Press keyboard letters - Press the correct bongo in the right order All art assets used in game were made by me :) Hope you have fun playing Tempo Surge! AI USAGE: I used AI to help me debug some errors in the code as well as help me bring the fourth minigame to life, since I wasn’t sure on what the best way of adding a swap object system would look like.", "repo": "https://github.com/awesomesauce4646/wario-ware-game", "demo": "https://marygoat.itch.io/tempo-surge"}, {"ship_num": 2, "ts": "2026-08-13T07:10:48Z", "hours": 9.0, "multiplier": 17.96, "payout": 162, "blessing": "neutral", "text": "Tempo Surge, A WarioWare like game where you have to complete minigames without losing lives to win! It was pretty challenging coming up with minigame ideas that were creative and original, while also making sense for the music theme I had going on! I am really proud of my new minigames, I think they’re pretty engaging. I am also proud that I made the game a bit more polished and nicer to look at. To play, press try project down below and press run, or go to: https://marygoat.itch.io/tempo-surge to play! Controls WASD / Arrow keys to move Space to jump Mouse click to interact with things 1 2 3 on keyboard to press trumpet keys Features 6 fast-paced minigames! Such as: Platformer - Grab the guitar picks as fast as possible Clicker - Collect all the music notes in time Click-Smasher - Tune your sound before time ends Swap Pieces - Swap the xylophone keys into place Click parallel buttons - String the harp as soon as you can Press keyboard numbers - Press the trumpet keys in the right order Made in Godot and was made for the Stardance Hackclub program, with the project: Make a WarioWare game. Tempo Surge was also made in order to learn Godot and to learn how to make games and art. All art assets used in game were made by me :) More minigames might be added in the future, but the game seems to be in a good spot for now! Hope you have fun playing Tempo Surge! AI Usage I used AI to help me debug some errors in the code as well as help me bring the fourth minigame to life, since I wasn’t sure on what the best way of adding a swap object system would look like.", "repo": "https://github.com/awesomesauce4646/wario-ware-game", "demo": "https://marygoat.itch.io/tempo-surge"}, {"ship_num": 3, "ts": "2026-07-27T11:43:14Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Tempo Surge A game inspired off of WarioWare, where you must complete many minigames to win! Controls: WASD / Arrow keys to move Space to jump Mouse click to interact with things Features 3 fast minigames! Such as: Platformer - Grab the guitar picks as fast as possible Clicker - Collect all the music notes in time Click-Smasher - Tune your sound before time ends Made in Godot and was made for the Stardance Hackclub program, with the project: Make a WarioWare game. All art assets used in game were made by me. I will probably add more things in the game, as well as redesign some things that I didn’t really like but didn’t want to spend more time drawing. Hope you have fun playing Tempo Surge!", "repo": "https://github.com/awesomesauce4646/wario-ware-game", "demo": "https://marygoat.itch.io/tempo-surge"}]...
|
[{"post_id": 72779, "ts": "202 [{"post_id": 72779, "ts": "2026-09-23T18:47:30Z", "hours": 1.225, "text": "TEMPO SURGE DEVLOG: #17 MINIGAME 8: MEMORIZATION! okay, TECHNICALLY this is now the seventh minigame, i have swapped this minigame with the bongos so that the trumpet minigame and bongo minigame wouldnt be back to back, since i thought that was too similar of a mechanic to go back and forth. i have made a minigame where you must memorize the notes that are shown on the screen! you have one second to see em, then you must use your keyboard to type out what the notes were! it was finnicky trying to get each step to work, since it must be in order. you cant just press gadc and go through. after i got that to work, i had to overwrite the scenes so that their names would change. if i didnt overwrite, the level scene would not put the right level. think ima ship! also W stardance for getting extended!"}, {"post_id": 66205, "ts": "2026-09-11T21:42:40Z", "hours": 1.4608, "text": "TEMPO SURGE DEVLOG: #16 MINIGAME 7: BONGOS?! i have made a seventh minigame! it is really similar to my sixth minigame though, so i’ll probably switch this minigame to be one of the later minigames instead of being right after the sixth one, which is pressing down the trumpet keys in the way its highlighted. it was hard trying to reuse the sixth minigames code and convert it to a slightly different style for the bongos, but it worked out!"}, {"post_id": 63293, "ts": "2026-09-07T01:23:45Z", "hours": 1.7128, "text": "TEMPO SURGE DEVLOG: #16 MORE INSTRUCTIONS + TRANSITION EFFECT i have completed the remaining instruction pop ups that were missing from the rest of the minigames, and also added a fade-in / fade-out transition effect! its pretty basic and i dont know how to feel about it, but its there! it was really hard figuring out why everything went pitch black, and i thought i had lost all of my progress for a second lol. i figured out that the node being a canvaslayer caused it to go pitch black, so i modified it so itd only work when it had to transition scenes and stuff. im not sure what else to add… but i want to keep working on it. maybe a new minigame?"}, {"post_id": 57826, "ts": "2026-08-30T04:05:49Z", "hours": 1.245, "text": "TEMPO SURGE DEVLOG: #15 INSTRUCTIONS POP-UP alrighty, so after looking at my feedback, i decided to start with the instructions before a minigame. i have added a simple instruction box, with a button with the text “start” for whenever the player is ready to play. it was a bit difficult knowing how to tie in the button and make it so you can’t move the guitar while in the instructions page, but I found a good enough solution by adding a barrier that disappears on click. excited to improve this project!"}, {"post_id": 46170, "ts": "2026-08-13T06:16:45Z", "hours": 1.3028, "text": "redesigned entire game! i have made all of my assets into the pixel art style, and i think im ready to ship?? it took me a long time having to go over each asset and making the edges look crisp without any fuzzy pixels. i have six working minigames! i was wanting to add more, but… no ideas are coming to me and i also want to work on other projects! i can always just ship again lol. this has been SUCH a fun project to work on, and i have learned a lot about godot and art in the process of making this! i hope this brings you as much fun as it brought me!"}, {"post_id": 45620, "ts": "2026-08-12T07:08:56Z", "hours": 0.5292, "text": "redesign! ive redesigned the timer screen to have that pixelated art style, and i have also added instructions too all of my minigames just incase it was unclear on what you were supposed to be doing. i have also tweaked my sixth minigame so that when you play all four notes, you can have some time to spam some notes for fun, disabling the green highlights. the font has also changed to a pixeled one :)"}, {"post_id": 45036, "ts": "2026-08-11T06:13:36Z", "hours": 2.2761, "text": "trumpet playing! sixth minigame done! wowzies… ts took me a bit. this is the sixth minigame i have come up with, where you have to press on the selected keys with your keyboards to play the note. i really like how this turned out, but it took a bit to figure out how i wanted to make this. i went with the press down to play way since it made the most sense on how a trumpet works, and i thought itd be cool to have a functioning trumpet to play with in this minigame! it took me some problem solving to figure out how i wanted to layout the if functions for when two / one key(s) were pressed, but i managed in the end! :D (the fingerings ARENT correct for you trumpet enthusiasts…. i picked two notes that had NO fingerings… so i had to make sum up. sorry!)"}, {"post_id": 44375, "ts": "2026-08-10T02:50:09Z", "hours": 0.8714, "text": "string the harp… done??? okay im REALLY proud of this one. i have tried doing some proper pixel art… and i think its lowkey fire?? :D i wanna try to pixelate the whole game if possible now.. but that might take forever. ive designed the minigame, where you have to click the gray rectangles on the harp to string it. you must click buttons that are across form each other, otherwise it won’t work. this has to be my favorite minigame even though the script really didnt take that long, just a few booleans going from false to true."}, {"post_id": 44343, "ts": "2026-08-10T01:21:51Z", "hours": 0.3914, "text": "fifth minigame: string the harp! i came up with a minigame where you have to string a harp by clicking on two buttons. i might do more buttons later, but i have put only two buttons in for simplicity. i came up with this yesterday late at night so i was overthinking on how to do this… but really, all you gotta do is have two buttons and make a line appear once true, and repeat if you want more strings. i think this will be a nice addition, since harps need to be strung and such. i chose a harp cause… why not? its a pretty cool instrument! no visuals yet… but i will be making some soon :D i THOUGHT of making it a drag from one point to another… but uhhh thats a bit out of my skill level right now. i have searched it up but i got no clear answer or guide, but i might come back if i figure it out!"}, {"post_id": 43852, "ts": "2026-08-09T09:16:21Z", "hours": 1.0772, "text": "fourth minigame done! this took a lot of time thinking and figuring out how to do this… i was thinking it could be a drag and drop system but i found that too complicated, so then i thought of swapping the positions. i had to use some math to find the center of each piece and so that theyd be centered when swapped, and added a slight highlight to see what youre doing better. i used ai to help me figure out how to debug my swapping system, since it was taking a long time and i was getting pretty frustrated."}, {"post_id": 43754, "ts": "2026-08-09T05:30:03Z", "hours": 1.1892, "text": "minigame 4 start! came up with an idea for my fourth minigame! what i have in mind is that it’ll be a puzzle, where you have to put the xylophone parts in descending order, aka largest piece left to smallest piece right. im not sure how to script this though, so ill have to do some googling ! i am pretty excited for this last minigame though, and im planning on redesigning my third minigames background cause i think i chose some really ugly colors lol."}, {"post_id": 43675, "ts": "2026-08-09T02:28:00Z", "hours": 1.3725, "text": "adding options screen, music! i am starting to make the options scene, since it wasnt actually functional and only has a guitar png… but now i will make it so it toggles the music on and off! i have also added music to the game that loops, a retro game vibe. i have also made the third minigame more obvious, adding a “SPAM” text so that the user knows you have to spam click, as well as making the first minigame easier by adding more time since the only way you could beat it is if you had a perfect run, which could get frustrating."}, {"post_id": 35741, "ts": "2026-07-27T11:38:30Z", "hours": 0.3611, "text": "itch.io page up! the game is functional, so i have decided to export it to itch.io. exporting it was a bit tricky since i didn’t have web downloaded, but i was able to export it into the itch.io page and now it’s runnable! i think i’m going to ship it now, and keep working on it even after i have shipped. making all the assets and programming the minigames to work has been fun!"}, {"post_id": 35654, "ts": "2026-07-27T07:21:59Z", "hours": 1.6461, "text": "third minigame done! i have finished up my third minigame, where you have to press up or down depending if you’re sharp or flat (music tuning terms). i have also made a losing screen and winning screen. it was tricky figuring out what type of minigame i should make, but then i remembered that to play instruments, you gotta tune to sound good! i used the second minigame clicker script to help guide me on how to make this third minigame, with some googling. i think this project has gone way better than i expected, and im excited for when i ship it!"}, {"post_id": 35082, "ts": "2026-07-26T09:01:34Z", "hours": 0.5214, "text": "clicker minigame! finished up the clicker minigame scene, going onto the win / lose screens now. i was able to put in the scripts so that once clicked, the music note will disappear and will count towards if the player won the minigame or not. it was a bit funky trying to put in the script and connecting the signals properly, but i managed to do it! i like how the game is going so far, i have learned a lot about godot :)"}, {"post_id": 34487, "ts": "2026-07-25T07:51:13Z", "hours": 1.2006, "text": "finally added guitar picks :) designed some funky guitar picks that are collectable once the guitar player collides with it. i also programmed an animation so they float. i really like how the guitar picks contrast a lot, making them easy to see. i struggled a lot with figuring out why my script couldn’t find the timer node, since i (thought i) had followed the guide exactly. my mistake was that i didn’t label the text (which had to be named timer so the script could find it), so “timer” never actually existed. i consulted claude a bit to help me debug this issue. this helped me learn how to debug script problems and a good reminder to check what things are named so far, this has been pretty fun! my godot DID randomly crash, which freaked me out so much, but nothing was lost! remember to ctrl + s!"}, {"post_id": 34430, "ts": "2026-07-25T04:08:27Z", "hours": 1.8572, "text": "started on my first minigame! it got some platforms, and the player is able to jump on each one of them. it was hard placing each platform in a good height where the player could jump on it with ease, while also making an engaging parkour setup where it had some sort of challenge that was fun to play through. i learned a lot about how different shapes for collisions worked, like how the oval collision that i chose for my player allows it to climb up the edges of each platform, which i thought was a nice feature!"}, {"post_id": 33872, "ts": "2026-07-24T04:24:23Z", "hours": 0.4897, "text": "started a warioware inspired game! so far, i have a format for a main menu done and the buttons lead to different scenes. the trickiest part was trying to set godot up with github, and also the tracking time plugin. i had to put the super wakatime addons inside the project folder manually to fix it. once i got that figured out and working, things have been simple. the guide has been a huge help on starting this!"}]...
|
Title: TEMPO SURGE by @marygoat | Stardance
Devlo Title: TEMPO SURGE by @marygoat | Stardance
Devlogs:
started a warioware inspired game! so far, i have a format for a main menu done and the buttons lead to different scenes. the trickiest part was trying to set godot up with github, and also the tracking time plugin. i had to put the super wakatime addons inside the project folder manually to fix it. once i got that figured out and working, things have been simple. the guide has been a huge help on starting this!
started on my first minigame! it got some platforms, and the player is able to jump on each one of them. it was hard placing each platform in a good height where the player could jump on it with ease, while also making an engaging parkour setup where it had some sort of challenge that was fun to play through. i learned a lot about how different shapes for collisions worked, like how the oval collision that i chose for my player allows it to climb up the edges of each platform, which i thought was a nice feature!
finally added guitar picks :) designed some funky guitar picks that are collectable once the guitar player collides with it. i also programmed an animation so they float. i really like how the guitar picks contrast a lot, making them easy to see. i struggled a lot with figuring out why my script couldn’t find the timer node, since i (thought i) had followed the guide exactly. my mistake was that i didn’t label the text (which had to be named timer so the script could find it), so “timer” never actually existed. i consulted claude a bit to help me debug this issue. this helped me learn how to debug script problems and a good reminder to check what things are named so far, this has been pretty fun! my godot DID randomly crash, which freaked me out so much, but nothing was lost! remember to ctrl + s!
clicker minigame! finished up the clicker minigame scene, going onto the win / lose screens now. i was able to put in the scripts so that once clicked, the music note will disappear and will count towards if the player won the minigame or not. it was a bit funky trying to put in the script and connecting the signals properly, but i managed to do it! i like how the game is going so far, i have learned a lot about godot :)
third minigame done! i have finished up my third minigame, where you have to press up or down depending if you’re sharp or flat (music tuning terms). i have also made a losing screen and winning screen. it was tricky figuring out what type of minigame i should make, but then i remembered that to play instruments, you gotta tune to sound good! i used the second minigame clicker script to help guide me on how to make this third minigame, with some googling. i think this project has gone way better than i expected, and im excited for when i ship it!
itch.io page up! the game is functional, so i have decided to export it to itch.io. exporting it was a bit tricky since i didn’t have web downloaded, but i was able to export it into the itch.io page and now it’s runnable! i think i’m going to ship it now, and keep working on it even after i have shipped. making all the assets and programming the minigames to work has been fun!
adding options screen, music! i am starting to make the options scene, since it wasnt actually functional and only has a guitar png… but now i will make it so it toggles the music on and off! i have also added music to the game that loops, a retro game vibe. i have also made the third minigame more obvious, adding a “SPAM” text so that the user knows you have to spam click, as well as making the first minigame easier by adding more time since the only way you could beat it is if you had a perfect run, which could get frustrating.
minigame 4 start! came up with an idea for my fourth minigame! what i have in mind is that it’ll be a puzzle, where you have to put the xylophone parts in descending order, aka largest piece left to smallest piece right. im not sure how to script this though, so ill have to do some googling ! i am pretty excited for this last minigame though, and im planning on redesigning my third minigames background cause i think i chose some really ugly colors lol.
fourth minigame done! this took a lot of time thinking and figuring out how to do this… i was thinking it could be a drag and drop system but i found that too complicated, so then i thought of swapping the positions. i had to use some math to find the center of each piece and so that theyd be centered when swapped, and added a slight highlight to see what youre doing better. i used ai to help me figure out how to debug my swapping system, since it was taking a long time and i was getting pretty frustrated.
fifth minigame: string the harp! i came up with a minigame where you have to string a harp by clicking on two buttons. i might do more buttons later, but i have put only two buttons in for simplicity. i came up with this yesterday late at night so i was overthinking on how to do this… but really, all you gotta do is have two buttons and make a line appear once true, and repeat if you want more strings. i think this will be a nice addition, since harps need to be strung and such. i chose a harp cause… why not? its a pretty cool instrument! no visuals yet… but i will be making some soon :D i THOUGHT of making it a drag from one point to another… but uhhh thats a bit out of my skill level right now. i have searched it up but i got no clear answer or guide, but i might come back if i figure it out!
string the harp… done??? okay im REALLY proud of this one. i have tried doing some proper pixel art… and i think its lowkey fire?? :D i wanna try to pixelate the whole game if possible now.. but that might take forever. ive designed the minigame, where you have to click the gray rectangles on the harp to string it. you must click buttons that are across form each other, otherwise it won’t work. this has to be my favorite minigame even though the script really didnt take that long, just a few booleans going from false to true.
trumpet playing! sixth minigame done! wowzies… ts took me a bit. this is the sixth minigame i have come up with, where you have to press on the selected keys with your keyboards to play the note. i really like how this turned out, but it took a bit to figure out how i wanted to make this. i went with the press down to play way since it made the most sense on how a trumpet works, and i thought itd be cool to have a functioning trumpet to play with in this minigame! it took me some problem solving to figure out how i wanted to layout the if functions for when two / one key(s) were pressed, but i managed in the end! :D (the fingerings ARENT correct for you trumpet enthusiasts…. i picked two notes that had NO fingerings… so i had to make sum up. sorry!)
redesign! ive redesigned the timer screen to have that pixelated art style, and i have also added instructions too all of my minigames just incase it was unclear on what you were supposed to be doing. i have also tweaked my sixth minigame so that when you play all four notes, you can have some time to spam some notes for fun, disabling the green highlights. the font has also changed to a pixeled one :)
redesigned entire game! i have made all of my assets into the pixel art style, and i think im ready to ship?? it took me a long time having to go over each asset and making the edges look crisp without any fuzzy pixels. i have six working minigames! i was wanting to add more, but… no ideas are coming to me and i also want to work on other projects! i can always just ship again lol. this has been SUCH a fun project to work on, and i have learned a lot about godot and art in the process of making this! i hope this brings you as much fun as it brought me!
TEMPO SURGE DEVLOG: #15 INSTRUCTIONS POP-UP alrighty, so after looking at my feedback, i decided to start with the instructions before a minigame. i have added a simple instruction box, with a button with the text “start” for whenever the player is ready to play. it was a bit difficult knowing how to tie in the button and make it so you can’t move the guitar while in the instructions page, but I found a good enough solution by adding a barrier that disappears on click. excited to improve this project!
TEMPO SURGE DEVLOG: #16 MORE INSTRUCTIONS + TRANSITION EFFECT i have completed the remaining instruction pop ups that were missing from the rest of the minigames, and also added a fade-in / fade-out transition effect! its pretty basic and i dont know how to feel about it, but its there! it was really hard figuring out why everything went pitch black, and i thought i had lost all of my progress for a second lol. i figured out that the node being a canvaslayer caused it to go pitch black, so i modified it so itd only work when it had to transition scenes and stuff. im not sure what else to add… but i want to keep working on it. maybe a new minigame?
TEMPO SURGE DEVLOG: #16 MINIGAME 7: BONGOS?! i have made a seventh minigame! it is really similar to my sixth minigame though, so i’ll probably switch this minigame to be one of the later minigames instead of being right after the sixth one, which is pressing down the trumpet keys in the way its highlighted. it was hard trying to reuse the sixth minigames code and convert it to a slightly different style for the bongos, but it worked out!
TEMPO SURGE DEVLOG: #17 MINIGAME 8: MEMORIZATION! okay, TECHNICALLY this is now the seventh minigame, i have swapped this minigame with the bongos so that the trumpet minigame and bongo minigame wouldnt be back to back, since i thought that was too similar of a mechanic to go back and forth. i have made a minigame where you must memorize the notes that are shown on the screen! you have one second to see em, then you must use your keyboard to type out what the notes were! it was finnicky trying to get each step to work, since it must be in order. you cant just press gadc and go through. after i got that to work, i had to overwrite the scenes so that their names would change. if i didnt overwrite, the level scene would not put the right level. think ima ship! also W stardance for getting extended!
Ships:
Tempo Surge A game inspired off of WarioWare, where you must complete many minigames to win! Controls: WASD / Arrow keys to move Space to jump Mouse click to interact with things Features 3 fast minigames! Such as: Platformer - Grab the guitar picks as fast as possible Clicker - Collect all the music notes in time Click-Smasher - Tune your sound before time ends Made in Godot and was made for the Stardance Hackclub program, with the project: Make a WarioWare game. All art assets used in game were made by me. I will probably add more things in the game, as well as redesign some things that I didn’t really like but didn’t want to spend more time drawing. Hope you have fun playing Tempo Surge!
Tempo Surge, A WarioWare like game where you have to complete minigames without losing lives to win! It was pretty challenging coming up with minigame ideas that were creative and original, while also making sense for the music theme I had going on! I am really proud of my new minigames, I think they’re pretty engaging. I am also proud that I made the game a bit more polished and nicer to look at. To play, press try project down below and press run, or go to: https://marygoat.itch.io/tempo-surge to play! Controls WASD / Arrow keys to move Space to jump Mouse click to interact with things 1 2 3 on keyboard to press trumpet keys Features 6 fast-paced minigames! Such as: Platformer - Grab the guitar picks as fast as possible Clicker - Collect all the music notes in time Click-Smasher - Tune your sound before time ends Swap Pieces - Swap the xylophone keys into place Click parallel buttons - String the harp as soon as you can Press keyboard numbers - Press the trumpet keys in the right order Made in Godot and was made for the Stardance Hackclub program, with the project: Make a WarioWare game. Tempo Surge was also made in order to learn Godot and to learn how to make games and art. All art assets used in game were made by me :) More minigames might be added in the future, but the game seems to be in a good spot for now! Hope you have fun playing Tempo Surge! AI Usage I used AI to help me debug some errors in the code as well as help me bring the fourth minigame to life, since I wasn’t sure on what the best way of adding a swap object system would look like.
Tempo Surge A WarioWare like game where you have to complete minigames without losing lives to win! Controls WASD / Arrow keys to move Space / W / Up arrow to jump Mouse click to interact with things 1 2 3 on keyboard to press trumpet keys Q E on the bongos A B C D E F G for the memorization minigame Features 8 fast-paced minigames! Such as: Platformer - Grab the guitar picks as fast as possible Clicker - Collect all the music notes in time Click-Smasher - Tune your sound before time ends Swap Pieces - Swap the xylophone keys into place Click parallel buttons - String the harp as soon as you can Press keyboard numbers - Press the trumpet keys in the right order NEW ONES SINCE LAST SHIP: Memorization - Press the right letters in the right order of the notes that appear Press keyboard letters - Press the correct bongo in the right order All art assets used in game were made by me :) Hope you have fun playing Tempo Surge! AI USAGE: I used AI to help me debug some errors in the code as well as help me bring the fourth minigame to life, since I wasn’t sure on what the best way of adding a swap object system would look like....
|
1793289015.9145784
|
1793375415.9145784
|
|
39294
|
Projectile_Motion by @sukhbir | Stardance
|
sukhbir
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-28T12:03:51Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Projectile motion model + research. Started from a simple projectile motion model in a vacuum which uses motion equations to graphically display the 2d trajectory of a projectile. Slowly, it was built up to a realistic model with quadratic drag, variable environments (Earth, Moon and Mars, with an exponential atmosphere), and headwind/tailwind. The model itself is built on 3 methods; eulers, heuns and Runge-kutta 4th order method. Once the main model was completed, tests were ran using Monte Carle method and further analysis was conducted and then results displayed graphically( including heatmap).", "repo": "https://github.com/Suk-1708/Projectile-Motion", "demo": "https://colab.research.google.com/drive/1eYY1QbhY_FIo-fFi9UDIiDyLUySK4DRM?usp=sharing"}]...
|
[{"post_id": 75678, "ts": "202 [{"post_id": 75678, "ts": "2026-09-30T18:40:12Z", "hours": 0.935, "text": "Completed a Heatmap and collected some data on the programs speed. The heatmap creates a grid of 50 x 50,angle x speed, and represents them using different colours to make it more easier to spot patterns. At each grid, there is one combination of speed and angle. E.g. 50m/s at 12 degrees, the colour shows the projectile range output from these inputs. Yellow represents long range,(as seen on the right of the image). We can clearly see the region at which the range is maximised( range grows with speed). Since drag is also involved in this, we can see that every speed has a omptimised angle which gives it the max range. IF this were to have no drag, all speeds would be optimised at 45 degrees. I also plotted a graph of optimal angle and speed, whichs hows which angle gives the maximised range at a certain speed. The graph shows that as speed increases, drag increases and so the optimum angle moves away from 45 degrees(the optimum with no drag). Its not a smooth curve due to background noise due to tolerance not being exact. The final table shows some tests i did which recorded the time the heatmap took to plot, there were few anomolies such as 50x50 one, which doubled from its First try ~60s. This is mainly due to background variance, such as other softwares running on my pc, which are using my cpu."}, {"post_id": 62342, "ts": "2026-09-05T17:44:56Z", "hours": 0.8589, "text": "Monte carlo implementation. Running the simulation over random values of inital velocity and angle and height, to display the probabilities of different range values. This shows how likely the projectile will land at a certain area, which can be set as an target. This is important since projectile motion is never the same, even with same parameters, practically, it will not land exactly at the same spot, mainly because of shifting environments such as air resistance. So calculating ranges for different inital parameters(close to a certain mean) helps identify where the projectile may land(never 100% certain)"}, {"post_id": 58987, "ts": "2026-08-31T15:46:24Z", "hours": 2.0967, "text": "Succeeded in making a optimial angle calculator, which calculates the lowest possible angle to horizontal teh projectile should make to reach a target(a distance away) within some tolerance, travelling at a known inital velocity. . I then decided to plot a graph of optimal angle with max range. I also plotted a graph of speed against target/ranges. I used targets 30m, 60m, 45m, 90m, and calculated the lowest possible velocity and the angle which causes projectile to hit the target within tolerance. Originally, I though to loop through each value and try out combinations, which resulted in a very slow program, since the rk4 function was being called over 10000 times, given each call also had a dt = 0.01s, it took around 200s just to output the optimum angle. After that, I switched to programming a binary + tenary search which solved it in much quicker time <25s. To speed it up even more, I used my adaptive time model that i created earlier, this reduced the fixed dt= 0.01, reducing the total number of cycles needed to scan through whole motion"}, {"post_id": 53092, "ts": "2026-08-23T15:03:10Z", "hours": 0.9442, "text": "Tried to show the emperical order of the 3 methods with no drag, but only euler gave me its correct order (1). Heun and RK4 were identical as expected in a vacuum, they had order of 0.93. I researched the reaosn why it was not 2, and found that the landing-point linear interpolation error was the cause of it. In the graph you can see how the error decreases with lower dt, and increases as dt increases. Expected."}, {"post_id": 51714, "ts": "2026-08-21T15:23:15Z", "hours": 1.5567, "text": "Added adaptive time, so dt shortens for regions where more information is available/lots of change, but increases in regions where less information is available/lack of change. Plotted 2 graphs showing adaptive time, one shows the projectile trajectory with dt shown/marked. YOu can see its not constant like the previous ones. Anohter graph showing clearly how much the time step changes. It works on growth factors and decay factors(depending on error size). Last two graph show KE, PE and Total energy of the projectile with drag and no drag, showcasing that energy is dissipated to the surrounding with drag ( as heat). With no drag, total energy remains constant(graph shows a partial straight line due to error build up of numerical method over 7 minutes and overshooting the ground inaccuracies.)"}, {"post_id": 51024, "ts": "2026-08-20T14:47:20Z", "hours": 1.4217, "text": "Added wind to my model. Since wind affects only horziontal componenet in this case, the two winds were relatively easy to integrate into the acceleration function. Here are the graphs showing the wind in effect, when Projectile is at 45m/s, angle of 45 to horziontal and under gravitational acceleration of 9.81. Unfortunately I was not able to add the Cross wind feature which I wanted to add. It involved adding a z-axis, since cross wind hits projectile perpendicularly. I am running low on time, this project is only supposed to run during holidays before school starts."}, {"post_id": 48964, "ts": "2026-08-17T15:23:50Z", "hours": 1.2231, "text": "I decided to implement my drag rk4 model on earth, mars and the moon. This part was mainly integrating a system which uses different gravity values and air density values for different planets(which i got off google), into the rk4 model that i made previously. Due to the moon having 0 air density, the model predicted a graph with no drag, identical to the anaylitical curve in a vacuum. For mars, I learnt that the surface has a 11km thick layer of co2, which decreases with altitude(a decay function). I also included this to vary the drag for different altitude for the mars model. Here i have compared the 3 models, with same initial parameters. In the 2nd graph, Im only comparing mars and earth to see how big of an effect drag has on the projectile."}, {"post_id": 47526, "ts": "2026-08-15T14:21:04Z", "hours": 1.1311, "text": "Found few bugs in my program when i enabled input parameters. BEfore I had it set to a constant for ease. Once i changed the inputs, the Eulers method seemed to perform better than heun, which shouldnt be the case. I managed to find a bug in my Heun function(acceleration wasnt being updated in each turn), and now it works fine."}, {"post_id": 46907, "ts": "2026-08-14T13:29:50Z", "hours": 5.1086, "text": "Completed implementation of Drag into my the 3 models. I used quadratic drag with the projectile being modelled as an sphere representing an apple. I tried my best to get the actual cross sectional area and the coefficient of drag of an average apple. Mass density i collected off google. Using the drag function that i made(implements quadratic drag formula), I calculated the acceleration components of the projectile. My main purpose was to show clearly that RK4 method is much more accurate with drag as compared to heun or euler’s method. AFter implementing drag and calculating acceleration at each stage in each method, i sketched few graphs using matplotlib. First graph was a simple trajectory graph of all the methods. I used RK4 method with a very small dt (1e-5), as an reference/analytical curve. After this i decided to plot the error curve between RK4 and heun method, i could clearly see that the two methods start to diverge with drag. Highest difference is when the velocity is at its maximum(largest drag), and the lowest difference is when velocity is very small/0, which means drag is almost 0. This gives similar results to the previous model with no drag(in which both heun and rk4 were replicas of one another/identical). Finally i did few plots of the methods with different time steps, and you can clearly see 0.5s is too big of a dt and ends up overshooting by a large amount. Finally, to clearly showcase the difference in empirical order, I decided to plot a range difference/error curve with both log and non-log axis. This range difference was calculated using the analytical curve. From thsi we can see that rk4 gives the lowest error, then followed by heun and finally euler, which gives the most error, highlighting their empirical order. Unfortunately, i did not manage to calculate the precise emprical order(through gradient) due to interpolation error at the landing boundary interfering with the fit."}, {"post_id": 40882, "ts": "2026-08-04T18:02:21Z", "hours": 2.7533, "text": "Just finished the implementation of RK4 method to my vacuum projectile motion. Since acceleration is constant, the RK4 method is under utilized, and so produces a exact replica of the heun graph. This is to be expected since constant acceleration leads to RK2 and RK3 being the same quantity, and therefore the formula simply becomes heun’s method. I plotted two graphs, one was the trajectory of the 3 methods, and you can clearly see euler’s method starts to drift away slowly from the heun and RK4 curve. This is even more clear in the error graph with log axis. The large curve of the euler’s error shows how quickly the error accumulates, as compared to the rough curve of the heun and RK4 method. This roughness is noise caused by the program’s mathematical rounding limits. The error is so small that the program is not able to properly round it. (floating point arithmetic noise). AFter this, I will most likely be implementing drag."}, {"post_id": 39585, "ts": "2026-08-02T17:38:27Z", "hours": 2.2019, "text": "I have just finished implementing Heun’s method which builds on Euler’s First order method. Rather than using the velocity of the previous time step, it averages the velocity of the previous and the current time step, and uses it to calculate the y displacement. Similar to my previous log, I made 5 main graphs. The first graph(Heun Step size comparison) shows how the Y value varies with different time step values. 0.5s produces the lowest resolution and hence the blocky line rather than a smooth curve. The next 4 graphs showcase the trajectory of the object analytically calculated using motion equations vs using Heun’s method. The last two graphs portray the error this method produces compared to the time/dt. This error is almost negligible and is mainly caused by the low sampling resolution rather than the method’s inaccuracy. This clearly highlights how much better performing this method is compared to Euler’s method."}, {"post_id": 38362, "ts": "2026-07-31T18:22:12Z", "hours": 0.5414, "text": "Finished Part 3 of my Project. Here are the results for Part 1 - 3. Part 1 was simple simulation/graphical display of a projectile motion with inputted parameters such as inital velocity, acceleration, angle with the xaxis. Display was shown in both XvsY and Velocity-Time graph. Part 2 and 3 showcase Euler’s First order method. Graph of different time steps and how they differ from the ‘analytical’/projectile motion in a vacuum. Picture 3, shows 4 different graphs. Last graph shows how the error increase in max height changes with time(linearly). Next Part will consist of Heun’s method/Improved Euler’s method."}]...
|
Title: Projectile_Motion by @sukhbir | Stardance
Title: Projectile_Motion by @sukhbir | Stardance
Devlogs:
Finished Part 3 of my Project. Here are the results for Part 1 - 3. Part 1 was simple simulation/graphical display of a projectile motion with inputted parameters such as inital velocity, acceleration, angle with the xaxis. Display was shown in both XvsY and Velocity-Time graph. Part 2 and 3 showcase Euler’s First order method. Graph of different time steps and how they differ from the ‘analytical’/projectile motion in a vacuum. Picture 3, shows 4 different graphs. Last graph shows how the error increase in max height changes with time(linearly). Next Part will consist of Heun’s method/Improved Euler’s method.
I have just finished implementing Heun’s method which builds on Euler’s First order method. Rather than using the velocity of the previous time step, it averages the velocity of the previous and the current time step, and uses it to calculate the y displacement. Similar to my previous log, I made 5 main graphs. The first graph(Heun Step size comparison) shows how the Y value varies with different time step values. 0.5s produces the lowest resolution and hence the blocky line rather than a smooth curve. The next 4 graphs showcase the trajectory of the object analytically calculated using motion equations vs using Heun’s method. The last two graphs portray the error this method produces compared to the time/dt. This error is almost negligible and is mainly caused by the low sampling resolution rather than the method’s inaccuracy. This clearly highlights how much better performing this method is compared to Euler’s method.
Just finished the implementation of RK4 method to my vacuum projectile motion. Since acceleration is constant, the RK4 method is under utilized, and so produces a exact replica of the heun graph. This is to be expected since constant acceleration leads to RK2 and RK3 being the same quantity, and therefore the formula simply becomes heun’s method. I plotted two graphs, one was the trajectory of the 3 methods, and you can clearly see euler’s method starts to drift away slowly from the heun and RK4 curve. This is even more clear in the error graph with log axis. The large curve of the euler’s error shows how quickly the error accumulates, as compared to the rough curve of the heun and RK4 method. This roughness is noise caused by the program’s mathematical rounding limits. The error is so small that the program is not able to properly round it. (floating point arithmetic noise). AFter this, I will most likely be implementing drag.
Completed implementation of Drag into my the 3 models. I used quadratic drag with the projectile being modelled as an sphere representing an apple. I tried my best to get the actual cross sectional area and the coefficient of drag of an average apple. Mass density i collected off google. Using the drag function that i made(implements quadratic drag formula), I calculated the acceleration components of the projectile. My main purpose was to show clearly that RK4 method is much more accurate with drag as compared to heun or euler’s method. AFter implementing drag and calculating acceleration at each stage in each method, i sketched few graphs using matplotlib. First graph was a simple trajectory graph of all the methods. I used RK4 method with a very small dt (1e-5), as an reference/analytical curve. After this i decided to plot the error curve between RK4 and heun method, i could clearly see that the two methods start to diverge with drag. Highest difference is when the velocity is at its maximum(largest drag), and the lowest difference is when velocity is very small/0, which means drag is almost 0. This gives similar results to the previous model with no drag(in which both heun and rk4 were replicas of one another/identical). Finally i did few plots of the methods with different time steps, and you can clearly see 0.5s is too big of a dt and ends up overshooting by a large amount. Finally, to clearly showcase the difference in empirical order, I decided to plot a range difference/error curve with both log and non-log axis. This range difference was calculated using the analytical curve. From thsi we can see that rk4 gives the lowest error, then followed by heun and finally euler, which gives the most error, highlighting their empirical order. Unfortunately, i did not manage to calculate the precise emprical order(through gradient) due to interpolation error at the landing boundary interfering with the fit.
Found few bugs in my program when i enabled input parameters. BEfore I had it set to a constant for ease. Once i changed the inputs, the Eulers method seemed to perform better than heun, which shouldnt be the case. I managed to find a bug in my Heun function(acceleration wasnt being updated in each turn), and now it works fine.
I decided to implement my drag rk4 model on earth, mars and the moon. This part was mainly integrating a system which uses different gravity values and air density values for different planets(which i got off google), into the rk4 model that i made previously. Due to the moon having 0 air density, the model predicted a graph with no drag, identical to the anaylitical curve in a vacuum. For mars, I learnt that the surface has a 11km thick layer of co2, which decreases with altitude(a decay function). I also included this to vary the drag for different altitude for the mars model. Here i have compared the 3 models, with same initial parameters. In the 2nd graph, Im only comparing mars and earth to see how big of an effect drag has on the projectile.
Added wind to my model. Since wind affects only horziontal componenet in this case, the two winds were relatively easy to integrate into the acceleration function. Here are the graphs showing the wind in effect, when Projectile is at 45m/s, angle of 45 to horziontal and under gravitational acceleration of 9.81. Unfortunately I was not able to add the Cross wind feature which I wanted to add. It involved adding a z-axis, since cross wind hits projectile perpendicularly. I am running low on time, this project is only supposed to run during holidays before school starts.
Added adaptive time, so dt shortens for regions where more information is available/lots of change, but increases in regions where less information is available/lack of change. Plotted 2 graphs showing adaptive time, one shows the projectile trajectory with dt shown/marked. YOu can see its not constant like the previous ones. Anohter graph showing clearly how much the time step changes. It works on growth factors and decay factors(depending on error size). Last two graph show KE, PE and Total energy of the projectile with drag and no drag, showcasing that energy is dissipated to the surrounding with drag ( as heat). With no drag, total energy remains constant(graph shows a partial straight line due to error build up of numerical method over 7 minutes and overshooting the ground inaccuracies.)
Tried to show the emperical order of the 3 methods with no drag, but only euler gave me its correct order (1). Heun and RK4 were identical as expected in a vacuum, they had order of 0.93. I researched the reaosn why it was not 2, and found that the landing-point linear interpolation error was the cause of it. In the graph you can see how the error decreases with lower dt, and increases as dt increases. Expected.
Succeeded in making a optimial angle calculator, which calculates the lowest possible angle to horizontal teh projectile should make to reach a target(a distance away) within some tolerance, travelling at a known inital velocity. . I then decided to plot a graph of optimal angle with max range. I also plotted a graph of speed against target/ranges. I used targets 30m, 60m, 45m, 90m, and calculated the lowest possible velocity and the angle which causes projectile to hit the target within tolerance. Originally, I though to loop through each value and try out combinations, which resulted in a very slow program, since the rk4 function was being called over 10000 times, given each call also had a dt = 0.01s, it took around 200s just to output the optimum angle. After that, I switched to programming a binary + tenary search which solved it in much quicker time <25s. To speed it up even more, I used my adaptive time model that i created earlier, this reduced the fixed dt= 0.01, reducing the total number of cycles needed to scan through whole motion
Monte carlo implementation. Running the simulation over random values of inital velocity and angle and height, to display the probabilities of different range values. This shows how likely the projectile will land at a certain area, which can be set as an target. This is important since projectile motion is never the same, even with same parameters, practically, it will not land exactly at the same spot, mainly because of shifting environments such as air resistance. So calculating ranges for different inital parameters(close to a certain mean) helps identify where the projectile may land(never 100% certain)
Completed a Heatmap and collected some data on the programs speed. The heatmap creates a grid of 50 x 50,angle x speed, and represents them using different colours to make it more easier to spot patterns. At each grid, there is one combination of speed and angle. E.g. 50m/s at 12 degrees, the colour shows the projectile range output from these inputs. Yellow represents long range,(as seen on the right of the image). We can clearly see the region at which the range is maximised( range grows with speed). Since drag is also involved in this, we can see that every speed has a omptimised angle which gives it the max range. IF this were to have no drag, all speeds would be optimised at 45 degrees. I also plotted a graph of optimal angle and speed, whichs hows which angle gives the maximised range at a certain speed. The graph shows that as speed increases, drag increases and so the optimum angle moves away from 45 degrees(the optimum with no drag). Its not a smooth curve due to background noise due to tolerance not being exact. The final table shows some tests i did which recorded the time the heatmap took to plot, there were few anomolies such as 50x50 one, which doubled from its First try ~60s. This is mainly due to background variance, such as other softwares running on my pc, which are using my cpu.
Ships:
Projectile motion model + research. Started from a simple projectile motion model in a vacuum which uses motion equations to graphically display the 2d trajectory of a projectile. Slowly, it was built up to a realistic model with quadratic drag, variable environments (Earth, Moon and Mars, with an exponential atmosphere), and headwind/tailwind. The model itself is built on 3 methods; eulers, heuns and Runge-kutta 4th order method. Once the main model was completed, tests were ran using Monte Carle method and further analysis was conducted and then results displayed graphically( including heatmap)....
|
1793220939.7990284
|
1793307339.7990284
|
|
42521
|
FrogOS by @exasperadou | Stardance
|
exasperadou
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-24T21:36:30Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Im really proud of my project FrogOS. It’s a small operating system built with HTML, CSS, JavaScript and Python. It has 2 different apps: Notes, and a built-in browser. The hardest part was definitely making the browser work because the making process was a little bit complex and i had to learn so much stuff. I hope you guys like it.", "repo": "https://github.com/exasperadou-max/FrogOS", "demo": "https://frog-os-weld.vercel.app/"}]...
|
[{"post_id": 54090, "ts": "202 [{"post_id": 54090, "ts": "2026-08-24T21:31:10Z", "hours": 4.5572, "text": "Im finally done!"}, {"post_id": 48597, "ts": "2026-08-17T01:48:28Z", "hours": 0.3253, "text": "When i was deploying the proxy to vercel and checking it i realized i have so much to fix this will take a lot more 😭😭😭😭"}, {"post_id": 48568, "ts": "2026-08-17T00:38:48Z", "hours": 2.0819, "text": "Im done! Im just checking everything before deploying"}, {"post_id": 45519, "ts": "2026-08-12T02:01:13Z", "hours": 3.0289, "text": "Im almost done but i had to do some weird stuff to get the browser to work. I had to learn so much stuff and I will probably be done in a few days"}, {"post_id": 44364, "ts": "2026-08-10T02:23:53Z", "hours": 3.085, "text": "I fixed a LOT of bugs and just optimized the code because it was kinda messy, also, i started working on the browser and added the icons on the desktop and dock c:"}, {"post_id": 40498, "ts": "2026-08-04T02:20:43Z", "hours": 1.1364, "text": "I didnt really do much today. I fixed some bugs and optimized the code and began to code the next app. I want to build a browser inside the OS but im realizing that is kinda complex to have an actual working browser that lets you use the internet so that will take a while :c"}, {"post_id": 39692, "ts": "2026-08-02T20:34:49Z", "hours": 2.8906, "text": "I finished creating the notes app. I added a dock too"}, {"post_id": 39215, "ts": "2026-08-02T01:10:52Z", "hours": 2.0225, "text": "I added a topbar bar and made the window system c:"}, {"post_id": 39100, "ts": "2026-08-01T20:08:28Z", "hours": 1.6689, "text": "I started with FrogOs, here is the first part, the welcome screen. I will improve it later on when im done with the other parts c:"}]...
|
Title: FrogOS by @exasperadou | Stardance
Devlogs Title: FrogOS by @exasperadou | Stardance
Devlogs:
I started with FrogOs, here is the first part, the welcome screen. I will improve it later on when im done with the other parts c:
I added a topbar bar and made the window system c:
I finished creating the notes app. I added a dock too
I didnt really do much today. I fixed some bugs and optimized the code and began to code the next app. I want to build a browser inside the OS but im realizing that is kinda complex to have an actual working browser that lets you use the internet so that will take a while :c
I fixed a LOT of bugs and just optimized the code because it was kinda messy, also, i started working on the browser and added the icons on the desktop and dock c:
Im almost done but i had to do some weird stuff to get the browser to work. I had to learn so much stuff and I will probably be done in a few days
Im done! Im just checking everything before deploying
When i was deploying the proxy to vercel and checking it i realized i have so much to fix this will take a lot more 😭😭😭😭
Im finally done!
Ships:
Im really proud of my project FrogOS. It’s a small operating system built with HTML, CSS, JavaScript and Python. It has 2 different apps: Notes, and a built-in browser. The hardest part was definitely making the browser work because the making process was a little bit complex and i had to learn so much stuff. I hope you guys like it....
|
1793137989.7025063
|
1793224389.7025063
|
|
44408
|
F.D.R by @Evangel | Stardance
|
Evangel
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-09T22:46:46Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "After many hours of working on F.D.R., my own 3D-modeled drone, I am so happy to declare it shippable. It was quite challenging cause it was my first time actually working on anything 3D-modeled. It may come with some errors, but that is what I consider a learning process. I am so excited to get feedback on how to improve it, but for now I want to start working on new things. This project is purely practice for 3d modeling, so it only contains a 3d model. I cant wait to use the skills i have learnt from this project to improve and make many more things.", "repo": "https://github.com/evang10b/F.D.R", "demo": "https://cad.onshape.com/documents/f5f7eb2614957307b4720381/w/03ec715962541749f9a71ff2/e/2d20b9c38ebb88ce5911f2c0?renderMode=0&uiState=6aa1dea27c9d8ff3623e4d59"}]...
|
[{"post_id": 65069, "ts": "202 [{"post_id": 65069, "ts": "2026-09-09T22:36:13Z", "hours": 2.3081, "text": "Finally finished it up and edited the GitHub. As a complete beginner at CAD, I’m kind of proud of myself, and I can totally do way better. I’d probably come back to this project and make much more drastic improvements, but for now it’s a milestone made. It’s been so long; I’m tired of working on it too, but it was such a cool experience."}, {"post_id": 59937, "ts": "2026-09-02T00:19:08Z", "hours": 3.2386, "text": "Adding my final touches, I’ll need to work on the GitHub repo, and then it will be ready to submit! I need to finish the case details and add a removable flashlight on its head"}, {"post_id": 53176, "ts": "2026-08-23T16:47:25Z", "hours": 4.9156, "text": "RIght now, F.D.R is going through its final stages of design. I’m currently having trouble figuring out where to put my beater disk and how to improve other aspects. I need to create a GitHub repository, which I have been postponing for a very long time (I do not know how to properly write one). I also want to know whether this is a software project or a hardware project. For now, I just put it as software, but I might be wrong"}, {"post_id": 42993, "ts": "2026-08-08T00:39:58Z", "hours": 6.0803, "text": "Onshape is genuinely starting to irritate me. I’ve been trying to fix whatever problem I don’t even know of for almost 2 hours. I’ve tried every single relation; I redid it twice. I’m literally going to just remove it as a whole."}, {"post_id": 41677, "ts": "2026-08-06T01:24:16Z", "hours": 4.9172, "text": "Futuristic Drone: This project is based on a project that was made by someone else. My goal is to add features that make the drone better. I’ve started working on the main parts. Im not sure if im going to make it irl but that could change."}]...
|
Title: F.D.R by @Evangel | Stardance
Devlogs:
Fut Title: F.D.R by @Evangel | Stardance
Devlogs:
Futuristic Drone: This project is based on a project that was made by someone else. My goal is to add features that make the drone better. I’ve started working on the main parts. Im not sure if im going to make it irl but that could change.
Onshape is genuinely starting to irritate me. I’ve been trying to fix whatever problem I don’t even know of for almost 2 hours. I’ve tried every single relation; I redid it twice. I’m literally going to just remove it as a whole.
RIght now, F.D.R is going through its final stages of design. I’m currently having trouble figuring out where to put my beater disk and how to improve other aspects. I need to create a GitHub repository, which I have been postponing for a very long time (I do not know how to properly write one). I also want to know whether this is a software project or a hardware project. For now, I just put it as software, but I might be wrong
Adding my final touches, I’ll need to work on the GitHub repo, and then it will be ready to submit! I need to finish the case details and add a removable flashlight on its head
Finally finished it up and edited the GitHub. As a complete beginner at CAD, I’m kind of proud of myself, and I can totally do way better. I’d probably come back to this project and make much more drastic improvements, but for now it’s a milestone made. It’s been so long; I’m tired of working on it too, but it was such a cool experience.
Ships:
After many hours of working on F.D.R., my own 3D-modeled drone, I am so happy to declare it shippable. It was quite challenging cause it was my first time actually working on anything 3D-modeled. It may come with some errors, but that is what I consider a learning process. I am so excited to get feedback on how to improve it, but for now I want to start working on new things. This project is purely practice for 3d modeling, so it only contains a 3d model. I cant wait to use the skills i have learnt from this project to improve and make many more things....
|
1793148661.3103316
|
1793235061.3103316
|
|
44462
|
Waaaaaaaaluigi Ware by @Vini | Stardance
|
Vini
|
2
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-11T20:51:18Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I have made I made a completely functioning waluigi ware godot game The most challenging part The most challenging part of creating this was the last one getting all the collision hit boxes to work The thing I’m most proud of The thing I’m most proud of is the text when it tells you what to do the tweening by code was difficult so yes I got a tiny bit of help form AI TO EXPLAIN how it works NOT TO ctrl c ctrl v What you need to know to test my project This might be buggy but I hope you like it when you click to try to collect the onions in the clicker game you can click the onions with the text still there The text does not pause or stop the timer when the text is there please start the game please try to rate this good and I hope you like this", "repo": "https://github.com/wildevi26250-tech/Waaaaaaaaaario-Ware", "demo": "https://wildevi26250-tech.itch.io/waluigi-ware"}, {"ship_num": 2, "ts": "2026-08-11T05:23:32Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a pretty good game if I dont say so myself its quite good for a first time godot user I like it wuite much. (Wait that doesent english right). Anyways it works pretty well and im quite happy with.", "repo": "https://github.com/wildevi26250-tech/Waaaaaaaaaario-Ware", "demo": "https://wildevi26250-tech.itch.io/waluigi-ware"}]...
|
[{"post_id": 65848, "ts": "202 [{"post_id": 65848, "ts": "2026-09-11T08:14:19Z", "hours": 0.9197, "text": "Gonna ship tomorrow Did some final bug checking and fixing Added a restart if the monster gets to far it makes you lose a life yeah it’s really buggy and kind of crappy but I don’t care"}, {"post_id": 55402, "ts": "2026-08-27T06:35:35Z", "hours": 4.5886, "text": "Tremendous amounts of pain (Please help) I spent about 2 hours wanting to make a rhythm minigame gave up on that Then spent another hour trying to figure out collisions and sword attacks Worked it all out but by Jove it was annoying as hell"}, {"post_id": 51328, "ts": "2026-08-20T22:26:33Z", "hours": 4.3744, "text": "Added half of a Rhythm game This Rhythm minigame is very silly Working on getting some new art in there Thats most of whats been happening"}, {"post_id": 46744, "ts": "2026-08-14T06:52:35Z", "hours": 2.505, "text": "Fixed some basic issues Why the fudge was the timer behind the bricks turnsout all I needed to do is add a canvas layer as a parent made the game genrally better by adding text animations and stuff"}, {"post_id": 45019, "ts": "2026-08-11T04:58:01Z", "hours": 0.5347, "text": "Got everything ready for shipping Fixed some minor bugs like the screen not streatching properly Just some optimization and cleaning really"}, {"post_id": 43606, "ts": "2026-08-08T23:31:50Z", "hours": 3.6431, "text": "Added final Minigame & Clicker game Added block blast as final minigame Added the clicker minigame Added the win and lose screens Gonna ship soon"}, {"post_id": 43086, "ts": "2026-08-08T05:15:56Z", "hours": 2.3519, "text": "Finished first mini game Added fully walking waluigi with walk cycles He collects the garlics"}, {"post_id": 42850, "ts": "2026-08-07T19:52:28Z", "hours": 2.1681, "text": "Added title screen and half of first minigame Title screen and working buttons Pretty cookie concept Please try"}]...
|
Title: Waaaaaaaaluigi Ware by @Vini | Stardance
D Title: Waaaaaaaaluigi Ware by @Vini | Stardance
Devlogs:
Added title screen and half of first minigame Title screen and working buttons Pretty cookie concept Please try
Finished first mini game Added fully walking waluigi with walk cycles He collects the garlics
Added final Minigame & Clicker game Added block blast as final minigame Added the clicker minigame Added the win and lose screens Gonna ship soon
Got everything ready for shipping Fixed some minor bugs like the screen not streatching properly Just some optimization and cleaning really
Fixed some basic issues Why the fudge was the timer behind the bricks turnsout all I needed to do is add a canvas layer as a parent made the game genrally better by adding text animations and stuff
Added half of a Rhythm game This Rhythm minigame is very silly Working on getting some new art in there Thats most of whats been happening
Tremendous amounts of pain (Please help) I spent about 2 hours wanting to make a rhythm minigame gave up on that Then spent another hour trying to figure out collisions and sword attacks Worked it all out but by Jove it was annoying as hell
Gonna ship tomorrow Did some final bug checking and fixing Added a restart if the monster gets to far it makes you lose a life yeah it’s really buggy and kind of crappy but I don’t care
Ships:
I made a pretty good game if I dont say so myself its quite good for a first time godot user I like it wuite much. (Wait that doesent english right). Anyways it works pretty well and im quite happy with.
What I have made I made a completely functioning waluigi ware godot game The most challenging part The most challenging part of creating this was the last one getting all the collision hit boxes to work The thing I’m most proud of The thing I’m most proud of is the text when it tells you what to do the tweening by code was difficult so yes I got a tiny bit of help form AI TO EXPLAIN how it works NOT TO ctrl c ctrl v What you need to know to test my project This might be buggy but I hope you like it when you click to try to collect the onions in the clicker game you can click the onions with the text still there The text does not pause or stop the timer when the text is there please start the game please try to rate this good and I hope you like this...
|
1793224102.225721
|
1793310502.225721
|
|
44697
|
Jarvis Graph-RAG Personal Assistant by @jaysonkuan Jarvis Graph-RAG Personal Assistant by @jaysonkuang21 | Stardance...
|
jaysonkuang21
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T06:02:50Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a Jarvis assistant which has fully adjust RAG pipeline while using Obsidian vault as relational database and vector database for querying. The assistant is designed as a harness for any model of the user’s choice. The voice model (only available locally) uses Fish TTS to replicate Jarvis’s voice.", "repo": "https://github.com/jaysonkuang21-source/Jarvis", "demo": "https://agent15365.hackclub.app/"}]...
|
[{"post_id": 49384, "ts": "202 [{"post_id": 49384, "ts": "2026-08-18T05:30:53Z", "hours": 1.8492, "text": "Fixing frontend error on demo. Couldn’t call embedding model and kept on failing chunking. Now fixed."}, {"post_id": 48013, "ts": "2026-08-16T09:22:29Z", "hours": 1.4531, "text": "Finished uploading to frontend and some final touches. Also added details to readme."}, {"post_id": 47896, "ts": "2026-08-16T05:21:57Z", "hours": 4.3289, "text": "Tested the different chunker options, a few frontend bug fixes, quality of life improvements to view chunking quality, preparing for demo version"}, {"post_id": 45442, "ts": "2026-08-11T21:49:12Z", "hours": 11.535, "text": "Creating Demo Frontend With Rate Limiting"}, {"post_id": 42414, "ts": "2026-08-07T03:12:46Z", "hours": 1.8725, "text": "Working on prompt cleanup to prevent prompt injections!!"}]...
|
Title: Jarvis Graph-RAG Personal Assistant by @jay Title: Jarvis Graph-RAG Personal Assistant by @jaysonkuang21 | Stardance
Devlogs:
Working on prompt cleanup to prevent prompt injections!!
Creating Demo Frontend With Rate Limiting
Tested the different chunker options, a few frontend bug fixes, quality of life improvements to view chunking quality, preparing for demo version
Finished uploading to frontend and some final touches. Also added details to readme.
Fixing frontend error on demo. Couldn’t call embedding model and kept on failing chunking. Now fixed.
Ships:
I made a Jarvis assistant which has fully adjust RAG pipeline while using Obsidian vault as relational database and vector database for querying. The assistant is designed as a harness for any model of the user’s choice. The voice model (only available locally) uses Fish TTS to replicate Jarvis’s voice....
|
1793141585.9970791
|
1793227985.9970791
|
|
45790
|
brain dump by @FlawerBot | Stardance
|
FlawerBot
|
1
|
21.0
|
79
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-18T14:27:39Z", "hours": 21.0, "multiplier": 3.72, "payout": 79, "blessing": "neutral", "text": "This was my first project, and considering that I had zero hours of programming experience when I started, I’m really happy with the result. I learned a lot during the process. Even though I could have done better, I prefer to focus on what I learned rather than what I didn’t finish. I hope people like my project!", "repo": "https://github.com/809kane-max/pepe", "demo": "https://809kane-max.github.io/pepe/"}]...
|
[{"post_id": 49584, "ts": "202 [{"post_id": 49584, "ts": "2026-08-18T13:55:09Z", "hours": 2.9311, "text": "hello good morning, good afternoon, and good evening I´ve finished my first project and honestly, I´m not very proud of how It turned out. Because of time constraints, I decided to finish it earlier than I originally planned. I really liked the technical side of the project, but I´m not very happy with the visuals. I hope you like it, and I promise the next one will be better. bye bye"}, {"post_id": 47296, "ts": "2026-08-15T04:55:15Z", "hours": 8.2714, "text": "hello good morning, good afternoon, and good evening. in my opinion, the site is now finished on the technical side. I have implemented the streak feature, added a calendar, and fixed a few things. it took longer than expected, but for my first program, I am happy with how it turned out. Now I just need to work on the visuals because I want it to look better. GoodBye and have a wonderful day, afternoon, and evening"}, {"post_id": 44968, "ts": "2026-08-11T02:30:18Z", "hours": 10.0639, "text": "Hello—good morning, good afternoon, and good evening. This is my first project. I started it because I get distracted easily and sometimes have trouble staying organized. I usually make lists to keep everything in order, and that is where the idea came from. At first, I only wanted to create a simple list, but I kept thinking of more features, such as a streak system for completing daily tasks and a calendar for planning ahead. For the design, I used an Evangelion -inspired color palette because I really like it. My goal is to make things easier for people who have trouble staying organized and give them more motivation to complete their tasks. It is really exciting to think that people might actually use something I created."}]...
|
Title: brain dump by @FlawerBot | Stardance
Devlo Title: brain dump by @FlawerBot | Stardance
Devlogs:
Hello—good morning, good afternoon, and good evening. This is my first project. I started it because I get distracted easily and sometimes have trouble staying organized. I usually make lists to keep everything in order, and that is where the idea came from. At first, I only wanted to create a simple list, but I kept thinking of more features, such as a streak system for completing daily tasks and a calendar for planning ahead. For the design, I used an Evangelion -inspired color palette because I really like it. My goal is to make things easier for people who have trouble staying organized and give them more motivation to complete their tasks. It is really exciting to think that people might actually use something I created.
hello good morning, good afternoon, and good evening. in my opinion, the site is now finished on the technical side. I have implemented the streak feature, added a calendar, and fixed a few things. it took longer than expected, but for my first program, I am happy with how it turned out. Now I just need to work on the visuals because I want it to look better. GoodBye and have a wonderful day, afternoon, and evening
hello good morning, good afternoon, and good evening I´ve finished my first project and honestly, I´m not very proud of how It turned out. Because of time constraints, I decided to finish it earlier than I originally planned. I really liked the technical side of the project, but I´m not very happy with the visuals. I hope you like it, and I promise the next one will be better. bye bye
Ships:
This was my first project, and considering that I had zero hours of programming experience when I started, I’m really happy with the result. I learned a lot during the process. Even though I could have done better, I prefer to focus on what I learned rather than what I didn’t finish. I hope people like my project!...
|
1793127320.0240865
|
1793213720.0240865
|
|
46161
|
Particle Evolution by @dubbyy | Stardance
|
dubbyy
|
1
|
21.0
|
314
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-16T23:52:08Z", "hours": 21.0, "multiplier": 14.66, "payout": 314, "blessing": "neutral", "text": "Project is available for download on Windows and Linux I made a particle simulator with genomes. Inspired by Particle Life, the particles interact with each other through attraction and repulsion which when millions of times across thousands of particles creates really cool patterns. The particles also have DNA as explained in the README This was a lot of fun, I find emergent behaviours really cool, and even though I wasn’t able to accomplish everything I wanted to do I’m still happy with how it turned out. I also learned a lot about how GPUs work which is becoming very relevant very fast. This might be my last Stardance project so I just want to say thank you to all the Hack Club staff for running this, and all the other Stardancers for making it what it is. I had a great summer and I hope you all did too :>", "repo": "https://github.com/dubbyy1/particle-evo", "demo": "https://github.com/dubbyy1/particle-evo/releases/tag/v1.0.0"}]...
|
[{"post_id": 69393, "ts": "202 [{"post_id": 69393, "ts": "2026-09-16T23:40:57Z", "hours": 1.0261, "text": "Devlog 4 Last one before I ship! I finalised a few things before release, mostly just messed with the UI. This project was also really hard to package because of the way Taichi compiles code. Long story short before it compiles it check to see if what you’re doing is legal, and for that it has to read the actual source code. When you package a project with something like PyInstaller, the source code gets lost which breaks Taichi. The fix for this was to include a copy of the physics code in plaintext within the executable, so Taichi had something to look at. Shout out to Claude for helping me fix that, I probably never would have figured that out on my own. Anyway that’s it"}, {"post_id": 69312, "ts": "2026-09-16T19:39:18Z", "hours": 7.205, "text": "Devlog 3 It’s been a long time! After a lot of procrastinating and trial and error, and banging my head against the wall trying to figure out evolution, I decided to pivot. I kept the genome system, but scrapped the evolution in favour of manual tuning Genomes I went over this in the last devlog but I’ll mention it again cause it’s important and it’s changed a little. The current system works with a fixed number of species , each with a unique genome. A genome is made of 3 traits (0 to 1) and 3 receptors (-1 to 1) and each receptor interacts with it’s respective trait on a neighbouring particle. For example, if Trait 1 on Particle A is 1, and Receptor 2 on Particle B is also 1, B will be attracted to A . Likewise, if Receptor 1 on Particle B is -1, B will be repelled by A Rendering Aside from solidifying the genome system, the biggest change from the last update is a full shift to GPU rendering. The previous version used Pygame to draw the window, but now I’m using Taichi’s UI library. The benefits of this are that information is no longer being sent between the CPU and GPU, significantly increasing speed. Also, the rendering itself is parallelized, making it even faster. Other Changes I added detailed controls for changing population, species count, genomes, visuals and more. I also added a system to save and load configurations. Next? I’m gonna leave this project for a bit, but I might come back to it in the future. If I do, I want to find some way to turn it into a live wallpaper / screensaver. It’s like the moon!"}, {"post_id": 52682, "ts": "2026-08-22T23:04:28Z", "hours": 1.6047, "text": "Devlog 2.5 - Chaos Really small update! I starting implementing the evolution, it’s very very simple right now but I just wanted to share this cause I think it looks cool. I won’t go into too much detail here but basically instead of a fixed species/color each particle has a genome. The genome is made of traits, and receptors (attraction/repulsion to certain traits). When particles get close to each other, they share a bit of DNA. I’ll probably change the evolution mechanism very soon because I don’t think this method is really viable but it’s a start :>"}, {"post_id": 49248, "ts": "2026-08-17T22:42:46Z", "hours": 3.5361, "text": "Devlog 2 - Organisms I finally got around to adding GPU integration. I can now comfortably run 20,000+ particles, before I was capped at around 1,500. There’s no other additions so I’m gonna talk about the implementation for a bit. I used a really cool module called Taichi . It basically lets you put a little tag above functions to tell them to compile into GPU code. For it to work you have to convert whatever you’re doing to use different datatypes since the GPU doesn’t understand python types. Regular numbers are the same but I struggled a good but trying to understand Vectors and Fields . I think a field is like a space that contains data, in 1, 2, or 3 dimensions. A vector is roughly equivalent to a list in Python. The part that confused me was putting vectors in fields, and the difference between vector dimensions and field dimensions. To actually implement Taichi I pretty much had to rewrite the whole backend, but thankfully the actual equations stayed mostly the same it was just the structure. Previously I had a big list of Particle objects with their own functions handling their own physics. Now particles are purely numerical, there’s just a big list of positions and a big list of colors used to render them. It was pretty interesting learning how to use Taichi, I’ll probably integrate it into future projects. or experiment with the GPU in other languages. As for this project, I called it Particle Evolution but I still haven’t fully figured out how I want the evolution to function. Hopefully I’ll have something next devlog :> 30,000 particles!"}, {"post_id": 48926, "ts": "2026-08-17T14:19:48Z", "hours": 1.12, "text": "Devlog 1.5 - Life Another small update. I still wasn’t completely happy with the physics after my last devlog so I looked at the code of another particle life simulation and realised I was doing some of the calculations wrong. It turns out I never fully fixed the strong repulsion equation, also I was applying the friction in the wrong order. Aside from bug fixes, I incorporated delta (the real time since the last frame) into all the calculations to account for framerate fluctuations. I’m now pretty happy with the way the particles interact, and I think I can start translating the code to run on the GPU - hopefully I don’t need to rewrite too much of it"}, {"post_id": 47208, "ts": "2026-08-14T23:38:27Z", "hours": 3.3586, "text": "Devlog 1 - Cells Quick update to my Particle Life project. I did some work to stabilise the physics, there were a lot of small mistakes in the code that added up to very erratic behaviours. For example, the repulsion force that’s supposed to stop the particles from overlapping too much was partially inverted and actually made things worse. I’m starting to get better results now but it’ sstill not perfect. I also added a little grid to visualise the relationships between different ‘species’. I’m still relatively new to Pygame so it was interesting trying to get the dragging and clicking working The last change is less noticeable but I did some light optimization. I basically added an invisible grid, so instead of checking the distance to every particle every frame, each particle only looks at neighbouring cells. It’s an improvement, but there’s still a long way to go as far as optimization. Hopefully I can figure out how to get it to run on the GPU soon"}, {"post_id": 44261, "ts": "2026-08-09T21:58:04Z", "hours": 3.5419, "text": "Devlog 0 - Primordial Soup I started making my Particle Life simulation. I got the basic features working, but it’s very unoptimised. Every particle checks every other particle every frame, and it’s all done using the CPU. I’ll elaborate more on how I’m going to solve this in the future. For anyone who doesn’t know, Particle Life works by simulating attraction and repulsion forces between different kinds of particles. For example, here you can see that blue is attracted to itself, causing it to form big clumps. You can also see that blue is attracted to green, but green repels blue, effectively making blue chase green around really fast. What’s Next? The two things I plan on doing next are optimisation, and customisation. I’m not sure which will come first, but hopefully by the time I finish I’ll know how I want to implement the evolution"}]...
|
Title: Particle Evolution by @dubbyy | Stardance
Title: Particle Evolution by @dubbyy | Stardance
Devlogs:
Devlog 0 - Primordial Soup I started making my Particle Life simulation. I got the basic features working, but it’s very unoptimised. Every particle checks every other particle every frame, and it’s all done using the CPU. I’ll elaborate more on how I’m going to solve this in the future. For anyone who doesn’t know, Particle Life works by simulating attraction and repulsion forces between different kinds of particles. For example, here you can see that blue is attracted to itself, causing it to form big clumps. You can also see that blue is attracted to green, but green repels blue, effectively making blue chase green around really fast. What’s Next? The two things I plan on doing next are optimisation, and customisation. I’m not sure which will come first, but hopefully by the time I finish I’ll know how I want to implement the evolution
Devlog 1 - Cells Quick update to my Particle Life project. I did some work to stabilise the physics, there were a lot of small mistakes in the code that added up to very erratic behaviours. For example, the repulsion force that’s supposed to stop the particles from overlapping too much was partially inverted and actually made things worse. I’m starting to get better results now but it’ sstill not perfect. I also added a little grid to visualise the relationships between different ‘species’. I’m still relatively new to Pygame so it was interesting trying to get the dragging and clicking working The last change is less noticeable but I did some light optimization. I basically added an invisible grid, so instead of checking the distance to every particle every frame, each particle only looks at neighbouring cells. It’s an improvement, but there’s still a long way to go as far as optimization. Hopefully I can figure out how to get it to run on the GPU soon
Devlog 1.5 - Life Another small update. I still wasn’t completely happy with the physics after my last devlog so I looked at the code of another particle life simulation and realised I was doing some of the calculations wrong. It turns out I never fully fixed the strong repulsion equation, also I was applying the friction in the wrong order. Aside from bug fixes, I incorporated delta (the real time since the last frame) into all the calculations to account for framerate fluctuations. I’m now pretty happy with the way the particles interact, and I think I can start translating the code to run on the GPU - hopefully I don’t need to rewrite too much of it
Devlog 2 - Organisms I finally got around to adding GPU integration. I can now comfortably run 20,000+ particles, before I was capped at around 1,500. There’s no other additions so I’m gonna talk about the implementation for a bit. I used a really cool module called Taichi . It basically lets you put a little tag above functions to tell them to compile into GPU code. For it to work you have to convert whatever you’re doing to use different datatypes since the GPU doesn’t understand python types. Regular numbers are the same but I struggled a good but trying to understand Vectors and Fields . I think a field is like a space that contains data, in 1, 2, or 3 dimensions. A vector is roughly equivalent to a list in Python. The part that confused me was putting vectors in fields, and the difference between vector dimensions and field dimensions. To actually implement Taichi I pretty much had to rewrite the whole backend, but thankfully the actual equations stayed mostly the same it was just the structure. Previously I had a big list of Particle objects with their own functions handling their own physics. Now particles are purely numerical, there’s just a big list of positions and a big list of colors used to render them. It was pretty interesting learning how to use Taichi, I’ll probably integrate it into future projects. or experiment with the GPU in other languages. As for this project, I called it Particle Evolution but I still haven’t fully figured out how I want the evolution to function. Hopefully I’ll have something next devlog :> 30,000 particles!
Devlog 2.5 - Chaos Really small update! I starting implementing the evolution, it’s very very simple right now but I just wanted to share this cause I think it looks cool. I won’t go into too much detail here but basically instead of a fixed species/color each particle has a genome. The genome is made of traits, and receptors (attraction/repulsion to certain traits). When particles get close to each other, they share a bit of DNA. I’ll probably change the evolution mechanism very soon because I don’t think this method is really viable but it’s a start :>
Devlog 3 It’s been a long time! After a lot of procrastinating and trial and error, and banging my head against the wall trying to figure out evolution, I decided to pivot. I kept the genome system, but scrapped the evolution in favour of manual tuning Genomes I went over this in the last devlog but I’ll mention it again cause it’s important and it’s changed a little. The current system works with a fixed number of species , each with a unique genome. A genome is made of 3 traits (0 to 1) and 3 receptors (-1 to 1) and each receptor interacts with it’s respective trait on a neighbouring particle. For example, if Trait 1 on Particle A is 1, and Receptor 2 on Particle B is also 1, B will be attracted to A . Likewise, if Receptor 1 on Particle B is -1, B will be repelled by A Rendering Aside from solidifying the genome system, the biggest change from the last update is a full shift to GPU rendering. The previous version used Pygame to draw the window, but now I’m using Taichi’s UI library. The benefits of this are that information is no longer being sent between the CPU and GPU, significantly increasing speed. Also, the rendering itself is parallelized, making it even faster. Other Changes I added detailed controls for changing population, species count, genomes, visuals and more. I also added a system to save and load configurations. Next? I’m gonna leave this project for a bit, but I might come back to it in the future. If I do, I want to find some way to turn it into a live wallpaper / screensaver. It’s like the moon!
Devlog 4 Last one before I ship! I finalised a few things before release, mostly just messed with the UI. This project was also really hard to package because of the way Taichi compiles code. Long story short before it compiles it check to see if what you’re doing is legal, and for that it has to read the actual source code. When you package a project with something like PyInstaller, the source code gets lost which breaks Taichi. The fix for this was to include a copy of the physics code in plaintext within the executable, so Taichi had something to look at. Shout out to Claude for helping me fix that, I probably never would have figured that out on my own. Anyway that’s it
Ships:
Project is available for download on Windows and Linux I made a particle simulator with genomes. Inspired by Particle Life, the particles interact with each other through attraction and repulsion which when millions of times across thousands of particles creates really cool patterns. The particles also have DNA as explained in the README This was a lot of fun, I find emergent behaviours really cool, and even though I wasn’t able to accomplish everything I wanted to do I’m still happy with how it turned out. I also learned a lot about how GPUs work which is becoming very relevant very fast. This might be my last Stardance project so I just want to say thank you to all the Hack Club staff for running this, and all the other Stardancers for making it what it is. I had a great summer and I hope you all did too :>...
|
1793149006.6921911
|
1793235406.6921911
|
|
47682
|
MedSite by @theodora | Stardance
|
theodora
|
1
|
21.0
|
350
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T08:32:31Z", "hours": 21.0, "multiplier": 16.88, "payout": 350, "blessing": "neutral", "text": "About Medisite MedSite is a website designed to help people who are struggling to understand and navigate the UK healthcare system. I built MedSite because I know how confusing the NHS can be, especially when you are unfamiliar with how the system works. I was born in Hong Kong and moved to the UK when I was 14. The healthcare system here was completely different from what I used to. Then, when I was 17, my health suddenly started declining. That began my own NHS journey–from visiting my GP and local pharmacy to A&E, hospital appointments and everything in between. Over the past two years, I’ve had to learn how to navigate the system, figure out what questions to ask, understand what support was available and sometimes work out where I was supposed to go next. That experience is what led me to start building MedSite. MedSite Component: Guide: The guide is separated into 6 different categories, from self-care to calling 999. This site has input for common symptoms and illnesses, explains what you can expect from the NHS, what questions you can ask, and when you need further help. Support: Support is a place to support your healthcare journey, what you can get away from the NHS, what you can ask for when you are discharged from the hospital, etc. Sometimes the hardest part isn’t the treatment itself- it’s knowing what happens afterwards. Story: Story is a place where I documented what has happened throughout these past two years, what I’ve experienced, what I’ve asked, what I’ve been told and what support I’ve been given. Find nearest function Find nearest function allows users to find the nearest pharmacy, GP, urgent treatment centre, and A&E. This feature requires users to permit the website to have access to their location before using Google Maps as an external tool to find the nearest services. Declaration Page This indicates that the information on the website is meant to be useful but not entirely accurate and applicable to all users and cases; thus, seeking professional medical advice is strongly recommended. First Aid: First aid explains when first aid may be needed and provides clear, step-by-step guidance to help users understand what they should do. The information comes from trusted medical sources (Mayo Clinic, NHS) Condition A-Z: Condition A-Z this provide a complete browse of the 45 conditions included in the guide, organised into different health categories. AI Usage: I have used Claude AI to translate between English and traditional Chinese, and it also helps me debug my code. The whole website is made based on personal experience. The website layout, idea, and main coding come from my idea.", "repo": "https://github.com/theodora-sin/medsite", "demo": "https://theodora-sin.github.io/medsite/index.html"}]...
|
[{"post_id": 55438, "ts": "202 [{"post_id": 55438, "ts": "2026-08-27T08:27:20Z", "hours": 1.2989, "text": "Devlog 4: Hi, and welcome to my final devlog. This devlog records my final tidy-up of the website."}, {"post_id": 52222, "ts": "2026-08-22T10:04:26Z", "hours": 8.0464, "text": "Devlog 3: Hi and welcome to another Devlog What have I added? Story update: Orginally, I had added a section called story. I finished styling the section and added both languages, making it more engaging and accessible. I have also added a timeline to show what has happened throughout my journey and make the story easier to follow. The story will continue to be updated as I am still investigating my illness. Conditions A-Z Adding a new tab called Condition A-Z provides a complete browse of the 45 conditions included in the guide, organised into different health categories. Each condition has a ‘View in Guide’ button that links back to the first tab of the guide. This allows users to quickly find the condition and see the recommended steps and information provided in the guide. I also added an NHS reference for each condition. This links to a Google search for relevant NHS information, making it easier for users to find trusted guidance and learn more about each condition. First Aid I have also added a new tab called First Aid. It is designed to teach users what to do during an emergency situation. This section explains when first aid may be needed and provides clear, step-by-step guidance to help users understand what they should do. The information comes from trusted medical sources (Mayo Clinic, NHS) Thanks for reading! 😊"}, {"post_id": 50222, "ts": "2026-08-19T11:25:17Z", "hours": 5.0422, "text": "Devlog 2: Hi and welcome back to another Devlog. What have I added?: Find nearest function A new feature has been added called Find Nearest under some cards, where users can find the nearest pharmacy, GP, urgent treatment centre, and A&E. This feature requires users to permit the website to have access to their location before using Google Maps as an external tool to find the nearest services. Declaration Page In addition to that, a Declaration section has been added in Legal & Privacy. This indicates that the information on the website is meant to be useful but not entirely accurate and applicable to all users and cases, thus, seeking professional medical advice is strongly recommended. Zoom In/Out Zoom-in/out features have been added to make the website more accessible to elderly users and those who have difficulty reading. Thanks for reading! 😊"}, {"post_id": 46895, "ts": "2026-08-14T13:12:11Z", "hours": 6.3617, "text": "Devlog 1: Welcome to my first devlog of MedSite: What is MedSite? MedSite is a website designed to help people who are struggling to understand and navigate the UK healthcare system. I built MedSite because I know how confusing the NHS can be, especially when you are unfamiliar with how the system works. I was born in Hong Kong and moved to the UK when I was 14. The healthcare system here was completely different from what I used to. Then, when I was 17, my health suddenly started declining. That began my own NHS journey–from visiting my GP and local pharmacy to A&E, hospital appointments and everything in between. Over the past two years, I’ve had to learn how to navigate the system, figure out what questions to ask, understand what support was available and sometimes work out where I was supposed to go next. That experience is what led me to start building MedSite. At the moment, MedSite is made up of three main components: Guide: Guide is designed to help people understand where they might need to go when they have a particular symptom or health problem. This site has input information on common symptoms and illnesses; it will explain what you can expect from the NHS, what questions you can ask, and when you may need to seek further help. This is not a diagnostics tools. This is used to make the healthcare system easier to navigate and help people feel more prepared when seeking care. Support: Support is a place to support your healthcare journey, what you can get away from the NHS, what you can ask for when you are discharged from the hospital, etc… Sometimes the hardest part isn’t the treatment itself- it’s knowing what happens afterwards. Story: Story is the most personal part of MedSite. It’s where I want to document what has happened throughout these past two years, what I’ve experienced, what I’ve asked, what I’ve been told and what support I’ve been given. I want to share my experience because I know other people may be going through something similar and wondering, ‘What am I supposed to do?’ Thanks for reading."}]...
|
Title: MedSite by @theodora | Stardance
Devlogs:
Title: MedSite by @theodora | Stardance
Devlogs:
Devlog 1: Welcome to my first devlog of MedSite: What is MedSite? MedSite is a website designed to help people who are struggling to understand and navigate the UK healthcare system. I built MedSite because I know how confusing the NHS can be, especially when you are unfamiliar with how the system works. I was born in Hong Kong and moved to the UK when I was 14. The healthcare system here was completely different from what I used to. Then, when I was 17, my health suddenly started declining. That began my own NHS journey–from visiting my GP and local pharmacy to A&E, hospital appointments and everything in between. Over the past two years, I’ve had to learn how to navigate the system, figure out what questions to ask, understand what support was available and sometimes work out where I was supposed to go next. That experience is what led me to start building MedSite. At the moment, MedSite is made up of three main components: Guide: Guide is designed to help people understand where they might need to go when they have a particular symptom or health problem. This site has input information on common symptoms and illnesses; it will explain what you can expect from the NHS, what questions you can ask, and when you may need to seek further help. This is not a diagnostics tools. This is used to make the healthcare system easier to navigate and help people feel more prepared when seeking care. Support: Support is a place to support your healthcare journey, what you can get away from the NHS, what you can ask for when you are discharged from the hospital, etc… Sometimes the hardest part isn’t the treatment itself- it’s knowing what happens afterwards. Story: Story is the most personal part of MedSite. It’s where I want to document what has happened throughout these past two years, what I’ve experienced, what I’ve asked, what I’ve been told and what support I’ve been given. I want to share my experience because I know other people may be going through something similar and wondering, ‘What am I supposed to do?’ Thanks for reading.
Devlog 2: Hi and welcome back to another Devlog. What have I added?: Find nearest function A new feature has been added called Find Nearest under some cards, where users can find the nearest pharmacy, GP, urgent treatment centre, and A&E. This feature requires users to permit the website to have access to their location before using Google Maps as an external tool to find the nearest services. Declaration Page In addition to that, a Declaration section has been added in Legal & Privacy. This indicates that the information on the website is meant to be useful but not entirely accurate and applicable to all users and cases, thus, seeking professional medical advice is strongly recommended. Zoom In/Out Zoom-in/out features have been added to make the website more accessible to elderly users and those who have difficulty reading. Thanks for reading! 😊
Devlog 3: Hi and welcome to another Devlog What have I added? Story update: Orginally, I had added a section called story. I finished styling the section and added both languages, making it more engaging and accessible. I have also added a timeline to show what has happened throughout my journey and make the story easier to follow. The story will continue to be updated as I am still investigating my illness. Conditions A-Z Adding a new tab called Condition A-Z provides a complete browse of the 45 conditions included in the guide, organised into different health categories. Each condition has a ‘View in Guide’ button that links back to the first tab of the guide. This allows users to quickly find the condition and see the recommended steps and information provided in the guide. I also added an NHS reference for each condition. This links to a Google search for relevant NHS information, making it easier for users to find trusted guidance and learn more about each condition. First Aid I have also added a new tab called First Aid. It is designed to teach users what to do during an emergency situation. This section explains when first aid may be needed and provides clear, step-by-step guidance to help users understand what they should do. The information comes from trusted medical sources (Mayo Clinic, NHS) Thanks for reading! 😊
Devlog 4: Hi, and welcome to my final devlog. This devlog records my final tidy-up of the website.
Ships:
About Medisite MedSite is a website designed to help people who are struggling to understand and navigate the UK healthcare system. I built MedSite because I know how confusing the NHS can be, especially when you are unfamiliar with how the system works. I was born in Hong Kong and moved to the UK when I was 14. The healthcare system here was completely different from what I used to. Then, when I was 17, my health suddenly started declining. That began my own NHS journey–from visiting my GP and local pharmacy to A&E, hospital appointments and everything in between. Over the past two years, I’ve had to learn how to navigate the system, figure out what questions to ask, understand what support was available and sometimes work out where I was supposed to go next. That experience is what led me to start building MedSite. MedSite Component: Guide: The guide is separated into 6 different categories, from self-care to calling 999. This site has input for common symptoms and illnesses, explains what you can expect from the NHS, what questions you can ask, and when you need further help. Support: Support is a place to support your healthcare journey, what you can get away from the NHS, what you can ask for when you are discharged from the hospital, etc. Sometimes the hardest part isn’t the treatment itself- it’s knowing what happens afterwards. Story: Story is a place where I documented what has happened throughout these past two years, what I’ve experienced, what I’ve asked, what I’ve been told and what support I’ve been given. Find nearest function Find nearest function allows users to find the nearest pharmacy, GP, urgent treatment centre, and A&E. This feature requires users to permit the website to have access to their location before using Google Maps as an external tool to find the nearest services. Declaration Page This indicates that the information on the website is meant to be useful but not entirely accurate and applicable to all users and cases; thus, seeking professional medical advice is strongly recommended. First Aid: First aid explains when first aid may be needed and provides clear, step-by-step guidance to help users understand what they should do. The information comes from trusted medical sources (Mayo Clinic, NHS) Condition A-Z: Condition A-Z this provide a complete browse of the 45 conditions included in the guide, organised into different health categories. AI Usage: I have used Claude AI to translate between English and traditional Chinese, and it also helps me debug my code. The whole website is made based on personal experience. The website layout, idea, and main coding come from my idea....
|
1793242438.4064019
|
1793328838.4064019
|
|
50440
|
Spiderboot by @tyri | Stardance
|
tyri
|
0
|
21.0
|
0
|
[]
|
[{"post_id": 68623, "ts": "202 [{"post_id": 68623, "ts": "2026-09-15T12:38:26Z", "hours": 1.0836, "text": "Hey everyone so today i finally started fixing all the issues with the pcb of the spider. I am not the best at this so i got a bit of help from ai but there is still a long way to go. I added resistors and even made my own symbel cause kicad doesnt have it. I didnt excpect it to take this little amount of time but there is still a long way to go cause i still havent fixed all the issues with it. I am going to continue working on it in a bit though"}, {"post_id": 62257, "ts": "2026-09-05T15:15:44Z", "hours": 1.5667, "text": "Hey everyone, so this sessions is just my friends recording where he first build the spider that i fixed on the last session. He did alot of researched on each part to find the best one and also took alot of time to place each component so it can be easily understood by as. Some of his connections as i said before were wrong so dont take inspo from this build. The camera we had to remove it later on cause we wouldn’t have put it in the pcb and we will put on top of the esp32 where is connects to the pins. Again do not take the wiring from here its mostly wrong"}, {"post_id": 62185, "ts": "2026-09-05T13:30:36Z", "hours": 2.0836, "text": "Hey everyone, so today i decided to do the spider schematic part of the project. My friend tried his best but honestly he has no clue how to connect different modules and assign the footprints. So i started by removing one extra component he added that was not needed and fixed the wiring on the servos. Then cause i also have no clue how half the components should connect i just asked ai cause i want the project to work and not blow up. I added a charging port and a boost converter i fixed all the wiring and connections and footprints but there is still alot of work left cause i didnt connect the boost converter nor the charging port. Anyway have to go now my mom is forcing me to do my homework."}, {"post_id": 60485, "ts": "2026-09-02T20:55:58Z", "hours": 4.6517, "text": "Hey everyone, so today i finally finished the pcb for the controller of the spider. Putting the components in the places i wanted was the ez part. The difficult part was getting all the footprints right and all the mods. But honestly i had fun connecting all the wires from component to component cause its a simple task i konw well. Now theoretically im done i just need my friends to finish the spider and the repo. Wait actually i still need to make the case which everytime i think is ez but it takes me hours. And the code for everything too"}, {"post_id": 59138, "ts": "2026-08-31T19:22:57Z", "hours": 11.6133, "text": "Hey everyone, so for the last few days me and some friends have been designing a spider robot and a controller for it. So we thought of making it with the esp32 but we didnt want it to be really large so we decided to go with the xiao seeed cause it is the smallest esp32. The controller also uses the esp32 cause honestly is one of the greatest microcontrollers ever. For the controller we used a small olde screen and 2 joystick. 1 for movement and the other for moving the camera. Ohh and the spider has a camera that is also nightvision and we added ir blasters so we could actually see. Our biggest problem rn is the legs cause our best thought so far is to use 3 motors for each joined but that beats the hole point of it being a small spider. We also need to finish the pcb the code the repo and the cases to be officially done. Further more cause my friends are new to all of this they spend alot of time trying to learn the basics. We also spend alot of time watching tutorials so they could understand everything. This was so much more fun cause we also took some breaks here and there and it was amazing"}]...
|
Title: Spiderboot by @tyri | Stardance
Devlogs:
H Title: Spiderboot by @tyri | Stardance
Devlogs:
Hey everyone, so for the last few days me and some friends have been designing a spider robot and a controller for it. So we thought of making it with the esp32 but we didnt want it to be really large so we decided to go with the xiao seeed cause it is the smallest esp32. The controller also uses the esp32 cause honestly is one of the greatest microcontrollers ever. For the controller we used a small olde screen and 2 joystick. 1 for movement and the other for moving the camera. Ohh and the spider has a camera that is also nightvision and we added ir blasters so we could actually see. Our biggest problem rn is the legs cause our best thought so far is to use 3 motors for each joined but that beats the hole point of it being a small spider. We also need to finish the pcb the code the repo and the cases to be officially done. Further more cause my friends are new to all of this they spend alot of time trying to learn the basics. We also spend alot of time watching tutorials so they could understand everything. This was so much more fun cause we also took some breaks here and there and it was amazing
Hey everyone, so today i finally finished the pcb for the controller of the spider. Putting the components in the places i wanted was the ez part. The difficult part was getting all the footprints right and all the mods. But honestly i had fun connecting all the wires from component to component cause its a simple task i konw well. Now theoretically im done i just need my friends to finish the spider and the repo. Wait actually i still need to make the case which everytime i think is ez but it takes me hours. And the code for everything too
Hey everyone, so today i decided to do the spider schematic part of the project. My friend tried his best but honestly he has no clue how to connect different modules and assign the footprints. So i started by removing one extra component he added that was not needed and fixed the wiring on the servos. Then cause i also have no clue how half the components should connect i just asked ai cause i want the project to work and not blow up. I added a charging port and a boost converter i fixed all the wiring and connections and footprints but there is still alot of work left cause i didnt connect the boost converter nor the charging port. Anyway have to go now my mom is forcing me to do my homework.
Hey everyone, so this sessions is just my friends recording where he first build the spider that i fixed on the last session. He did alot of researched on each part to find the best one and also took alot of time to place each component so it can be easily understood by as. Some of his connections as i said before were wrong so dont take inspo from this build. The camera we had to remove it later on cause we wouldn’t have put it in the pcb and we will put on top of the esp32 where is connects to the pins. Again do not take the wiring from here its mostly wrong
Hey everyone so today i finally started fixing all the issues with the pcb of the spider. I am not the best at this so i got a bit of help from ai but there is still a long way to go. I added resistors and even made my own symbel cause kicad doesnt have it. I didnt excpect it to take this little amount of time but there is still a long way to go cause i still havent fixed all the issues with it. I am going to continue working on it in a bit though...
|
1792626832.9304554
|
1793490832.9304554
|
|
53434
|
Trust no one by @Gabriel_ | Stardance
|
Gabriel_
|
1
|
21.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T12:37:21Z", "hours": 21.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So i made a dungeon crawler/puzzle game where you need to get out of the dungeon. There’s some notes left by someone else that you need to decide whether to trust those notes or not. It was really fun to make and i hope you like to play it and leave a good review. Thx.", "repo": "https://github.com/Gplayer128/Trust-No-One", "demo": "https://toasty-sandwich.itch.io/trust-no-one"}]...
|
[{"post_id": 57461, "ts": "202 [{"post_id": 57461, "ts": "2026-08-29T16:40:29Z", "hours": 5.0058, "text": "Finals"}, {"post_id": 56885, "ts": "2026-08-28T21:30:16Z", "hours": 11.3158, "text": "Making the dungeon bigger and some survivor notes"}, {"post_id": 55129, "ts": "2026-08-26T16:19:29Z", "hours": 4.2722, "text": "Options, main menu and pause menu"}, {"post_id": 53319, "ts": "2026-08-23T19:50:40Z", "hours": 0.4158, "text": "Creeepy"}]...
|
Title: Trust no one by @Gabriel_ | Stardance
Devl Title: Trust no one by @Gabriel_ | Stardance
Devlogs:
Creeepy
Options, main menu and pause menu
Making the dungeon bigger and some survivor notes
Finals
Ships:
So i made a dungeon crawler/puzzle game where you need to get out of the dungeon. There’s some notes left by someone else that you need to decide whether to trust those notes or not. It was really fun to make and i hope you like to play it and leave a good review. Thx....
|
1792878545.0758808
|
1793742545.0758808
|
|
54858
|
DexterOS by @bradlloyd | Stardance
|
bradlloyd
|
2
|
21.0
|
186
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-04T01:09:23Z", "hours": 13.0, "multiplier": 9.09, "payout": 114, "blessing": "neutral", "text": "DexterOS 2.0.0 DexterOS 2.0.0 has the following new features since 1.0.0: Glass Mode About Creator Welcome Screen Calendar Calculator Photos App Customization: Harrison background Rita background Hannah Background Deb Background Plus all of them in color including dexter Green Theme Blue Theme White Theme Black Theme And Obviously Red Theme Harrys code photo of Harry Thank you all so much this has been an amazing project looking forward to seeing you guys in 3.0.0", "repo": "https://github.com/Bdlloyd83/DexterOS", "demo": "https://bdlloyd83.github.io/DexterOS/"}, {"ship_num": 2, "ts": "2026-08-30T20:19:40Z", "hours": 8.0, "multiplier": 9.09, "payout": 72, "blessing": "neutral", "text": "DexterOS is a OS designed around the major TV show and allows users to be able to almost put themselves into the shoes of Dexter and what he feels like outside of killing of course. My first OS wisdom os didnt really feel good and not much room to grow so I adapted and built DexterOS. Previous features on wisdom os: Blog->Notepad(allows user to imput their own ideas and thoughts) Quotes->Case Files (info about dexters major targets) NEW FEATURES: Settings->Dark Mode option avalible Evidence Locker->pin that locks notes for you so only you can use them Miami Metro Operations->allows users to see memory disk and cpu directly from dex os Bay Harbor Weather-> shows weather conditions where dexter was based in the show Forensics101-> gives insight into what dexters daytime career would be like hopefully inspiring youth to help law enforcment DexterOS is a fun experience and is supposed to give off the vibe of the original tv show or early 2000s vibe. It was a very fun experience and im glad i pivoted from wisdom os and was able to build from the ground up a fun and new OS. Thanks for your time!", "repo": "https://github.com/Bdlloyd83/DexterOS", "demo": "https://bdlloyd83.github.io/DexterOS/"}]...
|
[{"post_id": 61206, "ts": "202 [{"post_id": 61206, "ts": "2026-09-04T01:01:11Z", "hours": 1.5839, "text": "“Dexlog” 10 2.0.0!!!! Going to ship after this devlog. This update was: finished glass mode, two small bugs, added harrys photo to the code app one was a black backround behind the slides on settings apps but its just because i accidentally moved the div out of the app content class. Then i messed it up again only moving one app to the app content which is also photoed. Eventually i figured it out. next bug was the harrys code phot not centering in the app so i added padding. glass mode was alot easier then i anticipated so thats cool. just a bit of js html and css all around the board. transparent backround and stuff."}, {"post_id": 60910, "ts": "2026-09-03T15:54:44Z", "hours": 1.0008, "text": "“Dexlog” 9 1.7.5 Added about creator page and a welcome screen. Welcome screen only shows first time you open the website otherwise it can be opened in settings. This is also where you find about creator. I did the same design of slides but no box because it didnt feel right. I wanted the smile slide reference so i put it on the welcome page thing. Little fun easter egg. Tonight ill do the glass apps then I beleive it should be time to ship 2.0!"}, {"post_id": 60664, "ts": "2026-09-03T05:12:03Z", "hours": 1.7225, "text": "“Dexlog” 8 -1.7.0 Calendar update so painful. So much code. So tired. Shoud have gone to bed but im a perfectionist. Heres the just got the calendar working couldnt see the right start day made a bunch of variables and stuff to be able to change that all in js. Also made a quick green button for the love of the game and because my next update will be an enlarge button and maybe glass style apps option avalible."}, {"post_id": 60631, "ts": "2026-09-03T03:14:34Z", "hours": 0.7997, "text": "“Dexlog” 7 - 1.6.0 Calculator update. Not much to say here just plain old math sweet math. TONS of java script why oh why. Also forgive my 67 joke on the calculator. Just had to prove it worked. Next up: the dreaded calendar. Side note:I dont really like the layout of the numbers and operators on my calculator so i will change that in the future unless someone says somthing else in a review or comment. Have a good one."}, {"post_id": 60608, "ts": "2026-09-03T02:08:13Z", "hours": 1.3472, "text": "“Dexlog” 6 - 1.5.0 Finished the photos app allowing users to upload photos and look at some cool nature ones Ive preuploaded. You can scroll through your photos too. Also updated weather app to just be plain old weather app that takes your location and does it off that instead of bay harbor :.(. Next up is calculator and calendar. Peace."}, {"post_id": 60533, "ts": "2026-09-02T22:47:39Z", "hours": 1.0869, "text": "“Dexlog” 5 - 1.4.5 I started a calculator calendar and photos apps but one major problem too many apps for the bar :.) anyway had to switch it to only top and bottom avalible which im not too pleased with unfortunately. I feel like the top app bar is very ugly but maybe thats just because im so used to the bottom app bar. I had to deal with two bugs. The first is in the pictures where i had to make some js for the title bar to switch down including editing css and changing tags on html. Then a simpler easier bug was the title bar appearing as white. It was a very simple overlook of forgetting to change the tags in css after changing them in html. I got mad at myself for that one. Anyways thats it for now next up will be finishing those apps i mentioned earlier."}, {"post_id": 60037, "ts": "2026-09-02T04:36:55Z", "hours": 1.1228, "text": "“Dexlog” 4-1.4.0 NOTE:photos are photoshoped half and half not actually half and half in dexteros. ******* Added more characters for the background as well as the color photo. This makes the ultamate customization experince. I figured if there was a black and white photo might as well just put the original version on there. Same logic applied to adding more characters. Why settle at just dexter when you can have Rita Harrison Deb and Hannah Hopefully you guys like the new mode as much as I do looking forward to some more upgrades soon. Peace."}, {"post_id": 60011, "ts": "2026-09-02T03:21:36Z", "hours": 1.4017, "text": "“Dexlog” 3-1.3.0 DELETED DARK MODE! Added multiple themes instead. Blue Green Red Black White All of which controled in the new customization app. Arrows to navigate and it automatically adapts to what theme you have up on the customization. Also fixed the bar height in like 10 seconds just needed a simple css fix to 76px so thats dope. Next update look for black and white mode so you can see dexter how he currently is or in color as well as the app icons. Maybe harder than previous updates well see."}, {"post_id": 59917, "ts": "2026-09-01T22:58:51Z", "hours": 1.2844, "text": "“Dexlog” 2-1.2.0 once again updates that came from feedback. Now you can customize where your app bar is. Right is currently the defalt but you also have got left and bottom. Unfortunately ive got some bugs i cant iron out so ill be trying to patch those out in a minute here. The bottom bar is cool but it isnt full size until you select an icon and then it shrinks back to like half size. I am also going to add more customization like themes and text colors and stuff to make it a better ui and experience."}, {"post_id": 59384, "ts": "2026-09-01T05:01:29Z", "hours": 1.1678, "text": "“Dexlog”-1-DexterOs1.1.1-Using feedback from my first ship I was able to adjust to what you guys wanted. (YAY) Spoiler mode is now in settings and you can turn it on or off so you dont accidentily learn about cases from the show. Expanded clock related features other than just time in the top right corner which has been there since day one we now have alarms timers and stopwatches. To use alarm click on each indivdual hour or minute the am or pm type which one you want. timer type hour minute second in then countdown will begin with start timer. Stopwatch start stop and pause do their name. Thanks for your time!"}, {"post_id": 58399, "ts": "2026-08-30T20:07:03Z", "hours": 4.7142, "text": "DexterOS finally has all the apps I first had in mind I will cover what new ones I have made since my last log. Forensics covers forensics 101 to give you sight into dexters career or daytime job and what it would be like. Bay harbor weather is the tempurature humidty and visibility for bay harbor in miami because why not. Evidence locker can help you keep private notes protected by a pin you create then it will save it as long as you keep DexterOS open because it isnt stored on the cloud i think. Miami metro Operations gives you insight into how your computer is currently operating so you can adjust accordingly. Case list shows major targets related to dexter from the view of miami metro or what the public would theoretically know if not for the show. Settings only has light and dark mode at the moment but it was a cool fade in and out between the modes so enjoy."}, {"post_id": 56706, "ts": "2026-08-28T16:01:09Z", "hours": 0.8469, "text": "DexterOS-Added Harrys Code app and made the apps look like slides in a box sort of. I couldnt really nail the look of slides in the box so its a bit of a creative liberty sorry guys. The app allows you to scroll through the major points of harrys code to see get the just at least for now may expand it later. Very fun seeing this come together. Keeping the vibe that the tv show gave off in posters and stuff to make it feel like almost an offical website but not really. Thanks for your time."}, {"post_id": 55370, "ts": "2026-08-27T04:50:50Z", "hours": 2.3814, "text": "DexterOS I lowkey dont like my wisdom os anymore so ill be making another one🎉 Who dosent love some good dexter? I know I do so ill do anything-LEGAL-to feel like I have that much aura and what better way then to make an entire OS revolving around this tough guy? Anyway should be coming soon just got to make some more tough as nails apps then ship so cya later."}]...
|
Title: DexterOS by @bradlloyd | Stardance
Devlogs Title: DexterOS by @bradlloyd | Stardance
Devlogs:
DexterOS I lowkey dont like my wisdom os anymore so ill be making another one🎉 Who dosent love some good dexter? I know I do so ill do anything-LEGAL-to feel like I have that much aura and what better way then to make an entire OS revolving around this tough guy? Anyway should be coming soon just got to make some more tough as nails apps then ship so cya later.
DexterOS-Added Harrys Code app and made the apps look like slides in a box sort of. I couldnt really nail the look of slides in the box so its a bit of a creative liberty sorry guys. The app allows you to scroll through the major points of harrys code to see get the just at least for now may expand it later. Very fun seeing this come together. Keeping the vibe that the tv show gave off in posters and stuff to make it feel like almost an offical website but not really. Thanks for your time.
DexterOS finally has all the apps I first had in mind I will cover what new ones I have made since my last log. Forensics covers forensics 101 to give you sight into dexters career or daytime job and what it would be like. Bay harbor weather is the tempurature humidty and visibility for bay harbor in miami because why not. Evidence locker can help you keep private notes protected by a pin you create then it will save it as long as you keep DexterOS open because it isnt stored on the cloud i think. Miami metro Operations gives you insight into how your computer is currently operating so you can adjust accordingly. Case list shows major targets related to dexter from the view of miami metro or what the public would theoretically know if not for the show. Settings only has light and dark mode at the moment but it was a cool fade in and out between the modes so enjoy.
“Dexlog”-1-DexterOs1.1.1-Using feedback from my first ship I was able to adjust to what you guys wanted. (YAY) Spoiler mode is now in settings and you can turn it on or off so you dont accidentily learn about cases from the show. Expanded clock related features other than just time in the top right corner which has been there since day one we now have alarms timers and stopwatches. To use alarm click on each indivdual hour or minute the am or pm type which one you want. timer type hour minute second in then countdown will begin with start timer. Stopwatch start stop and pause do their name. Thanks for your time!
“Dexlog” 2-1.2.0 once again updates that came from feedback. Now you can customize where your app bar is. Right is currently the defalt but you also have got left and bottom. Unfortunately ive got some bugs i cant iron out so ill be trying to patch those out in a minute here. The bottom bar is cool but it isnt full size until you select an icon and then it shrinks back to like half size. I am also going to add more customization like themes and text colors and stuff to make it a better ui and experience.
“Dexlog” 3-1.3.0 DELETED DARK MODE! Added multiple themes instead. Blue Green Red Black White All of which controled in the new customization app. Arrows to navigate and it automatically adapts to what theme you have up on the customization. Also fixed the bar height in like 10 seconds just needed a simple css fix to 76px so thats dope. Next update look for black and white mode so you can see dexter how he currently is or in color as well as the app icons. Maybe harder than previous updates well see.
“Dexlog” 4-1.4.0 NOTE:photos are photoshoped half and half not actually half and half in dexteros. ******* Added more characters for the background as well as the color photo. This makes the ultamate customization experince. I figured if there was a black and white photo might as well just put the original version on there. Same logic applied to adding more characters. Why settle at just dexter when you can have Rita Harrison Deb and Hannah Hopefully you guys like the new mode as much as I do looking forward to some more upgrades soon. Peace.
“Dexlog” 5 - 1.4.5 I started a calculator calendar and photos apps but one major problem too many apps for the bar :.) anyway had to switch it to only top and bottom avalible which im not too pleased with unfortunately. I feel like the top app bar is very ugly but maybe thats just because im so used to the bottom app bar. I had to deal with two bugs. The first is in the pictures where i had to make some js for the title bar to switch down including editing css and changing tags on html. Then a simpler easier bug was the title bar appearing as white. It was a very simple overlook of forgetting to change the tags in css after changing them in html. I got mad at myself for that one. Anyways thats it for now next up will be finishing those apps i mentioned earlier.
“Dexlog” 6 - 1.5.0 Finished the photos app allowing users to upload photos and look at some cool nature ones Ive preuploaded. You can scroll through your photos too. Also updated weather app to just be plain old weather app that takes your location and does it off that instead of bay harbor :.(. Next up is calculator and calendar. Peace.
“Dexlog” 7 - 1.6.0 Calculator update. Not much to say here just plain old math sweet math. TONS of java script why oh why. Also forgive my 67 joke on the calculator. Just had to prove it worked. Next up: the dreaded calendar. Side note:I dont really like the layout of the numbers and operators on my calculator so i will change that in the future unless someone says somthing else in a review or comment. Have a good one.
“Dexlog” 8 -1.7.0 Calendar update so painful. So much code. So tired. Shoud have gone to bed but im a perfectionist. Heres the just got the calendar working couldnt see the right start day made a bunch of variables and stuff to be able to change that all in js. Also made a quick green button for the love of the game and because my next update will be an enlarge button and maybe glass style apps option avalible.
“Dexlog” 9 1.7.5 Added about creator page and a welcome screen. Welcome screen only shows first time you open the website otherwise it can be opened in settings. This is also where you find about creator. I did the same design of slides but no box because it didnt feel right. I wanted the smile slide reference so i put it on the welcome page thing. Little fun easter egg. Tonight ill do the glass apps then I beleive it should be time to ship 2.0!
“Dexlog” 10 2.0.0!!!! Going to ship after this devlog. This update was: finished glass mode, two small bugs, added harrys photo to the code app one was a black backround behind the slides on settings apps but its just because i accidentally moved the div out of the app content class. Then i messed it up again only moving one app to the app content which is also photoed. Eventually i figured it out. next bug was the harrys code phot not centering in the app so i added padding. glass mode was alot easier then i anticipated so thats cool. just a bit of js html and css all around the board. transparent backround and stuff.
Ships:
DexterOS is a OS designed around the major TV show and allows users to be able to almost put themselves into the shoes of Dexter and what he feels like outside of killing of course. My first OS wisdom os didnt really feel good and not much room to grow so I adapted and built DexterOS. Previous features on wisdom os: Blog->Notepad(allows user to imput their own ideas and thoughts) Quotes->Case Files (info about dexters major targets) NEW FEATURES: Settings->Dark Mode option avalible Evidence Locker->pin that locks notes for you so only you can use them Miami Metro Operations->allows users to see memory disk and cpu directly from dex os Bay Harbor Weather-> shows weather conditions where dexter was based in the show Forensics101-> gives insight into what dexters daytime career would be like hopefully inspiring youth to help law enforcment DexterOS is a fun experience and is supposed to give off the vibe of the original tv show or early 2000s vibe. It was a very fun experience and im glad i pivoted from wisdom os and was able to build from the ground up a fun and new OS. Thanks for your time!
DexterOS 2.0.0 DexterOS 2.0.0 has the following new features since 1.0.0: Glass Mode About Creator Welcome Screen Calendar Calculator Photos App Customization: Harrison background Rita background Hannah Background Deb Background Plus all of them in color including dexter Green Theme Blue Theme White Theme Black Theme And Obviously Red Theme Harrys code photo of Harry Thank you all so much this has been an amazing project looking forward to seeing you guys in 3.0.0...
|
1793270933.4763591
|
1793357333.4763591
|