|
6845
|
My first slack bot! by @yeshwanth_purusothaman | S My first slack bot! by @yeshwanth_purusothaman | Stardance...
|
yeshwanth_purusothaman
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @yeshwanth_purusotha Title: My first slack bot! by @yeshwanth_purusothaman | Stardance...
|
1792594491.8173647
|
1793199291.8173647
|
|
16206
|
Racing Game by @yeshwanth_purusothaman | Stardance
|
yeshwanth_purusothaman
|
0
|
1.57
|
0
|
[]
|
[{"post_id": 10085, "ts": "202 [{"post_id": 10085, "ts": "2026-06-16T17:45:30Z", "hours": 1.5672, "text": "I am making a racing game on roblox studio. I found a racing game template and I am working on customizing it and adding more maps and maybe even a attacking system like mario kart"}]...
|
Title: Racing Game by @yeshwanth_purusothaman | St Title: Racing Game by @yeshwanth_purusothaman | Stardance
Devlogs:
I am making a racing game on roblox studio. I found a racing game template and I am working on customizing it and adding more maps and maybe even a attacking system like mario kart...
|
1792543739.6223066
|
1793148539.6223066
|
|
22589
|
Tabletop Vacuum Cleaner by @yeshwanth_purusothaman Tabletop Vacuum Cleaner by @yeshwanth_purusothaman | Stardance...
|
yeshwanth_purusothaman
|
0
|
1.16
|
0
|
[]
|
[{"post_id": 22511, "ts": "202 [{"post_id": 22511, "ts": "2026-07-05T00:50:50Z", "hours": 0.54, "text": "Today I worked on making a demo for my vacuum cleaner. I used the circuits feature in TinkerCAD. I do not know how to use that tool yet though and I explored the tool for a bit. I learned that there are many tools on TinkerCAD."}, {"post_id": 15867, "ts": "2026-06-25T19:52:57Z", "hours": 0.6211, "text": "I am currently developing an autonomous tabletop vacuum cleaner designed to clear small spills and localized debris. To date, I have completed the initial system diagrams and finalized several CAD models. While securing the necessary funding for hardware procurement and materials, I am shifting focus to the software architecture. Specifically, I am beginning development on the autonomous movement and navigation algorithms to ensure efficient coverage and edge avoidance."}]...
|
Title: Tabletop Vacuum Cleaner by @yeshwanth_purus Title: Tabletop Vacuum Cleaner by @yeshwanth_purusothaman | Stardance
Devlogs:
I am currently developing an autonomous tabletop vacuum cleaner designed to clear small spills and localized debris. To date, I have completed the initial system diagrams and finalized several CAD models. While securing the necessary funding for hardware procurement and materials, I am shifting focus to the software architecture. Specifically, I am beginning development on the autonomous movement and navigation algorithms to ensure efficient coverage and edge avoidance.
Today I worked on making a demo for my vacuum cleaner. I used the circuits feature in TinkerCAD. I do not know how to use that tool yet though and I explored the tool for a bit. I learned that there are many tools on TinkerCAD....
|
1792752851.181303
|
1793357651.181303
|
|
30814
|
My own site! by @yeshwanth_purusothaman | Stardanc My own site! by @yeshwanth_purusothaman | Stardance...
|
yeshwanth_purusothaman
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @yeshwanth_purusothaman | S Title: My own site! by @yeshwanth_purusothaman | Stardance...
|
1792522157.5471551
|
1793126957.5471551
|
|
14560
|
My awesome macropad! by @yeshuakim043 | Stardance
|
yeshuakim043
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yeshuakim043 | Sta Title: My awesome macropad! by @yeshuakim043 | Stardance...
|
1792785210.0774426
|
1793390010.0774426
|
|
61986
|
jarvisWEBos by @yeshuakim043 | Stardance
|
yeshuakim043
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: jarvisWEBos by @yeshuakim043 | Stardance
|
1793044119.9132693
|
1793648919.9132693
|
|
50787
|
My own site! by @yeshaa | Stardance
|
yeshaa
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @yeshaa | Stardance
|
1792644554.7333035
|
1793249354.7333035
|
|
28761
|
My own site! by @yesh | Stardance
|
yesh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @yesh | Stardance
|
1792777824.8745775
|
1793382624.8745775
|
|
52641
|
My own site! by @yesbhaiyesbhai1 | Stardance
|
yesbhaiyesbhai1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @yesbhaiyesbhai1 | Stardanc Title: My own site! by @yesbhaiyesbhai1 | Stardance...
|
1792716497.152976
|
1793321297.152976
|
|
39262
|
Groot by @yerondereje | Stardance
|
yerondereje
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Groot by @yerondereje | Stardance
|
1792619650.107162
|
1793224450.107162
|
|
55779
|
My very own WebOS/serverOS by @yero | Stardance
|
yero
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS/serverOS by @yero | Stard Title: My very own WebOS/serverOS by @yero | Stardance...
|
1792633866.7530513
|
1793238666.7530513
|
|
56291
|
IronMan by @yero | Stardance
|
yero
|
0
|
1.5
|
0
|
[]
|
[{"post_id": 58200, "ts": "202 [{"post_id": 58200, "ts": "2026-08-30T15:41:47Z", "hours": 1.5003, "text": "Working on the IronMan Arm prototype, base plate is finished"}]...
|
Title: IronMan by @yero | Stardance
Devlogs:
Work Title: IronMan by @yero | Stardance
Devlogs:
Working on the IronMan Arm prototype, base plate is finished...
|
1792655574.2517989
|
1793260374.2517989
|
|
59647
|
Agri robot by @yernikumar | Stardance
|
yernikumar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Agri robot by @yernikumar | Stardance
|
1792810040.294156
|
1793414840.294156
|
|
8802
|
LoPose Cell Mapping by @yep | Stardance
|
yep
|
1
|
40.72
|
588
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T17:15:42Z", "hours": 37.0, "multiplier": 15.78, "payout": 588, "blessing": "neutral", "text": "Project Overview LoPose Tower Mapping is a project focused on mapping cellular tower data collected from phones to real-world tower locations. The goal is to collect cellular observations from Android devices, upload them to a database, and process those observations to estimate and match real tower positions. The project is currently experimental and mainly intended for private use. Project Structure The project is split into two main parts: Android app Go triangulation and tower-fitting tools Android App The Android app is the core data collector. It runs on a phone and gathers data about the currently connected cellular tower. This data is uploaded to a Supabase database and stored as observations. The app records data such as: connected cell ID network / area information GPS location GPS accuracy altitude vertical accuracy timing advance EARFCN PCI recorder time Currently, it collects and uploads data approximately every 5 seconds. Because of this, it can consume a significant amount of battery due to frequent GPS usage, cellular observation checks, background processing, and network uploads. APK Status The APK is not published. This is because the project is mainly for private use, and publishing it could introduce privacy risks due to the sensitive location and cellular data involved. For now, both the app and the database must be built and configured from the source code. Go Processing Tools The second part of the project is written in Go. These tools process the observations collected by the Android app and attempt to estimate real tower locations. The main approach uses 2D trilateration to approximate tower positions based on collected observations. There is also experimental 3D plane-intersection code for detecting towers in 3D space. However, it is not part of the main workflow because it generally performs worse than the 2D approach. Tower Matching After estimating tower locations, the Go tools attempt to match the calculated positions against a known tower-location database. This step connects collected observation data to real-world tower locations and computes more complete tower data, including estimated altitude, which is stored in a separate database. Current Limitations The project is still experimental and has several limitations: the APK is not publicly distributed the app can consume a high amount of battery the database must be configured manually tower matching is not always accurate the 3D approach exists but is not used in the main workflow the project handles sensitive location and cellular data altitude estimation is not always reliable and can sometimes be significantly inaccurate Things that were hard Things that I had hard were first setting up all the database exporting and transferring data, thinking and making all the ideas for how to use the 2D trilateration and 3D plane collision in the Go code. Adding the foreground service process in the Android app and making sure the TA updates on read also took some time, as well as creating the HTML converter for the point map in Go and all the steps to set up for the shipping of the project that require a very strict level of security and can leak personal data if I’m not careful in every move. Current Goal The current goal of LoPose mapping is to create a working private pipeline: phone observations → Supabase database → tower estimation → tower matching → complete tower location data The project is not intended to be a polished production application yet. It is an experimental system for tower mapping and location processing. This is also the first step in a two-part project aimed at developing location-finding methods for Android that do not rely on GPS, which is planned for future development.", "repo": "https://gitlab.com/yakla/LoPose", "demo": "https://yakla.gitlab.io/LoPose/"}]...
|
[{"post_id": 20251, "ts": "202 [{"post_id": 20251, "ts": "2026-07-01T19:55:07Z", "hours": 3.7203, "text": "Update on current status. firstly the project now will start slowly shifting to the second part of the location finding based on the towers found. this will be found in a different project in the name of lopose location estimation secondly updated the readme and some of my older devlogs for better looks and for improving in writing things in the readme format. i’m not very good at it so i hope to improve by doing it and make it looks better. lastly cleaned some of the code and improved other parts for shipment."}, {"post_id": 19111, "ts": "2026-06-30T10:57:34Z", "hours": 3.6836, "text": "Devlog — Preparing Stardance for Shipping Before shipping Stardance firstly I spent some time cleaning up the project and making it easier to understand . it include a readme and a git repo. before publishing this i needed to check nothing private is commited. with that i also added a README to the project so it will be easier how to set up things yourself. all and all i’m pretty proud of what i made. still i do have planes for more which i didn’t had time for. New features adding the 3d estimations in the future. currently most of them are wrong but some times they can actually work better then 2d. i did see in my debugger around 10 or more of the 146 which actually worked better then the 2d once and could be logged in the final estimation. for better scalability i want to add observation auto removal if around 7 observation of the same cell can’t find a real tower. this will just mean that if few observations were off you can try again until all of them will fit one."}, {"post_id": 18290, "ts": "2026-06-29T12:03:21Z", "hours": 4.4636, "text": "Demo website its not done but here i got a demo website to watch all the observations until now and the estimation. do note some of them are wrong because of the challenging conditions so i will use a verification method later for the perfect real tower location and data. https://yakla.gitlab.io/LoPose/"}, {"post_id": 16530, "ts": "2026-06-26T21:51:52Z", "hours": 1.9075, "text": "Solution was found!!! its a good day today . aperently ta can also be 150m sometimes :) it work the detection works almost perfectly in 2d. yay ! i found out there was a bug in android that i thought have been fixed but aperently not. so now it works wonderfly. well we got it : if you ask its around 30m from the target. and this is while tracking in a moving car. also sometime the 3d estimation works better but thats in rare cases. most of the time its not the most accurate."}, {"post_id": 15837, "ts": "2026-06-25T19:08:05Z", "hours": 6.6844, "text": "update on current Go code tower estimation been a while and a lot got done got some news good news and bad news the good news is that i finished with the 3d caculation and improve observation accaurcy. the bad news is that there is still something lacking making the location positioning almost the same and still not giving the right. at least not based on my knowlage but its has gotten better in some siturations. i still have hard time figuring things out but combining the 2d and 3d based on the terain does give a pretty good estimated location. i realy like the 3d aproach i went with. suprisingly its easier to understand how its works then the 2d one and didn’t add much compute (at least not if there are to much points found from plain colition which grows expenetialy seriously some got in the order of bilions. realy creazy stuff) anyway from now on ill try focusing more on the position estimation rather then the tower estimation, this will be more interesting for me after all the work on one thing and use some of the knowledge i got from estimating the towers. anyway having hard time finding a good picture for the progress so random go 3d positioning code down below :"}, {"post_id": 12733, "ts": "2026-06-20T20:22:39Z", "hours": 3.3836, "text": "Small update add height to observaions. well been a while since the last devlog. i needed a lot of thinking and planning for the 3d estimations so took me long enough. still didn’t get all the answers but i do got some updates. first i got few ideas i want to share. for the height there are few approaches but what i want to use will be based on my already existing 2d system. secondly i might try to find the height approximations of the tower based on flat 2d location estimation and using a location to height api and distance height correction its possible to find it with high accuracy using gradient descent . and thirdly i dont have any pictures to share so ill put a picture of a dog 🐶"}, {"post_id": 6316, "ts": "2026-06-10T17:06:08Z", "hours": 1.2122, "text": "Suspected issues after lots of observations got to 3 different issues with the current system first i need to account for ta deadzone which is surprisingly one of the most uncommon things which are near me. i need to account for the third dimension in the calculation i need to check for faulty observations of ta jumps it will take work but its feasible. looks like i have a very bumpy road ahead wish me luck😵💫. took me too much time to figure the first one out"}, {"post_id": 5770, "ts": "2026-06-09T17:53:40Z", "hours": 7.1014, "text": "improved database sync code and changed ui"}, {"post_id": 4781, "ts": "2026-06-08T08:33:54Z", "hours": 5.2897, "text": "organize app code and improved architecture"}, {"post_id": 3754, "ts": "2026-06-06T20:05:04Z", "hours": 3.0111, "text": "started using observations for the caculation. seems real world had more error then expected so change observation code to recored more and reduce the distance between each one"}, {"post_id": 2949, "ts": "2026-06-05T21:08:06Z", "hours": 0.6258, "text": "improving cell tower location finding algorithm"}]...
|
Title: LoPose Cell Mapping by @yep | Stardance
De Title: LoPose Cell Mapping by @yep | Stardance
Devlogs:
improving cell tower location finding algorithm
started using observations for the caculation. seems real world had more error then expected so change observation code to recored more and reduce the distance between each one
organize app code and improved architecture
improved database sync code and changed ui
Suspected issues after lots of observations got to 3 different issues with the current system first i need to account for ta deadzone which is surprisingly one of the most uncommon things which are near me. i need to account for the third dimension in the calculation i need to check for faulty observations of ta jumps it will take work but its feasible. looks like i have a very bumpy road ahead wish me luck😵💫. took me too much time to figure the first one out
Small update add height to observaions. well been a while since the last devlog. i needed a lot of thinking and planning for the 3d estimations so took me long enough. still didn’t get all the answers but i do got some updates. first i got few ideas i want to share. for the height there are few approaches but what i want to use will be based on my already existing 2d system. secondly i might try to find the height approximations of the tower based on flat 2d location estimation and using a location to height api and distance height correction its possible to find it with high accuracy using gradient descent . and thirdly i dont have any pictures to share so ill put a picture of a dog 🐶
update on current Go code tower estimation been a while and a lot got done got some news good news and bad news the good news is that i finished with the 3d caculation and improve observation accaurcy. the bad news is that there is still something lacking making the location positioning almost the same and still not giving the right. at least not based on my knowlage but its has gotten better in some siturations. i still have hard time figuring things out but combining the 2d and 3d based on the terain does give a pretty good estimated location. i realy like the 3d aproach i went with. suprisingly its easier to understand how its works then the 2d one and didn’t add much compute (at least not if there are to much points found from plain colition which grows expenetialy seriously some got in the order of bilions. realy creazy stuff) anyway from now on ill try focusing more on the position estimation rather then the tower estimation, this will be more interesting for me after all the work on one thing and use some of the knowledge i got from estimating the towers. anyway having hard time finding a good picture for the progress so random go 3d positioning code down below :
Solution was found!!! its a good day today . aperently ta can also be 150m sometimes :) it work the detection works almost perfectly in 2d. yay ! i found out there was a bug in android that i thought have been fixed but aperently not. so now it works wonderfly. well we got it : if you ask its around 30m from the target. and this is while tracking in a moving car. also sometime the 3d estimation works better but thats in rare cases. most of the time its not the most accurate.
Demo website its not done but here i got a demo website to watch all the observations until now and the estimation. do note some of them are wrong because of the challenging conditions so i will use a verification method later for the perfect real tower location and data. https://yakla.gitlab.io/LoPose/
Devlog — Preparing Stardance for Shipping Before shipping Stardance firstly I spent some time cleaning up the project and making it easier to understand . it include a readme and a git repo. before publishing this i needed to check nothing private is commited. with that i also added a README to the project so it will be easier how to set up things yourself. all and all i’m pretty proud of what i made. still i do have planes for more which i didn’t had time for. New features adding the 3d estimations in the future. currently most of them are wrong but some times they can actually work better then 2d. i did see in my debugger around 10 or more of the 146 which actually worked better then the 2d once and could be logged in the final estimation. for better scalability i want to add observation auto removal if around 7 observation of the same cell can’t find a real tower. this will just mean that if few observations were off you can try again until all of them will fit one.
Update on current status. firstly the project now will start slowly shifting to the second part of the location finding based on the towers found. this will be found in a different project in the name of lopose location estimation secondly updated the readme and some of my older devlogs for better looks and for improving in writing things in the readme format. i’m not very good at it so i hope to improve by doing it and make it looks better. lastly cleaned some of the code and improved other parts for shipment.
Ships:
Project Overview LoPose Tower Mapping is a project focused on mapping cellular tower data collected from phones to real-world tower locations. The goal is to collect cellular observations from Android devices, upload them to a database, and process those observations to estimate and match real tower positions. The project is currently experimental and mainly intended for private use. Project Structure The project is split into two main parts: Android app Go triangulation and tower-fitting tools Android App The Android app is the core data collector. It runs on a phone and gathers data about the currently connected cellular tower. This data is uploaded to a Supabase database and stored as observations. The app records data such as: connected cell ID network / area information GPS location GPS accuracy altitude vertical accuracy timing advance EARFCN PCI recorder time Currently, it collects and uploads data approximately every 5 seconds. Because of this, it can consume a significant amount of battery due to frequent GPS usage, cellular observation checks, background processing, and network uploads. APK Status The APK is not published. This is because the project is mainly for private use, and publishing it could introduce privacy risks due to the sensitive location and cellular data involved. For now, both the app and the database must be built and configured from the source code. Go Processing Tools The second part of the project is written in Go. These tools process the observations collected by the Android app and attempt to estimate real tower locations. The main approach uses 2D trilateration to approximate tower positions based on collected observations. There is also experimental 3D plane-intersection code for detecting towers in 3D space. However, it is not part of the main workflow because it generally performs worse than the 2D approach. Tower Matching After estimating tower locations, the Go tools attempt to match the calculated positions against a known tower-location database. This step connects collected observation data to real-world tower locations and computes more complete tower data, including estimated altitude, which is stored in a separate database. Current Limitations The project is still experimental and has several limitations: the APK is not publicly distributed the app can consume a high amount of battery the database must be configured manually tower matching is not always accurate the 3D approach exists but is not used in the main workflow the project handles sensitive location and cellular data altitude estimation is not always reliable and can sometimes be significantly inaccurate Things that were hard Things that I had hard were first setting up all the database exporting and transferring data, thinking and making all the ideas for how to use the 2D trilateration and 3D plane collision in the Go code. Adding the foreground service process in the Android app and making sure the TA updates on read also took some time, as well as creating the HTML converter for the point map in Go and all the steps to set up for the shipping of the project that require a very strict level of security and can leak personal data if I’m not careful in every move. Current Goal The current goal of LoPose mapping is to create a working private pipeline: phone observations → Supabase database → tower estimation → tower matching → complete tower location data The project is not intended to be a polished production application yet. It is an experimental system for tower mapping and location processing. This is also the first step in a two-part project aimed at developing location-finding methods for Android that do not rely on GPS, which is planned for future development....
|
1793112632.5437558
|
1793199032.5437558
|
|
29511
|
LoPose location estimation by @yep | Stardance
|
yep
|
0
|
5.19
|
0
|
[]
|
[{"post_id": 24387, "ts": "202 [{"post_id": 24387, "ts": "2026-07-07T22:15:58Z", "hours": 5.1931, "text": "First Devlog This is just the start of the main project and the point where the project really begins. I took my time thinking about a new way of doing location detection using cell towers, and this is the first step toward turning that idea into a real system. The Idea After a few weeks of thinking, I started building an approach for implementing pose estimation using cell towers in a much more precise way.I am not sure yet if it will actually work, but I definitely want to try it because it might be one of the best possible approaches for this problem.I call this method Cellflow Location Estimation . Cellflow Location Estimation The basic idea is to use past tower data, tower analytics, Timing Advance, and IMU movement together.Instead of relying on a single tower reading, the system can use: past observations of cell towers tower connection behavior over time Timing Advance data IMU movement vectors possible past location points movement correction from the past point to the present With this, the system could generate multiple possible paths and location points, then use the IMU movement vector to bring those estimates to the current moment and check them against Timing Advance and tower data.This is still theoretical, but I think it can work and possibly become one of the most precise cell-tower-based location methods yet. Concerns I also thought about the possible concerns and abuse risks of this method.If this approach works well, it might be possible to estimate location without GPS being enabled, or without normal location permissions in some cases. It could potentially be misused for tracking without consent or in war-related situations where GPS is jammed, spoofed, or unavailable. Still, I am more hopeful than concerned right now, especially now that I have a Google Play developer licence. I plan to work on this a lot more and move it closer to a real release.There is still a long way ahead.I really hope to make this real. Looks I suck at it :) The idea i have for the looks of the app is to imitate the feeling of looking up at the sky when looking toward a cell tower.I would like to hear ideas on how to improve the UI and create better visual directions for the app.right now i am working on the popup screen with the celltower information . the idea of the colors in the frame is that red are ones are the once that aren’t known yet and aren’t connected orange aren’t connected but are known blue are once who aren’t currently known but are connected and green is connected and known. as you can see here. i got 3 towers scanned nearby one am connected to one was found and another one which hasn’t been found. this will also help me debug the current location situation nearby and see which towers still weren’t found"}]...
|
Title: LoPose location estimation by @yep | Starda Title: LoPose location estimation by @yep | Stardance
Devlogs:
First Devlog This is just the start of the main project and the point where the project really begins. I took my time thinking about a new way of doing location detection using cell towers, and this is the first step toward turning that idea into a real system. The Idea After a few weeks of thinking, I started building an approach for implementing pose estimation using cell towers in a much more precise way.I am not sure yet if it will actually work, but I definitely want to try it because it might be one of the best possible approaches for this problem.I call this method Cellflow Location Estimation . Cellflow Location Estimation The basic idea is to use past tower data, tower analytics, Timing Advance, and IMU movement together.Instead of relying on a single tower reading, the system can use: past observations of cell towers tower connection behavior over time Timing Advance data IMU movement vectors possible past location points movement correction from the past point to the present With this, the system could generate multiple possible paths and location points, then use the IMU movement vector to bring those estimates to the current moment and check them against Timing Advance and tower data.This is still theoretical, but I think it can work and possibly become one of the most precise cell-tower-based location methods yet. Concerns I also thought about the possible concerns and abuse risks of this method.If this approach works well, it might be possible to estimate location without GPS being enabled, or without normal location permissions in some cases. It could potentially be misused for tracking without consent or in war-related situations where GPS is jammed, spoofed, or unavailable. Still, I am more hopeful than concerned right now, especially now that I have a Google Play developer licence. I plan to work on this a lot more and move it closer to a real release.There is still a long way ahead.I really hope to make this real. Looks I suck at it :) The idea i have for the looks of the app is to imitate the feeling of looking up at the sky when looking toward a cell tower.I would like to hear ideas on how to improve the UI and create better visual directions for the app.right now i am working on the popup screen with the celltower information . the idea of the colors in the frame is that red are ones are the once that aren’t known yet and aren’t connected orange aren’t connected but are known blue are once who aren’t currently known but are connected and green is connected and known. as you can see here. i got 3 towers scanned nearby one am connected to one was found and another one which hasn’t been found. this will also help me debug the current location situation nearby and see which towers still weren’t found...
|
1792784868.066297
|
1793389668.066297
|
|
61300
|
just a normal calander by @yep | Stardance
|
yep
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: just a normal calander by @yep | Stardance
|
1793040525.7475672
|
1793645325.7475672
|
|
34744
|
Pet Productivity by @yenllo | Stardance
|
yenllo
|
0
|
43.28
|
0
|
[]
|
[{"post_id": 33300, "ts": "202 [{"post_id": 33300, "ts": "2026-07-23T02:49:42Z", "hours": 5.0208, "text": "Moved the server to Heroku — and a container that died in silence Migration week. The server moved from Render to Heroku (student credits, plus Render’s cold starts were the slowest thing in the whole app). It should have been “change the remote, copy the config vars” — instead the dyno crashed on boot in under a second, exit 0, without printing a single byte. Not one log line. I swapped in a trivial entrypoint (worked), added boot breadcrumbs (never printed), pinned –platform=linux/amd64 (not it), and finally reduced the entrypoint to a bare exec printenv — which also produced zero output. That was the tell: nothing that went through sh -c survived. Root cause: my Dockerfile ended with ENTRYPOINT [“/bin/sh”, “-c”, “ASPNETCORE_HTTP_PORTS=${PORT:-8080} exec dotnet …”], and Heroku re-wraps your dyno command in its own sh -c. The inner string loses its quoting, so the outer shell parsed my entire command as just a variable assignment — a perfectly valid shell program that does nothing and exits 0. The fix is almost insulting: make the ENTRYPOINT a single token (/app/start.sh) — one argument can’t be re-split by anyone else’s shell. Cutover is done: config migrated, JWT secret rotated on purpose (all old sessions invalidated), auto-deploy on push wired up, the Heroku support ticket closed with the real root cause, and Render is now suspended. Verified working on a real phone. A pet died in production and it was my fault. The anti-decay “absence shield” (long absence → your pet sleeps instead of dying) keyed off the last-activity date — which only got set when you logged a task. So: install the app, look around, never log anything, come back a week later → last activity is null, you fall through to the normal decay rule, and your pet starves without ever being protected. Found it with my own account: pet “Mario”, 50 XP, crystallized. Now birth itself stamps the activity anchor — creating an account counts as activity — plus a streak guard so your first-ever task counts as day 1 instead of day 0. The dev-only pet-state diagnostic endpoint I added to investigate is staying; it’s what exposed the whole case. Furniture now drags like you’d expect. Press a piece and carry it around the room, with a magnet snapping it to the cell under your finger (grab-offset aware, silently refusing invalid cells). Tap-to-move and the D-pad still work. While in there I deleted the entire per-item “scale mod” system — eyeballed multipliers per furniture keyword — because the drawn width now simply is the isometric width of the item’s footprint. The double bed had 36% excess width and was climbing up the wall; now it sits exactly in its cells. Also measured real footprints for 19 more items against their actual sprites (tables, kitchens, piano, fireplace, aquarium…). Rugs are floors now. They got their own slot: they don’t block furniture, furniture doesn’t block them, and they render in a separate pass so they’re always underneath — you can finally put the sofa on the rug. Also swapped the pretty-but-unreadable glass modal cards for opaque ones (text over a busy animated room was a lottery), fixed the birth ceremony’s name panel overlapping the creature, and the group-creation archetype picker is now a swipeable carousel."}, {"post_id": 31411, "ts": "2026-07-19T19:13:43Z", "hours": 9.1844, "text": "Wall paintings you can put a sofa in front of, and the app finally explains itself Big week in three acts, all deployed to Render today. Art. The pet finally has its full sprite set — 11 poses (idle, happy, sad, sleeping, crystallized…) plus the legacy statues that dead pets leave behind in the room. Best lesson of the batch: two of the three things that “looked wrong” with the new art were the renderer’s fault, not the artist’s. The sunset tint was multiplying over every sprite and drowning the palette, and furniture was drawing at nearly double the intended scale. Fixed the renderer and the exact same PNGs suddenly looked right. Room editing rework. Decorating used to be “buy it and it lands somewhere”. Now there’s a real edit mode: visible grid, ghost preview anchored to the piece’s front corner, tap the destination cell to move it, red flash if it doesn’t fit. Every catalog item now declares its footprint in its info.json — beds and sofas are proper 2×1 rectangles instead of fat squares, and rotating a piece swaps its footprint. The fun part: wall items. Paintings, windows and clocks now hang on dedicated rails along the two back walls and don’t occupy floor cells, so you can put a sofa in front of a painting like a normal human. Their height on the wall is auto-calibrated per sprite, because a fixed offset that looked fine for a clock launched a bookshelf out through the top of the wall. The app explains itself now. Fresh-install testing showed the game was unreadable to anyone who isn’t me: what’s “Growth”? why ×1.2? what’s gold even for? Shipped a one-time intro card per screen (replayable from Settings), tap-anything explanations for every stat and mechanic, and a full animation pass — bars tween, gold counts up, +XP/+Gold float off the pet, evolutions flash, and the tic-tac-toe ritual celebrates a line only when you complete one, not when the page loads. Two rules kept it cheap: counters animate the viewmodel value (never the label text), and the Frenzy pulse rides the diorama’s existing frame tick instead of adding another timer. The autonomous review loop also kept paying rent: it caught the “Level 3” chip contradicting the “Baby” stage shown two lines below it (two different formulas for the same concept), group member statuses hardcoded in Spanish while their English translations sat orphaned in the localization table, cancelling Google login being reported as a login failure, an entire welcome screen nothing navigates to anymore (deleted), and my favorite — when your pet is dead and your task isn’t hard enough to revive it, the client was string-matching a phrase the server never actually sends, so instead of “still crystallized” you got the full confetti celebration with “+0 XP · +0 Gold”."}, {"post_id": 28360, "ts": "2026-07-14T15:54:19Z", "hours": 29.0764, "text": "Fixed the game feel: pet was levitating, blurry, and out of place Deep dive into “why does this feel off” today, with actual profiling instead of guessing. Performance: the Shop tab took 4.9s to open even with everything supposedly cached. Turned out the real cost wasn’t network or sprite loading — it was rebuilding 10 category filter chips by clearing and re-adding them one by one to a bound ObservableCollection, each Add triggering a full CollectionView layout pass. Batching that into a single collection assignment plus caching the catalog for the session dropped it to 11ms. Also found the room diorama’s frame times were fine on average (8ms of a 40ms budget) but spiked to 28ms — turned out to be GC pressure from allocating a new SKPaint + blur filter per shadow, per frame, 25 times a second. Reusing them cut the worst frame to ~12ms. Visual bug: the pet sprite looked blurry, floated above the floor, and had a system emoji stuck to it that never matched the pixel-art style. Root cause: the pet wasn’t actually part of the room’s canvas — it was a separate XAML overlaid on top, scaled with bilinear filtering (blurry) while the furniture underneath uses nearest-neighbor (crisp pixels), and centered in its box instead of anchored to the floor tile where its shadow already was. Moved the pet into the same Skia canvas as the furniture, anchored to its shadow, and dropped the emoji. Now it reads as actually standing in the room instead of floating over a photo of one. Also fixed a 10-day false “server is down” alert (uptime monitor was sending HEAD requests, endpoint only accepted GET → automatic 405 → reported as downtime the whole time the server was fine) and wired Sentry into the Android client so crashes on real phones stop being invisible. Also shipped a live demo page so people can try the core mechanic without installing anything — type what you actually did today, and the real Gemini-powered judge rates its difficulty and shows what your pet would have earned: petproductivity.onrender.com/demo.html"}]...
|
Title: Pet Productivity by @yenllo | Stardance
De Title: Pet Productivity by @yenllo | Stardance
Devlogs:
Fixed the game feel: pet was levitating, blurry, and out of place Deep dive into “why does this feel off” today, with actual profiling instead of guessing. Performance: the Shop tab took 4.9s to open even with everything supposedly cached. Turned out the real cost wasn’t network or sprite loading — it was rebuilding 10 category filter chips by clearing and re-adding them one by one to a bound ObservableCollection, each Add triggering a full CollectionView layout pass. Batching that into a single collection assignment plus caching the catalog for the session dropped it to 11ms. Also found the room diorama’s frame times were fine on average (8ms of a 40ms budget) but spiked to 28ms — turned out to be GC pressure from allocating a new SKPaint + blur filter per shadow, per frame, 25 times a second. Reusing them cut the worst frame to ~12ms. Visual bug: the pet sprite looked blurry, floated above the floor, and had a system emoji stuck to it that never matched the pixel-art style. Root cause: the pet wasn’t actually part of the room’s canvas — it was a separate XAML overlaid on top, scaled with bilinear filtering (blurry) while the furniture underneath uses nearest-neighbor (crisp pixels), and centered in its box instead of anchored to the floor tile where its shadow already was. Moved the pet into the same Skia canvas as the furniture, anchored to its shadow, and dropped the emoji. Now it reads as actually standing in the room instead of floating over a photo of one. Also fixed a 10-day false “server is down” alert (uptime monitor was sending HEAD requests, endpoint only accepted GET → automatic 405 → reported as downtime the whole time the server was fine) and wired Sentry into the Android client so crashes on real phones stop being invisible. Also shipped a live demo page so people can try the core mechanic without installing anything — type what you actually did today, and the real Gemini-powered judge rates its difficulty and shows what your pet would have earned: petproductivity.onrender.com/demo.html
Wall paintings you can put a sofa in front of, and the app finally explains itself Big week in three acts, all deployed to Render today. Art. The pet finally has its full sprite set — 11 poses (idle, happy, sad, sleeping, crystallized…) plus the legacy statues that dead pets leave behind in the room. Best lesson of the batch: two of the three things that “looked wrong” with the new art were the renderer’s fault, not the artist’s. The sunset tint was multiplying over every sprite and drowning the palette, and furniture was drawing at nearly double the intended scale. Fixed the renderer and the exact same PNGs suddenly looked right. Room editing rework. Decorating used to be “buy it and it lands somewhere”. Now there’s a real edit mode: visible grid, ghost preview anchored to the piece’s front corner, tap the destination cell to move it, red flash if it doesn’t fit. Every catalog item now declares its footprint in its info.json — beds and sofas are proper 2×1 rectangles instead of fat squares, and rotating a piece swaps its footprint. The fun part: wall items. Paintings, windows and clocks now hang on dedicated rails along the two back walls and don’t occupy floor cells, so you can put a sofa in front of a painting like a normal human. Their height on the wall is auto-calibrated per sprite, because a fixed offset that looked fine for a clock launched a bookshelf out through the top of the wall. The app explains itself now. Fresh-install testing showed the game was unreadable to anyone who isn’t me: what’s “Growth”? why ×1.2? what’s gold even for? Shipped a one-time intro card per screen (replayable from Settings), tap-anything explanations for every stat and mechanic, and a full animation pass — bars tween, gold counts up, +XP/+Gold float off the pet, evolutions flash, and the tic-tac-toe ritual celebrates a line only when you complete one, not when the page loads. Two rules kept it cheap: counters animate the viewmodel value (never the label text), and the Frenzy pulse rides the diorama’s existing frame tick instead of adding another timer. The autonomous review loop also kept paying rent: it caught the “Level 3” chip contradicting the “Baby” stage shown two lines below it (two different formulas for the same concept), group member statuses hardcoded in Spanish while their English translations sat orphaned in the localization table, cancelling Google login being reported as a login failure, an entire welcome screen nothing navigates to anymore (deleted), and my favorite — when your pet is dead and your task isn’t hard enough to revive it, the client was string-matching a phrase the server never actually sends, so instead of “still crystallized” you got the full confetti celebration with “+0 XP · +0 Gold”.
Moved the server to Heroku — and a container that died in silence Migration week. The server moved from Render to Heroku (student credits, plus Render’s cold starts were the slowest thing in the whole app). It should have been “change the remote, copy the config vars” — instead the dyno crashed on boot in under a second, exit 0, without printing a single byte. Not one log line. I swapped in a trivial entrypoint (worked), added boot breadcrumbs (never printed), pinned –platform=linux/amd64 (not it), and finally reduced the entrypoint to a bare exec printenv — which also produced zero output. That was the tell: nothing that went through sh -c survived. Root cause: my Dockerfile ended with ENTRYPOINT [“/bin/sh”, “-c”, “ASPNETCORE_HTTP_PORTS=${PORT:-8080} exec dotnet …”], and Heroku re-wraps your dyno command in its own sh -c. The inner string loses its quoting, so the outer shell parsed my entire command as just a variable assignment — a perfectly valid shell program that does nothing and exits 0. The fix is almost insulting: make the ENTRYPOINT a single token (/app/start.sh) — one argument can’t be re-split by anyone else’s shell. Cutover is done: config migrated, JWT secret rotated on purpose (all old sessions invalidated), auto-deploy on push wired up, the Heroku support ticket closed with the real root cause, and Render is now suspended. Verified working on a real phone. A pet died in production and it was my fault. The anti-decay “absence shield” (long absence → your pet sleeps instead of dying) keyed off the last-activity date — which only got set when you logged a task. So: install the app, look around, never log anything, come back a week later → last activity is null, you fall through to the normal decay rule, and your pet starves without ever being protected. Found it with my own account: pet “Mario”, 50 XP, crystallized. Now birth itself stamps the activity anchor — creating an account counts as activity — plus a streak guard so your first-ever task counts as day 1 instead of day 0. The dev-only pet-state diagnostic endpoint I added to investigate is staying; it’s what exposed the whole case. Furniture now drags like you’d expect. Press a piece and carry it around the room, with a magnet snapping it to the cell under your finger (grab-offset aware, silently refusing invalid cells). Tap-to-move and the D-pad still work. While in there I deleted the entire per-item “scale mod” system — eyeballed multipliers per furniture keyword — because the drawn width now simply is the isometric width of the item’s footprint. The double bed had 36% excess width and was climbing up the wall; now it sits exactly in its cells. Also measured real footprints for 19 more items against their actual sprites (tables, kitchens, piano, fireplace, aquarium…). Rugs are floors now. They got their own slot: they don’t block furniture, furniture doesn’t block them, and they render in a separate pass so they’re always underneath — you can finally put the sofa on the rug. Also swapped the pretty-but-unreadable glass modal cards for opaque ones (text over a busy animated room was a lottery), fixed the birth ceremony’s name panel overlapping the creature, and the group-creation archetype picker is now a swipeable carousel....
|
1792731248.1745791
|
1793336048.1745791
|
|
9363
|
My first slack bot! by @yemularushi | Stardance
|
yemularushi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @yemularushi | Stard Title: My first slack bot! by @yemularushi | Stardance...
|
1792684192.4644482
|
1793288992.4644482
|
|
24699
|
Frictionless by @yellowstar | Stardance
|
yellowstar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @yellowstar | Stardance
|
1792742011.5320833
|
1793346811.5320833
|
|
1794
|
My awesome macropad! by @yellowphoenix | Stardance
|
yellowphoenix
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yellowphoenix | St Title: My awesome macropad! by @yellowphoenix | Stardance...
|
1792561864.422974
|
1793166664.422974
|
|
1797
|
Untitled project by @yellowphoenix | Stardance
|
yellowphoenix
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @yellowphoenix | Starda Title: Untitled project by @yellowphoenix | Stardance...
|
1792677148.7157896
|
1793281948.7157896
|
|
20408
|
Untitled project by @yellowman52_ | Stardance
|
yellowman52_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @yellowman52_ | Stardan Title: Untitled project by @yellowman52_ | Stardance...
|
1793029708.7502544
|
1793634508.7502544
|
|
64970
|
tttt by @yellowjay | Stardance
|
yellowjay
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: tttt by @yellowjay | Stardance
|
1793080157.606227
|
1793684957.606227
|
|
8845
|
My awesome macropad! by @yellowissuchanoverratedco My awesome macropad! by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yellowissuchanover Title: My awesome macropad! by @yellowissuchanoverratedcolor | Stardance...
|
1792727478.1707373
|
1793332278.1707373
|
|
9625
|
My first slack bot! by @yellowissuchanoverratedcol My first slack bot! by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-30T12:18:30Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hey, I recently completed the Slack Bot tutorial. I honestly just wanted to try this to gain some familiarity with the slack api (basically the same as the discord api lol). I added the following commands: help ping count-letters (which counts the individual letters from a to z in the message) thats it bye", "repo": "https://github.com/floopus44/slack-bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0BTNC2E7QE"}]...
|
[{"post_id": 3820, "ts": "2026 [{"post_id": 3820, "ts": "2026-06-06T21:33:06Z", "hours": 0.4264, "text": "Got it to work and added two commands yay"}]...
|
Title: My first slack bot! by @yellowissuchanoverr Title: My first slack bot! by @yellowissuchanoverratedcolor | Stardance
Devlogs:
Got it to work and added two commands yay
Ships:
Hey, I recently completed the Slack Bot tutorial. I honestly just wanted to try this to gain some familiarity with the slack api (basically the same as the discord api lol). I added the following commands: help ping count-letters (which counts the individual letters from a to z in the message) thats it bye...
|
1793101756.03416
|
1793188156.03416
|
|
9626
|
Wikipedia-Swipy by @yellowissuchanoverratedcolor | Wikipedia-Swipy by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
0
|
2.16
|
0
|
[]
|
[{"post_id": 3827, "ts": "2026 [{"post_id": 3827, "ts": "2026-06-06T21:44:23Z", "hours": 2.1611, "text": "Heyy I am currently working on a Tinder-like app but with Wikipedia articles. Just press ♡ or ✗ to tell the app if you like an article or not. The app will recommend new articles to you based on your interests. Day 1: Nothing exciting happened - Just set some stuff up and wrote some helper/utility classes"}]...
|
Title: Wikipedia-Swipy by @yellowissuchanoverrated Title: Wikipedia-Swipy by @yellowissuchanoverratedcolor | Stardance
Devlogs:
Heyy I am currently working on a Tinder-like app but with Wikipedia articles. Just press ♡ or ✗ to tell the app if you like an article or not. The app will recommend new articles to you based on your interests. Day 1: Nothing exciting happened - Just set some stuff up and wrote some helper/utility classes...
|
1792792107.4286711
|
1793396907.4286711
|
|
10562
|
Random Wikipedia Article Generator by @yellowissuc Random Wikipedia Article Generator by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
1
|
3.42
|
12
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-07T11:53:17Z", "hours": 3.0, "multiplier": 3.98, "payout": 12, "blessing": "neutral", "text": "I programmed a website that shows you random Wikipedia articles at the press of a button :)) Why did I make this? Wikipedia has a built in function to show you a random article, but to use it you will have to visit the corresponding link each time so there is no way to “spam” it. Also I am currently working on another project I will need the Wikipedia API for so I used this as a quick introduction to the API for myself. I kinda forgot how annoying CSS is to deal with but building a webpage again was kinda fun :)", "repo": "https://github.com/floopus44/random-wikipedia-generator", "demo": "https://floopus44.github.io/random-wikipedia-generator/"}]...
|
[{"post_id": 16233, "ts": "202 [{"post_id": 16233, "ts": "2026-06-26T11:35:24Z", "hours": 0.4231, "text": "I am currently building a website that shows you random Wikipedia articles as a preparation for another project :) Today, I spent like twenty minutes implementing a language system which allows the user to select their target content language. It was kinda annoying because I chose to stick to html select and option elements. The problem is that the styling options for option elements are limited. Like really really insanely limited. So it looks kinda.. not good rn That’s why I plan on switching to an alternative that does not rely on these HTML elements in the future"}, {"post_id": 4165, "ts": "2026-06-07T11:40:57Z", "hours": 3.0314, "text": "Today, I wanted to gain some familiarity with the Wikipedia API in preparation for another project I am working on. So I programmed this little website that shows you a random Wikipedia article with the press of a button. Today I wrote all the basic HTML, CSS and JavaScript code, added functionality to actually show you the article and pushed to GitHub. I then spend what feels like an eternity trying to make the website work for mobile users (was relatively easy tho once I figured out how lol) The project is almost finished, I just need to implement some functionality to show articles in other languages :)"}]...
|
Title: Random Wikipedia Article Generator by @yell Title: Random Wikipedia Article Generator by @yellowissuchanoverratedcolor | Stardance
Devlogs:
Today, I wanted to gain some familiarity with the Wikipedia API in preparation for another project I am working on. So I programmed this little website that shows you a random Wikipedia article with the press of a button. Today I wrote all the basic HTML, CSS and JavaScript code, added functionality to actually show you the article and pushed to GitHub. I then spend what feels like an eternity trying to make the website work for mobile users (was relatively easy tho once I figured out how lol) The project is almost finished, I just need to implement some functionality to show articles in other languages :)
I am currently building a website that shows you random Wikipedia articles as a preparation for another project :) Today, I spent like twenty minutes implementing a language system which allows the user to select their target content language. It was kinda annoying because I chose to stick to html select and option elements. The problem is that the styling options for option elements are limited. Like really really insanely limited. So it looks kinda.. not good rn That’s why I plan on switching to an alternative that does not rely on these HTML elements in the future
Ships:
I programmed a website that shows you random Wikipedia articles at the press of a button :)) Why did I make this? Wikipedia has a built in function to show you a random article, but to use it you will have to visit the corresponding link each time so there is no way to “spam” it. Also I am currently working on another project I will need the Wikipedia API for so I used this as a quick introduction to the API for myself. I kinda forgot how annoying CSS is to deal with but building a webpage again was kinda fun :)...
|
1793101667.26243
|
1793188067.26243
|
|
17183
|
Untitled by @yellowissuchanoverratedcolor | Starda Untitled by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @yellowissuchanoverratedcolor | Title: Untitled by @yellowissuchanoverratedcolor | Stardance...
|
1792551207.3766747
|
1793156007.3766747
|
|
17184
|
Flag Matcher by @yellowissuchanoverratedcolor | St Flag Matcher by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
1
|
13.25
|
149
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-30T18:28:03Z", "hours": 11.0, "multiplier": 13.57, "payout": 149, "blessing": "neutral", "text": "I am kinda obsessed with country flags so I created a fun browser game about them. The mission is to recreate colors of country flags as close as possible using HSL sliders. I added both a daily challenge that is the same for everyone and a random challenge for when the daily challenge isn’t enough :) Features 🎨 Match hidden flag colors using Hue, Saturation and Lightness sliders 🌍 Country flags from all around the world 🏆 A challenging scoring system 📅 Daily challenges 🎲 Random challenges for when the daily challenge isn’t enough 🔗 Shareable links so you can easily challenge your friends 🌐 Runs entirely in your browser, no need to download anything It would mean the world to me if you give it a try <3 https://floopus44.github.io/Flag-Matcher/ (UI is WIP)", "repo": "https://github.com/floopus44/Flag-Matcher", "demo": "https://floopus44.github.io/Flag-Matcher/"}]...
|
[{"post_id": 21067, "ts": "202 [{"post_id": 21067, "ts": "2026-07-02T20:55:27Z", "hours": 2.2497, "text": "Flag-Matcher - a fun flag game that runs in your browser - Devlog 5 Thank you so much for all the feedback, I really appreciate it!! <3 Today I improved the UI of the landing page a little bit. Should feel way more straightforward now!! (I am planning to add pics to the front page in the future but I kinda suck at designing stuff) I then looked through the feedback I got and one of the most common complaints was that the design of the timer was kinda annoying so I replaced it with a circular SVG timer. When time runs out it also changes the color and starts to blink as a small little visual indicator. It was kinda my first time actually doing stuff with SVG instead of just downloading them lol and it was kinda exciting figuring all of it out. For the next devlog, I am planning to add a few sound indicators to the timer. Other suggestions I got, that I definitely want to implement: Custom timer options (also no timer) Easy mode Mobile version (working on it!!) (PS: the first pic shows the new landing page, and the other ones show the new timer design)"}, {"post_id": 17492, "ts": "2026-06-28T09:21:59Z", "hours": 4.3247, "text": "Flag-Matcher - a fun flag game that runs in your browser - Devlog 4 (How I spent 2 hours trying to fix a bug that did not exist) I thought I had discovered a bug in my browser game about flags. The game uses a seed system to generate random challenges as well as daily challenges. So yesterday, I tried taking the daily challenge and opened the website right around midnight. But, to my surprise, the challenge was the same one as the day before.. After panicking quite a bit, I tried to find the bug. I think I spent like two hours in total trying to find it. But, just as I was about to rewrite the code, it hit me: Maybe I opened the site right before 0:00 (like probably two seconds before). My PC’s clock is a bit out of sync so that was most likely the cause of it all. But fixing imaginary bugs wasn’t the only thing I did that day as I then changed up the scoring system a little bit: Previously, I just simply took the difference of the target and the guess HSL values and put them in a non-linear formula. This kinda sucked because HSL works like this: A hue of 0 is the color red, BUT a hue of 359 is also red (kinda like a circle). So, as you can probably guess, that lead to some weird scores in the past. To fix it, I now convert the HSL to RGB values, take the difference of those and then calculate the scores. I added two parameters to tweak the algorithm: punishFactor and curveFactor. The higher the punishFactor, the harder the game will be and if you lower the curveFactor, it will be more forgiving for close guesses. Those modifications should make the scoring system feel way better now. Planned additions for the next day: Mobile version Finally fix some of those buggy flags"}, {"post_id": 15658, "ts": "2026-06-25T13:49:37Z", "hours": 0.8686, "text": "Flag-Matcher - a fun flag game that runs in your browser - Devlog 3 Ugghhhhh I hate writing readmes so much but I finally wrote one for my project today :)) I then spent like 30 minutes trying to improve the scoring system but all my ideas kinda sucked so I gave up. (Please contact me if you have any idea on how to implement a better one!!) And that was kinda it for the day.. Oh and also I removed a lot of buggy flags to it should be playable now: https://floopus44.github.io/Flag-Matcher/"}, {"post_id": 14964, "ts": "2026-06-24T09:24:46Z", "hours": 1.6019, "text": "I finally implemented the scoring system (needs some improvements but still) and added a round-end and game-end screen showing the user some stats about how they performed. I had to temporarily remove some flags as they were kinda buggy but they will be added back in the future :)"}, {"post_id": 14285, "ts": "2026-06-23T10:39:39Z", "hours": 4.2842, "text": "Heyy, I am kinda obsessed with flags so that is why I’m working on a fun little browser game about them. Here is how it works: You will be presented a random country flag, but one color is missing. Your mission is to then recreate the missing color within a set time by using HSL sliders. Each game consists of 5 rounds and you will be rewarded points depending on the accuracy of your recreation. I spent the first two days setting up some boilerplate code and preparing the flag SVGs. I then implemented a seed system which allows users to challenge their friends. This system can also be used to generate daily challenges. Then I spent some time trying to fix up some flags because some of the SVGs were kinda buggy but I still did not find a real solution. BUT the game is kinda playable already. Next steps: implement a scoring system fix up the buggy flags make it FUN 🌟 to use maybe add none-country flags (?)"}]...
|
Title: Flag Matcher by @yellowissuchanoverratedcol Title: Flag Matcher by @yellowissuchanoverratedcolor | Stardance
Devlogs:
Heyy, I am kinda obsessed with flags so that is why I’m working on a fun little browser game about them. Here is how it works: You will be presented a random country flag, but one color is missing. Your mission is to then recreate the missing color within a set time by using HSL sliders. Each game consists of 5 rounds and you will be rewarded points depending on the accuracy of your recreation. I spent the first two days setting up some boilerplate code and preparing the flag SVGs. I then implemented a seed system which allows users to challenge their friends. This system can also be used to generate daily challenges. Then I spent some time trying to fix up some flags because some of the SVGs were kinda buggy but I still did not find a real solution. BUT the game is kinda playable already. Next steps: implement a scoring system fix up the buggy flags make it FUN 🌟 to use maybe add none-country flags (?)
I finally implemented the scoring system (needs some improvements but still) and added a round-end and game-end screen showing the user some stats about how they performed. I had to temporarily remove some flags as they were kinda buggy but they will be added back in the future :)
Flag-Matcher - a fun flag game that runs in your browser - Devlog 3 Ugghhhhh I hate writing readmes so much but I finally wrote one for my project today :)) I then spent like 30 minutes trying to improve the scoring system but all my ideas kinda sucked so I gave up. (Please contact me if you have any idea on how to implement a better one!!) And that was kinda it for the day.. Oh and also I removed a lot of buggy flags to it should be playable now: https://floopus44.github.io/Flag-Matcher/
Flag-Matcher - a fun flag game that runs in your browser - Devlog 4 (How I spent 2 hours trying to fix a bug that did not exist) I thought I had discovered a bug in my browser game about flags. The game uses a seed system to generate random challenges as well as daily challenges. So yesterday, I tried taking the daily challenge and opened the website right around midnight. But, to my surprise, the challenge was the same one as the day before.. After panicking quite a bit, I tried to find the bug. I think I spent like two hours in total trying to find it. But, just as I was about to rewrite the code, it hit me: Maybe I opened the site right before 0:00 (like probably two seconds before). My PC’s clock is a bit out of sync so that was most likely the cause of it all. But fixing imaginary bugs wasn’t the only thing I did that day as I then changed up the scoring system a little bit: Previously, I just simply took the difference of the target and the guess HSL values and put them in a non-linear formula. This kinda sucked because HSL works like this: A hue of 0 is the color red, BUT a hue of 359 is also red (kinda like a circle). So, as you can probably guess, that lead to some weird scores in the past. To fix it, I now convert the HSL to RGB values, take the difference of those and then calculate the scores. I added two parameters to tweak the algorithm: punishFactor and curveFactor. The higher the punishFactor, the harder the game will be and if you lower the curveFactor, it will be more forgiving for close guesses. Those modifications should make the scoring system feel way better now. Planned additions for the next day: Mobile version Finally fix some of those buggy flags
Flag-Matcher - a fun flag game that runs in your browser - Devlog 5 Thank you so much for all the feedback, I really appreciate it!! <3 Today I improved the UI of the landing page a little bit. Should feel way more straightforward now!! (I am planning to add pics to the front page in the future but I kinda suck at designing stuff) I then looked through the feedback I got and one of the most common complaints was that the design of the timer was kinda annoying so I replaced it with a circular SVG timer. When time runs out it also changes the color and starts to blink as a small little visual indicator. It was kinda my first time actually doing stuff with SVG instead of just downloading them lol and it was kinda exciting figuring all of it out. For the next devlog, I am planning to add a few sound indicators to the timer. Other suggestions I got, that I definitely want to implement: Custom timer options (also no timer) Easy mode Mobile version (working on it!!) (PS: the first pic shows the new landing page, and the other ones show the new timer design)
Ships:
I am kinda obsessed with country flags so I created a fun browser game about them. The mission is to recreate colors of country flags as close as possible using HSL sliders. I added both a daily challenge that is the same for everyone and a random challenge for when the daily challenge isn’t enough :) Features 🎨 Match hidden flag colors using Hue, Saturation and Lightness sliders 🌍 Country flags from all around the world 🏆 A challenging scoring system 📅 Daily challenges 🎲 Random challenges for when the daily challenge isn’t enough 🔗 Shareable links so you can easily challenge your friends 🌐 Runs entirely in your browser, no need to download anything It would mean the world to me if you give it a try <3 https://floopus44.github.io/Flag-Matcher/ (UI is WIP)...
|
1793127140.5534618
|
1793213540.5534618
|
|
56278
|
web os by @yellowissuchanoverratedcolor | Stardanc web os by @yellowissuchanoverratedcolor | Stardance...
|
yellowissuchanoverratedcolor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: web os by @yellowissuchanoverratedcolor | S Title: web os by @yellowissuchanoverratedcolor | Stardance...
|
1792655542.0835023
|
1793260342.0835023
|
|
47538
|
My awesome macropad! by @yellobean090 | Stardance
|
yellobean090
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yellobean090 | Sta Title: My awesome macropad! by @yellobean090 | Stardance...
|
1792518709.9821765
|
1793123509.9821765
|
|
22670
|
My first slack bot! by @yejin | Stardance
|
yejin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @yejin | Stardance
|
1792507850.171937
|
1793112650.171937
|
|
32101
|
jarvis ai assistant by @yehudagusovsky | Stardance
|
yehudagusovsky
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: jarvis ai assistant by @yehudagusovsky | St Title: jarvis ai assistant by @yehudagusovsky | Stardance...
|
1792479059.2605488
|
1793083859.2605488
|
|
321
|
Frictionless by @yehor | Stardance
|
yehor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @yehor | Stardance
|
1792943640.6702797
|
1793807640.6702797
|
|
62072
|
My awesome macropad! by @yehor | Stardance
|
yehor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yehor | Stardance
|
1793044180.0722792
|
1793648980.0722792
|
|
30325
|
Forkast by @yehonatanEldar | Stardance
|
yehonatanEldar
|
0
|
12.89
|
0
|
[]
|
[{"post_id": 25806, "ts": "202 [{"post_id": 25806, "ts": "2026-07-10T08:35:09Z", "hours": 1.2639, "text": "Numpy is so goated 😍🥹🥵🥰💘 working on creating the full dataset file."}, {"post_id": 25342, "ts": "2026-07-09T16:02:04Z", "hours": 1.1492, "text": "I never thought I would be this happy seeing tons of fork images 🥹🍴"}, {"post_id": 25281, "ts": "2026-07-09T13:48:34Z", "hours": 1.9153, "text": "Working on web scraping for the training/testing dataset 🤓"}, {"post_id": 25191, "ts": "2026-07-09T08:21:23Z", "hours": 2.3708, "text": "The bugs are out of control 😭😭😭😭😭😭"}, {"post_id": 24035, "ts": "2026-07-07T10:00:32Z", "hours": 2.1594, "text": "Drowning in bugs 🪳🪳🪳😭😭😭😭😭"}, {"post_id": 23479, "ts": "2026-07-06T14:08:58Z", "hours": 1.8233, "text": "Started working on testing 😒"}, {"post_id": 23409, "ts": "2026-07-06T10:51:41Z", "hours": 2.2106, "text": "In the proccess of creating the structure of the neural network ✌️😭"}]...
|
Title: Forkast by @yehonatanEldar | Stardance
Dev Title: Forkast by @yehonatanEldar | Stardance
Devlogs:
In the proccess of creating the structure of the neural network ✌️😭
Started working on testing 😒
Drowning in bugs 🪳🪳🪳😭😭😭😭😭
The bugs are out of control 😭😭😭😭😭😭
Working on web scraping for the training/testing dataset 🤓
I never thought I would be this happy seeing tons of fork images 🥹🍴
Numpy is so goated 😍🥹🥵🥰💘 working on creating the full dataset file....
|
1792637489.6156116
|
1793242289.6156116
|
|
5879
|
Michigan Roadready Alternative by @yefoi | Stardan Michigan Roadready Alternative by @yefoi | Stardance...
|
yefoi
|
0
|
1.85
|
0
|
[]
|
[{"post_id": 7530, "ts": "2026 [{"post_id": 7530, "ts": "2026-06-12T16:02:08Z", "hours": 0.4917, "text": "created the all drives page, start looking into how to actually use react native so I can start making it for real"}, {"post_id": 6981, "ts": "2026-06-11T18:36:27Z", "hours": 1.3539, "text": "I worked on creating some screens for logging in, migrating, and the home page for the app in figma."}]...
|
Title: Michigan Roadready Alternative by @yefoi | Title: Michigan Roadready Alternative by @yefoi | Stardance
Devlogs:
I worked on creating some screens for logging in, migrating, and the home page for the app in figma.
created the all drives page, start looking into how to actually use react native so I can start making it for real...
|
1792497305.9575486
|
1793102105.9575486
|
|
14666
|
HSV Vegetation Classifier by @yefoi | Stardance
|
yefoi
|
0
|
25.56
|
0
|
[]
|
[{"post_id": 20001, "ts": "202 [{"post_id": 20001, "ts": "2026-07-01T14:06:26Z", "hours": 0.3072, "text": "worked on expanding my algorithm to now also test out using a median method rather than just looking averages. this has resutled in my outcomes being less biased against the mixed class and reducing inference time by half. Sorry the image is not very descriptive but basically it takes the median rather than averaging them all together. thats the only change and I went through testing. Look at the confusion matrix, its not as imbalanced"}, {"post_id": 18387, "ts": "2026-06-29T14:58:13Z", "hours": 0.7211, "text": "working on the random forest classification method. it performs very well!"}, {"post_id": 15737, "ts": "2026-06-25T16:43:47Z", "hours": 0.8653, "text": "As I was working on adding comments to my algo code I noticed that my dry images (~330) was significantly lower than my two other classes so i took a little tangent and almost doubled the amount of images I have for my dry class to make it a better comparison"}, {"post_id": 15703, "ts": "2026-06-25T15:13:33Z", "hours": 1.6506, "text": "Adjusted the texture analysis bit to now use hue-saturation based co-occurance. It looks at how in a 3x3 grid, how the colors are distributed and their ratios. For ex, an image where its very even green, then the ratio of yellows to greens is similar across the whole image, more likely to be dense. If the image, has… mixed vegetation… then the co-occurance is less but the difference in ratios is bigger, and it is classified as mixed. Compared to previous devlog you can see there is an improvement, but there is obviously also variance between dense and mixed but not any when the true label is dense so i’m going to look into this bias later"}, {"post_id": 14374, "ts": "2026-06-23T14:13:09Z", "hours": 1.5186, "text": "I’ve also been looking into how to change the texture system to be consistent, i tried using a custom made value co-occurance system (Results in image) and used that to get an AI-coded GLCM based co-occurance system to try to get a texture but it genuinely seems like there is no real distrinction between the dense and the mixed classes in terms of texture, so I do think I’ve run into a wall here. Without neural networks (Which would ruin the point of having interpretability in my program) i genuinely dont know how I would fix this. So, I’m deciding to temporarily scrap the texture idea for my own program. to make up for this because I still want something to distinguish my algorithm or make it unique, i was just thinking to have some system such that with a large sample size, it uses EMD to find the best 25 centeroid/medoid images to create a (near) perfectly representative hue-saturation histogram. Actually I think I do want some kind of texture detection but it doesnt necessarily have to be with the value channel since that varies with luminance a ton lol"}, {"post_id": 13766, "ts": "2026-06-22T15:49:38Z", "hours": 2.0578, "text": "Started the day off by trying to get a siamese network to work alongside my algorithm but I didnt get any results yet. Afterwards I setup a system with my custom algorithm such that I give it a pre-made list of the best images to look at. I also actually went back to using EMD because I realized an issue with the program was that there were too few buckets. My previous way of using 12 hue buckets and 8 saturation buckets was being too lenient with EMD because a shift from orange-yellow to green in hue would just be like 1-2 buckets away. This means that the program wasn’t sensitive enough and as a result favored the extreme classes (dense and dry). I changed back to EMD, added the best list, and increased the buckets. The image used in this devlog actually is using random images from the 80 folder as the training sample, which is the eventual goal (Being able to use totally random training images to work the best) so I think this is hte most fair to post as progress. I’m thinking maybe I can add some system that automatically chooses the best images?"}, {"post_id": 12257, "ts": "2026-06-20T00:45:01Z", "hours": 2.9119, "text": "Worked on rewriting the code. Instead of using EMD I’m now using fisher weights and I readjusted the code for 3 classes, and as you can see there is a dramatic increase in performance! I’m going to start working on the Siamese network for comparison side of the paper"}, {"post_id": 10219, "ts": "2026-06-16T20:50:07Z", "hours": 1.8169, "text": "Began testing with an 80/20 split using my dataset. However, you can see here obviously that there are many issues with the program. Here is my new approach: Test out (Not completely change to) fisher chi squared weights, maybe EMD is the problem? Redo the dataset using three classes Scrap current shadow detection"}, {"post_id": 8098, "ts": "2026-06-13T14:54:10Z", "hours": 1.2614, "text": "Went through all of my data and sorted through images, specifically from forest8 and forest17 since those were incredibly problematic. I then collected averages for 50 images for each class from my training group for my HSV algorithm so i can start testing and creating a demo website."}, {"post_id": 7516, "ts": "2026-06-12T15:28:20Z", "hours": 0.8039, "text": "Created a unified system that evaluates both the color and the noise! the algorithm is complete, and the next steps are completing the implementation of other algorithms to run comparative analysis and a demo website for people to play around with the system on."}, {"post_id": 7487, "ts": "2026-06-12T14:25:01Z", "hours": 0.6861, "text": "a little bit of a breakthrough with using canny instead of laplachian to look out for density of sharp edges in value differences rather than entire fluctuations! You can see in the terminal that the canopy (good) image registers a much higher canniness score than the low shrub, which has fewer and less sharp shadows. This is the direction I want to take the texture detection algorithm in, now it’s just time to integrate it into the decision making machine"}, {"post_id": 7457, "ts": "2026-06-12T12:56:07Z", "hours": 1.4831, "text": "the final sort. ~2200 images fully sorted into their respective categories and ready for training."}, {"post_id": 7136, "ts": "2026-06-11T22:29:03Z", "hours": 2.1681, "text": "horrible day today with the sorting process. I changed the types to canopy, dry, lowShrub, and patchy, which was a small change but that meant I had to redo the sorting which was OK with me at first because these category names make more sense. then I realized that there was an issue with my google colab project where it wouldnt send the images to lowShrub folder because i had hardcoded “flat” into there which was really stupid of me so I wasted another hour there. I’m back at 1100/2200 images sorted and unfortunately it looks like I’m gonna have to finish this tomorrow."}, {"post_id": 6883, "ts": "2026-06-11T15:20:03Z", "hours": 1.76, "text": "I’ve been going through a new set of images and classifying them for my yolov8 model that im gonna benchmark and compare this to with the categories “canopy”, “dry”, “flat”, and “patchy”. I got 1100/2200 of those images done and uploaded to lapse."}, {"post_id": 6421, "ts": "2026-06-10T19:58:26Z", "hours": 0.9967, "text": "Worked on using Earth Mover’s Distance algorithm in order to calcualte HSV color distance rather than absolute difference. EMD is the standard for these types of applications so this is a good change. I also noticed that the visualiation from last devlog didn’t load so i also uploaded that in this devlog image"}, {"post_id": 6197, "ts": "2026-06-10T12:33:36Z", "hours": 1.4736, "text": "began on implementing my own HSV algorithm! i’ve already had some work put into it from previous project but most of this is made by hand. Essentially, it goes through each pixel in the image using vectorization and places it on a 2D histogram. it’s 12 buckets wide for hue and 8 buckets high for saturation. I then used matplotlib in python in order to visualize the 2D histograms and then start comparing it to the reference images that the uesr inputs, although I haven’t been able to numerically compare them yet. below attached is a result and its visualization"}, {"post_id": 6011, "ts": "2026-06-10T02:29:22Z", "hours": 3.0756, "text": "Set up a YOLOv8 model that is fine tuned to categorize vegetation images into good, mediocre, and poor vegetation. I actually started doing the categorization for training data a while ago but all of the technical stuff began after June 1st and that time was not logged. Ive done this before so it was quite easy, and its classifying well!"}]...
|
Title: HSV Vegetation Classifier by @yefoi | Stard Title: HSV Vegetation Classifier by @yefoi | Stardance
Devlogs:
Set up a YOLOv8 model that is fine tuned to categorize vegetation images into good, mediocre, and poor vegetation. I actually started doing the categorization for training data a while ago but all of the technical stuff began after June 1st and that time was not logged. Ive done this before so it was quite easy, and its classifying well!
began on implementing my own HSV algorithm! i’ve already had some work put into it from previous project but most of this is made by hand. Essentially, it goes through each pixel in the image using vectorization and places it on a 2D histogram. it’s 12 buckets wide for hue and 8 buckets high for saturation. I then used matplotlib in python in order to visualize the 2D histograms and then start comparing it to the reference images that the uesr inputs, although I haven’t been able to numerically compare them yet. below attached is a result and its visualization
Worked on using Earth Mover’s Distance algorithm in order to calcualte HSV color distance rather than absolute difference. EMD is the standard for these types of applications so this is a good change. I also noticed that the visualiation from last devlog didn’t load so i also uploaded that in this devlog image
I’ve been going through a new set of images and classifying them for my yolov8 model that im gonna benchmark and compare this to with the categories “canopy”, “dry”, “flat”, and “patchy”. I got 1100/2200 of those images done and uploaded to lapse.
horrible day today with the sorting process. I changed the types to canopy, dry, lowShrub, and patchy, which was a small change but that meant I had to redo the sorting which was OK with me at first because these category names make more sense. then I realized that there was an issue with my google colab project where it wouldnt send the images to lowShrub folder because i had hardcoded “flat” into there which was really stupid of me so I wasted another hour there. I’m back at 1100/2200 images sorted and unfortunately it looks like I’m gonna have to finish this tomorrow.
the final sort. ~2200 images fully sorted into their respective categories and ready for training.
a little bit of a breakthrough with using canny instead of laplachian to look out for density of sharp edges in value differences rather than entire fluctuations! You can see in the terminal that the canopy (good) image registers a much higher canniness score than the low shrub, which has fewer and less sharp shadows. This is the direction I want to take the texture detection algorithm in, now it’s just time to integrate it into the decision making machine
Created a unified system that evaluates both the color and the noise! the algorithm is complete, and the next steps are completing the implementation of other algorithms to run comparative analysis and a demo website for people to play around with the system on.
Went through all of my data and sorted through images, specifically from forest8 and forest17 since those were incredibly problematic. I then collected averages for 50 images for each class from my training group for my HSV algorithm so i can start testing and creating a demo website.
Began testing with an 80/20 split using my dataset. However, you can see here obviously that there are many issues with the program. Here is my new approach: Test out (Not completely change to) fisher chi squared weights, maybe EMD is the problem? Redo the dataset using three classes Scrap current shadow detection
Worked on rewriting the code. Instead of using EMD I’m now using fisher weights and I readjusted the code for 3 classes, and as you can see there is a dramatic increase in performance! I’m going to start working on the Siamese network for comparison side of the paper
Started the day off by trying to get a siamese network to work alongside my algorithm but I didnt get any results yet. Afterwards I setup a system with my custom algorithm such that I give it a pre-made list of the best images to look at. I also actually went back to using EMD because I realized an issue with the program was that there were too few buckets. My previous way of using 12 hue buckets and 8 saturation buckets was being too lenient with EMD because a shift from orange-yellow to green in hue would just be like 1-2 buckets away. This means that the program wasn’t sensitive enough and as a result favored the extreme classes (dense and dry). I changed back to EMD, added the best list, and increased the buckets. The image used in this devlog actually is using random images from the 80 folder as the training sample, which is the eventual goal (Being able to use totally random training images to work the best) so I think this is hte most fair to post as progress. I’m thinking maybe I can add some system that automatically chooses the best images?
I’ve also been looking into how to change the texture system to be consistent, i tried using a custom made value co-occurance system (Results in image) and used that to get an AI-coded GLCM based co-occurance system to try to get a texture but it genuinely seems like there is no real distrinction between the dense and the mixed classes in terms of texture, so I do think I’ve run into a wall here. Without neural networks (Which would ruin the point of having interpretability in my program) i genuinely dont know how I would fix this. So, I’m deciding to temporarily scrap the texture idea for my own program. to make up for this because I still want something to distinguish my algorithm or make it unique, i was just thinking to have some system such that with a large sample size, it uses EMD to find the best 25 centeroid/medoid images to create a (near) perfectly representative hue-saturation histogram. Actually I think I do want some kind of texture detection but it doesnt necessarily have to be with the value channel since that varies with luminance a ton lol
Adjusted the texture analysis bit to now use hue-saturation based co-occurance. It looks at how in a 3x3 grid, how the colors are distributed and their ratios. For ex, an image where its very even green, then the ratio of yellows to greens is similar across the whole image, more likely to be dense. If the image, has… mixed vegetation… then the co-occurance is less but the difference in ratios is bigger, and it is classified as mixed. Compared to previous devlog you can see there is an improvement, but there is obviously also variance between dense and mixed but not any when the true label is dense so i’m going to look into this bias later
As I was working on adding comments to my algo code I noticed that my dry images (~330) was significantly lower than my two other classes so i took a little tangent and almost doubled the amount of images I have for my dry class to make it a better comparison
working on the random forest classification method. it performs very well!
worked on expanding my algorithm to now also test out using a median method rather than just looking averages. this has resutled in my outcomes being less biased against the mixed class and reducing inference time by half. Sorry the image is not very descriptive but basically it takes the median rather than averaging them all together. thats the only change and I went through testing. Look at the confusion matrix, its not as imbalanced...
|
1792734906.1131082
|
1793339706.1131082
|
|
16719
|
Code Blocks Mac Automator by @yefoi | Stardance
|
yefoi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Code Blocks Mac Automator by @yefoi | Stard Title: Code Blocks Mac Automator by @yefoi | Stardance...
|
1792709586.7950325
|
1793314386.7950325
|
|
71383
|
My first slack bot! by @yeetle | Stardance
|
yeetle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @yeetle | Stardance
|
1792964824.968842
|
1793569624.968842
|
|
71396
|
zenith by @yeetle | Stardance
|
yeetle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: zenith by @yeetle | Stardance
|
1792972028.3295228
|
1793576828.3295228
|
|
71538
|
Web OS by @yeetle | Stardance
|
yeetle
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Web OS by @yeetle | Stardance
|
1793058432.7643807
|
1793663232.7643807
|
|
71487
|
Coox by @yeetables | Stardance
|
yeetables
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Coox by @yeetables | Stardance
|
1793029623.5007465
|
1793634423.5007465
|
|
6898
|
My awesome macropad! by @yeatical | Stardance
|
yeatical
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yeatical | Stardan Title: My awesome macropad! by @yeatical | Stardance...
|
1792756645.9896543
|
1793361445.9896543
|
|
68401
|
EHD thruster by @yeasin-abdullah | Stardance
|
yeasin-abdullah
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: EHD thruster by @yeasin-abdullah | Stardanc Title: EHD thruster by @yeasin-abdullah | Stardance...
|
1793120077.289049
|
1793724877.289049
|
|
17862
|
Arona Chat by @yearcakes | Stardance
|
yearcakes
|
4
|
79.0
|
1237
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-30T12:39:46Z", "hours": 1.0, "multiplier": 9.78, "payout": 7, "blessing": "neutral", "text": "Some small improvements.", "repo": "https://github.com/zhaozhuoran/arona-chat-open", "demo": "https://aronachat.yearcakes.com/"}, {"ship_num": 2, "ts": "2026-09-16T14:26:13Z", "hours": 21.0, "multiplier": 18.5, "payout": 396, "blessing": "neutral", "text": "This is the last ship for Arona Chat for the time being. Since my new semester started on August 31st, I won’t have as much time to work on Arona Chat or add new features. Anyway, I hope you all enjoy Arona Chat!", "repo": "https://github.com/zhaozhuoran/arona-chat-open", "demo": "https://aronachat.yearcakes.com/"}, {"ship_num": 3, "ts": "2026-07-20T05:46:47Z", "hours": 56.0, "multiplier": 14.84, "payout": 826, "blessing": "neutral", "text": "After a lot of work, AronaChat v1.2.0 is finally here! With this update, I’m continuing to transform AronaChat from a simple project into a real product that people can actually use. The Public Demo is now live! This is not just a temporary showcase — I want to build it into a long-term usable product. You can connect your own API providers and use AronaChat with your own models. Security and privacy are also a priority. API keys are stored with encryption and protected by multiple security measures to keep your credentials as safe as possible. Due to storage and cost considerations, each user currently has a limited storage quota. When the limit is reached, attachments will be automatically removed using a FIFO rolling deletion system. Chat history will be preserved as long as possible while keeping operating costs sustainable. Thank you everyone who has followed AronaChat’s journey! This is only the beginning, and I hope AronaChat can become a tool that people truly enjoy using.", "repo": "https://github.com/zhaozhuoran/arona-chat-open", "demo": "https://aronachat.yearcakes.com/"}, {"ship_num": 4, "ts": "2026-06-13T09:11:19Z", "hours": 1.0, "multiplier": 8.56, "payout": 8, "blessing": "neutral", "text": "What did you make? I built Arona Chat, a full-stack AI chat application powered by Cloudflare Workers, D1, R2, Durable Objects, and OpenRouter. It supports chat sessions, file attachments, usage tracking, budget management, authentication, and model selection, all wrapped in a Blue Archive-inspired interface. What was challenging? The most challenging part was designing the backend architecture around long-running AI responses and usage tracking. One lesson I learned the hard way is that inefficient SQLite access patterns can dramatically increase database costs. As the project grew, I had to rethink how usage statistics were stored and aggregated instead of recalculating everything repeatedly. Another challenge was handling very long SSE streams. For AI responses that may take a long time to complete, it is important that processing continues even if the client disconnects. This was my first time introducing Durable Objects into a production project, and they turned out to be a great fit for maintaining state and ensuring reliable streaming behavior. What are you proud of? I’m proud that this project pushed me beyond simple CRUD applications and into distributed system design. Integrating Durable Objects, building usage aggregation, and optimizing streaming performance taught me a lot about how real-world AI applications are built. I’m also genuinely impressed by Cloudflare R2. It was extremely easy to integrate, works reliably, and offers a very generous free tier, making it an excellent choice for student developers and hobby projects. How can people test it? Fork this repository. Update the wrangler.toml configuration for your own Cloudflare resources (do not commit any secrets). Deploy the frontend (frontend) to Cloudflare Pages and the backend (backend) to Cloudflare Workers. Configure the required Secrets in Cloudflare after deployment. Open the deployed site and log in using the password you configured. Create your first Passkey (highly recommended for a better login experience). Start chatting, upload files, try different models, and explore usage statistics and budget management features.", "repo": "https://github.com/zhaozhuoran/arona-chat-open", "demo": "https://aronachat.yearcakes.com/"}]...
|
[{"post_id": 75553, "ts": "202 [{"post_id": 75553, "ts": "2026-09-30T12:37:56Z", "hours": 1.2942, "text": "I added a simple sharing function. I also added automatic picture attachment compression, which should save a lot of tokens. Commit"}, {"post_id": 68643, "ts": "2026-09-15T13:37:00Z", "hours": 4.7658, "text": "This is the last update for Arona Chat for the time being. In this update, I’ve added automatic image resizing, support for TXT and Markdown files, dynamic username injection in the greeting and system prompt, and the new Ethereal Dark theme. However, since my new semester started on August 31st, I won’t have as much time to work on Arona Chat or add new features. Anyway, I hope you all enjoy Arona Chat! Commit"}, {"post_id": 40574, "ts": "2026-08-04T06:52:05Z", "hours": 2.5586, "text": "Hey guys! I’m currently working on a new theme (Ethereal Dark) for Arona Chat, and it will probably introduce a very large diff with many UI/CSS/component changes. I’m thinking about creating a dedicated feature branch (theme/ethereal-dark) for this work instead of directly committing everything to main. The idea is to keep the development process transparent and easier to review for future reviewers and users. After the theme is complete, I’ll merge it back into main. So I’d like to get your opinion: Do you prefer seeing the full development history through a feature branch? Or do you think keeping a cleaner main history with a larger commit is better? Thanks!"}, {"post_id": 40524, "ts": "2026-08-04T03:31:20Z", "hours": 6.0331, "text": "Settings now save automatically as soon as you make changes, so there’s no more clicking Save everywhere. The user list also shows each user’s email when available (falling back to the Clerk ID). Improved auth by showing a recovery screen if initialization gets stuck for 12 seconds, and hardened SSRF protection against alternative IPv4 bypass tricks. I’ve already started designing the Ethereal Dark theme too, but since it’s unrelated to this commit I didn’t include it yet. Still probably another 8–10 hours to go before it’s ready. Commit"}, {"post_id": 38059, "ts": "2026-07-31T07:37:52Z", "hours": 4.6294, "text": "After using the Ethereal Light theme for a while, I realized that although the core chat interface was done, many secondary pages still looked like they belonged to a completely different application. So this update wasn’t about adding a flashy new feature, it was about finishing what Ethereal Light was always meant to be. This is one of those updates where most users probably won’t notice every individual change, but I hope everyone notices that Ethereal Light feels even more beautiful now. I also realized that good UI isn’t about making one page beautiful, it’s about making every page feel like it was designed together. Commit"}, {"post_id": 37591, "ts": "2026-07-30T12:56:46Z", "hours": 1.7836, "text": "Confession time: I’m a high school STEM student. I spend far more time studying math, physics, chemistry, and biology than anything related to design. I have almost no artistic background, and I’m much more of a coder than a designer, so building Ethereal Light has been quite a journey. Half of the CSS for Ethereal Light only exists because I kept googling, “How do I make this look less ugly?” 😭 Somehow, after countless tiny tweaks, it’s finally starting to look like the theme I imagined. Anyway, I hope you love Arona Chat."}, {"post_id": 37517, "ts": "2026-07-30T10:14:34Z", "hours": 1.0261, "text": "I’m planning to further polish Ethereal Light theme and address the suggestions mentioned in the rating feedback. Thanks everyone for the support!"}, {"post_id": 32697, "ts": "2026-07-22T00:42:44Z", "hours": 0.5992, "text": "Upcoming Changes: Add more personalization features, such as customizable tone and emoji usage. Refine the Ethereal Light theme."}, {"post_id": 31626, "ts": "2026-07-20T05:40:15Z", "hours": 1.5953, "text": "After fixing a number of issues, the Arona Chat Public Demo is finally ready! You can try it using the link below. https://aronachat.yearcakes.com/"}, {"post_id": 31317, "ts": "2026-07-19T16:46:36Z", "hours": 4.7217, "text": "AronaChat v1.2.0 — A Bigger Update Than The Version Number Suggests Today, I completed AronaChat v1.2.0! Although this is only a minor version bump, it actually includes a lot of major improvements and new features. In this update, I added multi-provider support, custom models, the new Ethereal Light theme, and many other improvements. There are still many things to polish, but I’m working hard to turn AronaChat into something that we can genuinely use in our daily lives — not just a project. The current codebase has grown into a very complex system, so I’m planning to deploy the Public Demo version tomorrow. But this Public Demo is not just a temporary showcase. My goal is to make it a long-term usable product. You will be able to connect your own API providers and use AronaChat with your own services. To protect your privacy and security, the current version includes encrypted API key storage and multiple layers of security protection to keep your credentials as safe as possible. Due to storage and cost considerations, each user will have a fixed storage quota. If the limit is exceeded, attachments will be automatically removed using a FIFO (First In, First Out) rolling deletion system. For chat history, I’ll try my best to keep conversations stored for as long as possible while maintaining reasonable operating costs. Thank you for following the development of AronaChat! This is still just the beginning, and I hope it can become a tool that people truly enjoy using."}, {"post_id": 30657, "ts": "2026-07-18T12:26:38Z", "hours": 2.2361, "text": "The core development work is pretty much done! I’m now moving into the final polishing phase—doing security reviews, testing everything thoroughly, and fixing all the little rough edges I can find. Once that’s finished, I’ll deploy the new build as a public instance that everyone can use long-term. Can’t wait to share it with you all!"}, {"post_id": 30560, "ts": "2026-07-18T07:28:12Z", "hours": 2.12, "text": "🌸 Devlog Update I’m currently exploring a better and more reasonable resource limitation system, hoping to make the DEMO experience smoother, friendlier, and more enjoyable for everyone! I’m also working on adding support for custom model providers, so you’ll be able to add your own providers and use this project as a complete long-term solution instead of just a DEMO. Of course, this also brings some new challenges qwq Since users will be able to add their own API Keys, I need to carefully design a secure system to make sure your keys stay safe and never get exposed. I’m planning a layered architecture with encryption, multiple authentication layers, and additional security protections. This project is becoming much more complicated than I originally expected… but I want to build it properly instead of rushing it 🥺✨ 🌱 About Storage S3-compatible storage is really expensive qwq, so for now I’ve added per-user file size limits and a 7-day automatic cleanup system. I know these limits are a little too strict, and I’m really sorry about that 🥲💦 I hope you can understand that I’m still a solo developer trying to keep the service sustainable. To improve this, I’m building my own tiered storage system — Minamo 🌊 After Minamo is finished, attachment storage limits will be increased significantly, and the 7-day automatic cleanup will be removed! 🎉 If you like this project, you can follow this project or follow Minamo to receive future updates and new features 💫 Thank you so much for supporting this project! 💙"}, {"post_id": 30185, "ts": "2026-07-17T15:34:58Z", "hours": 4.2597, "text": "Whitelist is almost finished! There’s only a little bit left to polish, and I should have it done within the next few days. New ship coming soon™"}, {"post_id": 29884, "ts": "2026-07-17T01:31:04Z", "hours": 1.4356, "text": "Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations [DONE] Visual polish [DONE] Final UI review - almost done Whitelist User resource usage limits (for the demo) Lazy frontend loading"}, {"post_id": 27088, "ts": "2026-07-12T10:32:05Z", "hours": 2.3678, "text": "Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations [DONE] Visual polish [IN PROGRESS] Final UI review - almost done Whitelist User resource usage limits (for the demo) Lazy frontend loading"}, {"post_id": 27039, "ts": "2026-07-12T06:47:49Z", "hours": 1.4494, "text": "Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations [DONE] Visual polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading"}, {"post_id": 27020, "ts": "2026-07-12T05:11:34Z", "hours": 2.5303, "text": "Finally fixed the security vulnerabilities and the remaining bugs. Next, I’ll continue reviewing the codebase and finish the new theme."}, {"post_id": 26596, "ts": "2026-07-11T14:50:43Z", "hours": 3.3919, "text": "I’m currently fixing a number of bugs in the new Ethereal Light theme. At the same time, I had the codebase audited by AI, which identified several critical security issues. I’m actively working through both the theme bugs and the reported vulnerabilities, so the next public commit may be delayed a bit. Before anything is published, I’ll also perform a full manual security review to make sure the public release is free of known security issues."}, {"post_id": 26481, "ts": "2026-07-11T09:28:21Z", "hours": 2.2219, "text": "Unexpectedly discovered several critical bugs. Currently fixing them."}, {"post_id": 26419, "ts": "2026-07-11T06:13:44Z", "hours": 1.4672, "text": "Fixed a bunch of UI, animation, rendering, and performance issues across the Ethereal Light theme and the Settings Panel. Real-time reasoning topic extraction now handles unfinished Markdown chunks correctly, so active words no longer get cut off while responses are streaming. I also switched to stable React keys, which eliminates the annoying text flickering during streaming. The scrolling lock, content clipping, and hidden input issues in Ethereal Light have also been fixed by improving layer isolation and hardware acceleration. Finally, repeated clicks on the Save button in Settings are now automatically deduplicated, preventing duplicate requests when the same configuration is submitted multiple times within 5 seconds."}, {"post_id": 26378, "ts": "2026-07-11T04:07:14Z", "hours": 0.9244, "text": "Fixed a critical bug that could allow users to perform unauthorized operations."}, {"post_id": 25794, "ts": "2026-07-10T08:01:30Z", "hours": 2.67, "text": "Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations Visual polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading"}, {"post_id": 25669, "ts": "2026-07-10T02:34:24Z", "hours": 3.2403, "text": "Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [IN PROGRESS] Animations (almost done) Visual polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading"}, {"post_id": 25112, "ts": "2026-07-09T03:30:04Z", "hours": 2.4272, "text": "I couldn’t decide between a typewriter effect and a fade-in animation for AI responses, so I added both! You can now choose your preferred output animation in Settings."}, {"post_id": 24128, "ts": "2026-07-07T14:30:38Z", "hours": 0.7944, "text": "I refactored the usage calculation. This fixes an issue where the per-model cost wasn’t updated automatically, while also reducing database usage."}, {"post_id": 22584, "ts": "2026-07-05T03:34:45Z", "hours": 2.1117, "text": "I discovered that adding a new feature caused an existing feature to break. To prevent similar regressions, I added smoke tests and a full end-to-end (E2E) test suite."}, {"post_id": 21564, "ts": "2026-07-03T16:19:24Z", "hours": 4.1964, "text": "Status Updated! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft Animations Component art polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading"}, {"post_id": 19919, "ts": "2026-07-01T11:05:33Z", "hours": 2.1733, "text": "I am currently working on: New frontend UI theme (I named it Ethereal Light. It will be very, very beautiful!), and it will be released with a theme selector (if you don’t like it, you can switch to the current Classic theme). Whitelist: enabling you to have a private deployment! User resource usage limits: designed for the demo. Lazy frontend loading: makes the frontend start faster! Bug fixes: the current version has many bugs, including Clerk integration, multi-provider switching, etc. Locating the source of these bugs is very tiring. The next public version will take a long time to release and be pushed to the public repo. I will sync my progress via devlogs. If you have any suggestions, please tell me — they are very, very important to me!"}, {"post_id": 16796, "ts": "2026-06-27T08:28:33Z", "hours": 3.0211, "text": "Integrated Clerk for authentication and fixed various bugs :D"}, {"post_id": 13718, "ts": "2026-06-22T14:21:24Z", "hours": 3.1058, "text": "feat: optimize chat stream stability, security, and frontend rendering performance- Security: Added sensitive data redaction (masking password , secret , token , apiKey ) for trace logs in backend utility request/response body parsing. Stability: Enhanced Durable Object state recovery by persisting and restoring runtime payloads, ensuring the process queue resumes on restart, and adding a 100-second upstream API fetch timeout. Database: Bumped DB schema version to 15, adding applySchemaV14 and applySchemaV15 compatibility stubs. Performance: Refactored ChatSession message lists by extracting and memoizing UserMessageRow and AssistantMessageRow with React.memo , and extracted static Markdown plugins outside of render scopes to eliminate redundant parsing. State Management: Integrated Zustand useShallow selectors across App , ChatInputArea , and ChatSession to prevent unnecessary re-renders. Resilience: Upgraded stream reconnect/resume flow in the store to pass existing stream progress (content and reasoning), preventing flickering and duplicate content rendering on stream recovery."}, {"post_id": 12359, "ts": "2026-06-20T05:08:29Z", "hours": 1.1664, "text": "Added a Demo Mode that allows guest access via a password-based login. Demo mode can be enabled via config. Guests can log in using a shared demo password. All demo sessions are isolated per device. Demo data is separated from production."}, {"post_id": 7960, "ts": "2026-06-13T08:59:45Z", "hours": 0.5317, "text": "Release 1.1.0 This update focuses on enhancing usage tracking capabilities, introducing flexible service tiers and budget management, and delivering deep performance optimizations for the chat experience. 🌟 New Features Usage Aggregation: Added persistent tracking of total requests, prompt/completion tokens, and total cost (USD) within user profiles, including a detailed breakdown by model. Service Tiers: Introduced OpenRouter Service Tier support to balance cost and performance: Flex (0.5x cost): More affordable, but potentially slower or less reliable. Default (1.0x cost): Standard service level. Priority (2.5x cost): Fastest response times and highest priority. Temporary Daily Budget: Added the ability to set a temporary budget override for the current UTC day, allowing short-term flexibility without altering long-term settings. Usage Sync Tool: A new “Recalculate Usage Statistics” feature in the settings allows users to force a backend scan of all records to synchronize aggregated totals. ⚡ Performance Improvements Streaming Render Optimization: Implemented a buffering mechanism using requestAnimationFrame in useStore, shifting high-frequency streaming updates from “immediate trigger” to “frame-synced updates,” significantly reducing re-renders and improving UI smoothness. Refined Auto-Scroll: Overhauled auto-scroll logic in ChatSession to distinguish between session switches, message count changes, and active streaming, ensuring smoother scrolling behavior. 🎨 UI/UX Enhancements Session Management: Pagination: Session list now uses lazy loading (“Load More”) instead of loading all sessions at once, improving startup speed. Quick Actions: Added Pin and Archive capabilities in session menu for better organization. Settings Panel Upgrade: Advanced Tab: Introduced a new “Advanced” tab for system maintenance tools and technical information. Budget UI: Improved budget settings interface with detailed cost multiplier explanations and a dedicated temporary budget input. System Info: Added visibility for Instance ID and Schema Version. 🛠️ Technical Changes Backend Architecture: Modularized routing and migrated chat sessions to a Durable Object-based implementation for better state consistency. Database Migration: Updated user profile schema to support usage aggregation (Schema v13). Shared Types: Updated UserProfile and ChatGenerationSettings types to support new tracking and configuration options."}, {"post_id": 7928, "ts": "2026-06-13T06:57:41Z", "hours": 0.3606, "text": "First Public Release!"}]...
|
Title: Arona Chat by @yearcakes | Stardance
Devlo Title: Arona Chat by @yearcakes | Stardance
Devlogs:
First Public Release!
Release 1.1.0 This update focuses on enhancing usage tracking capabilities, introducing flexible service tiers and budget management, and delivering deep performance optimizations for the chat experience. 🌟 New Features Usage Aggregation: Added persistent tracking of total requests, prompt/completion tokens, and total cost (USD) within user profiles, including a detailed breakdown by model. Service Tiers: Introduced OpenRouter Service Tier support to balance cost and performance: Flex (0.5x cost): More affordable, but potentially slower or less reliable. Default (1.0x cost): Standard service level. Priority (2.5x cost): Fastest response times and highest priority. Temporary Daily Budget: Added the ability to set a temporary budget override for the current UTC day, allowing short-term flexibility without altering long-term settings. Usage Sync Tool: A new “Recalculate Usage Statistics” feature in the settings allows users to force a backend scan of all records to synchronize aggregated totals. ⚡ Performance Improvements Streaming Render Optimization: Implemented a buffering mechanism using requestAnimationFrame in useStore, shifting high-frequency streaming updates from “immediate trigger” to “frame-synced updates,” significantly reducing re-renders and improving UI smoothness. Refined Auto-Scroll: Overhauled auto-scroll logic in ChatSession to distinguish between session switches, message count changes, and active streaming, ensuring smoother scrolling behavior. 🎨 UI/UX Enhancements Session Management: Pagination: Session list now uses lazy loading (“Load More”) instead of loading all sessions at once, improving startup speed. Quick Actions: Added Pin and Archive capabilities in session menu for better organization. Settings Panel Upgrade: Advanced Tab: Introduced a new “Advanced” tab for system maintenance tools and technical information. Budget UI: Improved budget settings interface with detailed cost multiplier explanations and a dedicated temporary budget input. System Info: Added visibility for Instance ID and Schema Version. 🛠️ Technical Changes Backend Architecture: Modularized routing and migrated chat sessions to a Durable Object-based implementation for better state consistency. Database Migration: Updated user profile schema to support usage aggregation (Schema v13). Shared Types: Updated UserProfile and ChatGenerationSettings types to support new tracking and configuration options.
Added a Demo Mode that allows guest access via a password-based login. Demo mode can be enabled via config. Guests can log in using a shared demo password. All demo sessions are isolated per device. Demo data is separated from production.
feat: optimize chat stream stability, security, and frontend rendering performance- Security: Added sensitive data redaction (masking password , secret , token , apiKey ) for trace logs in backend utility request/response body parsing. Stability: Enhanced Durable Object state recovery by persisting and restoring runtime payloads, ensuring the process queue resumes on restart, and adding a 100-second upstream API fetch timeout. Database: Bumped DB schema version to 15, adding applySchemaV14 and applySchemaV15 compatibility stubs. Performance: Refactored ChatSession message lists by extracting and memoizing UserMessageRow and AssistantMessageRow with React.memo , and extracted static Markdown plugins outside of render scopes to eliminate redundant parsing. State Management: Integrated Zustand useShallow selectors across App , ChatInputArea , and ChatSession to prevent unnecessary re-renders. Resilience: Upgraded stream reconnect/resume flow in the store to pass existing stream progress (content and reasoning), preventing flickering and duplicate content rendering on stream recovery.
Integrated Clerk for authentication and fixed various bugs :D
I am currently working on: New frontend UI theme (I named it Ethereal Light. It will be very, very beautiful!), and it will be released with a theme selector (if you don’t like it, you can switch to the current Classic theme). Whitelist: enabling you to have a private deployment! User resource usage limits: designed for the demo. Lazy frontend loading: makes the frontend start faster! Bug fixes: the current version has many bugs, including Clerk integration, multi-provider switching, etc. Locating the source of these bugs is very tiring. The next public version will take a long time to release and be pushed to the public repo. I will sync my progress via devlogs. If you have any suggestions, please tell me — they are very, very important to me!
Status Updated! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft Animations Component art polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading
I discovered that adding a new feature caused an existing feature to break. To prevent similar regressions, I added smoke tests and a full end-to-end (E2E) test suite.
I refactored the usage calculation. This fixes an issue where the per-model cost wasn’t updated automatically, while also reducing database usage.
I couldn’t decide between a typewriter effect and a fade-in animation for AI responses, so I added both! You can now choose your preferred output animation in Settings.
Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [IN PROGRESS] Animations (almost done) Visual polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading
Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations Visual polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading
Fixed a critical bug that could allow users to perform unauthorized operations.
Fixed a bunch of UI, animation, rendering, and performance issues across the Ethereal Light theme and the Settings Panel. Real-time reasoning topic extraction now handles unfinished Markdown chunks correctly, so active words no longer get cut off while responses are streaming. I also switched to stable React keys, which eliminates the annoying text flickering during streaming. The scrolling lock, content clipping, and hidden input issues in Ethereal Light have also been fixed by improving layer isolation and hardware acceleration. Finally, repeated clicks on the Save button in Settings are now automatically deduplicated, preventing duplicate requests when the same configuration is submitted multiple times within 5 seconds.
Unexpectedly discovered several critical bugs. Currently fixing them.
I’m currently fixing a number of bugs in the new Ethereal Light theme. At the same time, I had the codebase audited by AI, which identified several critical security issues. I’m actively working through both the theme bugs and the reported vulnerabilities, so the next public commit may be delayed a bit. Before anything is published, I’ll also perform a full manual security review to make sure the public release is free of known security issues.
Finally fixed the security vulnerabilities and the remaining bugs. Next, I’ll continue reviewing the codebase and finish the new theme.
Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations [DONE] Visual polish Final UI review Whitelist User resource usage limits (for the demo) Lazy frontend loading
Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations [DONE] Visual polish [IN PROGRESS] Final UI review - almost done Whitelist User resource usage limits (for the demo) Lazy frontend loading
Status Update! [IN PROGRESS] New frontend UI theme — Ethereal Light [DONE] Draft [DONE] Animations [DONE] Visual polish [DONE] Final UI review - almost done Whitelist User resource usage limits (for the demo) Lazy frontend loading
Whitelist is almost finished! There’s only a little bit left to polish, and I should have it done within the next few days. New ship coming soon™
🌸 Devlog Update I’m currently exploring a better and more reasonable resource limitation system, hoping to make the DEMO experience smoother, friendlier, and more enjoyable for everyone! I’m also working on adding support for custom model providers, so you’ll be able to add your own providers and use this project as a complete long-term solution instead of just a DEMO. Of course, this also brings some new challenges qwq Since users will be able to add their own API Keys, I need to carefully design a secure system to make sure your keys stay safe and never get exposed. I’m planning a layered architecture with encryption, multiple authentication layers, and additional security protections. This project is becoming much more complicated than I originally expected… but I want to build it properly instead of rushing it 🥺✨ 🌱 About Storage S3-compatible storage is really expensive qwq, so for now I’ve added per-user file size limits and a 7-day automatic cleanup system. I know these limits are a little too strict, and I’m really sorry about that 🥲💦 I hope you can understand that I’m still a solo developer trying to keep the service sustainable. To improve this, I’m building my own tiered storage system — Minamo 🌊 After Minamo is finished, attachment storage limits will be increased significantly, and the 7-day automatic cleanup will be removed! 🎉 If you like this project, you can follow this project or follow Minamo to receive future updates and new features 💫 Thank you so much for supporting this project! 💙
The core development work is pretty much done! I’m now moving into the final polishing phase—doing security reviews, testing everything thoroughly, and fixing all the little rough edges I can find. Once that’s finished, I’ll deploy the new build as a public instance that everyone can use long-term. Can’t wait to share it with you all!
AronaChat v1.2.0 — A Bigger Update Than The Version Number Suggests Today, I completed AronaChat v1.2.0! Although this is only a minor version bump, it actually includes a lot of major improvements and new features. In this update, I added multi-provider support, custom models, the new Ethereal Light theme, and many other improvements. There are still many things to polish, but I’m working hard to turn AronaChat into something that we can genuinely use in our daily lives — not just a project. The current codebase has grown into a very complex system, so I’m planning to deploy the Public Demo version tomorrow. But this Public Demo is not just a temporary showcase. My goal is to make it a long-term usable product. You will be able to connect your own API providers and use AronaChat with your own services. To protect your privacy and security, the current version includes encrypted API key storage and multiple layers of security protection to keep your credentials as safe as possible. Due to storage and cost considerations, each user will have a fixed storage quota. If the limit is exceeded, attachments will be automatically removed using a FIFO (First In, First Out) rolling deletion system. For chat history, I’ll try my best to keep conversations stored for as long as possible while maintaining reasonable operating costs. Thank you for following the development of AronaChat! This is still just the beginning, and I hope it can become a tool that people truly enjoy using.
After fixing a number of issues, the Arona Chat Public Demo is finally ready! You can try it using the link below. https://aronachat.yearcakes.com/
Upcoming Changes: Add more personalization features, such as customizable tone and emoji usage. Refine the Ethereal Light theme.
I’m planning to further polish Ethereal Light theme and address the suggestions mentioned in the rating feedback. Thanks everyone for the support!
Confession time: I’m a high school STEM student. I spend far more time studying math, physics, chemistry, and biology than anything related to design. I have almost no artistic background, and I’m much more of a coder than a designer, so building Ethereal Light has been quite a journey. Half of the CSS for Ethereal Light only exists because I kept googling, “How do I make this look less ugly?” 😭 Somehow, after countless tiny tweaks, it’s finally starting to look like the theme I imagined. Anyway, I hope you love Arona Chat.
After using the Ethereal Light theme for a while, I realized that although the core chat interface was done, many secondary pages still looked like they belonged to a completely different application. So this update wasn’t about adding a flashy new feature, it was about finishing what Ethereal Light was always meant to be. This is one of those updates where most users probably won’t notice every individual change, but I hope everyone notices that Ethereal Light feels even more beautiful now. I also realized that good UI isn’t about making one page beautiful, it’s about making every page feel like it was designed together. Commit
Settings now save automatically as soon as you make changes, so there’s no more clicking Save everywhere. The user list also shows each user’s email when available (falling back to the Clerk ID). Improved auth by showing a recovery screen if initialization gets stuck for 12 seconds, and hardened SSRF protection against alternative IPv4 bypass tricks. I’ve already started designing the Ethereal Dark theme too, but since it’s unrelated to this commit I didn’t include it yet. Still probably another 8–10 hours to go before it’s ready. Commit
Hey guys! I’m currently working on a new theme (Ethereal Dark) for Arona Chat, and it will probably introduce a very large diff with many UI/CSS/component changes. I’m thinking about creating a dedicated feature branch (theme/ethereal-dark) for this work instead of directly committing everything to main. The idea is to keep the development process transparent and easier to review for future reviewers and users. After the theme is complete, I’ll merge it back into main. So I’d like to get your opinion: Do you prefer seeing the full development history through a feature branch? Or do you think keeping a cleaner main history with a larger commit is better? Thanks!
This is the last update for Arona Chat for the time being. In this update, I’ve added automatic image resizing, support for TXT and Markdown files, dynamic username injection in the greeting and system prompt, and the new Ethereal Dark theme. However, since my new semester started on August 31st, I won’t have as much time to work on Arona Chat or add new features. Anyway, I hope you all enjoy Arona Chat! Commit
I added a simple sharing function. I also added automatic picture attachment compression, which should save a lot of tokens. Commit
Ships:
What did you make? I built Arona Chat, a full-stack AI chat application powered by Cloudflare Workers, D1, R2, Durable Objects, and OpenRouter. It supports chat sessions, file attachments, usage tracking, budget management, authentication, and model selection, all wrapped in a Blue Archive-inspired interface. What was challenging? The most challenging part was designing the backend architecture around long-running AI responses and usage tracking. One lesson I learned the hard way is that inefficient SQLite access patterns can dramatically increase database costs. As the project grew, I had to rethink how usage statistics were stored and aggregated instead of recalculating everything repeatedly. Another challenge was handling very long SSE streams. For AI responses that may take a long time to complete, it is important that processing continues even if the client disconnects. This was my first time introducing Durable Objects into a production project, and they turned out to be a great fit for maintaining state and ensuring reliable streaming behavior. What are you proud of? I’m proud that this project pushed me beyond simple CRUD applications and into distributed system design. Integrating Durable Objects, building usage aggregation, and optimizing streaming performance taught me a lot about how real-world AI applications are built. I’m also genuinely impressed by Cloudflare R2. It was extremely easy to integrate, works reliably, and offers a very generous free tier, making it an excellent choice for student developers and hobby projects. How can people test it? Fork this repository. Update the wrangler.toml configuration for your own Cloudflare resources (do not commit any secrets). Deploy the frontend (frontend) to Cloudflare Pages and the backend (backend) to Cloudflare Workers. Configure the required Secrets in Cloudflare after deployment. Open the deployed site and log in using the password you configured. Create your first Passkey (highly recommended for a better login experience). Start chatting, upload files, try different models, and explore usage statistics and budget management features.
After a lot of work, AronaChat v1.2.0 is finally here! With this update, I’m continuing to transform AronaChat from a simple project into a real product that people can actually use. The Public Demo is now live! This is not just a temporary showcase — I want to build it into a long-term usable product. You can connect your own API providers and use AronaChat with your own models. Security and privacy are also a priority. API keys are stored with encryption and protected by multiple security measures to keep your credentials as safe as possible. Due to storage and cost considerations, each user currently has a limited storage quota. When the limit is reached, attachments will be automatically removed using a FIFO rolling deletion system. Chat history will be preserved as long as possible while keeping operating costs sustainable. Thank you everyone who has followed AronaChat’s journey! This is only the beginning, and I hope AronaChat can become a tool that people truly enjoy using.
This is the last ship for Arona Chat for the time being. Since my new semester started on August 31st, I won’t have as much time to work on Arona Chat or add new features. Anyway, I hope you all enjoy Arona Chat!
Some small improvements....
|
1793112888.1758094
|
1793199288.1758094
|
|
25782
|
Asa Chan by @yearcakes | Stardance
|
yearcakes
|
4
|
23.0
|
124
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T09:34:54Z", "hours": 14.0, "multiplier": 6.02, "payout": 82, "blessing": "neutral", "text": "DM @Asa Chan and type /asachan-start to get started, or use /asachan-settings anytime to manage your settings through an interactive modal! AI enhancement prompts may be delayed by up to 2 minutes.", "repo": "https://github.com/zhaozhuoran/asa-chan-open", "demo": "https://hackclub.enterprise.slack.com/archives/C0BCZ65V1M1/p1785735586304359"}, {"ship_num": 2, "ts": "2026-07-09T11:55:29Z", "hours": 4.0, "multiplier": 5.49, "payout": 22, "blessing": "neutral", "text": "If you have any questions or run into any issues, feel free to DM me.", "repo": "https://github.com/zhaozhuoran/asa-chan-open", "demo": "https://hackclub.enterprise.slack.com/archives/C0BCZ65V1M1/p1785735586304359"}, {"ship_num": 3, "ts": "2026-07-01T11:22:46Z", "hours": 2.0, "multiplier": 5.64, "payout": 14, "blessing": "neutral", "text": "Known Issues Weather reports may be inaccurate in some regions outside East Asia due to limitations of the current weather data provider. I am actively looking for a better weather provider to improve global coverage and accuracy.", "repo": "https://github.com/zhaozhuoran/asa-chan-open", "demo": "https://hackclub.enterprise.slack.com/archives/C0BCZ65V1M1/p1785735586304359"}, {"ship_num": 4, "ts": "2026-06-27T03:39:29Z", "hours": 3.0, "multiplier": 1.79, "payout": 6, "blessing": "neutral", "text": "DM @Asa Chan and type /asachan-start to get started!", "repo": "https://github.com/zhaozhuoran/asa-chan-open", "demo": "https://hackclub.enterprise.slack.com/archives/C0BCZ65V1M1/p1785735586304359"}]...
|
[{"post_id": 39957, "ts": "202 [{"post_id": 39957, "ts": "2026-08-03T09:13:37Z", "hours": 2.3228, "text": "This update mainly focuses on improving the logging system to make operations and maintenance much easier. Logs are now more structured and include more useful context. Commit"}, {"post_id": 39273, "ts": "2026-08-02T04:21:38Z", "hours": 4.465, "text": "I added /asachan-settings, now you can configure AsaChan through a Slack modal instead of using multiple commands. This update also brings AQI, sunrise/sunset, and weather warning support, plus a new /asachan-admin command for basic debugging and more detailed stats for admins. I also added automatic timezone detection from city geocoding. Commit"}, {"post_id": 38840, "ts": "2026-08-01T12:24:11Z", "hours": 5.0344, "text": "I redesigned the settings using Slack Modals. Before, you had to use several different commands to configure everything. Now, you can just run /asachan-settings to open the settings page and manage everything in one place. It’s much easier to use now. Next, I’m planning to improve AQI display and weather alerts display, and fix a few small issues that don’t affect functionality but still aren’t quite perfect."}, {"post_id": 38082, "ts": "2026-07-31T09:24:34Z", "hours": 1.7953, "text": "I just got an idea. I saw Slack’s Modal feature, and I think using it could make the bot cleaner and more interesting. Here’s the official documentation: https://docs.slack.dev/surfaces/modals/"}, {"post_id": 25248, "ts": "2026-07-09T11:51:15Z", "hours": 1.4569, "text": "Added better logging."}, {"post_id": 24652, "ts": "2026-07-08T11:38:28Z", "hours": 2.5253, "text": "Added automatic fallback model support! If a model goes down or becomes unavailable, the bot seamlessly switches to a backup model to keep things running. I also tested and picked better default models, so the overall experience is now much more stable. Added usage statistics so I can better monitor service health and know when it’s time to scale resources. Based on feedback, I added support for another weather provider. Use /asachan-setsource to switch providers and get more reliable weather data, especially outside East Asia."}, {"post_id": 19924, "ts": "2026-07-01T11:14:29Z", "hours": 0.2672, "text": "I found out that the weather report is not accurate outside East Asia. I think this is due to the weather information provider I’m currently using. I’m looking for a better provider. If you know any good alternatives, please let me know!"}, {"post_id": 17049, "ts": "2026-06-27T17:56:26Z", "hours": 1.6486, "text": "🚀 New Features 🤖 AI Weather Fusion Transforms raw weather data into personalized, cozy responses. Use /asachan-mode to toggle it on or off (check out the Cute Mode preview!). 🐾 🌐 Localization Now fully supports Simplified Chinese ( zh ) and English ( en ). Hack Clubbers around the world are welcome to contribute additional languages! ✨ Final checks will be completed tomorrow, followed by an immediate push to the public repository."}, {"post_id": 16767, "ts": "2026-06-27T07:14:05Z", "hours": 0.5222, "text": "Implemented a full migration from JSON-based persistence to SQLite. Added automated daily SQLite backups to improve reliability, data safety, and long-term maintainability."}, {"post_id": 16677, "ts": "2026-06-27T03:30:53Z", "hours": 3.2714, "text": "Today I finished the first usable version of Asa Chan for Slack. 🎉"}]...
|
Title: Asa Chan by @yearcakes | Stardance
Devlogs Title: Asa Chan by @yearcakes | Stardance
Devlogs:
Today I finished the first usable version of Asa Chan for Slack. 🎉
Implemented a full migration from JSON-based persistence to SQLite. Added automated daily SQLite backups to improve reliability, data safety, and long-term maintainability.
🚀 New Features 🤖 AI Weather Fusion Transforms raw weather data into personalized, cozy responses. Use /asachan-mode to toggle it on or off (check out the Cute Mode preview!). 🐾 🌐 Localization Now fully supports Simplified Chinese ( zh ) and English ( en ). Hack Clubbers around the world are welcome to contribute additional languages! ✨ Final checks will be completed tomorrow, followed by an immediate push to the public repository.
I found out that the weather report is not accurate outside East Asia. I think this is due to the weather information provider I’m currently using. I’m looking for a better provider. If you know any good alternatives, please let me know!
Added automatic fallback model support! If a model goes down or becomes unavailable, the bot seamlessly switches to a backup model to keep things running. I also tested and picked better default models, so the overall experience is now much more stable. Added usage statistics so I can better monitor service health and know when it’s time to scale resources. Based on feedback, I added support for another weather provider. Use /asachan-setsource to switch providers and get more reliable weather data, especially outside East Asia.
Added better logging.
I just got an idea. I saw Slack’s Modal feature, and I think using it could make the bot cleaner and more interesting. Here’s the official documentation: https://docs.slack.dev/surfaces/modals/
I redesigned the settings using Slack Modals. Before, you had to use several different commands to configure everything. Now, you can just run /asachan-settings to open the settings page and manage everything in one place. It’s much easier to use now. Next, I’m planning to improve AQI display and weather alerts display, and fix a few small issues that don’t affect functionality but still aren’t quite perfect.
I added /asachan-settings, now you can configure AsaChan through a Slack modal instead of using multiple commands. This update also brings AQI, sunrise/sunset, and weather warning support, plus a new /asachan-admin command for basic debugging and more detailed stats for admins. I also added automatic timezone detection from city geocoding. Commit
This update mainly focuses on improving the logging system to make operations and maintenance much easier. Logs are now more structured and include more useful context. Commit
Ships:
DM @Asa Chan and type /asachan-start to get started!
Known Issues Weather reports may be inaccurate in some regions outside East Asia due to limitations of the current weather data provider. I am actively looking for a better weather provider to improve global coverage and accuracy.
If you have any questions or run into any issues, feel free to DM me.
DM @Asa Chan and type /asachan-start to get started, or use /asachan-settings anytime to manage your settings through an interactive modal! AI enhancement prompts may be delayed by up to 2 minutes....
|
1793090986.2532732
|
1793177386.2532732
|
|
28216
|
Commit Diary by @yearcakes | Stardance
|
yearcakes
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Commit Diary by @yearcakes | Stardance
|
1792939857.3321705
|
1793803857.3321705
|
|
33308
|
Minto by @yearcakes | Stardance
|
yearcakes
|
1
|
7.09
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T14:24:08Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Minto 1.0.0 This is the very first release of Minto , and also my first attempt at building a Minecraft proxy. The project was born from a simple goal: helping players in regions with poor network connectivity (such as China mainland) connect to servers like Hypixel with a better experience, while also reducing the impact of DDoS attacks against Minecraft servers. Although the current version can only mitigate a small portion of these issues, I plan to continue researching and improving these capabilities in future releases. Minto was inspired by the excellent minecraft-proxy project by bangbang93. However, since its latest release dates back to 2023 and it is written in TypeScript, I decided to redesign the concept from scratch in Python—a language I’m much more familiar with. Rather than being a direct port, Minto is a new implementation with its own architecture and design philosophy. This release is only the beginning. More performance optimizations, new features, and bug fixes are already planned for future versions. If you decide to deploy Minto and encounter any issues, feel free to open an Issue or send me a DM. Feedback, bug reports, and contributions are always welcome. ❤️", "repo": "https://github.com/zhaozhuoran/minto", "demo": "https://github.com/zhaozhuoran/minto/blob/main/DEMO.md"}]...
|
[{"post_id": 27626, "ts": "202 [{"post_id": 27626, "ts": "2026-07-13T11:32:55Z", "hours": 2.0942, "text": "This update (based on the latest code) focuses on polishing the documentation so the tool is easier to use. The actual capabilities that were added or clarified include: Flexible server-status display : you can now choose how ping latency appears in the server list — show real latency, show “0ms”, or simply don’t respond. Real player counts : a new option queries the backend server for its actual online player count and shows it to players (with caching and a timeout safeguard). Complete configuration guide : we filled in previously missing settings — logging (Log), the max-player-limit toggle, and the ping-delay toggle — and documented every option clearly. Updated project layout : module responsibilities (config, logging, proxying, protocol parsing) are now described more accurately. In short: Minto is now more stable and better-looking, and its docs are much friendlier. Commit"}, {"post_id": 25957, "ts": "2026-07-10T14:11:42Z", "hours": 1.0319, "text": "Implemented Minto 1.0.0 ! Commit"}, {"post_id": 25924, "ts": "2026-07-10T12:53:16Z", "hours": 3.6644, "text": "The core code is complete. I’m currently debugging and fixing new issues."}]...
|
Title: Minto by @yearcakes | Stardance
Devlogs:
T Title: Minto by @yearcakes | Stardance
Devlogs:
The core code is complete. I’m currently debugging and fixing new issues.
Implemented Minto 1.0.0 ! Commit
This update (based on the latest code) focuses on polishing the documentation so the tool is easier to use. The actual capabilities that were added or clarified include: Flexible server-status display : you can now choose how ping latency appears in the server list — show real latency, show “0ms”, or simply don’t respond. Real player counts : a new option queries the backend server for its actual online player count and shows it to players (with caching and a timeout safeguard). Complete configuration guide : we filled in previously missing settings — logging (Log), the max-player-limit toggle, and the ping-delay toggle — and documented every option clearly. Updated project layout : module responsibilities (config, logging, proxying, protocol parsing) are now described more accurately. In short: Minto is now more stable and better-looking, and its docs are much friendlier. Commit
Ships:
Minto 1.0.0 This is the very first release of Minto , and also my first attempt at building a Minecraft proxy. The project was born from a simple goal: helping players in regions with poor network connectivity (such as China mainland) connect to servers like Hypixel with a better experience, while also reducing the impact of DDoS attacks against Minecraft servers. Although the current version can only mitigate a small portion of these issues, I plan to continue researching and improving these capabilities in future releases. Minto was inspired by the excellent minecraft-proxy project by bangbang93. However, since its latest release dates back to 2023 and it is written in TypeScript, I decided to redesign the concept from scratch in Python—a language I’m much more familiar with. Rather than being a direct port, Minto is a new implementation with its own architecture and design philosophy. This release is only the beginning. More performance optimizations, new features, and bug fixes are already planned for future versions. If you decide to deploy Minto and encounter any issues, feel free to open an Issue or send me a DM. Feedback, bug reports, and contributions are always welcome. ❤️...
|
1793090919.2894547
|
1793177319.2894547
|
|
34300
|
sdxl-training by @yearcakes | Stardance
|
yearcakes
|
1
|
48.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-23T10:01:56Z", "hours": 48.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Please note that this project has relatively high resource requirements. The following configuration is recommended as the minimum supported environment: OS: Ubuntu 24.04 LTS RAM: 64 GB GPU VRAM: At least 12 GB NVMe SSD (recommended for latent/text-encoder caching) Running below these requirements may result in insufficient memory, significantly reduced performance, or inability to complete training. Thank you for following the development of this project.", "repo": "https://github.com/zhaozhuoran/sdxl-training", "demo": "https://github.com/zhaozhuoran/sdxl-training/blob/main/DEMO.md"}]...
|
[{"post_id": 33399, "ts": "202 [{"post_id": 33399, "ts": "2026-07-23T09:57:12Z", "hours": 9.5828, "text": "Changes This update introduces benchmarking and metadata-related features, along with improvements to the trainer engine and documentation. Detailed changes: Add benchmark.py for training performance evaluation Add test_benchmark.py and test_metadata_features.py to improve test coverage Enhance the trainer engine with advanced evaluation capabilities Improve LoRA method exporting with detailed example configurations Update documentation with comprehensive usage and configuration examples Status With this update completed, the training framework is now ready for official use. For detailed usage instructions and examples, please refer to: Demo Guide: DEMO.md Usage Guide: USAGE.md Minimum Hardware Requirements Please note that this project has relatively high resource requirements. The following configuration is recommended as the minimum supported environment: OS: Ubuntu 24.04 LTS RAM: 64 GB GPU VRAM: At least 12 GB NVMe SSD (recommended for latent/text-encoder caching) Running below these requirements may result in insufficient memory, significantly reduced performance, or inability to complete training. Thank you for following the development of this project. Commit"}, {"post_id": 32750, "ts": "2026-07-22T03:06:06Z", "hours": 6.7319, "text": "Changes Made Checkpoint System: Added thread-safe locking for checkpoint writes to prevent corruption Required optimizer_state_dict validation for checkpoint integrity Stopped background writers in test cleanups to prevent resource leaks Added cache_vae_dtype config field with fp32/bf16 tradeoff options Dataset & Caching: Migrated dataset caching from pickle to safetensors format for faster/safer storage Added cache_vae_dtype VAE precision control (fp32 safe, bf16 faster/lower VRAM) Added seed parameter for reproducible dataset shuffling and deterministic sampling Performance Optimizations: Added TF32 matmul and cuDNN benchmark for CUDA hardware Added torch.compile support for UNet with dynamic shapes Enabled pin_memory on CUDA for faster data transfer Added VRAM monitoring throughout training phases Reset peak memory stats per epoch for accurate telemetry Hardware Guardrails: Added GPU-first guard verification test (skips on CUDA-enabled machines) Added mixed_precision=‘no’ VRAM usage warnings for <16GB GPUs Better handling of CPU RNG states after map_location=“cuda” loads GPU memory cleanup after model offloading Testing: Fix test_checkpoint.py to shutdown background writers Add GPU-first guard test that requires non-CUDA environment Commit"}, {"post_id": 31785, "ts": "2026-07-20T13:39:09Z", "hours": 5.0014, "text": "feat: add gradient accumulation and offload checkpoint writes to a background worker Accumulate gradients across micro-steps: zero grad only at window start, scale loss by acc_steps, and step optimizer/scheduler at window end. Move snapshot serialization to a background thread so disk I/O and the “latest” copy no longer stall training; recovery checkpoints stay synchronous for crash-durable resume. Clone state to CPU (_to_cpu) before enqueueing to avoid GPU OOM and in-place corruption by later training updates. Treat rolling recovery checkpoints as a minimal resume set (LoRA+RNG only); full snapshots still store optimizer/scheduler/scaler state. Resume from a rolling checkpoint rebuilds optimizer momentum and LR schedule from scratch. Make CaptionProcessor RNG thread-safe with a lock for concurrent prefetch. Add flush()/shutdown() for deterministic test state and clean process exit. Commit"}, {"post_id": 31225, "ts": "2026-07-19T13:28:56Z", "hours": 1.0556, "text": "Two small polish passes today! 📜 Quieter training logs — our console used to shout a full stats line every single step (so noisy 😵). Now it whispers just once every 1,000 steps. Don’t worry though — the little tqdm progress bar still wiggles along in real time, so you always know we’re alive and training! 🐣 🏷️ LoRA name tags — when we export a LoRA, we now tuck proper kohya-standard metadata into the safetensors header. That means sd-webui, ComfyUI, and friends finally recognize our SDXL LoRA and scale it correctly instead of squinting confused. We even peek at a lora_down weight to auto-detect the rank~ 🔍 Small changes, cozy results! Commit"}, {"post_id": 30153, "ts": "2026-07-17T14:29:04Z", "hours": 1.9372, "text": "fixed a sneaky little bug: SDXL micro-conditioning was using the resized image size and crop coords, which was a bit off~ now it happily uses the TRUE original size and original-image-space crop offsets, matching the kohya / diffusers convention, so the model finally understands each image’s real backstory also, caption augmentation used the global random, so it got all mixed up on resume (´;ω;`) gave it its own little seeded RNG baby — its state is saved with the checkpoint and restored exactly, so training picks up right where it left off, no getting lost. collate got a tiny shield too: if a batch mixes cached/uncached samples, it now complains LOUDLY instead of throwing a cryptic KeyError Commit"}, {"post_id": 29989, "ts": "2026-07-17T06:40:32Z", "hours": 2.6072, "text": "Hi~ today the trainer went on a little diet! The VAE and Text Encoders were freeloaders. Once everything is cached, they just sit on the GPU sunbathing and eating ~2GB of VRAM for no reason. So now we politely walk them over to the CPU couch before training starts, and only invite them back if we actually need them. xformers joins the party. The UNet now uses memory-efficient attention when it’s installed, and quietly falls back to plain SDPA if it isn’t — no drama, no crashes. The caching progress bar finally tells the truth. Before, it counted already-cached samples as “work” and lied about the ETA. Now we pre-scan everything first, so the bar only moves for real encoding. Honest bar is best bar. Result: less VRAM, faster start, happier GPU. Nap successful. Commit"}, {"post_id": 29898, "ts": "2026-07-17T02:07:55Z", "hours": 2.3372, "text": "Gave precaching a little diet today! Added a VAE-slicing toggle (off by default = faster), and now we hand VRAM back to the GPU after every batch (no more sneaky CUDA hoarding~). Single-file checkpoints now only carry the UNet home instead of lugging the whole pipeline. Shoved caption augmentation into the prefetch thread, and the progress bar got smarter — it counts only real encodes, not the lazy “already-cached” ones. The GPU is having an easy day, meow~ Commit"}, {"post_id": 29372, "ts": "2026-07-16T08:49:48Z", "hours": 3.0336, "text": "Two little wheels rolled into the trainer today: 🎯 Aspect-ratio bucketing: no more squishing every image into a square! Each pic now hops into the bucket whose ratio fits it best, gets a gentle cover-resize + center-crop, and BucketBatchSampler keeps same-bucket pals together so batches stack nice and tidy. 🏷️ Cute caption magic: Kohya-style tag shuffling, keep_tokens to pin the first few tags, and playful tag / whole-caption dropout — data augmentation now feels like sprinkling sugar 🍬. Also fixed a sneaky SDXL detail: we now record each image’s real original_size and crop_ltrb and feed them into add_time_ids, instead of pretending everything is a 1024² square. The cache grew up too — one combined cache_{hash}.pt carrying latents + text-encoder outputs + metadata, always saved to disk so reruns load in a blink, with shape checks that auto-recompute if you resize. And the UNet now takes a nap 💤 until caching is done, freeing VRAM for the little GPUs that could. Commit"}, {"post_id": 29322, "ts": "2026-07-16T05:27:06Z", "hours": 3.7753, "text": "✨ Precaching got a turbo boost! 🚀 Hi hi~ today the caching step stopped being such a lazy little snail! 🐌➡️🐇 Before, we loaded one image, encoded it, saved it… one… by… one… zzz 😴 The GPU was basically napping while the disk did all the reading. Now we have a squad of worker threads (cache_workers) fetching images in parallel while the GPU chomps through them in batches (cache_batch_size). I/O and compute finally hold hands and work together! 🤝 Bonus: a cute little progress log tells you img/s and ETA, so you know exactly when snack time ends. 🍪⏱️ Also added a safety hug for resumes! If you try to resume a checkpoint with a different config, the trainer now gently stops and asks “are you suuure? type ‘yes’~” 🥺 No more silently mixing old weights with new settings and crying later. In non-interactive mode it just aborts to keep you safe. 💖 Commit"}, {"post_id": 28794, "ts": "2026-07-15T09:13:03Z", "hours": 1.7844, "text": "Added cute little tqdm progress bars to the caching & training loops so we can watch them go brrr~ Commit"}, {"post_id": 28764, "ts": "2026-07-15T07:23:33Z", "hours": 2.6842, "text": "Two handy little things landed in the trainer this time~ 🧊 Caching : VAE latents and text-encoder outputs can now be pre-computed and stored ahead of time! Keep them in RAM or on disk. No more recomputing every step — less VRAM, faster training, yay~ 🎯 UNet-only training : A new train_text_encoder switch (off by default). When off, only the UNet gets LoRA and the text encoders get to rest, so training stays light and breezy! 📝 Also refreshed the config example and added plenty of tests so nothing breaks ✅ Commit"}, {"post_id": 28715, "ts": "2026-07-15T04:16:31Z", "hours": 0.9603, "text": "Single-file SDXL checkpoints are now supported! Commit"}, {"post_id": 28696, "ts": "2026-07-15T03:15:43Z", "hours": 3.885, "text": "Initial implementation of the SDXL Training Toolkit! This is a very early and minimal version. The core training pipeline is now in place, but features like aspect ratio bucketing, VAE caching, and other optimizations are still on the way. Commit"}, {"post_id": 28222, "ts": "2026-07-14T11:20:39Z", "hours": 2.38, "text": "I just realized how complex it is to build an SDXL training pipeline from scratch… It might be a long while before the first version is ready to ship qwq"}]...
|
Title: sdxl-training by @yearcakes | Stardance
De Title: sdxl-training by @yearcakes | Stardance
Devlogs:
I just realized how complex it is to build an SDXL training pipeline from scratch… It might be a long while before the first version is ready to ship qwq
Initial implementation of the SDXL Training Toolkit! This is a very early and minimal version. The core training pipeline is now in place, but features like aspect ratio bucketing, VAE caching, and other optimizations are still on the way. Commit
Single-file SDXL checkpoints are now supported! Commit
Two handy little things landed in the trainer this time~ 🧊 Caching : VAE latents and text-encoder outputs can now be pre-computed and stored ahead of time! Keep them in RAM or on disk. No more recomputing every step — less VRAM, faster training, yay~ 🎯 UNet-only training : A new train_text_encoder switch (off by default). When off, only the UNet gets LoRA and the text encoders get to rest, so training stays light and breezy! 📝 Also refreshed the config example and added plenty of tests so nothing breaks ✅ Commit
Added cute little tqdm progress bars to the caching & training loops so we can watch them go brrr~ Commit
✨ Precaching got a turbo boost! 🚀 Hi hi~ today the caching step stopped being such a lazy little snail! 🐌➡️🐇 Before, we loaded one image, encoded it, saved it… one… by… one… zzz 😴 The GPU was basically napping while the disk did all the reading. Now we have a squad of worker threads (cache_workers) fetching images in parallel while the GPU chomps through them in batches (cache_batch_size). I/O and compute finally hold hands and work together! 🤝 Bonus: a cute little progress log tells you img/s and ETA, so you know exactly when snack time ends. 🍪⏱️ Also added a safety hug for resumes! If you try to resume a checkpoint with a different config, the trainer now gently stops and asks “are you suuure? type ‘yes’~” 🥺 No more silently mixing old weights with new settings and crying later. In non-interactive mode it just aborts to keep you safe. 💖 Commit
Two little wheels rolled into the trainer today: 🎯 Aspect-ratio bucketing: no more squishing every image into a square! Each pic now hops into the bucket whose ratio fits it best, gets a gentle cover-resize + center-crop, and BucketBatchSampler keeps same-bucket pals together so batches stack nice and tidy. 🏷️ Cute caption magic: Kohya-style tag shuffling, keep_tokens to pin the first few tags, and playful tag / whole-caption dropout — data augmentation now feels like sprinkling sugar 🍬. Also fixed a sneaky SDXL detail: we now record each image’s real original_size and crop_ltrb and feed them into add_time_ids, instead of pretending everything is a 1024² square. The cache grew up too — one combined cache_{hash}.pt carrying latents + text-encoder outputs + metadata, always saved to disk so reruns load in a blink, with shape checks that auto-recompute if you resize. And the UNet now takes a nap 💤 until caching is done, freeing VRAM for the little GPUs that could. Commit
Gave precaching a little diet today! Added a VAE-slicing toggle (off by default = faster), and now we hand VRAM back to the GPU after every batch (no more sneaky CUDA hoarding~). Single-file checkpoints now only carry the UNet home instead of lugging the whole pipeline. Shoved caption augmentation into the prefetch thread, and the progress bar got smarter — it counts only real encodes, not the lazy “already-cached” ones. The GPU is having an easy day, meow~ Commit
Hi~ today the trainer went on a little diet! The VAE and Text Encoders were freeloaders. Once everything is cached, they just sit on the GPU sunbathing and eating ~2GB of VRAM for no reason. So now we politely walk them over to the CPU couch before training starts, and only invite them back if we actually need them. xformers joins the party. The UNet now uses memory-efficient attention when it’s installed, and quietly falls back to plain SDPA if it isn’t — no drama, no crashes. The caching progress bar finally tells the truth. Before, it counted already-cached samples as “work” and lied about the ETA. Now we pre-scan everything first, so the bar only moves for real encoding. Honest bar is best bar. Result: less VRAM, faster start, happier GPU. Nap successful. Commit
fixed a sneaky little bug: SDXL micro-conditioning was using the resized image size and crop coords, which was a bit off~ now it happily uses the TRUE original size and original-image-space crop offsets, matching the kohya / diffusers convention, so the model finally understands each image’s real backstory also, caption augmentation used the global random, so it got all mixed up on resume (´;ω;`) gave it its own little seeded RNG baby — its state is saved with the checkpoint and restored exactly, so training picks up right where it left off, no getting lost. collate got a tiny shield too: if a batch mixes cached/uncached samples, it now complains LOUDLY instead of throwing a cryptic KeyError Commit
Two small polish passes today! 📜 Quieter training logs — our console used to shout a full stats line every single step (so noisy 😵). Now it whispers just once every 1,000 steps. Don’t worry though — the little tqdm progress bar still wiggles along in real time, so you always know we’re alive and training! 🐣 🏷️ LoRA name tags — when we export a LoRA, we now tuck proper kohya-standard metadata into the safetensors header. That means sd-webui, ComfyUI, and friends finally recognize our SDXL LoRA and scale it correctly instead of squinting confused. We even peek at a lora_down weight to auto-detect the rank~ 🔍 Small changes, cozy results! Commit
feat: add gradient accumulation and offload checkpoint writes to a background worker Accumulate gradients across micro-steps: zero grad only at window start, scale loss by acc_steps, and step optimizer/scheduler at window end. Move snapshot serialization to a background thread so disk I/O and the “latest” copy no longer stall training; recovery checkpoints stay synchronous for crash-durable resume. Clone state to CPU (_to_cpu) before enqueueing to avoid GPU OOM and in-place corruption by later training updates. Treat rolling recovery checkpoints as a minimal resume set (LoRA+RNG only); full snapshots still store optimizer/scheduler/scaler state. Resume from a rolling checkpoint rebuilds optimizer momentum and LR schedule from scratch. Make CaptionProcessor RNG thread-safe with a lock for concurrent prefetch. Add flush()/shutdown() for deterministic test state and clean process exit. Commit
Changes Made Checkpoint System: Added thread-safe locking for checkpoint writes to prevent corruption Required optimizer_state_dict validation for checkpoint integrity Stopped background writers in test cleanups to prevent resource leaks Added cache_vae_dtype config field with fp32/bf16 tradeoff options Dataset & Caching: Migrated dataset caching from pickle to safetensors format for faster/safer storage Added cache_vae_dtype VAE precision control (fp32 safe, bf16 faster/lower VRAM) Added seed parameter for reproducible dataset shuffling and deterministic sampling Performance Optimizations: Added TF32 matmul and cuDNN benchmark for CUDA hardware Added torch.compile support for UNet with dynamic shapes Enabled pin_memory on CUDA for faster data transfer Added VRAM monitoring throughout training phases Reset peak memory stats per epoch for accurate telemetry Hardware Guardrails: Added GPU-first guard verification test (skips on CUDA-enabled machines) Added mixed_precision=‘no’ VRAM usage warnings for <16GB GPUs Better handling of CPU RNG states after map_location=“cuda” loads GPU memory cleanup after model offloading Testing: Fix test_checkpoint.py to shutdown background writers Add GPU-first guard test that requires non-CUDA environment Commit
Changes This update introduces benchmarking and metadata-related features, along with improvements to the trainer engine and documentation. Detailed changes: Add benchmark.py for training performance evaluation Add test_benchmark.py and test_metadata_features.py to improve test coverage Enhance the trainer engine with advanced evaluation capabilities Improve LoRA method exporting with detailed example configurations Update documentation with comprehensive usage and configuration examples Status With this update completed, the training framework is now ready for official use. For detailed usage instructions and examples, please refer to: Demo Guide: DEMO.md Usage Guide: USAGE.md Minimum Hardware Requirements Please note that this project has relatively high resource requirements. The following configuration is recommended as the minimum supported environment: OS: Ubuntu 24.04 LTS RAM: 64 GB GPU VRAM: At least 12 GB NVMe SSD (recommended for latent/text-encoder caching) Running below these requirements may result in insufficient memory, significantly reduced performance, or inability to complete training. Thank you for following the development of this project. Commit
Ships:
Please note that this project has relatively high resource requirements. The following configuration is recommended as the minimum supported environment: OS: Ubuntu 24.04 LTS RAM: 64 GB GPU VRAM: At least 12 GB NVMe SSD (recommended for latent/text-encoder caching) Running below these requirements may result in insufficient memory, significantly reduced performance, or inability to complete training. Thank you for following the development of this project....
|
1793109323.6882555
|
1793195723.6882555
|