|
30366
|
Aglang by @0xf1 | Stardance
|
0xf1
|
2
|
55.0
|
974
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-01T14:45:41Z", "hours": 26.0, "multiplier": 18.44, "payout": 473, "blessing": "neutral", "text": "hello! this is aglang, my own esoteric language made to be similar to assembly. it offers 13 operators, and with those (almost) anything is possible! you can try aglang by either downloading the cli (in the repo the “Source code” button links to) or by using the online interpreter (“Try project” button). if you’re confused and want to learn aglang, try the new interactive course, available on the website in the “learn” section: it will guide you through everything the language can do in only 10 short lessons and exercises. the cli includes an interpreter, a C transpiler and a compiler (note: the compiler needs GCC to be installed)! if you want to develop aglang programs more easily, we even have a vscode extension, with syntax highlighting and statement templates that said, go on and try aglang! its easier than you would expect", "repo": "https://github.com/0xF1dev/aglang", "demo": "https://aglang.0xf1.dev"}, {"ship_num": 2, "ts": "2026-07-15T16:48:54Z", "hours": 29.0, "multiplier": 17.01, "payout": 501, "blessing": "neutral", "text": "hello! this is Aglang , my own esoteric language. an esoteric language (or esolang) is a language made as a joke or to be hard to use , like brainf*ck. my language is made to be really basic: you only have two 8bit registers , and a stack ; there are only 18 valid characters in Aglang, easy to remember, right? in the cli, i implemented both an interpreter (works everywhere) and a compiler (only x86-64 linux); a guide on installation and usage is in its readme, but if you dont want to install it, you can try Aglang in the web interpreter. this project is split into two repositories: the cli at https://github.com/0xF1dev/aglang (main repo) the web interpreter at https://github.com/0xF1dev/aglang-website the website includes some examples and a link to both repos and the documentation. the “Try project” button is linked to the web interpreter (if the domain doesnt work, use https://aglang-website.vercel.app/ ), while the “See source code” takes to the cli’s repository. and now, go crazy and write some code!", "repo": "https://github.com/0xF1dev/aglang", "demo": "https://aglang.0xf1.dev"}]...
|
[{"post_id": 38917, "ts": "202 [{"post_id": 38917, "ts": "2026-08-01T14:43:23Z", "hours": 2.2408, "text": "NOTE FOR THE SHIP: you dont have to try everything! even just the online interpreter is fine, it includes examples! Aglang devlog #12 im ready for the ship! i completed the vscode extension, and (for the third time) I. HATE. MICROSOFT. this might sound excessive, but anyone that ever tried reading their docs can surely understand, right? right…? but finally, after like 2 hours, i made the most basic of extensions! it has syntax highlighting (the thing that i wanted most) and a simple statement templating snippet. and now, i can pretty confidently say that aglang is completed! surely i wont abandon the project, that would just be a waste of the 50 hours i spent on this, but i consider the project to be mostly finished. see ya soon!"}, {"post_id": 38820, "ts": "2026-08-01T11:53:08Z", "hours": 6.4056, "text": "Aglang devlog #11 why did i decide to do this lmao. lets go in order: first of all, i added transpiling! currently, only C is supported as target, but i plan on adding python soon. it actually wasnt that hard, especially considering i basically never wrote C in my life. but this was the least interesting part of this devlog, cause i managed to optimize the compiler a bit! now this… this was hard. but now, when printing many characters in a row (like in the hello world example), instead of printing each character one by one, the full string gets stored in the .text (or .data on windows) section of the assembly and gets printed once! this reduced the size of the hello world program from ~1kb down to 633b, almost half! needless to say that this needed a few attempts… now the project’s folder looks kinda full… but oh well! and i can AGAIN say that GOD I HATE WINDOWS: it took a while to get shadow allocations right, especially since pushing to the stack in aglang means pushing to the stack in assembly too, so i had to keep track of where the old and original pointers were before allocating it. i fully expect this optimization to have some bugs, since i dont really trust the logic i wrote. i didnt add it in the transpile feature, since i imagine that modern c compilers optimize it on their own. now i promise that ill get to writing the vscode extension!"}, {"post_id": 38186, "ts": "2026-07-31T13:34:25Z", "hours": 7.1647, "text": "Aglang devlog #10 well this took a while. so, i came to the conclusion that an lsp server is kinda overkill, so, to make up for it, i decided to make an interactive lesson system on the website, like svelte! and well i didnt expect it to take 7 hours… i have to admit, it came out pretty good! they have code challenges, too :D anyways, for the autocomplete feature, ill still make it into the vscode extension (if i dont give up on that too) oh and i added shareable code in the web interpreter!"}, {"post_id": 37137, "ts": "2026-07-29T16:56:44Z", "hours": 4.7731, "text": "Aglang devlog #9 the windows compiler is here! and i can finally say GOD I HATE WINDOWS why was it so simple in linux with just a syscall and in windows to not pull my hair out i have to link c with the executable lmao but, a wise man once said: the past is gone, think about the future… or something like that idk while i worked on that, i ended up even fixing some problems too, so thats good. and i made the cli a bit prettier too, with spinners! in the meanwhile i was looking at lsp servers too, and they look… overly complicated… yep i guess i already did enough today not gonna get into allthat! see ya tomorrow!"}, {"post_id": 36932, "ts": "2026-07-29T10:32:25Z", "hours": 2.2236, "text": "Aglang devlog #9 there now is a compare statement in aglang! i had this idea for a while, but i thought it would make the language too easy… but i ended up making it anyway! together with it, i made labels too! so if, for example, you wanted to skip a section of code if the number 2 is bigger than 1, you would write it like so: 10?1; $ compare 2 (10 in binary) and 1 (still 1 in binary) $ ^.; $ if 2 is bigger, jump to label . (labels are can only be named with dots, it would have been to easy otherwise :) ) $ (other code...) ~.; $ define label . $ (do more stuff...) and this makes the fibonacci example easier, since now, instead of using counters in the stack, you can simply check if the current number isnt 233 and go back to a previous label. i still have to implement it in the web interpreter, but i guess it shouldnt take long! next step: windows compiler! (note: will probably require mingw to be installed)"}, {"post_id": 36386, "ts": "2026-07-28T13:43:11Z", "hours": 2.83, "text": "Aglang devlog #8 the first ship is done! but before getting to the actual devlog, i want to respond to some of the best feedback i got: why spend 29 (now 32) hours on a joke?: well, you see… uhh… next question please you should see a psychiatrist: i know thanks lmao and now, back to aglang developments! the first version of aglang is finally completed! i want to thank everybody for the feedback i received, it even gave me some ideas, thanks! in these 3 hours, i improved the website, so now instead of just the compiler it even has a full homepage with downloads: this was on my checklist for a while, but first i wanted to ship a first version to get some initial thoughts. next up for this project, i have a two ideas: conditionals and labels: i want to add a way of comparing registers/stack values/literals, and jump to a label or part of the program if that condition is met; with that, aglang would basically be a basic assembly language with a few restrictions windows compiler: the thing thats missing the most in the cli is a windows compiler, and since probably there are quite a few people that use windows more than linux :| and a few other things if i have the time: a vscode extension: this could have themes and docs on the side, minor stuff (i dont think anyone will use aglang in vscode) but idk i wanted to do it an lsp server: for autocompletions, error checking, etc… it could be integrated in more ides too"}, {"post_id": 28961, "ts": "2026-07-15T16:05:27Z", "hours": 3.3708, "text": "Aglang devlog #7 whooo! the documentation is done! im officially ready to ship! i finished writing the documentation and the repo readmes, and im ready to release this into the wild! the docs are availabe in the cli’s repo, but they’re linked in the website too. this took a few days, since i was working on another personal project, but im finally back !"}, {"post_id": 26651, "ts": "2026-07-11T16:17:08Z", "hours": 7.9264, "text": "Aglang devlog #6 the web interpreter is done! after almost 1000 lines of svelte and 8 hours of boredom, im happy to announce that the js implementation of the aglang interpreter is completed! it is now available at https://aglang.0xf1.dev (the dns changes might take some time to fully propagate, so if it isnt loading, it probably will in a few hours…) it is basically a 1:1 copy of the rust code, but prettier! ahem… because of the ui, not the code… and i even designed a logo for it! in it are all the valid characters in aglang. in the meanwhile, i fixed and refactored the loop system in both the js and rust versions. the next steps are writing the docs , preparing a good readme and then i can finally ship the project! see ya then! and p.s. i havent optimized the website for mobile, but i imagine nobody uses stardance on a smartphone, right?"}, {"post_id": 23735, "ts": "2026-07-06T21:08:00Z", "hours": 6.8822, "text": "Aglang devlog #5 no yeah im officially going crazy so, after a bit, the compiler is DONE! now it spits valid x86-64 asm and even automatically compiles it to an executable with gcc! and i even managed to make a fibonacci sequence example program! (it only computes numbers up to 144 since its the highest fibonacci number in the unsigned 8bit integer limit) but to make that, i had to spend HOURS thinking about how to do it. the problem was that in Aglang, you have 2 registers and a stack, and for that fibonacci program i couldnt make it print random ascii characters, but instead the actual numbers in the decimal system: for that i tried making loops that converted a number into the digits that composed it, buuuuut you still need the 2 registers to keep the fibonacci numbers you have! i even surrendered and tried asking gemini, but it would go absolutely CRAZY: it would give really long responses and contradict itself in the code… a bit of like when you ask an ai to give you the seahorse emoji. so, the ultimate solution was to implement a “numeric value” parameter to the stdout argument. therefore, now, if you write something like 01000001>\\#; you would get the actual 65 number instead of the character ‘A’ and all the problems would go to the compiler and assembly! but i dont care now, cus its DONE!!! the next steps, i think, should be making a js interpreter, so that the language can be tried online without downloading anything, so ill work on that tomorrow…"}, {"post_id": 22847, "ts": "2026-07-05T13:48:12Z", "hours": 2.2458, "text": "Aglang devlog #4 it was the comments IT HAD ALWAYS BEEN THE COMMENTS i think im about to go crazy, cuz im trying to manually write assembly to know that the compiler should write, and trying the basic alphabet loop i couldnt get it to work, no matter what it was always printing ▒ . i tried everything, i even managed to get SATAN ITSELF to write my output (check attached image)… but finally… i tried deleting the comments i put with the original aglang line… and it worked. i found out that the stdout token in aglang (“ \\ ”, i even have to write it twice here in the post because stardance has the same problem lmao) was making nasm think that i was trying to escape the newline after the comment, thus making the next assembly line part of the comment. as you can see from the logged time it literally took over 2 hours of my life because of a single backslash."}, {"post_id": 22303, "ts": "2026-07-04T18:16:35Z", "hours": 1.4739, "text": "Aglang devlog #3 so i uhh… kinda refactored everything? i realized that to make the compiler i had 2 options: make a separate project (and repo) integrate it in the existing interpreter the latter option made more sense, because since the project is small i can just split into two commands. so, after 1.30hrs, i managed to split and reorganize the code! now to run the aglang interpreter you can run: aglang run ./main.ag the next step is building the compiler itself, but ill leave that to tomorrow. (and i think itll just support linux elf64 x86-64 architectures, sorry arm friends!) oh wait! i forgot to tell y’all why the name “Aglang”! nothing special actually, “Ag” just stands for “Ugly” lmao"}, {"post_id": 22121, "ts": "2026-07-04T12:36:09Z", "hours": 4.2497, "text": "Aglang devlog #2 the interpreter is done faster than i expected and after some issues i settled on the syntax. ive added comments (kinda hated working on them), changed the input structure a little bit (now the input gets directly stored on the stack). the next step is building a compiler to x86-64 assembly, i dont think i’ll make it for other architectures. i guess it shouldnt be that hard since the language’s features are pretty similar to how assembly works ( obvious foreshadowing ) this example outputs every uppercase letter in the alphabet: 01000001>''; $ move 65 (A char in ascii) to reg2 $ 11010>:; $ push alphabet counter (from A to Z) into stack $ [ $ loop (ends when first value in stack is 0) $ ''>\\; $ output the letter $ 1010>\\; $ newline $ ''+1; $ add 1 to the ascii value to go to the next letter $ :>'; $ move counter to reg1 $ :!; $ pop old counter $ '-1; $ remove 1 from the counter $ '>:; $ push the updated counter to the stack $ ] (the text between the $ are comments)"}, {"post_id": 21635, "ts": "2026-07-03T17:57:37Z", "hours": 3.3219, "text": "Aglang devlog #1 i’m finally building a language! Aglang is an esoteric language (like brainf*ck) with 15 possible characters (not including the 0’s and 1’s of binary literals) where you are given two 8-bit registers and a stack: their values can be moved and deleted and arithmetic operations can be done with their respective characters. i’m currently building an interpreter in Rust, but i hope once im done with that to start creating a compiler to x86-64 assembly. i’ve attached a scheme made in KDE Drawy (i changed it like 8 times already) describing the language (sorry it’s in italian and my writing sucks), an aglang snippet and the parsed output in the interpreter."}]...
|
Title: Aglang by @0xf1 | Stardance
Devlogs:
Aglan Title: Aglang by @0xf1 | Stardance
Devlogs:
Aglang devlog #1 i’m finally building a language! Aglang is an esoteric language (like brainf*ck) with 15 possible characters (not including the 0’s and 1’s of binary literals) where you are given two 8-bit registers and a stack: their values can be moved and deleted and arithmetic operations can be done with their respective characters. i’m currently building an interpreter in Rust, but i hope once im done with that to start creating a compiler to x86-64 assembly. i’ve attached a scheme made in KDE Drawy (i changed it like 8 times already) describing the language (sorry it’s in italian and my writing sucks), an aglang snippet and the parsed output in the interpreter.
Aglang devlog #2 the interpreter is done faster than i expected and after some issues i settled on the syntax. ive added comments (kinda hated working on them), changed the input structure a little bit (now the input gets directly stored on the stack). the next step is building a compiler to x86-64 assembly, i dont think i’ll make it for other architectures. i guess it shouldnt be that hard since the language’s features are pretty similar to how assembly works ( obvious foreshadowing ) this example outputs every uppercase letter in the alphabet: 01000001>''; $ move 65 (A char in ascii) to reg2 $ 11010>:; $ push alphabet counter (from A to Z) into stack $ [ $ loop (ends when first value in stack is 0) $ ''>\; $ output the letter $ 1010>\; $ newline $ ''+1; $ add 1 to the ascii value to go to the next letter $ :>'; $ move counter to reg1 $ :!; $ pop old counter $ '-1; $ remove 1 from the counter $ '>:; $ push the updated counter to the stack $ ] (the text between the $ are comments)
Aglang devlog #3 so i uhh… kinda refactored everything? i realized that to make the compiler i had 2 options: make a separate project (and repo) integrate it in the existing interpreter the latter option made more sense, because since the project is small i can just split into two commands. so, after 1.30hrs, i managed to split and reorganize the code! now to run the aglang interpreter you can run: aglang run ./main.ag the next step is building the compiler itself, but ill leave that to tomorrow. (and i think itll just support linux elf64 x86-64 architectures, sorry arm friends!) oh wait! i forgot to tell y’all why the name “Aglang”! nothing special actually, “Ag” just stands for “Ugly” lmao
Aglang devlog #4 it was the comments IT HAD ALWAYS BEEN THE COMMENTS i think im about to go crazy, cuz im trying to manually write assembly to know that the compiler should write, and trying the basic alphabet loop i couldnt get it to work, no matter what it was always printing ▒ . i tried everything, i even managed to get SATAN ITSELF to write my output (check attached image)… but finally… i tried deleting the comments i put with the original aglang line… and it worked. i found out that the stdout token in aglang (“ \ ”, i even have to write it twice here in the post because stardance has the same problem lmao) was making nasm think that i was trying to escape the newline after the comment, thus making the next assembly line part of the comment. as you can see from the logged time it literally took over 2 hours of my life because of a single backslash.
Aglang devlog #5 no yeah im officially going crazy so, after a bit, the compiler is DONE! now it spits valid x86-64 asm and even automatically compiles it to an executable with gcc! and i even managed to make a fibonacci sequence example program! (it only computes numbers up to 144 since its the highest fibonacci number in the unsigned 8bit integer limit) but to make that, i had to spend HOURS thinking about how to do it. the problem was that in Aglang, you have 2 registers and a stack, and for that fibonacci program i couldnt make it print random ascii characters, but instead the actual numbers in the decimal system: for that i tried making loops that converted a number into the digits that composed it, buuuuut you still need the 2 registers to keep the fibonacci numbers you have! i even surrendered and tried asking gemini, but it would go absolutely CRAZY: it would give really long responses and contradict itself in the code… a bit of like when you ask an ai to give you the seahorse emoji. so, the ultimate solution was to implement a “numeric value” parameter to the stdout argument. therefore, now, if you write something like 01000001>\#; you would get the actual 65 number instead of the character ‘A’ and all the problems would go to the compiler and assembly! but i dont care now, cus its DONE!!! the next steps, i think, should be making a js interpreter, so that the language can be tried online without downloading anything, so ill work on that tomorrow…
Aglang devlog #6 the web interpreter is done! after almost 1000 lines of svelte and 8 hours of boredom, im happy to announce that the js implementation of the aglang interpreter is completed! it is now available at https://aglang.0xf1.dev (the dns changes might take some time to fully propagate, so if it isnt loading, it probably will in a few hours…) it is basically a 1:1 copy of the rust code, but prettier! ahem… because of the ui, not the code… and i even designed a logo for it! in it are all the valid characters in aglang. in the meanwhile, i fixed and refactored the loop system in both the js and rust versions. the next steps are writing the docs , preparing a good readme and then i can finally ship the project! see ya then! and p.s. i havent optimized the website for mobile, but i imagine nobody uses stardance on a smartphone, right?
Aglang devlog #7 whooo! the documentation is done! im officially ready to ship! i finished writing the documentation and the repo readmes, and im ready to release this into the wild! the docs are availabe in the cli’s repo, but they’re linked in the website too. this took a few days, since i was working on another personal project, but im finally back !
Aglang devlog #8 the first ship is done! but before getting to the actual devlog, i want to respond to some of the best feedback i got: why spend 29 (now 32) hours on a joke?: well, you see… uhh… next question please you should see a psychiatrist: i know thanks lmao and now, back to aglang developments! the first version of aglang is finally completed! i want to thank everybody for the feedback i received, it even gave me some ideas, thanks! in these 3 hours, i improved the website, so now instead of just the compiler it even has a full homepage with downloads: this was on my checklist for a while, but first i wanted to ship a first version to get some initial thoughts. next up for this project, i have a two ideas: conditionals and labels: i want to add a way of comparing registers/stack values/literals, and jump to a label or part of the program if that condition is met; with that, aglang would basically be a basic assembly language with a few restrictions windows compiler: the thing thats missing the most in the cli is a windows compiler, and since probably there are quite a few people that use windows more than linux :| and a few other things if i have the time: a vscode extension: this could have themes and docs on the side, minor stuff (i dont think anyone will use aglang in vscode) but idk i wanted to do it an lsp server: for autocompletions, error checking, etc… it could be integrated in more ides too
Aglang devlog #9 there now is a compare statement in aglang! i had this idea for a while, but i thought it would make the language too easy… but i ended up making it anyway! together with it, i made labels too! so if, for example, you wanted to skip a section of code if the number 2 is bigger than 1, you would write it like so: 10?1; $ compare 2 (10 in binary) and 1 (still 1 in binary) $ ^.; $ if 2 is bigger, jump to label . (labels are can only be named with dots, it would have been to easy otherwise :) ) $ (other code...) ~.; $ define label . $ (do more stuff...) and this makes the fibonacci example easier, since now, instead of using counters in the stack, you can simply check if the current number isnt 233 and go back to a previous label. i still have to implement it in the web interpreter, but i guess it shouldnt take long! next step: windows compiler! (note: will probably require mingw to be installed)
Aglang devlog #9 the windows compiler is here! and i can finally say GOD I HATE WINDOWS why was it so simple in linux with just a syscall and in windows to not pull my hair out i have to link c with the executable lmao but, a wise man once said: the past is gone, think about the future… or something like that idk while i worked on that, i ended up even fixing some problems too, so thats good. and i made the cli a bit prettier too, with spinners! in the meanwhile i was looking at lsp servers too, and they look… overly complicated… yep i guess i already did enough today not gonna get into allthat! see ya tomorrow!
Aglang devlog #10 well this took a while. so, i came to the conclusion that an lsp server is kinda overkill, so, to make up for it, i decided to make an interactive lesson system on the website, like svelte! and well i didnt expect it to take 7 hours… i have to admit, it came out pretty good! they have code challenges, too :D anyways, for the autocomplete feature, ill still make it into the vscode extension (if i dont give up on that too) oh and i added shareable code in the web interpreter!
Aglang devlog #11 why did i decide to do this lmao. lets go in order: first of all, i added transpiling! currently, only C is supported as target, but i plan on adding python soon. it actually wasnt that hard, especially considering i basically never wrote C in my life. but this was the least interesting part of this devlog, cause i managed to optimize the compiler a bit! now this… this was hard. but now, when printing many characters in a row (like in the hello world example), instead of printing each character one by one, the full string gets stored in the .text (or .data on windows) section of the assembly and gets printed once! this reduced the size of the hello world program from ~1kb down to 633b, almost half! needless to say that this needed a few attempts… now the project’s folder looks kinda full… but oh well! and i can AGAIN say that GOD I HATE WINDOWS: it took a while to get shadow allocations right, especially since pushing to the stack in aglang means pushing to the stack in assembly too, so i had to keep track of where the old and original pointers were before allocating it. i fully expect this optimization to have some bugs, since i dont really trust the logic i wrote. i didnt add it in the transpile feature, since i imagine that modern c compilers optimize it on their own. now i promise that ill get to writing the vscode extension!
NOTE FOR THE SHIP: you dont have to try everything! even just the online interpreter is fine, it includes examples! Aglang devlog #12 im ready for the ship! i completed the vscode extension, and (for the third time) I. HATE. MICROSOFT. this might sound excessive, but anyone that ever tried reading their docs can surely understand, right? right…? but finally, after like 2 hours, i made the most basic of extensions! it has syntax highlighting (the thing that i wanted most) and a simple statement templating snippet. and now, i can pretty confidently say that aglang is completed! surely i wont abandon the project, that would just be a waste of the 50 hours i spent on this, but i consider the project to be mostly finished. see ya soon!
Ships:
hello! this is Aglang , my own esoteric language. an esoteric language (or esolang) is a language made as a joke or to be hard to use , like brainf*ck. my language is made to be really basic: you only have two 8bit registers , and a stack ; there are only 18 valid characters in Aglang, easy to remember, right? in the cli, i implemented both an interpreter (works everywhere) and a compiler (only x86-64 linux); a guide on installation and usage is in its readme, but if you dont want to install it, you can try Aglang in the web interpreter. this project is split into two repositories: the cli at https://github.com/0xF1dev/aglang (main repo) the web interpreter at https://github.com/0xF1dev/aglang-website the website includes some examples and a link to both repos and the documentation. the “Try project” button is linked to the web interpreter (if the domain doesnt work, use https://aglang-website.vercel.app/ ), while the “See source code” takes to the cli’s repository. and now, go crazy and write some code!
hello! this is aglang, my own esoteric language made to be similar to assembly. it offers 13 operators, and with those (almost) anything is possible! you can try aglang by either downloading the cli (in the repo the “Source code” button links to) or by using the online interpreter (“Try project” button). if you’re confused and want to learn aglang, try the new interactive course, available on the website in the “learn” section: it will guide you through everything the language can do in only 10 short lessons and exercises. the cli includes an interpreter, a C transpiler and a compiler (note: the compiler needs GCC to be installed)! if you want to develop aglang programs more easily, we even have a vscode extension, with syntax highlighting and statement templates that said, go on and try aglang! its easier than you would expect...
|
1793537648.7122638
|
1793624048.7122638
|
|
37806
|
My very own WebOS by @alexandr | Stardance
|
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @alexandr | Stardance
|
1793537650.317355
|
1794142450.317355
|
|
38704
|
My very own WebOS by @abhinavgyanshekhar | Stardan My very own WebOS by @abhinavgyanshekhar | Stardance...
|
abhinavgyanshekhar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @abhinavgyanshekhar | Title: My very own WebOS by @abhinavgyanshekhar | Stardance...
|
1793537651.2433648
|
1794142451.2433648
|
|
19768
|
Frictionless by @SriyanshS | Stardance
|
SriyanshS
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @SriyanshS | Stardance
|
1793537652.1432765
|
1794142452.1432765
|
|
28673
|
My very own WebOS by @vasper | Stardance
|
vasper
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @vasper | Stardance
|
1793537653.0535774
|
1794142453.0535774
|
|
254
|
GitPilot-n8n: The Autonomous Open Source AI Agent GitPilot-n8n: The Autonomous Open Source AI Agent by @jawadhasan | Stardance...
|
jawadhasan
|
1
|
6.33
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-06T15:18:40Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built a Multi-Agentic workflow that constantly monitors any issues on Github and notifies its developers. It is set up on a repository. I still don’t know how I built it. When I planned it first. it seemed so hard. and when I was building this project, I saw some errors that I never saw before and even after that I had to alter my initial plan. But it works now fortunately.", "repo": "https://github.com/Jawad2011/GitPilot-n8n-The-Autonomous-Open-Source-AI-Agent", "demo": "https://github.com/Jawad2011/Gitpilot-test-sandbox/issues"}]...
|
[{"post_id": 5384, "ts": "2026 [{"post_id": 5384, "ts": "2026-06-09T04:02:28Z", "hours": 0.3336, "text": "Made it demoable, added demo instructions and fixed some typos. Readt re reship."}, {"post_id": 3533, "ts": "2026-06-06T14:52:48Z", "hours": 0.51, "text": "Finally finished writing my README. Now, it’s time to ship my project. I don’t know if it will be good or not but I will try. Let’s see what happens."}, {"post_id": 2787, "ts": "2026-06-05T16:29:50Z", "hours": 2.4467, "text": "Hello, i don’t know but I am struggling a lot. The tool I use is n8n which is an open-source AI Automation tool. But it has many problems and especially I face more struggles because of my server being rented. Firstly, I wanted to use MCP server and built it on my own but unfortunately due to some errors and proxies on which I had no control over, i was unable to connect it. Then, I directly connected it directly my main AI Agent node."}, {"post_id": 1952, "ts": "2026-06-04T06:19:14Z", "hours": 2.5161, "text": "Hello, I worked for about 2 and a half hours trying to write a Python script to parse the data to only find out that Python isn’t installed in the n8n server. I use a student-only n8n server which charges $17 per 3 years. Python3 wasn’t installed there. So, I had to find an alternative and used a Set Node instead. And also added an AI Agent and build a MCP Server so the AI Agent can use the tools without creating a mess in the original workflow."}, {"post_id": 656, "ts": "2026-06-02T05:52:21Z", "hours": 0.4222, "text": "Built the initial phase successfully after debugging and learning that AI Model cannot take raw JSON and you have to stringify it."}]...
|
Title: GitPilot-n8n: The Autonomous Open Source AI Title: GitPilot-n8n: The Autonomous Open Source AI Agent by @jawadhasan | Stardance
Devlogs:
Built the initial phase successfully after debugging and learning that AI Model cannot take raw JSON and you have to stringify it.
Hello, I worked for about 2 and a half hours trying to write a Python script to parse the data to only find out that Python isn’t installed in the n8n server. I use a student-only n8n server which charges $17 per 3 years. Python3 wasn’t installed there. So, I had to find an alternative and used a Set Node instead. And also added an AI Agent and build a MCP Server so the AI Agent can use the tools without creating a mess in the original workflow.
Hello, i don’t know but I am struggling a lot. The tool I use is n8n which is an open-source AI Automation tool. But it has many problems and especially I face more struggles because of my server being rented. Firstly, I wanted to use MCP server and built it on my own but unfortunately due to some errors and proxies on which I had no control over, i was unable to connect it. Then, I directly connected it directly my main AI Agent node.
Finally finished writing my README. Now, it’s time to ship my project. I don’t know if it will be good or not but I will try. Let’s see what happens.
Made it demoable, added demo instructions and fixed some typos. Readt re reship.
Ships:
I built a Multi-Agentic workflow that constantly monitors any issues on Github and notifies its developers. It is set up on a repository. I still don’t know how I built it. When I planned it first. it seemed so hard. and when I was building this project, I saw some errors that I never saw before and even after that I had to alter my initial plan. But it works now fortunately....
|
1793537653.9578214
|
1793624053.9578214
|
|
35710
|
My first project!! by @CherryIsAWESOME | Stardance
|
CherryIsAWESOME
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first project!! by @CherryIsAWESOME | St Title: My first project!! by @CherryIsAWESOME | Stardance...
|
1793537655.1740782
|
1794142455.1740782
|
|
33998
|
Frictionless by @ma_alazabi22 | Stardance
|
ma_alazabi22
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @ma_alazabi22 | Stardance
|
1793537656.050921
|
1794142456.050921
|
|
39862
|
asistende holograma con ia by @jdaviddg077 | Stard asistende holograma con ia by @jdaviddg077 | Stardance...
|
jdaviddg077
|
1
|
67.42
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-04T01:28:11Z", "hours": 31.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "este es un prototipo del proyecto no es la parte funcional lei e investige en youtube que esto se podia hacer y mi intencion es que ustedes vean que estoy trabajando en el esta es la parte base del peroyecto tambien agrege una ia es llama 3.2 3b en un redmi note 14 para que respondiera y lo hace muy rapido tambien lo intente con una 7b pero aunque respondio se tardo mucho en si esta es una muestra del proyecto", "repo": "https://github.com/jdaviddg077/holograma-asistente-de-ia-", "demo": ""}]...
|
[{"post_id": 61940, "ts": "202 [{"post_id": 61940, "ts": "2026-09-05T03:44:40Z", "hours": 0.5672, "text": "Hi, today we were working on adding more lighting and creating some more detailed spaces."}, {"post_id": 52059, "ts": "2026-08-22T03:16:23Z", "hours": 2.4222, "text": "Hi, today we assembled the sliding system for the hologram projector’s glass; should we paint it or leave it as is?"}, {"post_id": 51404, "ts": "2026-08-21T02:42:19Z", "hours": 1.5711, "text": "Hi! Today we were working on the system to make the hologram move 360 degrees."}, {"post_id": 50720, "ts": "2026-08-20T01:58:48Z", "hours": 1.3008, "text": "Hello again. Today we were cutting the glass and designing a mount that allows it to rotate 360 degrees."}, {"post_id": 45537, "ts": "2026-08-12T02:57:45Z", "hours": 4.0842, "text": "Hi! Today, we finally managed to integrate an AI into the HTML file."}, {"post_id": 44983, "ts": "2026-08-11T03:25:08Z", "hours": 0.3503, "text": "Hi, I’ve been doing quite a lot of things but I’ve had problems with Lapse, so I can’t post many hours at the moment, but I’ll keep in touch."}, {"post_id": 43676, "ts": "2026-08-09T02:31:52Z", "hours": 0.4533, "text": "Hi, today we built the prism for the project; it works quite well, but I’m going to try to improve it."}, {"post_id": 43039, "ts": "2026-08-08T02:54:22Z", "hours": 5.3339, "text": "Hi! Today we worked on the physical part of the hologram. It was a bit complicated, but it is fully functional. Templates for replicating it will be added soon."}, {"post_id": 42407, "ts": "2026-08-07T03:02:07Z", "hours": 9.9328, "text": "Hi, I’m building the website today. A lot of progress has already been made; the only thing left is to connect the AI to the HTML file."}, {"post_id": 41115, "ts": "2026-08-05T03:26:37Z", "hours": 10.4061, "text": "Day 6 of the hologram project: we made quite a few changes today. We started 3D animation, finished the personal website, and began work on the assistant’s website."}, {"post_id": 40461, "ts": "2026-08-04T00:25:13Z", "hours": 8.9503, "text": "Day 5, today we were doing some cheering and also some programming and"}, {"post_id": 39842, "ts": "2026-08-03T03:06:11Z", "hours": 7.3939, "text": "Day 4 of the hologram assistant project: today we built the base of the webpage and added some more animation. Yesterday I asked for a name for the female character, and the winner was @puerta , who suggested “Sisi”—so that’s her new name. Now we need a name for the Minecraft character."}, {"post_id": 39218, "ts": "2026-08-02T01:27:22Z", "hours": 6.8336, "text": "Day 3: Today I animated our second hologram assistant character, but I don’t know what name to give it. If anyone has any ideas for the characters, please write them in the comments."}, {"post_id": 38531, "ts": "2026-07-31T23:47:49Z", "hours": 5.1969, "text": "Day 2: Today I started doing a bit of everything. I began by practicing how to create HTML, then I worked on fixing the model, and after that, I started creating the first animation for the assistant I chose a Minecraft character. Here are the videos."}, {"post_id": 37883, "ts": "2026-07-30T21:29:37Z", "hours": 1.3939, "text": "Day 1: We modeled the base of the hologram where the objects will be placed for it to work"}, {"post_id": 37634, "ts": "2026-07-30T14:50:21Z", "hours": 1.57, "text": "Hello! Day 1 of the hologram assistant project. Today I’m drafting the project plans to give it its final shape; I’ll also be creating digital versions. This is just the first one—there are three in total—and I’ll be posting them later."}]...
|
Title: asistende holograma con ia by @jdaviddg077 Title: asistende holograma con ia by @jdaviddg077 | Stardance
Devlogs:
Hello! Day 1 of the hologram assistant project. Today I’m drafting the project plans to give it its final shape; I’ll also be creating digital versions. This is just the first one—there are three in total—and I’ll be posting them later.
Day 1: We modeled the base of the hologram where the objects will be placed for it to work
Day 2: Today I started doing a bit of everything. I began by practicing how to create HTML, then I worked on fixing the model, and after that, I started creating the first animation for the assistant I chose a Minecraft character. Here are the videos.
Day 3: Today I animated our second hologram assistant character, but I don’t know what name to give it. If anyone has any ideas for the characters, please write them in the comments.
Day 4 of the hologram assistant project: today we built the base of the webpage and added some more animation. Yesterday I asked for a name for the female character, and the winner was @puerta , who suggested “Sisi”—so that’s her new name. Now we need a name for the Minecraft character.
Day 5, today we were doing some cheering and also some programming and
Day 6 of the hologram project: we made quite a few changes today. We started 3D animation, finished the personal website, and began work on the assistant’s website.
Hi, I’m building the website today. A lot of progress has already been made; the only thing left is to connect the AI to the HTML file.
Hi! Today we worked on the physical part of the hologram. It was a bit complicated, but it is fully functional. Templates for replicating it will be added soon.
Hi, today we built the prism for the project; it works quite well, but I’m going to try to improve it.
Hi, I’ve been doing quite a lot of things but I’ve had problems with Lapse, so I can’t post many hours at the moment, but I’ll keep in touch.
Hi! Today, we finally managed to integrate an AI into the HTML file.
Hello again. Today we were cutting the glass and designing a mount that allows it to rotate 360 degrees.
Hi! Today we were working on the system to make the hologram move 360 degrees.
Hi, today we assembled the sliding system for the hologram projector’s glass; should we paint it or leave it as is?
Hi, today we were working on adding more lighting and creating some more detailed spaces.
Ships:
este es un prototipo del proyecto no es la parte funcional lei e investige en youtube que esto se podia hacer y mi intencion es que ustedes vean que estoy trabajando en el esta es la parte base del peroyecto tambien agrege una ia es llama 3.2 3b en un redmi note 14 para que respondiera y lo hace muy rapido tambien lo intente con una 7b pero aunque respondio se tardo mucho en si esta es una muestra del proyecto...
|
1793537656.949511
|
1793624056.949511
|
|
36774
|
My own site! by @alexxx | Stardance
|
alexxx
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @alexxx | Stardance
|
1793537658.1935337
|
1794142458.1935337
|
|
24290
|
My very own WebOS by @nikhilr | Stardance
|
nikhilr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @nikhilr | Stardance
|
1793537659.1385186
|
1794142459.1385186
|
|
9083
|
My awesome macropad! by @JacielC | Stardance
|
JacielC
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @JacielC | Stardanc Title: My awesome macropad! by @JacielC | Stardance...
|
1793537662.678727
|
1794142462.678727
|
|
3216
|
Cyberdeck by @schweter1231 | Stardance
|
schweter1231
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Cyberdeck by @schweter1231 | Stardance
|
1793537663.5690646
|
1794142463.5690646
|
|
27471
|
My very own WebOS by @Haya_Z | Stardance
|
Haya_Z
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Haya_Z | Stardance
|
1793537664.444399
|
1794142464.444399
|
|
25042
|
Untitled by @some_thing_1432 | Stardance
|
some_thing_1432
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @some_thing_1432 | Stardance
|
1793537665.3918872
|
1794142465.3918872
|
|
36627
|
Crystal OS by @kuba_ch101 | Stardance
|
kuba_ch101
|
1
|
24.0
|
70
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-29T19:01:16Z", "hours": 24.0, "multiplier": 2.85, "payout": 70, "blessing": "neutral", "text": "I built a webOS and added some computer graphics to it. My project is called CrystalOS(I just named it after the background render). I made the OS and apps logic in Java Script following the Hack Club’s webOS tutorial. I really learned JS after this project. The render was written in C with OpenGL and compiled to WASM(Web Assembly) using Emscriptem. I also learned Instanced Rendering from this project which is a way to draw multiple times the same geometry.", "repo": "https://github.com/kubach101/CrystalOS/tree/master", "demo": "https://kubach101.github.io/CrystalOS/"}]...
|
[{"post_id": 83380, "ts": "202 [{"post_id": 83380, "ts": "2026-10-27T21:30:01Z", "hours": 0.7761, "text": "I finally added allarm sounds and volume control to the settings."}, {"post_id": 82298, "ts": "2026-10-24T14:27:53Z", "hours": 0.5108, "text": "I added support for other screen sizes and changed the clock font. I am almost ready to ship."}, {"post_id": 75975, "ts": "2026-10-01T19:55:50Z", "hours": 1.2864, "text": "I added this cool animation when you open a window, I came up with it by myself. It is pretty straight forward, you just multiply the position vectors; I also added a real time clock so it looks more like an OS."}, {"post_id": 74032, "ts": "2026-09-26T15:48:49Z", "hours": 3.6783, "text": "I switched to instanced rendering which made everything faster and reduced memory use so I hope the will work on smartphones. I also added this exploding animation which triggers when you open an app, I got inspired by that one tony stark meme where he makes a big sphere out of holograms."}, {"post_id": 39779, "ts": "2026-08-02T23:35:58Z", "hours": 3.5822, "text": "I made the calculator and timer logic, the notepad needs a little bit of work but is mostly done. Then I tried to style everything to fit the theme."}, {"post_id": 33215, "ts": "2026-07-22T22:22:29Z", "hours": 1.8053, "text": "Started making the notepad and calculator"}, {"post_id": 32628, "ts": "2026-07-21T22:18:57Z", "hours": 4.6233, "text": "I finnished the windows! Needed to rework the logic and this time I followed the tutorial. It really helped me especially with organizing the functions."}, {"post_id": 31678, "ts": "2026-07-20T09:00:59Z", "hours": 1.4744, "text": "I started on some OS things, for now I’ve done some style and logic for the windows but I still need to make the icons open them. icon source: https://www.svgrepo.com"}, {"post_id": 31134, "ts": "2026-07-19T09:14:11Z", "hours": 1.5031, "text": "I fixed the rendering artifacts and started making the desktop."}, {"post_id": 30897, "ts": "2026-07-18T21:24:40Z", "hours": 3.6961, "text": "I almost finnished the background. The only things left are those random giant triangles and I cant figure out what is the cause."}, {"post_id": 30616, "ts": "2026-07-18T10:33:54Z", "hours": 1.5528, "text": "Hello, I just started making my web OS. Today I made the back groud rendering pipeline. The render will be quite basic and I took some code from my other projects so it took me less time than ussual. The background will be made randomly positioned, low-polly shapes(like this in the screen). I want them to look like crystals. I want to finnish the render and then make the actual site, but I still need to make random shape generation and add some movement"}]...
|
Title: Crystal OS by @kuba_ch101 | Stardance
Devl Title: Crystal OS by @kuba_ch101 | Stardance
Devlogs:
Hello, I just started making my web OS. Today I made the back groud rendering pipeline. The render will be quite basic and I took some code from my other projects so it took me less time than ussual. The background will be made randomly positioned, low-polly shapes(like this in the screen). I want them to look like crystals. I want to finnish the render and then make the actual site, but I still need to make random shape generation and add some movement
I almost finnished the background. The only things left are those random giant triangles and I cant figure out what is the cause.
I fixed the rendering artifacts and started making the desktop.
I started on some OS things, for now I’ve done some style and logic for the windows but I still need to make the icons open them. icon source: https://www.svgrepo.com
I finnished the windows! Needed to rework the logic and this time I followed the tutorial. It really helped me especially with organizing the functions.
Started making the notepad and calculator
I made the calculator and timer logic, the notepad needs a little bit of work but is mostly done. Then I tried to style everything to fit the theme.
I switched to instanced rendering which made everything faster and reduced memory use so I hope the will work on smartphones. I also added this exploding animation which triggers when you open an app, I got inspired by that one tony stark meme where he makes a big sphere out of holograms.
I added this cool animation when you open a window, I came up with it by myself. It is pretty straight forward, you just multiply the position vectors; I also added a real time clock so it looks more like an OS.
I added support for other screen sizes and changed the clock font. I am almost ready to ship.
I finally added allarm sounds and volume control to the settings.
Ships:
I built a webOS and added some computer graphics to it. My project is called CrystalOS(I just named it after the background render). I made the OS and apps logic in Java Script following the Hack Club’s webOS tutorial. I really learned JS after this project. The render was written in C with OpenGL and compiled to WASM(Web Assembly) using Emscriptem. I also learned Instanced Rendering from this project which is a way to draw multiple times the same geometry....
|
1793537666.2965662
|
1793624066.2965662
|
|
902
|
A game themed website by @Aditya_ | Stardance
|
Aditya_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A game themed website by @Aditya_ | Stardan Title: A game themed website by @Aditya_ | Stardance...
|
1793537667.5489943
|
1794142467.5489943
|
|
9583
|
My awesome macropad! by @Elnur | Stardance
|
Elnur
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-06T13:38:19Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made macropad. Learned how to work in kiCAD", "repo": "https://github.com/ElnurMavlonov/macropad_hardware", "demo": ""}]...
|
[{"post_id": 3462, "ts": "2026 [{"post_id": 3462, "ts": "2026-06-06T12:38:17Z", "hours": 0.2625, "text": "Today, I did something crazy. At 2:00 PM, I had absolutely no idea what to do, but I had this intense urge to finally learn KiCad. I just wanted to build something and figure it out. Fast forward to 5:30 PM, and it’s finally done! The peace of mind I feel right now is incredible. big thanks to whoever made the guide."}]...
|
Title: My awesome macropad! by @Elnur | Stardance
Title: My awesome macropad! by @Elnur | Stardance
Devlogs:
Today, I did something crazy. At 2:00 PM, I had absolutely no idea what to do, but I had this intense urge to finally learn KiCad. I just wanted to build something and figure it out. Fast forward to 5:30 PM, and it’s finally done! The peace of mind I feel right now is incredible. big thanks to whoever made the guide.
Ships:
I made macropad. Learned how to work in kiCAD...
|
1793537668.4611304
|
1793624068.4611304
|
|
8240
|
live in space by @clara | Stardance
|
clara
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: live in space by @clara | Stardance
|
1793537669.7362084
|
1794142469.7362084
|
|
24588
|
Untitled by @foxors | Stardance
|
foxors
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @foxors | Stardance
|
1793537670.6425428
|
1794401670.6425428
|
|
28626
|
PECKO-platformer by @Miyako | Stardance
|
Miyako
|
1
|
35.0
|
92
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T06:35:39Z", "hours": 35.0, "multiplier": 2.97, "payout": 92, "blessing": "neutral", "text": "so i made a platformer game where you have to collect all the coins while avioding the enemy to reach the end and game finish since its my first game aside from angry bird i made with completely based on tutorial here i did follow tutorial and then made changes in the game as i’m new to it so i struggled alot finding the tools and and what type of code i should write for adding this particular function through i learn alot while making this game and also did few things completely by myself so i’m a bit happy that i learned in a way", "repo": "https://github.com/miyakostarry/PECKO-platformer", "demo": "https://miyakostarry.itch.io/peckos-coin-rush"}]...
|
[{"post_id": 25160, "ts": "202 [{"post_id": 25160, "ts": "2026-07-09T06:31:35Z", "hours": 1.3122, "text": "so finnaly i made all the finnaly changes and now i’m about to ship my first project"}, {"post_id": 24705, "ts": "2026-07-08T13:57:28Z", "hours": 4.1006, "text": "🎮 Devlog #8 – The Finish Line! Pecko is Complete 🐥✨ Today was one of the biggest days of this project—I officially finished Pecko! The last feature I worked on was the tutorial dialogue. I wanted the game to feel welcoming, so instead of showing all the instructions at once, I created a typewriter effect where the text appears one character at a time, just like someone is typing. While implementing it, I learned how await, create_timer(), and the timeout signal work together to pause the code briefly before displaying the next letter. Like every game development session, things didn’t work perfectly on the first try. I ran into the “Invalid assignment of property ‘text’ on a base object of type ‘null instance’” error because my script couldn’t find the correct Label node. After checking my scene tree and correcting the node path, the dialogue started working as expected. I also spent time improving the dialogue itself. Instead of plain instructions, I gave Pecko a bit of personality: “Pecko loves shiny gold and never leaves a coin behind! Help him collect every single coin to complete the level.” I also added a helpful tip to let players know they can press Esc at any time to open the Pause Menu. While experimenting, I tried to make only the word Esc appear in a different color. That’s when I discovered that a normal Label can’t color individual words and that RichTextLabel is the proper node for styled text. Even though I didn’t implement it yet, I learned something new about Godot’s UI system. Finally, after weeks of learning, debugging, fixing bugs, adding coins, enemies, checkpoints, timers, a pause menu, settings, notifications, and polishing the gameplay… Pecko is complete. This project taught me far more than just how to make a platformer. I learned how scenes connect together, how signals simplify communication between objects, how CanvasLayer keeps UI fixed on the screen, how to debug Godot errors, and how to turn an idea into a playable game. This isn’t the end—it’s the beginning. My first game is finished, and I’m excited to build even bigger and better games in the future. 🎉 Project Status: Completed (ps - really satisfied with it because while coding i got my python revised as gdscript kind of similar to it though few things were that took me realy long time to understand but its fine i’m new to godot i’m still learning )"}, {"post_id": 24050, "ts": "2026-07-07T10:52:23Z", "hours": 2.7417, "text": "Devlog – The Settings Menu Strikes Back ⚙️Today’s goal was simple: add a settings menu to the game.At first, I thought it would be a quick task, but it turned into one of those classic “why isn’t this working?” moments. After setting up the settings button and trying to connect everything, I kept running into errors. The menu refused to behave the way I expected, and I spent a good amount of time checking node paths, signals, scene hierarchy, and scripts to figure out what had gone wrong.It was one of those bugs where everything looked correct, yet the game had other plans.After carefully going through the setup step by step, I finally found the issue, fixed it, and… it worked! 🎉 The settings menu opened exactly as intended, and seeing it function properly after all that debugging was incredibly satisfying.Today’s biggest lesson wasn’t just about creating a settings menu—it was about staying patient while debugging. Every error forced me to understand Godot a little better, and solving it felt like a small victory.Progress made today:Added the settings menu.Tracked down and fixed the setup error.Successfully got the settings menu working.Learned more about debugging UI and scene connections in Godot.Every bug solved is another level unlocked as a game developer. On to the next feature!"}, {"post_id": 23843, "ts": "2026-07-07T00:50:34Z", "hours": 6.7011, "text": "Devlog #5 – Pause Menu, Audio & More! 🎮Made some solid progress on my platformer today!What’s New⏸️ Added a Pause Menu that can be opened with the Escape key.▶️ Added Resume functionality to continue the game.🔄 Added a Restart button to reload the current level.🏠 Added a Back to Menu button.❌ Added a Quit button to close the game.🪙 Added coin collection sound effects.💥 Added a hurt/death sound effect for the kill zone.🎵 Added background music to make the game feel more alive.ChallengesThe biggest challenge was understanding how pausing works in Godot. I had to learn how CanvasLayer, get_tree().paused, scene changes, and button signals all work together. I also spent time debugging audio issues and figuring out where different sounds should be controlled.What’s Next⚙️ Add a Settings menu.🔊 Allow players to toggle music and sound effects on and off.✨ Continue polishing the gameplay and UI.I’m still learning Godot and game development, but every feature I finish helps me understand a little more. Looking forward to sharing the next update!"}, {"post_id": 22128, "ts": "2026-07-04T12:59:28Z", "hours": 4.7683, "text": "Devlog – Day 2: UI Improvements & Coin CollectionToday I focused on improving the core gameplay loop and adding user interface elements to make the game feel more complete.What I worked onAdded a coin counter that updates whenever the player collects a coin.Connected the score system to a Label inside a CanvasLayer, ensuring the UI stays fixed on the screen even when the camera or player moves.Continued refining the coin collection logic, making sure the score increases correctly when a coin is picked up.Began implementing a Congratulations message that appears after collecting all the coins. While working on this, I encountered a node path error (Node not found), which helped me better understand how Godot searches for nodes relative to the current scene.Explored how to use CanvasLayer to display UI elements such as score, win messages, and future game notifications.Learned about different ways to create a countdown timer, including using Godot’s built-in Timer node and creating a timer with _process(delta).ChallengesThe biggest issue today was accessing UI nodes from the correct script. I learned that using an incorrect node path causes Godot to search relative to the current node, resulting in a “Node not found” error. Understanding the scene tree and node hierarchy made it much easier to troubleshoot these issues.Next StepsFinish the “Congratulations” screen after all coins are collected.Add a countdown timer to create a time-based challenge.Implement a “Time’s Up” or “Game Over” screen if the player runs out of time.Continue polishing the UI and overall gameplay experience.Overall, today was focused on connecting gameplay mechanics with the user interface. Although I ran into a few errors, they helped me gain a better understanding of Godot’s scene tree and node system, making future UI development much easier."}, {"post_id": 21545, "ts": "2026-07-03T15:50:26Z", "hours": 10.5783, "text": "Devlog #3 – Start Menu, Coin Win Condition, and a UI Challenge 🎮 Made some nice progress on my Godot platformer today! I added a simple start menu, so the game now begins from a proper title screen instead of jumping straight into gameplay. It already feels much more like an actual game. I also implemented a win condition. Once the player collects all the coins in the level, the game automatically returns to the start menu. It’s a simple feature, but it completes the gameplay loop and makes the level feel finished. The biggest challenge today was the coin counter UI. I wanted to display the number of collected coins on the screen using a CanvasLayer and a Label. It sounded straightforward, but I ran into issues with node paths, CanvasLayer setup, and null instance errors while trying to update the label from my game logic. After moving things around and experimenting with different approaches, I realized I still need to clean up how my GameManager communicates with the UI. So the score display isn’t finished yet, but I understand the problem much better than when I started. Even though everything didn’t work on the first try, today was a reminder that game development is often about debugging and understanding how different systems connect together. Progress today: ✅ Added a start menu. ✅ Player returns to the start menu after collecting all coins. ✅ Started implementing a coin counter UI. 🛠️ Still debugging the score display."}, {"post_id": 19175, "ts": "2026-06-30T13:13:33Z", "hours": 1.4728, "text": "so basically i added slimes as enemy and it was my first time using libresprite and oh god even though it was so simple i loved it best part of making slime is that as beginner you don’t have to draw the walking sprite sheet that feels hard and another few things i added is that while playing you can use A key as Left Arrow key and D key as right Arrow key and W key and SpaceBar as jump key and another things i have added is the frames for jumping, and running and also when the knight enters the kill zone that basically the slime it falls off the platform and also when right is pressed it turns right and when left is prrssed it turns left and i have done same thing with slime it changes left to right when it collide with some body"}, {"post_id": 18983, "ts": "2026-06-30T04:44:54Z", "hours": 3.7025, "text": "so currently i made few more tiles here and added moew coins and also i’m planing to add enemy here so that it look cool and that asset pack have those and i will use everything that those sprite sheeet or asset pack contain and another thing i was wondering to add i’m sure but a pop up coin when the player enters in scene ? well i’m not sure about that pop up thing never used before but will try it"}]...
|
Title: PECKO-platformer by @Miyako | Stardance
De Title: PECKO-platformer by @Miyako | Stardance
Devlogs:
so currently i made few more tiles here and added moew coins and also i’m planing to add enemy here so that it look cool and that asset pack have those and i will use everything that those sprite sheeet or asset pack contain and another thing i was wondering to add i’m sure but a pop up coin when the player enters in scene ? well i’m not sure about that pop up thing never used before but will try it
so basically i added slimes as enemy and it was my first time using libresprite and oh god even though it was so simple i loved it best part of making slime is that as beginner you don’t have to draw the walking sprite sheet that feels hard and another few things i added is that while playing you can use A key as Left Arrow key and D key as right Arrow key and W key and SpaceBar as jump key and another things i have added is the frames for jumping, and running and also when the knight enters the kill zone that basically the slime it falls off the platform and also when right is pressed it turns right and when left is prrssed it turns left and i have done same thing with slime it changes left to right when it collide with some body
Devlog #3 – Start Menu, Coin Win Condition, and a UI Challenge 🎮 Made some nice progress on my Godot platformer today! I added a simple start menu, so the game now begins from a proper title screen instead of jumping straight into gameplay. It already feels much more like an actual game. I also implemented a win condition. Once the player collects all the coins in the level, the game automatically returns to the start menu. It’s a simple feature, but it completes the gameplay loop and makes the level feel finished. The biggest challenge today was the coin counter UI. I wanted to display the number of collected coins on the screen using a CanvasLayer and a Label. It sounded straightforward, but I ran into issues with node paths, CanvasLayer setup, and null instance errors while trying to update the label from my game logic. After moving things around and experimenting with different approaches, I realized I still need to clean up how my GameManager communicates with the UI. So the score display isn’t finished yet, but I understand the problem much better than when I started. Even though everything didn’t work on the first try, today was a reminder that game development is often about debugging and understanding how different systems connect together. Progress today: ✅ Added a start menu. ✅ Player returns to the start menu after collecting all coins. ✅ Started implementing a coin counter UI. 🛠️ Still debugging the score display.
Devlog – Day 2: UI Improvements & Coin CollectionToday I focused on improving the core gameplay loop and adding user interface elements to make the game feel more complete.What I worked onAdded a coin counter that updates whenever the player collects a coin.Connected the score system to a Label inside a CanvasLayer, ensuring the UI stays fixed on the screen even when the camera or player moves.Continued refining the coin collection logic, making sure the score increases correctly when a coin is picked up.Began implementing a Congratulations message that appears after collecting all the coins. While working on this, I encountered a node path error (Node not found), which helped me better understand how Godot searches for nodes relative to the current scene.Explored how to use CanvasLayer to display UI elements such as score, win messages, and future game notifications.Learned about different ways to create a countdown timer, including using Godot’s built-in Timer node and creating a timer with _process(delta).ChallengesThe biggest issue today was accessing UI nodes from the correct script. I learned that using an incorrect node path causes Godot to search relative to the current node, resulting in a “Node not found” error. Understanding the scene tree and node hierarchy made it much easier to troubleshoot these issues.Next StepsFinish the “Congratulations” screen after all coins are collected.Add a countdown timer to create a time-based challenge.Implement a “Time’s Up” or “Game Over” screen if the player runs out of time.Continue polishing the UI and overall gameplay experience.Overall, today was focused on connecting gameplay mechanics with the user interface. Although I ran into a few errors, they helped me gain a better understanding of Godot’s scene tree and node system, making future UI development much easier.
Devlog #5 – Pause Menu, Audio & More! 🎮Made some solid progress on my platformer today!What’s New⏸️ Added a Pause Menu that can be opened with the Escape key.▶️ Added Resume functionality to continue the game.🔄 Added a Restart button to reload the current level.🏠 Added a Back to Menu button.❌ Added a Quit button to close the game.🪙 Added coin collection sound effects.💥 Added a hurt/death sound effect for the kill zone.🎵 Added background music to make the game feel more alive.ChallengesThe biggest challenge was understanding how pausing works in Godot. I had to learn how CanvasLayer, get_tree().paused, scene changes, and button signals all work together. I also spent time debugging audio issues and figuring out where different sounds should be controlled.What’s Next⚙️ Add a Settings menu.🔊 Allow players to toggle music and sound effects on and off.✨ Continue polishing the gameplay and UI.I’m still learning Godot and game development, but every feature I finish helps me understand a little more. Looking forward to sharing the next update!
Devlog – The Settings Menu Strikes Back ⚙️Today’s goal was simple: add a settings menu to the game.At first, I thought it would be a quick task, but it turned into one of those classic “why isn’t this working?” moments. After setting up the settings button and trying to connect everything, I kept running into errors. The menu refused to behave the way I expected, and I spent a good amount of time checking node paths, signals, scene hierarchy, and scripts to figure out what had gone wrong.It was one of those bugs where everything looked correct, yet the game had other plans.After carefully going through the setup step by step, I finally found the issue, fixed it, and… it worked! 🎉 The settings menu opened exactly as intended, and seeing it function properly after all that debugging was incredibly satisfying.Today’s biggest lesson wasn’t just about creating a settings menu—it was about staying patient while debugging. Every error forced me to understand Godot a little better, and solving it felt like a small victory.Progress made today:Added the settings menu.Tracked down and fixed the setup error.Successfully got the settings menu working.Learned more about debugging UI and scene connections in Godot.Every bug solved is another level unlocked as a game developer. On to the next feature!
🎮 Devlog #8 – The Finish Line! Pecko is Complete 🐥✨ Today was one of the biggest days of this project—I officially finished Pecko! The last feature I worked on was the tutorial dialogue. I wanted the game to feel welcoming, so instead of showing all the instructions at once, I created a typewriter effect where the text appears one character at a time, just like someone is typing. While implementing it, I learned how await, create_timer(), and the timeout signal work together to pause the code briefly before displaying the next letter. Like every game development session, things didn’t work perfectly on the first try. I ran into the “Invalid assignment of property ‘text’ on a base object of type ‘null instance’” error because my script couldn’t find the correct Label node. After checking my scene tree and correcting the node path, the dialogue started working as expected. I also spent time improving the dialogue itself. Instead of plain instructions, I gave Pecko a bit of personality: “Pecko loves shiny gold and never leaves a coin behind! Help him collect every single coin to complete the level.” I also added a helpful tip to let players know they can press Esc at any time to open the Pause Menu. While experimenting, I tried to make only the word Esc appear in a different color. That’s when I discovered that a normal Label can’t color individual words and that RichTextLabel is the proper node for styled text. Even though I didn’t implement it yet, I learned something new about Godot’s UI system. Finally, after weeks of learning, debugging, fixing bugs, adding coins, enemies, checkpoints, timers, a pause menu, settings, notifications, and polishing the gameplay… Pecko is complete. This project taught me far more than just how to make a platformer. I learned how scenes connect together, how signals simplify communication between objects, how CanvasLayer keeps UI fixed on the screen, how to debug Godot errors, and how to turn an idea into a playable game. This isn’t the end—it’s the beginning. My first game is finished, and I’m excited to build even bigger and better games in the future. 🎉 Project Status: Completed (ps - really satisfied with it because while coding i got my python revised as gdscript kind of similar to it though few things were that took me realy long time to understand but its fine i’m new to godot i’m still learning )
so finnaly i made all the finnaly changes and now i’m about to ship my first project
Ships:
so i made a platformer game where you have to collect all the coins while avioding the enemy to reach the end and game finish since its my first game aside from angry bird i made with completely based on tutorial here i did follow tutorial and then made changes in the game as i’m new to it so i struggled alot finding the tools and and what type of code i should write for adding this particular function through i learn alot while making this game and also did few things completely by myself so i’m a bit happy that i learned in a way...
|
1793537671.5699399
|
1793624071.5699399
|
|
28108
|
WarioWare Game by @Omar0023 | Stardance
|
Omar0023
|
0
|
5.1
|
0
|
[]
|
[{"post_id": 27313, "ts": "202 [{"post_id": 27313, "ts": "2026-07-12T19:43:39Z", "hours": 1.8972, "text": "halfway through"}, {"post_id": 25889, "ts": "2026-07-10T11:43:58Z", "hours": 1.6206, "text": "quick devlog, I have added the first minigame to the game!the process is exhausting to be honest, because 70% of it is just debugging"}, {"post_id": 19430, "ts": "2026-06-30T19:06:00Z", "hours": 1.1778, "text": "I have finished the loading scene that is going to show up after each level. have been struggling with a bug for a while before this that was about the functions that should move you from the menu into the level, but it’s done and is working perfectly fine now."}, {"post_id": 19125, "ts": "2026-06-30T11:24:25Z", "hours": 0.4069, "text": "first ever devlog, working on the marioware game, there is a bug that I can’t seem to solve for some reason, this headache is the real beauty of making software(trying not to go crazy rn)"}]...
|
Title: WarioWare Game by @Omar0023 | Stardance
De Title: WarioWare Game by @Omar0023 | Stardance
Devlogs:
first ever devlog, working on the marioware game, there is a bug that I can’t seem to solve for some reason, this headache is the real beauty of making software(trying not to go crazy rn)
I have finished the loading scene that is going to show up after each level. have been struggling with a bug for a while before this that was about the functions that should move you from the menu into the level, but it’s done and is working perfectly fine now.
quick devlog, I have added the first minigame to the game!the process is exhausting to be honest, because 70% of it is just debugging
halfway through...
|
1793537672.7815235
|
1794142472.7815235
|
|
30963
|
NovaDOS by @Rocket | Stardance
|
Rocket
|
0
|
12.44
|
0
|
[]
|
[{"post_id": 40721, "ts": "202 [{"post_id": 40721, "ts": "2026-08-04T13:14:56Z", "hours": 3.6394, "text": "Devlog 3 Hi! In this devlog I’m gonna tell you about the last commands I added to the shell and what new application I started working on. So the last commands I added to the shell are: -cp and cpdir -mv -cat And others, but the command rmdir still isn’t working. About the new application. The name of the app is NovaEDIT , today I managed to make the first version of it. To be more precise, I managed to implement the saving function. In the next update I want to add the load function. See you soon, bye!"}, {"post_id": 30723, "ts": "2026-07-18T15:25:43Z", "hours": 6.0008, "text": "Devlog 2 Hi! It’s been a long time since my last devlog, because I ve been working a lot on this project and I switched to Linux. These days I managed to implement some key features like mkdir,touch,rm,cd, cd ..,echo and I m currently working on rmdir(because rm deletes only files) See you soon,bye!"}, {"post_id": 22800, "ts": "2026-07-05T11:49:15Z", "hours": 2.8019, "text": "Devlog 1 Hi! My name is Rocket and my dream is to build an os, so I thought I would build a simulated one. Today I managed to build the structure of the os. To be more precise the boot system and the home screen. Because it is a TUI project I’m using Textual. I made the ASCII logo with a Python script, using the pyfiglet library"}]...
|
Title: NovaDOS by @Rocket | Stardance
Devlogs:
De Title: NovaDOS by @Rocket | Stardance
Devlogs:
Devlog 1 Hi! My name is Rocket and my dream is to build an os, so I thought I would build a simulated one. Today I managed to build the structure of the os. To be more precise the boot system and the home screen. Because it is a TUI project I’m using Textual. I made the ASCII logo with a Python script, using the pyfiglet library
Devlog 2 Hi! It’s been a long time since my last devlog, because I ve been working a lot on this project and I switched to Linux. These days I managed to implement some key features like mkdir,touch,rm,cd, cd ..,echo and I m currently working on rmdir(because rm deletes only files) See you soon,bye!
Devlog 3 Hi! In this devlog I’m gonna tell you about the last commands I added to the shell and what new application I started working on. So the last commands I added to the shell are: -cp and cpdir -mv -cat And others, but the command rmdir still isn’t working. About the new application. The name of the app is NovaEDIT , today I managed to make the first version of it. To be more precise, I managed to implement the saving function. In the next update I want to add the load function. See you soon, bye!...
|
1793537674.6579926
|
1794142474.6579926
|
|
1254
|
My awesome macropad! by @ShauryaM | Stardance
|
ShauryaM
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @ShauryaM | Stardan Title: My awesome macropad! by @ShauryaM | Stardance...
|
1793537677.6563897
|
1794142477.6563897
|
|
2981
|
College Filter by @Quantalabs | Stardance
|
Quantalabs
|
1
|
4.0
|
33
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-27T01:51:51Z", "hours": 4.0, "multiplier": 8.28, "payout": 33, "blessing": "neutral", "text": "I made a simple web app that filters through colleges using public Common Data Set data. Currently, CDS files aren’t accessible to the public to filter through in a central space, so this app lets you enter in different preferences. There’s a lot of things I want to add, such as better layout and more filtering options, as well as displaying more useful information on the frontend. One of the hardest parts was figuring out how to reduce the time it took to find the colleges, since I have to send a lot of different request. I realized, since most of this data is constant for basically the entire year, until a new class of students are admitted, I can cache the data once and use a local copy. Adding this drastically reduced loading times to roughly <1 second per request.", "repo": "https://github.com/Quantalabs/filter", "demo": "https://proj.rvind.cc/filter/"}]...
|
[{"post_id": 16631, "ts": "202 [{"post_id": 16631, "ts": "2026-06-27T01:41:37Z", "hours": 0.7819, "text": "I had a lot of issues when deploying, mainly because the server took too long to respond. So, I added a cache file that just stores gpa and private/public school data for each school, so that the app doesn’t need to send thousands of requests for a valid school. Now, response times are down to a couple seconds at most, but usually <1 second, which I’m okay with for now."}, {"post_id": 14164, "ts": "2026-06-23T04:40:54Z", "hours": 2.2414, "text": "Added actual filtering functionality using collegedata.fyi to get CDS data. I’m having issues distinguishing between public and private, so I may remove that functionality or try and distinguish schools by if they charge different in- and out-of-state tuition. (yes i did create an object that has all 50 states split among 5 different regions)"}, {"post_id": 13972, "ts": "2026-06-22T22:42:34Z", "hours": 1.0111, "text": "I setup the express project and landing page so far. I used the MD.css retro framework to style the website. I added a bit of other CSS to make the form look a bit better. I currently have a couple criteria by which users can filter schools (the actual filtering functionality will be implemented soon)"}]...
|
Title: College Filter by @Quantalabs | Stardance
Title: College Filter by @Quantalabs | Stardance
Devlogs:
I setup the express project and landing page so far. I used the MD.css retro framework to style the website. I added a bit of other CSS to make the form look a bit better. I currently have a couple criteria by which users can filter schools (the actual filtering functionality will be implemented soon)
Added actual filtering functionality using collegedata.fyi to get CDS data. I’m having issues distinguishing between public and private, so I may remove that functionality or try and distinguish schools by if they charge different in- and out-of-state tuition. (yes i did create an object that has all 50 states split among 5 different regions)
I had a lot of issues when deploying, mainly because the server took too long to respond. So, I added a cache file that just stores gpa and private/public school data for each school, so that the app doesn’t need to send thousands of requests for a valid school. Now, response times are down to a couple seconds at most, but usually <1 second, which I’m okay with for now.
Ships:
I made a simple web app that filters through colleges using public Common Data Set data. Currently, CDS files aren’t accessible to the public to filter through in a central space, so this app lets you enter in different preferences. There’s a lot of things I want to add, such as better layout and more filtering options, as well as displaying more useful information on the frontend. One of the hardest parts was figuring out how to reduce the time it took to find the colleges, since I have to send a lot of different request. I realized, since most of this data is constant for basically the entire year, until a new class of students are admitted, I can cache the data once and use a local copy. Adding this drastically reduced loading times to roughly <1 second per request....
|
1793537678.540991
|
1793624078.540991
|
|
10729
|
My awesome macropad! by @peric_karlo55 | Stardance
|
peric_karlo55
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @peric_karlo55 | St Title: My awesome macropad! by @peric_karlo55 | Stardance...
|
1793537681.4543588
|
1794142481.4543588
|
|
30471
|
My awesome macropad! by @brlin888 | Stardance
|
brlin888
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @brlin888 | Stardan Title: My awesome macropad! by @brlin888 | Stardance...
|
1793537683.046181
|
1794142483.046181
|
|
35935
|
Untitled project by @hypobromite | Stardance
|
hypobromite
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @hypobromite | Stardanc Title: Untitled project by @hypobromite | Stardance...
|
1793537684.2290337
|
1794142484.2290337
|
|
940
|
Spacetex by @stemdood44 | Stardance
|
stemdood44
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Spacetex by @stemdood44 | Stardance
|
1793537685.1147244
|
1794142485.1147244
|
|
37720
|
EagleOS by @EagleShreyash | Stardance
|
EagleShreyash
|
1
|
12.44
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-14T18:55:58Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my first real website. Its was really fun and the jams were really helpful the most challenging part was fixing the drag and close function bug on startup of the the welcome window took me hours to fix. One feature that I personally added was the translucent windows which i think look really cool and i’ve tried to make it eagle themed matching my allias so i hope you all like it :)", "repo": "https://github.com/eagleshreyash/EagleOs", "demo": "https://eagleshreyash.github.io/EagleOs/"}]...
|
[{"post_id": 49595, "ts": "202 [{"post_id": 49595, "ts": "2026-08-18T14:09:24Z", "hours": 2.4367, "text": "Two New App Addition >Adler Timer: fully Functional. pause,reset and choose time Works perfectly >Eagle Music: Base window is ready Functions are remaining This is turning Out so Good,I Haven’t decided which songs to put into the playlist So you guys can comment and Request your Favourite Songs and II’l Add them. Signing Out :)) -EagleShreyash"}, {"post_id": 47095, "ts": "2026-08-14T18:50:44Z", "hours": 1.1658, "text": "Fixed all bugs releated drag and close window function during starting. The project is finally ready to ship:))"}, {"post_id": 45880, "ts": "2026-08-12T16:49:06Z", "hours": 2.8367, "text": "Just completed The First App The Hawk Notes >Added Transparent Windows (Will be shipping it soon) Adding the code photoes in this devlog Stay tuned for the Next Devlog:)"}, {"post_id": 37532, "ts": "2026-07-30T10:46:25Z", "hours": 2.7444, "text": "#DEVLOG 2 >Featured Added- welcome window is now draggable; you can close the window and repoen it by clicking eagle logo at top. Starting to look like an Os Really excited about howits gonna turn out Stay tuned for next Devlog of EagleOs:)."}, {"post_id": 35780, "ts": "2026-07-27T12:54:21Z", "hours": 3.4856, "text": "This is the first look on eagleOs. Keypoints: >Top bar >Working Clock ;Currently working to make the window Draggable, Closable, and Openable. Will be posting second Devlog Soon. Stay Tuned:)"}]...
|
Title: EagleOS by @EagleShreyash | Stardance
Devl Title: EagleOS by @EagleShreyash | Stardance
Devlogs:
This is the first look on eagleOs. Keypoints: >Top bar >Working Clock ;Currently working to make the window Draggable, Closable, and Openable. Will be posting second Devlog Soon. Stay Tuned:)
#DEVLOG 2 >Featured Added- welcome window is now draggable; you can close the window and repoen it by clicking eagle logo at top. Starting to look like an Os Really excited about howits gonna turn out Stay tuned for next Devlog of EagleOs:).
Just completed The First App The Hawk Notes >Added Transparent Windows (Will be shipping it soon) Adding the code photoes in this devlog Stay tuned for the Next Devlog:)
Fixed all bugs releated drag and close window function during starting. The project is finally ready to ship:))
Two New App Addition >Adler Timer: fully Functional. pause,reset and choose time Works perfectly >Eagle Music: Base window is ready Functions are remaining This is turning Out so Good,I Haven’t decided which songs to put into the playlist So you guys can comment and Request your Favourite Songs and II’l Add them. Signing Out :)) -EagleShreyash
Ships:
I made my first real website. Its was really fun and the jams were really helpful the most challenging part was fixing the drag and close function bug on startup of the the welcome window took me hours to fix. One feature that I personally added was the translucent windows which i think look really cool and i’ve tried to make it eagle themed matching my allias so i hope you all like it :)...
|
1793537687.5964017
|
1793624087.5964017
|
|
1917
|
The Last Train by @mimii | Stardance
|
mimii
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: The Last Train by @mimii | Stardance
|
1793537689.7450933
|
1794142489.7450933
|
|
15205
|
build your villain lair by @Neph | Stardance
|
Neph
|
0
|
0.83
|
0
|
[]
|
[{"post_id": 7156, "ts": "2026 [{"post_id": 7156, "ts": "2026-06-11T23:10:47Z", "hours": 0.8333, "text": "I worked a little on it before I added hackatime, but during the time I had hackatime on the project, I changed some code I had errors in and added the two starting rooms, along with adding a gold amount. I have a small ui to just test the code out, nothing permanent yet :D"}]...
|
Title: build your villain lair by @Neph | Stardanc Title: build your villain lair by @Neph | Stardance
Devlogs:
I worked a little on it before I added hackatime, but during the time I had hackatime on the project, I changed some code I had errors in and added the two starting rooms, along with adding a gold amount. I have a small ui to just test the code out, nothing permanent yet :D...
|
1793537690.6124697
|
1794142490.6124697
|
|
38050
|
Mockpit by @itzzmarkus | Stardance
|
itzzmarkus
|
0
|
3.32
|
0
|
[]
|
[{"post_id": 33758, "ts": "202 [{"post_id": 33758, "ts": "2026-07-23T22:36:45Z", "hours": 2.1853, "text": "Worked on improving the UI of Mockpit. Additionally, I added all the states and functions required to make the client part of Mockpit fully functional!"}, {"post_id": 32727, "ts": "2026-07-22T01:55:16Z", "hours": 1.1303, "text": "I’m currently working on the mockup and design for Mockpit. Also started the Git repo and started making some React components for the webpage (it looks ugly but it’ll be better soon"}]...
|
Title: Mockpit by @itzzmarkus | Stardance
Devlogs Title: Mockpit by @itzzmarkus | Stardance
Devlogs:
I’m currently working on the mockup and design for Mockpit. Also started the Git repo and started making some React components for the webpage (it looks ugly but it’ll be better soon
Worked on improving the UI of Mockpit. Additionally, I added all the states and functions required to make the client part of Mockpit fully functional!...
|
1793537692.6742454
|
1794142492.6742454
|
|
19685
|
Frictionless by @ismoilovxushnudbek643 | Stardance
|
ismoilovxushnudbek643
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @ismoilovxushnudbek643 | St Title: Frictionless by @ismoilovxushnudbek643 | Stardance...
|
1793537693.963395
|
1794142493.963395
|
|
19697
|
ESP-32 Bluetooth Debug Tool by @coderguy | Stardan ESP-32 Bluetooth Debug Tool by @coderguy | Stardance...
|
coderguy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ESP-32 Bluetooth Debug Tool by @coderguy | Title: ESP-32 Bluetooth Debug Tool by @coderguy | Stardance...
|
1793537698.4154568
|
1794142498.4154568
|
|
7082
|
RailCrew by @aaradhyagupta | Stardance
|
aaradhyagupta
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: RailCrew by @aaradhyagupta | Stardance
|
1793537699.299632
|
1794142499.299632
|
|
585
|
Lumicore-Pro by @Ved | Stardance
|
Ved
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Lumicore-Pro by @Ved | Stardance
|
1793537700.1901517
|
1794142500.1901517
|
|
17942
|
Cyber OS by @Ann_with_an_e | Stardance
|
Ann_with_an_e
|
2
|
48.0
|
655
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T01:12:54Z", "hours": 28.0, "multiplier": 14.07, "payout": 394, "blessing": "neutral", "text": "What I made: Cyber OS is an interactive, web-based OS. It has multiple applications, with closable, draggable windows with a z-index. There are roughly twelve applications in total, not counting the ones on the top bar. While I would love to ramble about all my applications, here are the ones I’m most proud of! In-Filter-Traitor: An application that filters your photos to either black and white, or a two-toned image that you can choose the shadows and highlights of! Ever felt your photos could benefit from a few more Gotham vibes? Never? Well, that’s disappointing. POST-IT: A virtual sticky note! I really love it mostly due to the design that may or may not have been a direct rip-off from the app in windows. It’s silly, but I’m happy that I managed to recreate it. Terminal: It lets you control the OS by practicing the ancient art of typing orange runes into a dark void. If you don’t know what to type, the void will inform you. Easter Egg! It just occurred to me that I may be overhyping this. Anyway, this is how it works- on the last slide of the sidebar there is an app called Comms. You will not be able to access it without a password. The password is hidden somewhere within the OS. There’s a window called Developer Logs that might tell you what Comms does, but not the password. If you’re short of time, or not up for a treasure hunt, the password is in my README with a spoiler warning! Also tell me if my hiding place was too obvious lol. Feeling Lost? Something not working? Please go through the README, I do think it covers most of the quirks you might encounter. Any application that’s un-intuitive has ⓘ. If you’re confused, click on it! If its anything that isn’t covered between the two, tell me! I’ll make sure to fix it up. What I’m proud of This took me so much time to make. I’m really proud that I managed to do this regularly between school, classes and competitions. I’m really bad at time management so this is a huge win for me! I’m also really proud of the fact that I’m able to debug stuff myself now a bit more. Before I needed to constantly google why my console was showing up an error, and how to fix it. Now I can somewhat understand why my code glitched, and the steps I can take to remedy it. I had so much fun making this, and now I’m going to be slightly lost now lol. But anyway, I put a lot of heart into this project, and I really hope that its visible! Thank you all for following along!", "repo": "https://github.com/syntax-error4O4/Cyber-OS", "demo": "https://syntax-error4o4.github.io/Cyber-OS/"}, {"ship_num": 2, "ts": "2026-06-20T08:35:30Z", "hours": 20.0, "multiplier": 13.37, "payout": 261, "blessing": "neutral", "text": "#Overview Cyber OS is a web based OS that is interactive with multiple draggable and closable windows. It has a hand-drawn background with a unique color palette inspired from cyberpunk and old CRT monitors. #Applications -Archive of Words: An application that introduces you to the most obscure words English has to offer. Have you ever wanted to win a crossword by knowing an eight letter word for theft? Well, here’s your chance! -Painterly: A standard painting application with a small twist- a pure black canvas and colors catered specifically for contrast without looking overwhelming. It also features a brush size changer, undo and redo buttons -Calculator: Your standard run-of-the-mill application for basic arithmetic computations -Display Settings: Distinct display settings meant to mimic the look of an old school CRT monitor. They can also be turned off, if they are not to the users’ liking. -Desktop Companion: An animated pixel sprite at the bottom right that keeps you company as you go about your work. _ I honestly found that learning code while actively creating a project was so much more enjoyable. I ran into so many hurdles, especially with the js code, from formatting to naming mishaps. I did learn more from making those mistakes than just knowing about them. I did want to create a few more interesting applications, but I need to learn a bit more before trying them. Keep an eye out! I’m incredibly proud of how this turned out. And I hope you’ll love it too! Cheers!", "repo": "https://github.com/syntax-error4O4/Cyber-OS", "demo": "https://syntax-error4o4.github.io/Cyber-OS/"}]...
|
[{"post_id": 23336, "ts": "202 [{"post_id": 23336, "ts": "2026-07-06T07:03:50Z", "hours": 2.4808, "text": "What I added Okay, you guys; this might just be the most complete this project has ever been. I only did minor additions here, so here goes- I made add the buttons with text on them hover uniformly. Its slightly superficial, but I just wanted them to be uniform. I added information buttons on the header for certain apps that might have quirks or be un-intuitive to navigate. Tbh I copied the code for my first information button pop-up and just added a different letter in front of it. I also added wallpapers! You now have six wallpapers to choose from. Initially I wanted to draw all of them. The default background I drew btw, but I just don’t have the time for it rn, so maybe in the future. So someone reviewed and told me my project doesn’t work in comet. I didn’t really know what comet was until I looked it up. There are a lot of differing opinions on what it could have been, so I have no clue. If someone has any idea, do reach out. Finally, I organized my html. Its strange to see how many comments I made towards the beginning, telling exactly what a div did. I was really unfamiliar with making page of that size, even if it wasn’t much. This time I didn’t go overboard in commenting and organising it I don’t have git so now I need to update my files on github, and edit the README. Once that’s done, its time to ship! Super excited for that"}, {"post_id": 22919, "ts": "2026-07-05T15:47:40Z", "hours": 4.1128, "text": "What I Added I think this might just be my best app yet. I created an app called Terminal, which is a ripoff PowerShell. I had so much fun making it! There are multiple commands, some which run an animation, and others that perform simple tasks. When I was done with Terminal, I saw that I had exactly 11 apps. Which is a great number, don’t get me wrong, but I wanted an even twelve. Hence-Comms. My final app. You need a password to access it. Where you may get the password? That’s up to you to click around and find out. If you’re curious enough to know what it is, but not enough to explore, I’ll put it in my READMe when I ship this! Because I do want everyone to be able to use all applications, if you don’t feel like a treasure hunt. It’s a pretty cool app that you miiighht need if you want to access another window. I added another button on the Top Bar. It opens up a window, that may or may not be related to Comms. Be warned, it probably might tell you exactly what Comms is but not how to access it. This window allows you to use whatever you find in Comms to good use! I also made the two-tone filter update while you choose the colours. I also discovered the Go Live extension, which has worked wonders for both my refresh button and my console, which kept showing me the phrase unsafe URL for every image I loaded. I’m glad it finally found peace in its security"}, {"post_id": 22203, "ts": "2026-07-04T15:40:02Z", "hours": 7.6867, "text": "What I Added I added a third slide to my sidebar, which means we get a new group of apps! With context to my last post about practicing DRY, I decided to parse through my code to see how much I could cut down. There was so much! I was under-using my classes so much, its crazy. Or so many places I didn’t make a class at all and just copy-pasted the styles on the buttons. I did my level best to fix all of that without breaking anything. My code looks much better now. Thanks for the tip, random reviewer I do not know-I finally saw the light lol. I made an app to place filters on images! Right now there’s a B&W filter and two toned filter the user can choose. There’s also an info button on the header if there’s any confusion. I feel like I’ll be adding that info button in a few more places. I also made a calendar. Okay, I’m going to vent here a little, feel free to scroll. This is mostly abt all the issues I ran into while coding-and all of it is very dumb. I learnt that I apparently didn’t know that its calendar not calender. Also I switch between American and British English a lot, so my html and js did NOT match in their spelling of “grey”. Istg, I make my own life harder at times. In the same vein, a similar naming mishap caused my js to break- it was at the end of the file, and hidden enough that its not visible while using. When I wrote the code for my calendar it didn’t work. I thought I made a mistake. I spent so much time rewriting, googling, getting frustrated. A lot of places it mentioned maybe the script wasn’t being defered properly. I was like nope, everything else works fine. I put the logic into the html script, it worked. I thought it was a mistake in the punctuation or indent and left it at that. Later in the day when I returned to make another app, it obviously did not work- I went through the same cycle. This time I was stubborn and didn’t want to put it in the html. I literally exhausted all possible options until I realized I could just check the console. There I did find an error, not in my calendar code, not in the app I was making, but in the filter app. I went through the five stages of grief in that second lol. I have no idea why I spelled grey differently. There should be a spellcheck while coding too. English is not my native language, so it could be a bit excusable, but I feel so dumb rn. You live and learn ig."}, {"post_id": 21307, "ts": "2026-07-03T04:55:00Z", "hours": 7.8197, "text": "So first of all, I got my payout! Thank you so much to everyone who voted and gave me feedback. All your suggestions were really great and I’ve started to fix some of the bugs you guys found. I would have probably not have found out about the zooming thing because I never zoom in lol. What I Added So, I added a task manager. It’s basically a to-do list, where you can list the stuff you need to get done and check the box once it is. Initially it was just a button the hid itself. Out of curiosity I googled and found out there is a way to add a checkbox! You make an input element and give it the type “checkbox”. I rewrote my code to add that. Then I made a stopwatch and timer thing. The js felt really hard to write, so I asked a friend for help and she basically guided and explained the logic to me. The timer style was modelled of that of my phone, which meant you needed to scroll to set the time. But the scrolling was interpreted as dragging by my dragging code, so I needed a fix. Right now, you need to click on the text and press the arrow keys to navigate it. I understand that it might not be very intuitive, so I added a pop-up warning. I also added a few more tracks to my song app along with a scroll bar. I implemented some suggestions from the reviews, like making the window offset at the centre instead of the top left and it has made such a difference. I also understood I was repeating myself a lot in the code as someone pointed out. I’m trying my best to be mindful and code effectively now! In the interest of transparency, I was making a weather app that could check your weather. I ran into a lot of issues on the first half itself. I spent a lot of time trying to fix it. At one point, it messed up all my other code, so I had to delete it. At least an hour or three was wasted in that. I feel like it’s a bit unfair of me to count that so I’ll turn off my tracker the next time I code. Idk, it just makes me feel like I’m cheating to count those hours when nothing really came out of it. Anyways, here’s the progress pic!"}, {"post_id": 17495, "ts": "2026-06-28T09:39:53Z", "hours": 5.9353, "text": "What I added: I really wanted to make a music player next, so that’s what I set upon making. I already knew that I wanted to make it look like an iPod. This app now can mute, skip to songs on the playlist, show you the menu and pause. It will also play on the background while the app is both open or closed until the song is over. Next up is a POST-IT app. It create multiple post its, change colours and has multiple formatting options. This was even more fun to make than the music player lol. My icon accidently hides behind the ipod icon, so I do need to fix that. Its pretty straightforward but I feel to lazy rn. I realized that if I were to keep making more features, my page was going to look really cluttered. I thought of adding another sidebar but decided against it. I instead made two buttons under the sidebar and grouped all my apps into two. So, when the current group is active, the other app icons are hidden, and by clicking the next button you can see the next group of apps. This is your reminder that you can make art with anything- even with a limited colour palette. So why not make it on my webOS? If you want more options, I just added an opacity slider and an option to choose your own colours."}, {"post_id": 12411, "ts": "2026-06-20T08:01:12Z", "hours": 0.9375, "text": "So this project is finally ready to ship. Sorry for the formatting on the last devlog, I didn’t realize they added Markdown. I’m sure that must have been a nightmare to read through! What I Did (Final Touches) I felt the buttons could use some pizzaz so I changed the background to black, the text and the border to orange. It looks so much better! Check out the calculator, it looks amazing now. Finally, I added a small animated pixel sprite on the bottom right of the screen. This sprite is just pure randomness personified. I had so much fun picking it out. — I created my GitHub repo and edited my README to look a little better. When I generated the link for my webpage on GitHub Pages, my top bar was cut off!?!? At that point, I was genuinely so frustrated. It wouldn’t fix no matter what I tried. In the end, I just generated a new link and it somehow showed up!? How? Great question, I have no idea. I’m so glad I finally finished this OS! I never got around to thinking of a name so it’s just gonna stay as Cyber-OS lol. I really never thought I would be able to make this, even when I started with the mission. I’m glad I stuck to it. Thanks for following along with me! Go check my OS out yourselves! Cheers!"}, {"post_id": 11343, "ts": "2026-06-18T15:37:20Z", "hours": 4.7439, "text": "What I’m Making : A custom web-based OS that I’ve taken to calling Cyber OS (cool name pending) What I’ve Done so Far: –So today might not have been the most productive day in creating something new per say. A lot of my time was spent refining features already available. Case in point, today I 1) Changed the content of one of my applications from interesting proses to words instead. I do maintain a list of obscure words, so it was really fun to pick which ones made the cut 2) I changed the canvas of my painting application from black to white and muted the colors available to fit my theme more. 3) I fixed an error in my calculator that involved exponents. I also changed the display to be slightly more neater. 4) I created an application to alter display settings. Most of the filters available are inspired from those old televisions, those really chunky cathode ray ones. I didn’t quite do it justice though I do think I might ship this as an initial version when I get the time. Not really sure about it, I’m really indecisive. Anyways, here’s the customary progress pic!"}, {"post_id": 10067, "ts": "2026-06-16T17:26:06Z", "hours": 4.5239, "text": "What I’m making -So I’m actively working on a custom built OS that I’ve been calling Cyber OS because I can’t think of a great name yet. I plan to make applications?/windows? for my hobbies, which are pretty wide ranging. From art to math to literature, the goal is to have something for everyone. What I’ve done -Quick recap, I made an information window, drew the background, and made a scalable code for closing and dragging windows. I then created my first app that is a small archive of phrases that I came across while reading that I particularly liked. -Update time! I made an application for drawing. It has eight colors, undo and redo buttons and a feature to change the brush size. What I struggled with -This time I had more of an issue making the code by myself. Most of the time was spent debugging tbh. I had a really major issue with the colors not showing up on the canvas. It was really a learning experience fixing that. I also realized that the brush slider just made my entire window move. So I changed it to an number input based thing. I ran into a few issues with the slider too, but managed to solve it relatively quicker. All in all, I’m really proud of all the progress I made. Cheers!"}, {"post_id": 8643, "ts": "2026-06-14T11:25:49Z", "hours": 6.5003, "text": "What I’m Making -A web-based OS that I’m calling Cyber OS currently. I’m a person with really diverse interests, so I’m creating something that will hopefully spark your interest too. What I’ve Done -Major style updates -Drew an app icon -made a draggable and closable window -connected the app and the window -created hover effects for each button -organized my code Next session I’ll probably begin creating the next app. I also want to make a task bar of sorts. Despite doing my best to keep my code clean its really messy rn. I’ll build the app in another file and then bring it over to my OS. Overall a really productive day, but I’m pretty pleased with the results. The progress from my previous logs is really visible. I’m knackered though, so I’m off for the day. Cheers!"}, {"post_id": 8174, "ts": "2026-06-13T16:56:20Z", "hours": 2.3675, "text": "What I’m Making -I’m working on a web-based OS that I’ve been calling Cyber OS (cool name pending) What I’ve added -a top bar -an active clock -a draggable and closable information button What I struggled with -I made a few mistakes with naming variables, which took me a lot longer to identify that it should have. -I couldn’t figure out why my page was a little larger than my screen. I kept having to scroll. I deleted a few lines of formatting and re-wrote it. Didn’t really work out. A second of googling later, I found out about the overflow button?/function? Phew. That was a relief. Cheers!"}, {"post_id": 8062, "ts": "2026-06-13T13:49:52Z", "hours": 1.0553, "text": "What I’m making: -I’m working on a Web-OS that I’ve named Cyber OS. What I’ve done so far -I created the welcome box and stylized it -Drew a wallpaper for the background What I struggled with -Mainly I had a bit of an issue with Github, because I couldn’t figure out why my time wasn’t logging when I was coding in an active workspace. Eventually I decided to copy the code I wrote to my VS editor and upload the project in Github later. I did loose around half an hour but uk….you do what you must."}]...
|
Title: Cyber OS by @Ann_with_an_e | Stardance
Dev Title: Cyber OS by @Ann_with_an_e | Stardance
Devlogs:
What I’m making: -I’m working on a Web-OS that I’ve named Cyber OS. What I’ve done so far -I created the welcome box and stylized it -Drew a wallpaper for the background What I struggled with -Mainly I had a bit of an issue with Github, because I couldn’t figure out why my time wasn’t logging when I was coding in an active workspace. Eventually I decided to copy the code I wrote to my VS editor and upload the project in Github later. I did loose around half an hour but uk….you do what you must.
What I’m Making -I’m working on a web-based OS that I’ve been calling Cyber OS (cool name pending) What I’ve added -a top bar -an active clock -a draggable and closable information button What I struggled with -I made a few mistakes with naming variables, which took me a lot longer to identify that it should have. -I couldn’t figure out why my page was a little larger than my screen. I kept having to scroll. I deleted a few lines of formatting and re-wrote it. Didn’t really work out. A second of googling later, I found out about the overflow button?/function? Phew. That was a relief. Cheers!
What I’m Making -A web-based OS that I’m calling Cyber OS currently. I’m a person with really diverse interests, so I’m creating something that will hopefully spark your interest too. What I’ve Done -Major style updates -Drew an app icon -made a draggable and closable window -connected the app and the window -created hover effects for each button -organized my code Next session I’ll probably begin creating the next app. I also want to make a task bar of sorts. Despite doing my best to keep my code clean its really messy rn. I’ll build the app in another file and then bring it over to my OS. Overall a really productive day, but I’m pretty pleased with the results. The progress from my previous logs is really visible. I’m knackered though, so I’m off for the day. Cheers!
What I’m making -So I’m actively working on a custom built OS that I’ve been calling Cyber OS because I can’t think of a great name yet. I plan to make applications?/windows? for my hobbies, which are pretty wide ranging. From art to math to literature, the goal is to have something for everyone. What I’ve done -Quick recap, I made an information window, drew the background, and made a scalable code for closing and dragging windows. I then created my first app that is a small archive of phrases that I came across while reading that I particularly liked. -Update time! I made an application for drawing. It has eight colors, undo and redo buttons and a feature to change the brush size. What I struggled with -This time I had more of an issue making the code by myself. Most of the time was spent debugging tbh. I had a really major issue with the colors not showing up on the canvas. It was really a learning experience fixing that. I also realized that the brush slider just made my entire window move. So I changed it to an number input based thing. I ran into a few issues with the slider too, but managed to solve it relatively quicker. All in all, I’m really proud of all the progress I made. Cheers!
What I’m Making : A custom web-based OS that I’ve taken to calling Cyber OS (cool name pending) What I’ve Done so Far: –So today might not have been the most productive day in creating something new per say. A lot of my time was spent refining features already available. Case in point, today I 1) Changed the content of one of my applications from interesting proses to words instead. I do maintain a list of obscure words, so it was really fun to pick which ones made the cut 2) I changed the canvas of my painting application from black to white and muted the colors available to fit my theme more. 3) I fixed an error in my calculator that involved exponents. I also changed the display to be slightly more neater. 4) I created an application to alter display settings. Most of the filters available are inspired from those old televisions, those really chunky cathode ray ones. I didn’t quite do it justice though I do think I might ship this as an initial version when I get the time. Not really sure about it, I’m really indecisive. Anyways, here’s the customary progress pic!
So this project is finally ready to ship. Sorry for the formatting on the last devlog, I didn’t realize they added Markdown. I’m sure that must have been a nightmare to read through! What I Did (Final Touches) I felt the buttons could use some pizzaz so I changed the background to black, the text and the border to orange. It looks so much better! Check out the calculator, it looks amazing now. Finally, I added a small animated pixel sprite on the bottom right of the screen. This sprite is just pure randomness personified. I had so much fun picking it out. — I created my GitHub repo and edited my README to look a little better. When I generated the link for my webpage on GitHub Pages, my top bar was cut off!?!? At that point, I was genuinely so frustrated. It wouldn’t fix no matter what I tried. In the end, I just generated a new link and it somehow showed up!? How? Great question, I have no idea. I’m so glad I finally finished this OS! I never got around to thinking of a name so it’s just gonna stay as Cyber-OS lol. I really never thought I would be able to make this, even when I started with the mission. I’m glad I stuck to it. Thanks for following along with me! Go check my OS out yourselves! Cheers!
What I added: I really wanted to make a music player next, so that’s what I set upon making. I already knew that I wanted to make it look like an iPod. This app now can mute, skip to songs on the playlist, show you the menu and pause. It will also play on the background while the app is both open or closed until the song is over. Next up is a POST-IT app. It create multiple post its, change colours and has multiple formatting options. This was even more fun to make than the music player lol. My icon accidently hides behind the ipod icon, so I do need to fix that. Its pretty straightforward but I feel to lazy rn. I realized that if I were to keep making more features, my page was going to look really cluttered. I thought of adding another sidebar but decided against it. I instead made two buttons under the sidebar and grouped all my apps into two. So, when the current group is active, the other app icons are hidden, and by clicking the next button you can see the next group of apps. This is your reminder that you can make art with anything- even with a limited colour palette. So why not make it on my webOS? If you want more options, I just added an opacity slider and an option to choose your own colours.
So first of all, I got my payout! Thank you so much to everyone who voted and gave me feedback. All your suggestions were really great and I’ve started to fix some of the bugs you guys found. I would have probably not have found out about the zooming thing because I never zoom in lol. What I Added So, I added a task manager. It’s basically a to-do list, where you can list the stuff you need to get done and check the box once it is. Initially it was just a button the hid itself. Out of curiosity I googled and found out there is a way to add a checkbox! You make an input element and give it the type “checkbox”. I rewrote my code to add that. Then I made a stopwatch and timer thing. The js felt really hard to write, so I asked a friend for help and she basically guided and explained the logic to me. The timer style was modelled of that of my phone, which meant you needed to scroll to set the time. But the scrolling was interpreted as dragging by my dragging code, so I needed a fix. Right now, you need to click on the text and press the arrow keys to navigate it. I understand that it might not be very intuitive, so I added a pop-up warning. I also added a few more tracks to my song app along with a scroll bar. I implemented some suggestions from the reviews, like making the window offset at the centre instead of the top left and it has made such a difference. I also understood I was repeating myself a lot in the code as someone pointed out. I’m trying my best to be mindful and code effectively now! In the interest of transparency, I was making a weather app that could check your weather. I ran into a lot of issues on the first half itself. I spent a lot of time trying to fix it. At one point, it messed up all my other code, so I had to delete it. At least an hour or three was wasted in that. I feel like it’s a bit unfair of me to count that so I’ll turn off my tracker the next time I code. Idk, it just makes me feel like I’m cheating to count those hours when nothing really came out of it. Anyways, here’s the progress pic!
What I Added I added a third slide to my sidebar, which means we get a new group of apps! With context to my last post about practicing DRY, I decided to parse through my code to see how much I could cut down. There was so much! I was under-using my classes so much, its crazy. Or so many places I didn’t make a class at all and just copy-pasted the styles on the buttons. I did my level best to fix all of that without breaking anything. My code looks much better now. Thanks for the tip, random reviewer I do not know-I finally saw the light lol. I made an app to place filters on images! Right now there’s a B&W filter and two toned filter the user can choose. There’s also an info button on the header if there’s any confusion. I feel like I’ll be adding that info button in a few more places. I also made a calendar. Okay, I’m going to vent here a little, feel free to scroll. This is mostly abt all the issues I ran into while coding-and all of it is very dumb. I learnt that I apparently didn’t know that its calendar not calender. Also I switch between American and British English a lot, so my html and js did NOT match in their spelling of “grey”. Istg, I make my own life harder at times. In the same vein, a similar naming mishap caused my js to break- it was at the end of the file, and hidden enough that its not visible while using. When I wrote the code for my calendar it didn’t work. I thought I made a mistake. I spent so much time rewriting, googling, getting frustrated. A lot of places it mentioned maybe the script wasn’t being defered properly. I was like nope, everything else works fine. I put the logic into the html script, it worked. I thought it was a mistake in the punctuation or indent and left it at that. Later in the day when I returned to make another app, it obviously did not work- I went through the same cycle. This time I was stubborn and didn’t want to put it in the html. I literally exhausted all possible options until I realized I could just check the console. There I did find an error, not in my calendar code, not in the app I was making, but in the filter app. I went through the five stages of grief in that second lol. I have no idea why I spelled grey differently. There should be a spellcheck while coding too. English is not my native language, so it could be a bit excusable, but I feel so dumb rn. You live and learn ig.
What I Added I think this might just be my best app yet. I created an app called Terminal, which is a ripoff PowerShell. I had so much fun making it! There are multiple commands, some which run an animation, and others that perform simple tasks. When I was done with Terminal, I saw that I had exactly 11 apps. Which is a great number, don’t get me wrong, but I wanted an even twelve. Hence-Comms. My final app. You need a password to access it. Where you may get the password? That’s up to you to click around and find out. If you’re curious enough to know what it is, but not enough to explore, I’ll put it in my READMe when I ship this! Because I do want everyone to be able to use all applications, if you don’t feel like a treasure hunt. It’s a pretty cool app that you miiighht need if you want to access another window. I added another button on the Top Bar. It opens up a window, that may or may not be related to Comms. Be warned, it probably might tell you exactly what Comms is but not how to access it. This window allows you to use whatever you find in Comms to good use! I also made the two-tone filter update while you choose the colours. I also discovered the Go Live extension, which has worked wonders for both my refresh button and my console, which kept showing me the phrase unsafe URL for every image I loaded. I’m glad it finally found peace in its security
What I added Okay, you guys; this might just be the most complete this project has ever been. I only did minor additions here, so here goes- I made add the buttons with text on them hover uniformly. Its slightly superficial, but I just wanted them to be uniform. I added information buttons on the header for certain apps that might have quirks or be un-intuitive to navigate. Tbh I copied the code for my first information button pop-up and just added a different letter in front of it. I also added wallpapers! You now have six wallpapers to choose from. Initially I wanted to draw all of them. The default background I drew btw, but I just don’t have the time for it rn, so maybe in the future. So someone reviewed and told me my project doesn’t work in comet. I didn’t really know what comet was until I looked it up. There are a lot of differing opinions on what it could have been, so I have no clue. If someone has any idea, do reach out. Finally, I organized my html. Its strange to see how many comments I made towards the beginning, telling exactly what a div did. I was really unfamiliar with making page of that size, even if it wasn’t much. This time I didn’t go overboard in commenting and organising it I don’t have git so now I need to update my files on github, and edit the README. Once that’s done, its time to ship! Super excited for that
Ships:
#Overview Cyber OS is a web based OS that is interactive with multiple draggable and closable windows. It has a hand-drawn background with a unique color palette inspired from cyberpunk and old CRT monitors. #Applications -Archive of Words: An application that introduces you to the most obscure words English has to offer. Have you ever wanted to win a crossword by knowing an eight letter word for theft? Well, here’s your chance! -Painterly: A standard painting application with a small twist- a pure black canvas and colors catered specifically for contrast without looking overwhelming. It also features a brush size changer, undo and redo buttons -Calculator: Your standard run-of-the-mill application for basic arithmetic computations -Display Settings: Distinct display settings meant to mimic the look of an old school CRT monitor. They can also be turned off, if they are not to the users’ liking. -Desktop Companion: An animated pixel sprite at the bottom right that keeps you company as you go about your work. _ I honestly found that learning code while actively creating a project was so much more enjoyable. I ran into so many hurdles, especially with the js code, from formatting to naming mishaps. I did learn more from making those mistakes than just knowing about them. I did want to create a few more interesting applications, but I need to learn a bit more before trying them. Keep an eye out! I’m incredibly proud of how this turned out. And I hope you’ll love it too! Cheers!
What I made: Cyber OS is an interactive, web-based OS. It has multiple applications, with closable, draggable windows with a z-index. There are roughly twelve applications in total, not counting the ones on the top bar. While I would love to ramble about all my applications, here are the ones I’m most proud of! In-Filter-Traitor: An application that filters your photos to either black and white, or a two-toned image that you can choose the shadows and highlights of! Ever felt your photos could benefit from a few more Gotham vibes? Never? Well, that’s disappointing. POST-IT: A virtual sticky note! I really love it mostly due to the design that may or may not have been a direct rip-off from the app in windows. It’s silly, but I’m happy that I managed to recreate it. Terminal: It lets you control the OS by practicing the ancient art of typing orange runes into a dark void. If you don’t know what to type, the void will inform you. Easter Egg! It just occurred to me that I may be overhyping this. Anyway, this is how it works- on the last slide of the sidebar there is an app called Comms. You will not be able to access it without a password. The password is hidden somewhere within the OS. There’s a window called Developer Logs that might tell you what Comms does, but not the password. If you’re short of time, or not up for a treasure hunt, the password is in my README with a spoiler warning! Also tell me if my hiding place was too obvious lol. Feeling Lost? Something not working? Please go through the README, I do think it covers most of the quirks you might encounter. Any application that’s un-intuitive has ⓘ. If you’re confused, click on it! If its anything that isn’t covered between the two, tell me! I’ll make sure to fix it up. What I’m proud of This took me so much time to make. I’m really proud that I managed to do this regularly between school, classes and competitions. I’m really bad at time management so this is a huge win for me! I’m also really proud of the fact that I’m able to debug stuff myself now a bit more. Before I needed to constantly google why my console was showing up an error, and how to fix it. Now I can somewhat understand why my code glitched, and the steps I can take to remedy it. I had so much fun making this, and now I’m going to be slightly lost now lol. But anyway, I put a lot of heart into this project, and I really hope that its visible! Thank you all for following along!...
|
1793537701.1198997
|
1793624101.1198997
|
|
31614
|
My awesome macropad! by @Niokito | Stardance
|
Niokito
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Niokito | Stardanc Title: My awesome macropad! by @Niokito | Stardance...
|
1793537702.3409152
|
1794142502.3409152
|
|
19272
|
Desktop To-do list Widget by @LaraCroft | Stardanc Desktop To-do list Widget by @LaraCroft | Stardance...
|
LaraCroft
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Desktop To-do list Widget by @LaraCroft | S Title: Desktop To-do list Widget by @LaraCroft | Stardance...
|
1793537703.2927325
|
1794142503.2927325
|
|
3887
|
Lumina Piano by @shenk | Stardance
|
shenk
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Lumina Piano by @shenk | Stardance
|
1793537704.1804767
|
1794142504.1804767
|
|
18690
|
My awesome macropad! by @jshrihankumar | Stardance
|
jshrihankumar
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @jshrihankumar | St Title: My awesome macropad! by @jshrihankumar | Stardance...
|
1793537705.0740104
|
1794142505.0740104
|
|
10873
|
GALAXY SIMULATION by @BIG_JO | Stardance
|
BIG_JO
|
1
|
20.09
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-31T17:27:32Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Galaxy Simulation, basically a small physics simulation where you can mess around with planets, gravity, orbits and collisions. You can add planets, change their properties, click on them to see their information and experiment with how gravity affects everything. The hardest part was definitely getting the physics to actually work properly. At first I was just trying to make the planets orbit the sun, but once I started adding gravity and collisions things got way more complicated. I had quite a few bugs where planets would do completely unexpected things, and I also had to work on performance because having too many objects could make it lag. I’m most proud of how much the project developed over time. The first version was really basic compared to what it is now, so seeing the progression through all my devlogs is probably my favourite part. To test it, just add some planets and experiment with their positions, sizes and gravity. Try making normal orbits, unstable orbits and just seeing what happens when planets get too close to each other. There isn’t really one “correct” way to use it — half the fun is breaking the simulation and seeing what happens.", "repo": "https://github.com/joseph777-e/GALAXY-SIMULATION", "demo": "https://galaxy-simulation.vercel.app/"}]...
|
[{"post_id": 77232, "ts": "202 [{"post_id": 77232, "ts": "2026-10-06T06:03:54Z", "hours": 1.1569, "text": "so today i spent most of my time tryin to rewrite all the whle css file and i got to go to scool so i will continue later"}, {"post_id": 67945, "ts": "2026-09-14T08:28:13Z", "hours": 0.7372, "text": "today i was just rewriting some parts of my java script code cause apparently it got more than 30 percent ai usage but like how should u expect me to write a whole physics movement in javascript like bro i genuinly suck at it"}, {"post_id": 62305, "ts": "2026-09-05T16:37:40Z", "hours": 1.1922, "text": "jus realised there was something wrong with the roche limit and had to be fixed i think the comets were very close to the sun so i made them go a bitt further… and i also truly despise javascript :)"}, {"post_id": 59055, "ts": "2026-08-31T17:23:40Z", "hours": 2.1892, "text": "so am finally done with the polishing of this website its not too complicated actually ts simple but can help visually represent gravity and how it work in space with diferrent bodies and like it might not be too much accurate but it still work and is not too laggy as some physics websites tend to be it work on literally any device if it laggs tho it might be becaus too many bodies are show"}, {"post_id": 50241, "ts": "2026-08-19T11:58:25Z", "hours": 1.0178, "text": "so i was checking for buggs and trying to add some features but i think the project is just done and neeeds nothing more or less and its been time i end it so i can concentrate on other projects that i want to finalise too."}, {"post_id": 40222, "ts": "2026-08-03T17:01:04Z", "hours": 1.5722, "text": "so its been long since i made a devlog today i tried to fix the old solar system problem by making them more spaced out and it kinda worked a bitt am still trying to get how to make it really work illbe working onn it with the help of some AI cause am genuinly lost rn"}, {"post_id": 20050, "ts": "2026-07-01T15:43:01Z", "hours": 2.0194, "text": "here is some updates for today i am trying to make the planets orbit the sun correctly in solar system mode without eventually crashing into the sun too quick. and i didnt post a devlog kinda for too long i actually kinda lazy to post them and i always forget about them"}, {"post_id": 9765, "ts": "2026-06-16T06:20:01Z", "hours": 3.2556, "text": "so i am currently working on the bodies limit creation and so far, it’s not going well…. everything lags when the body limit hits and i really don’t know why i think this day will be long but at least am done with the exams so i can spend as much time as i need…btw if u see where the problem is dont hesitate to comment it 😭"}, {"post_id": 8095, "ts": "2026-06-13T14:50:40Z", "hours": 2.9064, "text": "so it been a while since i posted a devlog there was a bug in my java code that was making everything to not work or display but i was finally able to get it and fix it and am also in my exam period so i cant stay on the project for too long unfortunately and yeah. i added some new features too a spawn body limit becuse the more bodies are made the more laggy its and it might even make the animation to stop depends on your computer like mine it was really lagging alot and i had to add that features anyways i hope ill soon be able to finish it and launch it …btw the body limit doesnt work too well just yet i just wanted to make a devlog and infrom of my progress."}, {"post_id": 4835, "ts": "2026-06-08T11:03:50Z", "hours": 2.7894, "text": "you can now click on the bodies and displays their information and can chnage their gravity individually"}, {"post_id": 4158, "ts": "2026-06-07T11:25:30Z", "hours": 1.2694, "text": "i just started, it’s basically a space simulation u can add planets and make black holes with 2stars colliding with gravity effects and stuff"}]...
|
Title: GALAXY SIMULATION by @BIG_JO | Stardance
D Title: GALAXY SIMULATION by @BIG_JO | Stardance
Devlogs:
i just started, it’s basically a space simulation u can add planets and make black holes with 2stars colliding with gravity effects and stuff
you can now click on the bodies and displays their information and can chnage their gravity individually
so it been a while since i posted a devlog there was a bug in my java code that was making everything to not work or display but i was finally able to get it and fix it and am also in my exam period so i cant stay on the project for too long unfortunately and yeah. i added some new features too a spawn body limit becuse the more bodies are made the more laggy its and it might even make the animation to stop depends on your computer like mine it was really lagging alot and i had to add that features anyways i hope ill soon be able to finish it and launch it …btw the body limit doesnt work too well just yet i just wanted to make a devlog and infrom of my progress.
so i am currently working on the bodies limit creation and so far, it’s not going well…. everything lags when the body limit hits and i really don’t know why i think this day will be long but at least am done with the exams so i can spend as much time as i need…btw if u see where the problem is dont hesitate to comment it 😭
here is some updates for today i am trying to make the planets orbit the sun correctly in solar system mode without eventually crashing into the sun too quick. and i didnt post a devlog kinda for too long i actually kinda lazy to post them and i always forget about them
so its been long since i made a devlog today i tried to fix the old solar system problem by making them more spaced out and it kinda worked a bitt am still trying to get how to make it really work illbe working onn it with the help of some AI cause am genuinly lost rn
so i was checking for buggs and trying to add some features but i think the project is just done and neeeds nothing more or less and its been time i end it so i can concentrate on other projects that i want to finalise too.
so am finally done with the polishing of this website its not too complicated actually ts simple but can help visually represent gravity and how it work in space with diferrent bodies and like it might not be too much accurate but it still work and is not too laggy as some physics websites tend to be it work on literally any device if it laggs tho it might be becaus too many bodies are show
jus realised there was something wrong with the roche limit and had to be fixed i think the comets were very close to the sun so i made them go a bitt further… and i also truly despise javascript :)
today i was just rewriting some parts of my java script code cause apparently it got more than 30 percent ai usage but like how should u expect me to write a whole physics movement in javascript like bro i genuinly suck at it
so today i spent most of my time tryin to rewrite all the whle css file and i got to go to scool so i will continue later
Ships:
I made Galaxy Simulation, basically a small physics simulation where you can mess around with planets, gravity, orbits and collisions. You can add planets, change their properties, click on them to see their information and experiment with how gravity affects everything. The hardest part was definitely getting the physics to actually work properly. At first I was just trying to make the planets orbit the sun, but once I started adding gravity and collisions things got way more complicated. I had quite a few bugs where planets would do completely unexpected things, and I also had to work on performance because having too many objects could make it lag. I’m most proud of how much the project developed over time. The first version was really basic compared to what it is now, so seeing the progression through all my devlogs is probably my favourite part. To test it, just add some planets and experiment with their positions, sizes and gravity. Try making normal orbits, unstable orbits and just seeing what happens when planets get too close to each other. There isn’t really one “correct” way to use it — half the fun is breaking the simulation and seeing what happens....
|
1793537706.0367844
|
1793624106.0367844
|
|
1136
|
Pixel Art Adventure by @TimeTravelingToaster | Sta Pixel Art Adventure by @TimeTravelingToaster | Stardance...
|
TimeTravelingToaster
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Pixel Art Adventure by @TimeTravelingToaste Title: Pixel Art Adventure by @TimeTravelingToaster | Stardance...
|
1793537707.285662
|
1794142507.285662
|
|
13645
|
Top Chatter - a discord bot by @muhamm38 | Stardan Top Chatter - a discord bot by @muhamm38 | Stardance...
|
muhamm38
|
1
|
7.0
|
52
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T19:48:44Z", "hours": 7.0, "multiplier": 7.76, "payout": 52, "blessing": "neutral", "text": "I made Top Chatter , a discord bot that tracks message data on servers and ranks people by who talks the most in the server. It has multiple commands so you can see who talked the most throughout different time periods. You can see in the last month, last week, last day, and all time who has the most messages. It is running Python using the discord.py library. It uses a sqlite3 database to store messages so the commands can run instantly. Instead of using Discord API’s to scrape the messages which takes very long and can crash easily, I made it so when the bot joins the server it sends a dm to the owner asking permission to scan the entire server for its previous message data, then it adds it to its database. If for some reason the dm isn’t sent (bot is offline or owner’s dms are closed) if you try to do a command like /all-time it tells you the bot has not scanned the past messages and you need to have an admin do the /setup command to have it get all the previous message data. Challenges Some challenges I went through were these: Transition to database storage. Initially every command was using discord apis to get the message data and display them in a leaderboard, that took very long and crashed very often. To solve this I switched to using a local sqlite3 database. When building the feature to scan old messages, the bot was accidentally wiping out data from previous channels as it moved to the next one. I had to completely rewrite the logic so the bot compiled everything across the entire server into a Python tracking dictionary first, and then saved it all to the database at the very end. Deploying the server had some issues but with the help of AI (yes I know ai everyone hates it but I had too) I was able to figure it out and get it hoted. How to Test Click the link to invite the bot to a discord server. If you are the owner it should dm you and then click the setup button to get it setup. 2.5 If owner has dm’s closed or isn’t responding to it, if you’re an admin, run the /setup command to set it up manually Type / to see the full UI menu of commands, ranging from /last-100-messages to /all-time, enjoy!", "repo": "https://github.com/iloveallah123/top-chatter-discord-bot", "demo": "https://discord.gg/g87c4mmTg"}]...
|
[{"post_id": 24907, "ts": "202 [{"post_id": 24907, "ts": "2026-07-08T19:34:07Z", "hours": 1.9919, "text": "Devlog 4 I finally moved all the time-based commands like /last-hour , /last-day , and /last-week to pull directly from the SQLite database instead of using the discord api to scrape thousands of messages. This makes the bot way faster and more reliable since it doesn’t have to calculate everything on the fly anymore. I was also able to add a brand new /last-month command. I also worked on polishing the experience and making the initial message scanning easier. Sometimes server owners have their DMs closed, so the bot would fail to send the automatic setup button when it joined. To fix this, I added a manual /setup command. Now, if the bot misses the DM, someone can just run the command themselves to start the background scan. It makes the onboarding process a lot smoother and prevents the bot from getting stuck. I finally got the bot hosted on a server! I moved it off my local computer and onto Hack Club Nest. I used PM2 to keep it running in the background permanently. This will probably be my final devlog as to be honest I’ve accomplished everything I wanted to with this bot and I feel very good about it because it has 1 core purpose and it does that purpose very well. I want to move on to other projects so I will probably ship it. If you want to try the bot out for yourself and add it to your server you can use this link: ( https://discord.com/oauth2/authorize?client_id=1514369908085887037&permissions=8&integration_type=0&scope=bot+applications.commands )"}, {"post_id": 23110, "ts": "2026-07-05T21:19:15Z", "hours": 1.8086, "text": "Devlog 3: I’ve made a lot of progress on the bot and changed how it tracks server activity and message data! I moved the bot away from using the Discord API to scrape the data because that took way too long and wasn’t efficient. For the all-time command, it now dms the owner of the server to ask them for permission to get the data from the server (using discord api) then it adds that data into an sqlite database. I set up an automatic table layout that tracks users by their permanent Discord user_id rather than their display name. This completely prevents leaderboard tracking bugs if a user decides to change their server nickname. Next, I added into the real-time event system. The bot now logs and adds to message counts instantly as they are sent in real-time, meaning we don’t have to wait for slow api scrapes anymore. I also updated the /all-time command to pull directly from this local database instantly. I might update the other commands but for now its just using the discord api. To make the system scaleable, I added a full-server data sync. When the bot joins a new server, it sends a DM to the owner with a green setup button. Clicking it runs a background scan across all text channels to build the database. I ran into two big bugs while setting this up: The bot was accidentally wiping out data from previous channels as it moved to the next one. I fixed this by making the bot compile everything across the entire server into a tracking dictionary first, and then saving it all to the database at the very end. I had to restructure the database schema to use a combined primary key of (guild_id, user_id). This keeps counts completely isolated so a user’s stats on one server never leak into another server. Lastly, I added stats.db to the .gitignore file so it isn’t committed to github. Next steps: I might just ship it with these core features (definitely not for a sticker or anything 😂 🙏) I will try and continue to work on it and somehow find away to integrate VC support. This would need me to: Build a VC tracking system to see who spends the most time in voice channels over days, weeks, and all-time. I might also in the future update the leaderboard messages from the commands to have embeds so it looks cleaner and more professional using discord embeds. Thank you for reading my 3rd devlog! Edit: OH YEAH I just remembered I’m gonna host it on a server so I don’t need it running locally all the time."}, {"post_id": 11381, "ts": "2026-06-18T16:57:56Z", "hours": 1.6392, "text": "Devlog 2: I finally finished adding the core message tracking features! I made some slash commands that let users track the top chatters over different time periods. I created the /last-hour , /last-day , and /last-week commands. I used Python’s datetime module to calculate an exact time period and then look back through the channel history to count up the messages. I also added a defer() function to each command so the bot can safely process the data without timing out or breaking. When implementing the /all-time command, I realized that downloading every single message ever sent could easily crash the bot. To fix this, I built a custom warning button using. Now, the bot sends a warning message with a Confirm & Run button, and it will only start the process if a user explicitly clicks it. I ran into a frustrating issue with Git where my .env file kept getting included in my commits even though it was listed in my .gitignore . I learned that because Git tracked the file early on, it was ignoring the ignore rules. I used the terminal to untrack it and was able to keep it ignored. Next I will be working on moving the bot away from API scraping and into local storage. I will be working on the following thiings: Setting up a SQLite database within the project. Logging and counting messages in real-time as they are sent. Rewriting the leaderboard commands to pull from the database instead of loading history from discord APIs. Thank you for reading my 2nd devlog!"}, {"post_id": 9000, "ts": "2026-06-15T00:18:52Z", "hours": 1.2375, "text": "Devlog 1: I was able to get the discord bot online and running! Set up the basic framework using Python and the discord.py library. I got it connected to discord and online and made it print a confirmation message to terminal when it’s online. I also used canva to make some custom art for the discord profile picture and the banner to make it look more professional and give it some personality. I ran into some SSL certificate verification errors when running the bot which was annoying to debug and fix. I used Github Copilot to help me debug and solve the issues and I figured out that I had to point Python to the certifi certificate bundle. Once I restarted and ran it again, the bot connected successfully. Next I will be working on the core features of the bot which are: A command that lets you see who has the most messages in a server within the last day. A command for most within the last week. A command for most messages all time in the server. These are the core basic features I plan to implement, I have other ideas like commands to see who spent time in vc (voice chat) in the same pattern as the messages commands and more things like that. Thank you for reading my 1st devlog!"}]...
|
Title: Top Chatter - a discord bot by @muhamm38 | Title: Top Chatter - a discord bot by @muhamm38 | Stardance
Devlogs:
Devlog 1: I was able to get the discord bot online and running! Set up the basic framework using Python and the discord.py library. I got it connected to discord and online and made it print a confirmation message to terminal when it’s online. I also used canva to make some custom art for the discord profile picture and the banner to make it look more professional and give it some personality. I ran into some SSL certificate verification errors when running the bot which was annoying to debug and fix. I used Github Copilot to help me debug and solve the issues and I figured out that I had to point Python to the certifi certificate bundle. Once I restarted and ran it again, the bot connected successfully. Next I will be working on the core features of the bot which are: A command that lets you see who has the most messages in a server within the last day. A command for most within the last week. A command for most messages all time in the server. These are the core basic features I plan to implement, I have other ideas like commands to see who spent time in vc (voice chat) in the same pattern as the messages commands and more things like that. Thank you for reading my 1st devlog!
Devlog 2: I finally finished adding the core message tracking features! I made some slash commands that let users track the top chatters over different time periods. I created the /last-hour , /last-day , and /last-week commands. I used Python’s datetime module to calculate an exact time period and then look back through the channel history to count up the messages. I also added a defer() function to each command so the bot can safely process the data without timing out or breaking. When implementing the /all-time command, I realized that downloading every single message ever sent could easily crash the bot. To fix this, I built a custom warning button using. Now, the bot sends a warning message with a Confirm & Run button, and it will only start the process if a user explicitly clicks it. I ran into a frustrating issue with Git where my .env file kept getting included in my commits even though it was listed in my .gitignore . I learned that because Git tracked the file early on, it was ignoring the ignore rules. I used the terminal to untrack it and was able to keep it ignored. Next I will be working on moving the bot away from API scraping and into local storage. I will be working on the following thiings: Setting up a SQLite database within the project. Logging and counting messages in real-time as they are sent. Rewriting the leaderboard commands to pull from the database instead of loading history from discord APIs. Thank you for reading my 2nd devlog!
Devlog 3: I’ve made a lot of progress on the bot and changed how it tracks server activity and message data! I moved the bot away from using the Discord API to scrape the data because that took way too long and wasn’t efficient. For the all-time command, it now dms the owner of the server to ask them for permission to get the data from the server (using discord api) then it adds that data into an sqlite database. I set up an automatic table layout that tracks users by their permanent Discord user_id rather than their display name. This completely prevents leaderboard tracking bugs if a user decides to change their server nickname. Next, I added into the real-time event system. The bot now logs and adds to message counts instantly as they are sent in real-time, meaning we don’t have to wait for slow api scrapes anymore. I also updated the /all-time command to pull directly from this local database instantly. I might update the other commands but for now its just using the discord api. To make the system scaleable, I added a full-server data sync. When the bot joins a new server, it sends a DM to the owner with a green setup button. Clicking it runs a background scan across all text channels to build the database. I ran into two big bugs while setting this up: The bot was accidentally wiping out data from previous channels as it moved to the next one. I fixed this by making the bot compile everything across the entire server into a tracking dictionary first, and then saving it all to the database at the very end. I had to restructure the database schema to use a combined primary key of (guild_id, user_id). This keeps counts completely isolated so a user’s stats on one server never leak into another server. Lastly, I added stats.db to the .gitignore file so it isn’t committed to github. Next steps: I might just ship it with these core features (definitely not for a sticker or anything 😂 🙏) I will try and continue to work on it and somehow find away to integrate VC support. This would need me to: Build a VC tracking system to see who spends the most time in voice channels over days, weeks, and all-time. I might also in the future update the leaderboard messages from the commands to have embeds so it looks cleaner and more professional using discord embeds. Thank you for reading my 3rd devlog! Edit: OH YEAH I just remembered I’m gonna host it on a server so I don’t need it running locally all the time.
Devlog 4 I finally moved all the time-based commands like /last-hour , /last-day , and /last-week to pull directly from the SQLite database instead of using the discord api to scrape thousands of messages. This makes the bot way faster and more reliable since it doesn’t have to calculate everything on the fly anymore. I was also able to add a brand new /last-month command. I also worked on polishing the experience and making the initial message scanning easier. Sometimes server owners have their DMs closed, so the bot would fail to send the automatic setup button when it joined. To fix this, I added a manual /setup command. Now, if the bot misses the DM, someone can just run the command themselves to start the background scan. It makes the onboarding process a lot smoother and prevents the bot from getting stuck. I finally got the bot hosted on a server! I moved it off my local computer and onto Hack Club Nest. I used PM2 to keep it running in the background permanently. This will probably be my final devlog as to be honest I’ve accomplished everything I wanted to with this bot and I feel very good about it because it has 1 core purpose and it does that purpose very well. I want to move on to other projects so I will probably ship it. If you want to try the bot out for yourself and add it to your server you can use this link: ( https://discord.com/oauth2/authorize?client_id=1514369908085887037&permissions=8&integration_type=0&scope=bot+applications.commands )
Ships:
I made Top Chatter , a discord bot that tracks message data on servers and ranks people by who talks the most in the server. It has multiple commands so you can see who talked the most throughout different time periods. You can see in the last month, last week, last day, and all time who has the most messages. It is running Python using the discord.py library. It uses a sqlite3 database to store messages so the commands can run instantly. Instead of using Discord API’s to scrape the messages which takes very long and can crash easily, I made it so when the bot joins the server it sends a dm to the owner asking permission to scan the entire server for its previous message data, then it adds it to its database. If for some reason the dm isn’t sent (bot is offline or owner’s dms are closed) if you try to do a command like /all-time it tells you the bot has not scanned the past messages and you need to have an admin do the /setup command to have it get all the previous message data. Challenges Some challenges I went through were these: Transition to database storage. Initially every command was using discord apis to get the message data and display them in a leaderboard, that took very long and crashed very often. To solve this I switched to using a local sqlite3 database. When building the feature to scan old messages, the bot was accidentally wiping out data from previous channels as it moved to the next one. I had to completely rewrite the logic so the bot compiled everything across the entire server into a Python tracking dictionary first, and then saved it all to the database at the very end. Deploying the server had some issues but with the help of AI (yes I know ai everyone hates it but I had too) I was able to figure it out and get it hoted. How to Test Click the link to invite the bot to a discord server. If you are the owner it should dm you and then click the setup button to get it setup. 2.5 If owner has dm’s closed or isn’t responding to it, if you’re an admin, run the /setup command to set it up manually Type / to see the full UI menu of commands, ranging from /last-100-messages to /all-time, enjoy!...
|
1793537708.178301
|
1793624108.178301
|
|
29776
|
Glancer by @Maarxius | Stardance
|
Maarxius
|
2
|
25.0
|
272
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-31T07:35:39Z", "hours": 1.0, "multiplier": 5.05, "payout": 0, "blessing": "neutral", "text": "Glancer: Final Devlog Glancer is meant to be a stand-in for TRMNL. I had an idea that I’d use it as an always-on desktop application running from a Mac, allowing you to control your calendar, connect your music, and do some other pretty interesting things. Honestly, building this has been a journey in and of itself. I’ve had fun adding photos of people, coding, learning how to do stuff, and well, anything really. It’s been a really interesting experience getting to experiment with different things and slowly turn an idea into an actual working project. What changed: For my last update, not much has changed apart from a few commit changes, some small bug fixes, and a lot of troubleshooting on my end. The troubleshooting wasn’t counted correctly in my original estimate, so I’d probably add another two hours to the total. What I’m proud of: In the end, I’m really proud of what I managed to do because this is my first time ever creating a project like this. Working around 25 hours on something might not seem like a lot, but it took me roughly two months to get here. Throughout that time, I learned a lot, experimented with different things, and had to figure out plenty of problems along the way. Honestly, it was really, really fun, and I’m happy with what I managed to create. So yeah!", "repo": "https://github.com/vismaysjayaram/glancer-desktop-view", "demo": "https://vismaysjayaram.github.io/glancer-desktop-view/"}, {"ship_num": 2, "ts": "2026-07-19T19:31:32Z", "hours": 24.0, "multiplier": 11.32, "payout": 272, "blessing": "neutral", "text": "Glancer Glancer is an always-on desk display designed to be passive, useful, and unobtrusive. The idea was simple: take a retired iPad Mini and turn it into something that could sit on a desk, plugged in, and display useful information without needing constant interaction. It was heavily inspired by Terminal, especially the idea that something passive could still become incredibly useful. I also wanted to explore the idea of reusing old technology instead of letting it become e-waste. Turning an old iPad that would otherwise sit unused into something functional felt like a pretty big win. What I made Glancer is a web app connected to a local computer. The iPad acts as the display, while a Python Flask server running on a Mac collects information, processes it, and sends it to the dashboard. The project includes a clock, weather card using the OpenWeather API, French vocabulary card, photo carousel, calendar, and a music card showing the current song, artist, playback progress, and an animated equalizer. The interesting part wasn’t just making the cards themselves, but building the system behind them. I created Python scripts, a Flask API, AppleScript integrations, calendar parsing, and JavaScript functions to dynamically update everything. Challenges The biggest challenge was definitely the calendar. AppleScript worked well with Music, but Calendar was a completely different story. Recurring events caused a lot of issues, and trying to parse Apple’s calendar data was much harder than expected. Eventually I had to learn about CalDAV and different calendar parsing methods to make it work. JavaScript was also a challenge, although in a more enjoyable way. Learning how objects and properties worked, and how to structure functions to update different parts of the dashboard, was a really useful experience. CSS also caused problems because the target device was an older iPad Mini. Features that worked perfectly on my computer did not always work on older versions of Safari, so a lot of time went into testing, fixing layouts, and making sure everything looked correct on the actual device. What I’m proud of The thing I’m most proud of is that I built the entire system myself. This project was less about writing a lot of code and more about solving problems. The calendar especially taught me a lot about handling messy data and transforming it into something useful. I also learned how to communicate with macOS using AppleScript, create local APIs with Flask, and have different devices communicate over a network. Learning Flask was probably one of the biggest milestones. Being able to run a local application on my network and have another device connect to it opens up a lot of possibilities for future projects. How to test it To run Glancer, you will need a Mac, Python 3, a display with a resolution of 1024×768 CSS pixels, and an Apple ID/iCloud account with a calendar. The full setup guide, installation instructions, and future updates can be found in the GitHub README. A working demo can be found on that side too. Glancer started as a simple HTML dashboard, but it became something much more. It is now a fully connected application that can communicate with my computer and display real-time information on an old device. I’m really happy with how it turned out.", "repo": "https://github.com/vismaysjayaram/glancer-desktop-view", "demo": "https://vismaysjayaram.github.io/glancer-desktop-view/"}]...
|
[{"post_id": 85376, "ts": "202 [{"post_id": 85376, "ts": "2026-10-31T07:31:19Z", "hours": 0.2808, "text": "Devlog: Final This is the proper, final devlog. Not much happened during 16 minutes of coding, but a lot changed. Mainly around the IPAD crashing TBH, I spent ages fiddling with settings to get the venv env to work properly. Apart from that, some github coding was fixed. I had so much fun, thank you so much for this program!"}, {"post_id": 35983, "ts": "2026-07-27T19:40:33Z", "hours": 0.845, "text": "Devlog 5! This session was mostly about polishing Glancer rather than adding new features.I started by improving how text overflow is handled, especially on the music and French dictionary cards. Long titles now scroll much more smoothly instead of being abruptly cut off.I also fixed a bug where portrait photos weren’t displaying correctly in the photo carousel, and spent some time stress testing the dashboard. Leaving it running for a while exposed a few bugs with cards cycling over time, which I was able to fix.The last big improvement was setting up a launchd service for the Flask server. Instead of manually starting it from Terminal every time, it now launches automatically in the background when my Mac starts, making Glancer feel much more like a proper application.No major new features this time, but a lot of small improvements that make the dashboard much nicer to use every day."}, {"post_id": 31178, "ts": "2026-07-19T11:36:55Z", "hours": 0.745, "text": "Devlog 5: Glancer is done, and it was fun! i touched up some fo the read-me, added the demo, and just polished a couple of things. Overall, it was really great View it Here!: https://vismaysjayaram.github.io/glancer-desktop-view/ Comment your thoughts please! I’ll add more dog photos to the demo if you comment!"}, {"post_id": 30790, "ts": "2026-07-18T17:59:13Z", "hours": 3.6592, "text": "Devlog 4! It’s finally done. After a lot of work, Glancer is finally feature complete. Before finishing everything off though, I decided to test it on an actual iPad instead of just my desktop browser. I’m really glad I did, because it immediately exposed a bunch of bugs caused by deprecated CSS. After a bit of trial and error (and Googling), I managed to iron them out. The first new feature I tackled was the photo carousel. Originally my plan was to have the iPad handle everything locally, but I quickly realised that wasn’t a great idea. Since I already had a Flask server running, it made much more sense to let it serve the photos as well. I ended up using what I’ve affectionately named the YOLO (You Only Load Once) method. The browser loads a photo, keeps displaying it until it eventually errors, then simply requests the next one from the server. It’s surprisingly simple, but it works really well. I also added photo shuffling and a photo counter, which rounded out the card nicely. After that I moved onto the French card, my mot du jour. That one was pretty straightforward. The hardest part was actually finding a good word list. After spending way too long looking, I gave up and had AI generate one that I could use instead. The final boss was the calendar. Compared to what I expected, the frontend was easy. The backend definitely wasn’t. There were plenty of Python bugs, Apple Calendar quirks and recurring event weirdness to work through, but eventually everything clicked into place and I finally got today’s events showing correctly. And with that… Glancer is done. There are still a few things I’d like to polish and test, but as far as the original vision goes, it’s complete. It’s honestly really satisfying seeing it all come together. What started as a simple dashboard idea is now something I actually use, and that’s a pretty cool feeling. Sure, i had to cut a lot of features, but i think what i lost, i gained thrice more."}, {"post_id": 30126, "ts": "2026-07-17T13:26:51Z", "hours": 8.3861, "text": "Devlog 3! Return of the killer Adblocker! This session was basically split into two parts: the weather card and the media card. The weather card was pretty simple, the media card absolutely was not. I started with the weather card as a bit of a warm up. I used the OpenWeather API to grab the data and then spent most of my time getting everything to display nicely. The one thing I wasn’t expecting was how annoying SVGs are in plain HTML. I ended up making one massive lookup table full of SVG markup so I could swap icons depending on the weather. Is it elegant? No. Did it work? Yep. After that I moved onto the main boss fight of this devlog: the media card. Unlike the weather card, this one actually needed the frontend and backend to communicate. That meant learning Flask for the first time. Surprisingly, Flask was really enjoyable to work with. Setting up routes and returning JSON was much easier than I expected. Then came AppleScript. Honestly, AppleScript wasn’t nearly as bad as I’d heard. It’s probably one of the most readable programming languages I’ve used. I used it to grab information from the Music app like the current song, artist, duration and playback position, then passed all of that through Flask so the browser could fetch it as JSON. Of course, nothing ever works the first time. One thing that really annoyed me was discovering that my ad blocker was blocking the HTTP requests to my own local Flask server. Good on it for doing its job, but it made debugging miserable. I downloaded another browser to test it… only to realise it also had a built-in ad blocker. In the end I gave up and switched to Safari. I didn’t even know Safari had DevTools, but they’re actually pretty decent. Once the backend was working I started designing the actual card. I tried a bunch of layouts before settling on one with the song title, artist, progress bar and a little animated equalizer. I also wanted playback controls and album art, but they just made the card feel cramped, so I scrapped both ideas. The JavaScript was honestly the hardest part. Nothing was particularly difficult, it was just lots of connecting everything together and trying not to confuse myself with variable names. I split everything into smaller functions so I could update different parts of the card independently, and I also got to experiment with try and catch for error handling. The rest of the session was mostly bug fixing, CSS animations and fighting JavaScript every step of the way. Overall this felt like a pretty big milestone. Glancer isn’t just displaying static information anymore. It’s actually talking to my Mac in real time, which makes it feel a lot more like a real application than just another webpage."}, {"post_id": 23352, "ts": "2026-07-06T07:59:13Z", "hours": 7.31, "text": "Devlog 2! Just got to work on the actual HTML progress. Eight hours later here’s what I’ve got.I started by quickly laying out the grid with CSS and HTML. I was going through my last devlog and decided to get straight into the first card the clock.The clock is running on Bebas Neue, centered and it uses a simple JS setup. I had no idea you could animate things with CSS like that, which was actually pretty fun to figure out.After that I moved on to the calendar since I hadn’t really planned it out properly. That kicked off what I’m calling the calendar arc and yeah it was painful.The calendar itself is pretty simple. It shows your next event, how much time is left, and the event details etc etc. But it ended up taking a lot of JavaScript work. Nothing complex just really annoying to deal with.What really got me was how JavaScript handles constants. How assigning something to a const doesn’t always create a fresh copy it just links back to the original reference. I had no idea about that.Eventually I got the calendar working, added a bit of styling and that was basically the full eight hours."}, {"post_id": 22117, "ts": "2026-07-04T12:23:22Z", "hours": 3.9717, "text": "Devlog 1: Hey there, excited to start my project Glancer. It’s an ambient desk display that will show the time, weather, my 3d printer status, maybe a media player, my calendar, and a selected photo that I plan to keep. I’m designing the system to run on an iPad Mini 2 (d original) , which makes CSS and HTML much easier since I only need to define a single area. I spent a crazy amount of time trying to understand how to define CSS headings and grids. Even though I only have to work with a single display resolution, it didn’t save me from going through way too many Web3Schools pages. who designed css? Who hurt you? Overall, it looks like it will turn into a great project. I also plan to add a Mac side screen acting as a pseudo-server-thingie, which could provide the iPad with data about the printer, weather, and more; though I might also just have the iPad handle everything directly. I spent a couple of hours designing and sketching before moving into Figma to prototype it. I’m now working on the actual code and I’m excited to see how it turns out. Overall, a solid amount of work done before starting development."}]...
|
Title: Glancer by @Maarxius | Stardance
Devlogs:
Title: Glancer by @Maarxius | Stardance
Devlogs:
Devlog 1: Hey there, excited to start my project Glancer. It’s an ambient desk display that will show the time, weather, my 3d printer status, maybe a media player, my calendar, and a selected photo that I plan to keep. I’m designing the system to run on an iPad Mini 2 (d original) , which makes CSS and HTML much easier since I only need to define a single area. I spent a crazy amount of time trying to understand how to define CSS headings and grids. Even though I only have to work with a single display resolution, it didn’t save me from going through way too many Web3Schools pages. who designed css? Who hurt you? Overall, it looks like it will turn into a great project. I also plan to add a Mac side screen acting as a pseudo-server-thingie, which could provide the iPad with data about the printer, weather, and more; though I might also just have the iPad handle everything directly. I spent a couple of hours designing and sketching before moving into Figma to prototype it. I’m now working on the actual code and I’m excited to see how it turns out. Overall, a solid amount of work done before starting development.
Devlog 2! Just got to work on the actual HTML progress. Eight hours later here’s what I’ve got.I started by quickly laying out the grid with CSS and HTML. I was going through my last devlog and decided to get straight into the first card the clock.The clock is running on Bebas Neue, centered and it uses a simple JS setup. I had no idea you could animate things with CSS like that, which was actually pretty fun to figure out.After that I moved on to the calendar since I hadn’t really planned it out properly. That kicked off what I’m calling the calendar arc and yeah it was painful.The calendar itself is pretty simple. It shows your next event, how much time is left, and the event details etc etc. But it ended up taking a lot of JavaScript work. Nothing complex just really annoying to deal with.What really got me was how JavaScript handles constants. How assigning something to a const doesn’t always create a fresh copy it just links back to the original reference. I had no idea about that.Eventually I got the calendar working, added a bit of styling and that was basically the full eight hours.
Devlog 3! Return of the killer Adblocker! This session was basically split into two parts: the weather card and the media card. The weather card was pretty simple, the media card absolutely was not. I started with the weather card as a bit of a warm up. I used the OpenWeather API to grab the data and then spent most of my time getting everything to display nicely. The one thing I wasn’t expecting was how annoying SVGs are in plain HTML. I ended up making one massive lookup table full of SVG markup so I could swap icons depending on the weather. Is it elegant? No. Did it work? Yep. After that I moved onto the main boss fight of this devlog: the media card. Unlike the weather card, this one actually needed the frontend and backend to communicate. That meant learning Flask for the first time. Surprisingly, Flask was really enjoyable to work with. Setting up routes and returning JSON was much easier than I expected. Then came AppleScript. Honestly, AppleScript wasn’t nearly as bad as I’d heard. It’s probably one of the most readable programming languages I’ve used. I used it to grab information from the Music app like the current song, artist, duration and playback position, then passed all of that through Flask so the browser could fetch it as JSON. Of course, nothing ever works the first time. One thing that really annoyed me was discovering that my ad blocker was blocking the HTTP requests to my own local Flask server. Good on it for doing its job, but it made debugging miserable. I downloaded another browser to test it… only to realise it also had a built-in ad blocker. In the end I gave up and switched to Safari. I didn’t even know Safari had DevTools, but they’re actually pretty decent. Once the backend was working I started designing the actual card. I tried a bunch of layouts before settling on one with the song title, artist, progress bar and a little animated equalizer. I also wanted playback controls and album art, but they just made the card feel cramped, so I scrapped both ideas. The JavaScript was honestly the hardest part. Nothing was particularly difficult, it was just lots of connecting everything together and trying not to confuse myself with variable names. I split everything into smaller functions so I could update different parts of the card independently, and I also got to experiment with try and catch for error handling. The rest of the session was mostly bug fixing, CSS animations and fighting JavaScript every step of the way. Overall this felt like a pretty big milestone. Glancer isn’t just displaying static information anymore. It’s actually talking to my Mac in real time, which makes it feel a lot more like a real application than just another webpage.
Devlog 4! It’s finally done. After a lot of work, Glancer is finally feature complete. Before finishing everything off though, I decided to test it on an actual iPad instead of just my desktop browser. I’m really glad I did, because it immediately exposed a bunch of bugs caused by deprecated CSS. After a bit of trial and error (and Googling), I managed to iron them out. The first new feature I tackled was the photo carousel. Originally my plan was to have the iPad handle everything locally, but I quickly realised that wasn’t a great idea. Since I already had a Flask server running, it made much more sense to let it serve the photos as well. I ended up using what I’ve affectionately named the YOLO (You Only Load Once) method. The browser loads a photo, keeps displaying it until it eventually errors, then simply requests the next one from the server. It’s surprisingly simple, but it works really well. I also added photo shuffling and a photo counter, which rounded out the card nicely. After that I moved onto the French card, my mot du jour. That one was pretty straightforward. The hardest part was actually finding a good word list. After spending way too long looking, I gave up and had AI generate one that I could use instead. The final boss was the calendar. Compared to what I expected, the frontend was easy. The backend definitely wasn’t. There were plenty of Python bugs, Apple Calendar quirks and recurring event weirdness to work through, but eventually everything clicked into place and I finally got today’s events showing correctly. And with that… Glancer is done. There are still a few things I’d like to polish and test, but as far as the original vision goes, it’s complete. It’s honestly really satisfying seeing it all come together. What started as a simple dashboard idea is now something I actually use, and that’s a pretty cool feeling. Sure, i had to cut a lot of features, but i think what i lost, i gained thrice more.
Devlog 5: Glancer is done, and it was fun! i touched up some fo the read-me, added the demo, and just polished a couple of things. Overall, it was really great View it Here!: https://vismaysjayaram.github.io/glancer-desktop-view/ Comment your thoughts please! I’ll add more dog photos to the demo if you comment!
Devlog 5! This session was mostly about polishing Glancer rather than adding new features.I started by improving how text overflow is handled, especially on the music and French dictionary cards. Long titles now scroll much more smoothly instead of being abruptly cut off.I also fixed a bug where portrait photos weren’t displaying correctly in the photo carousel, and spent some time stress testing the dashboard. Leaving it running for a while exposed a few bugs with cards cycling over time, which I was able to fix.The last big improvement was setting up a launchd service for the Flask server. Instead of manually starting it from Terminal every time, it now launches automatically in the background when my Mac starts, making Glancer feel much more like a proper application.No major new features this time, but a lot of small improvements that make the dashboard much nicer to use every day.
Devlog: Final This is the proper, final devlog. Not much happened during 16 minutes of coding, but a lot changed. Mainly around the IPAD crashing TBH, I spent ages fiddling with settings to get the venv env to work properly. Apart from that, some github coding was fixed. I had so much fun, thank you so much for this program!
Ships:
Glancer Glancer is an always-on desk display designed to be passive, useful, and unobtrusive. The idea was simple: take a retired iPad Mini and turn it into something that could sit on a desk, plugged in, and display useful information without needing constant interaction. It was heavily inspired by Terminal, especially the idea that something passive could still become incredibly useful. I also wanted to explore the idea of reusing old technology instead of letting it become e-waste. Turning an old iPad that would otherwise sit unused into something functional felt like a pretty big win. What I made Glancer is a web app connected to a local computer. The iPad acts as the display, while a Python Flask server running on a Mac collects information, processes it, and sends it to the dashboard. The project includes a clock, weather card using the OpenWeather API, French vocabulary card, photo carousel, calendar, and a music card showing the current song, artist, playback progress, and an animated equalizer. The interesting part wasn’t just making the cards themselves, but building the system behind them. I created Python scripts, a Flask API, AppleScript integrations, calendar parsing, and JavaScript functions to dynamically update everything. Challenges The biggest challenge was definitely the calendar. AppleScript worked well with Music, but Calendar was a completely different story. Recurring events caused a lot of issues, and trying to parse Apple’s calendar data was much harder than expected. Eventually I had to learn about CalDAV and different calendar parsing methods to make it work. JavaScript was also a challenge, although in a more enjoyable way. Learning how objects and properties worked, and how to structure functions to update different parts of the dashboard, was a really useful experience. CSS also caused problems because the target device was an older iPad Mini. Features that worked perfectly on my computer did not always work on older versions of Safari, so a lot of time went into testing, fixing layouts, and making sure everything looked correct on the actual device. What I’m proud of The thing I’m most proud of is that I built the entire system myself. This project was less about writing a lot of code and more about solving problems. The calendar especially taught me a lot about handling messy data and transforming it into something useful. I also learned how to communicate with macOS using AppleScript, create local APIs with Flask, and have different devices communicate over a network. Learning Flask was probably one of the biggest milestones. Being able to run a local application on my network and have another device connect to it opens up a lot of possibilities for future projects. How to test it To run Glancer, you will need a Mac, Python 3, a display with a resolution of 1024×768 CSS pixels, and an Apple ID/iCloud account with a calendar. The full setup guide, installation instructions, and future updates can be found in the GitHub README. A working demo can be found on that side too. Glancer started as a simple HTML dashboard, but it became something much more. It is now a fully connected application that can communicate with my computer and display real-time information on an old device. I’m really happy with how it turned out.
Glancer: Final Devlog Glancer is meant to be a stand-in for TRMNL. I had an idea that I’d use it as an always-on desktop application running from a Mac, allowing you to control your calendar, connect your music, and do some other pretty interesting things. Honestly, building this has been a journey in and of itself. I’ve had fun adding photos of people, coding, learning how to do stuff, and well, anything really. It’s been a really interesting experience getting to experiment with different things and slowly turn an idea into an actual working project. What changed: For my last update, not much has changed apart from a few commit changes, some small bug fixes, and a lot of troubleshooting on my end. The troubleshooting wasn’t counted correctly in my original estimate, so I’d probably add another two hours to the total. What I’m proud of: In the end, I’m really proud of what I managed to do because this is my first time ever creating a project like this. Working around 25 hours on something might not seem like a lot, but it took me roughly two months to get here. Throughout that time, I learned a lot, experimented with different things, and had to figure out plenty of problems along the way. Honestly, it was really, really fun, and I’m happy with what I managed to create. So yeah!...
|
1793537709.3653798
|
1793624109.3653798
|
|
38928
|
My own site! by @Leeba | Stardance
|
Leeba
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @Leeba | Stardance
|
1793537710.6212344
|
1794142510.6212344
|
|
14124
|
Desk Wind Tunnel by @Roodiuh | Stardance
|
Roodiuh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Desk Wind Tunnel by @Roodiuh | Stardance
|
1793537711.546703
|
1794142511.546703
|
|
38042
|
VoidSeed by @otzpt | Stardance
|
otzpt
|
1
|
12.53
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-15T13:29:08Z", "hours": 11.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "My aim was never been to create a useful replacement for ChatGPT; instead, I decided to understand what goes on inside a language model and so I created the transformer, the training loop, the tokenizer/data pipeline, and the retrieval layer myself. It went through two phases: 24M parameters trained on TinyStories as the starter experiment 155M parameters trained on ~2B tokens of security documentation Full-text retrieval using SQLite FTS5 A custom training pipeline that includes the use of mixed precision, checkpointing, and cosine LR scheduling, etc. The model is awful at actually answering questions ; that’s basically the whole point. While they are able to generate coherent text and the more extensive model can make use of the security documentation that has been retrieved, don’t expect anything like frontier-model level reasoning; it’s a small model designed to learn from existing models rather than to replace those which cost millions to train. From this project I learned more regarding transformers, training, data, retrieval, and the actual situation with small models than I would have if I had just used an existing framework.", "repo": "https://github.com/otzpt/VOIDSEED", "demo": "https://llmwebsite-pink.vercel.app/"}]...
|
[{"post_id": 75917, "ts": "202 [{"post_id": 75917, "ts": "2026-10-01T16:34:14Z", "hours": 1.5283, "text": "Fix for ship The Ship was rejected for AI readme (wrong banner and AI written AI usage declaration, but this is not smt that counts time towards devlog so it’s not going to be mentioned) which I had already re-written, so I thought what could maybe fix the ship issue, and an idea came to mind: if the readme sounds AI written then I will fully re-write the readme from scratch and only use AI to fix typos (ex: LMM to LLM or then to than), so that is what I did, I re-wrote the entire readme. The problem There was a big problem: it had been so long I didn’t remember the code well, so I had to study the entire code base because of the readme. In the process, I found a bug in chat.py , which luckily was a quick fix, just a if there. Extra If you are wondering why the devlog is 1h and 30m, I also don’t know. If I had to guess, it is that I re-wrote the readme a first time and didn’t make the devlog, so there is that extra that could also be why it got rejected for the same reason as before (AI readme)."}, {"post_id": 45247, "ts": "2026-08-11T16:19:57Z", "hours": 1.7969, "text": "tiny-llm: KV-cache, a public API, and shipping the whole thing Last devlog left off with the 100M model trained and RAG wired into chat.py , generating in ~50s per reply. This one covers making that fast, and getting the whole pipeline live on the internet. Understanding KV-cache Without a cache, every new token recalculates K/V for all tokens already processed, even though those values haven’t changed. The KV cache keeps them around and only computes K/V for the new token. Three real changes to model.py : CausalSelfAttention.forward now takes an optional kv_cache , concatenates new K/V onto it along the sequence dimension, and returns the updated cache. The causal mask only applies when there’s no cache. With a cache, the new token’s query attends over the entire K/V (past + new), and since generation only ever feeds one new token at a time once a cache exists, there’s no future position to accidentally see. “No mask” is the correct causal mask in that case, not an approximation. Position embeddings need to be absolute, not relative to the current call. With a cache, x is only the new tokens, so position 0 here is really past_length in the full sequence, pulled from the cached K’s sequence-length dimension. Before relying on the cache, I added a correctness check: run the whole sequence normally, then one token at a time through the cache, compare logits with torch.allclose . They matched. Wanted to confirm correctness before worrying about performance. Wiring it into generation chat.py and backend.py now do a prefill (whole prompt through the model once, building the initial cache) followed by decode steps that only pass the newest token plus the accumulated cache, instead of re-encoding a sliding window every step. Deploying: Nest, Vercel, and bugs that only show up live Backend/model : FastAPI on Hack Club Nest (Stardance’s rules don’t allow Hugging Face for hosting), running as a systemd service, bound to 127.0.0.1 behind Caddy for TLS. Frontend : static HTML/CSS/JS on Vercel, auto-deployed via GitHub Actions. Real bugs surfaced by going live: addMessage() never returned the div it created, so every successful reply crashed setting .textContent on undefined , landing in the catch block and showing an error even when the backend answered correctly. Live on the public demo before it got caught. The rate limiter keyed on a spoofable query parameter instead of the real client IP. Fixed by reading X-Forwarded-For ’s last hop, which only Caddy can set here. No protection against concurrent requests on a 2-vCPU, 1.5GB box with a documented prior OOM kill. Queuing behind a lock still pushed memory to the ceiling, so it became a 503 (fail fast) instead. A missing message field crashed inside search() . Now returns 400 first. The model’s sanity-check block ran on every import, not just direct execution. Gated behind if __name__ == \"__main__\": . The result /generate went from ~50s to ~4.0s, a ~12.5x speedup, same model, same box, real public HTTPS endpoint. Verified live, not assumed. What’s running now A GPT trained from scratch, retrieval-augmented over real security docs, served with KV-cache inference behind a rate-limited public API. Every piece went through a review pass that caught real, live bugs before calling it done. The model’s output quality at 100M params is the physical ceiling of this scale, not a bug to fix, that was always the outcome of training something this size from nothing. Getting the whole stack this far, correctly, is the milestone."}, {"post_id": 45049, "ts": "2026-08-11T09:30:36Z", "hours": 1.1694, "text": "tiny-llm: the 100M model is trained, and RAG is wired in The 100M parameter run is done. 976,562 steps on a 2B-token corpus, and chat.py now pulls retrieved passages before generating instead of relying on memorized weights. The problem, and the fix Started out wanting this model trained purely on security content (HackTricks, PayloadsAllTheThings, SecLists, GTFOBins, CheatSheetSeries, wstg). All of that combined comes to about 6.73M tokens. Compute-optimal for a 100M model is around 2B tokens, real security wikis just don’t reach that scale, and no amount of repo-hunting was going to fix that 300x gap. The solution i found was blend the 6.73M security tokens into a 2B-token corpus, topped up with FineWeb-Edu for general English coverage. The model gets real security-domain exposure plus enough general text to actually hold together grammatically, not by inventing security content that doesn’t exist, but by being upfront about what’s actually available. The training run d_model=768, n_heads=12, n_layer=12 4x the previous 24M config. Config changes were straightforward, getting a resumable 50-hour run right was the actual work: Checkpoint pruning — early on, checkpoints/ silently grew to 561GB before a torch.save call failed with a disk-full error mid-write. Fixed by keeping only the 5 most recent checkpoints on every save, removing older ones automatically. torch.compile ordering — resuming from a checkpoint failed with a state_dict key mismatch the first time, because model = torch.compile(model) was running before the resume logic loaded the weights. Compiled models get every parameter name prefixed with _orig_mod. , so loading a plain checkpoint into a compiled model (or vice versa) breaks. Fixed by moving the resume block to before the torch.compile call — load into the “bare” model first, compile after. Verified resume actually works — killed the process mid-run, restarted, confirmed it picked up exactly where it left off (same step, same loss) before trusting it for the full 50 hours unattended. Final loss landed around 3.5–3.8 (train and val tracking closely) — expected for a corpus this heterogeneous (security docs + general web text) compared to the tighter 1.4–1.8 range on TinyStories. Wiring in retrieval A 100M model isn’t going to reliably “know” security facts from 6.73M tokens seen once inside a 2B-token corpus — so instead of hoping the weights memorized it, chat.py now retrieves first: User’s prompt goes to a local SQLite FTS5 search index built over the same repos/ content used in training Top-k matching passages come back with source, heading, and BM25 relevance score Those passages get prepended to the prompt as context before the model generates Straightforward in concept, but ran into block_size=256 limits fast, retrieved passages plus the question can easily blow past what the model was trained to handle positionally. Fixed by truncating the encoded prompt to the last 256 tokens before generation, keeping the question and “Answer:” cue intact even if some of the retrieved context gets cut from the front. What actually happens now Asked “What is SQL injection?” — with retrieval wired in, the model opens with something closer to on-topic (“one of the most powerful tools available to attackers”) instead of pure noise, but drifts into plausible-sounding but fabricated details a few sentences in. That’s the honest result at this scale: retrieval gives it real information to start from, but staying faithful to that context for 100 generated tokens is past what 100M parameters can reliably do. Better than without retrieval, not a fix for the underlying scale limit."}, {"post_id": 42260, "ts": "2026-08-06T21:44:21Z", "hours": 1.7903, "text": "tiny-llm: 24M model trained, and it actually generates coherent stories Picked up from the last devlog — train.py was working (fp16, grad clipping, val loss, checkpointing), but only tested on 2000 steps. This one covers finishing the training setup, the real 4-hour run, and getting the model talking through a CLI. Cosine LR with warmup Added a proper learning rate schedule before committing to a long run: Warmup — LR ramps up linearly from 0 to the target (3e-4) over the first 2000 steps, instead of hitting the model with full LR while the weights are still random. Cosine decay — after warmup, LR follows a cosine curve down toward 0 over the rest of training, so the model settles into finer adjustments by the end instead of taking large steps the whole way through. Nothing exotic here — PyTorch doesn’t need a library for this, just a function that computes the right LR for the current step and gets applied to the optimizer’s param groups each iteration. The real run 474M tokens (the full TinyStories corpus), which comes out to ~231,445 steps at batch_size=8, block_size=256 . Ran for about 4 hours on the RTX 2080 Super: step 0: train loss 11.01 val loss 10.62 step 231000: train loss 1.48 val loss 1.49 step 231400: train loss 1.82 val loss 1.69 Train and val loss tracked closely the entire run — no overfitting. Loss in the 1.4–1.8 range by the end, a solid result for a from-scratch 24M model on this corpus. sample.py: watching it actually generate Wrote a script to load a checkpoint and generate text autoregressively — feed in a prompt, predict the next token, append it, repeat. Had to fix two small but important bugs along the way: torch.arange and torch.triu inside the model default to creating tensors on CPU even when everything else is on GPU — same device-mismatch class of bug as during training, fixed the same way ( device=x.device ). Loading the checkpoint failed at first because torch.compile prefixes every parameter name with _orig_mod. — stripped it with a quick dict comprehension before calling load_state_dict . First real generation, prompted with “once upon a time”: once upon a time, there was a fish named Fin. Fin was very brave and always had a big challenge to do. One day, Fin asked his friend, Sally, “Will you marry me?” Sally said, “Yes, Fin! Let’s go!” Fin and Sally had a big adventure in the ocean… Not perfect logic (fish swimming through an ocean “full of fish to eat” is a little off), but grammatically solid, consistent character names throughout, and a real narrative arc. Exactly what you’d expect from a well-trained 24M model on TinyStories. chat.py: a quick interactive loop Wrapped the generation code in a while True loop so the model loads once and takes prompts repeatedly instead of restarting for every single generation. Worth noting for anyone trying this themselves: this is a base model , not an instruction-tuned chat model — it doesn’t “answer” prompts, it just continues them as text. Say “hello” and it treats that as the opening of a story, not a greeting to respond to. That’s expected behavior at this stage, not a bug — instruction-following is a separate fine-tuning step for later. What’s next The full pipeline — prepare.py → train.py → sample.py/chat.py — is confirmed working end-to-end, from raw dataset to a model you can actually talk to (in the “continues your text” sense). Next up: scaling to the 100M-param run on a 2B-token corpus, this time blending real security-focused text (HackTricks, PayloadsAllTheThings, and others) with general web text, plus a retrieval index so the model can pull in relevant passages instead of relying purely on memorized weights."}, {"post_id": 40820, "ts": "2026-08-04T16:14:21Z", "hours": 1.0447, "text": "tiny-llm: train.py works, and the model is actually learning model.py and prepare.py were done, but nothing had actually been trained yet. This devlog covers train.py and the first real smoke test on the 24M-parameters config. Writing train.py Wrote the training loop the same way as the model piece by piece, understanding each part before moving on: get_batch — pulls random windows from the memmapped .bin files. x is a block of tokens, y is the same block shifted by one position (next-token prediction). Understanding why y is just x shifted by 1 was one of those small moments where next-token prediction actually clicked. Mixed precision (fp16 + GradScaler) — my GPU (RTX 2080 Super, Turing) doesn’t have real bf16 tensor cores, so fp16 with a GradScaler is the right call. The scaler exists because fp16 has a much narrower range than fp32 — small gradients can underflow to zero and silently vanish. The scaler multiplies the loss up before backward() and unscales before step() , so nothing gets lost in the process. Gradient clipping — caps the gradient norm at 1.0 before the optimizer step, to stop occasional exploding gradients from wrecking a good run. Validation loss — evaluates on a held-out batch from val.bin every 100 steps, wrapped in model.eval() + @torch.no_grad() , so I can actually tell if the model is generalizing instead of just memorizing. Checkpointing — saves model + optimizer state every 1000 steps. Training a real run for tens of hours without this would be a great way to lose everything to one crash. Debugging session Hit two device-mismatch errors early on — torch.arange and torch.triu both default to creating tensors on CPU, even when the rest of the model is on the GPU. Fixed by explicitly passing device=x.device wherever a new tensor gets created inside the model. Small bug, but a good reminder that PyTorch doesn’t infer device placement for you. First real run Ran the 24M-param smoke test ( n_layer=6, n_head=6, n_embd=384, block_size=256 ) on TinyStories, ~470M tokens, for 2000 steps on my RTX 2080 Super: step 0: train loss 11.01 val loss 10.62 step 1000: train loss 3.34 val loss 3.47 step 1900: train loss 2.89 val loss 3.10 Loss starts right around ln(50257) ≈ 10.8 , which is exactly what you’d expect from a model guessing uniformly over the vocabulary before it’s learned anything. Train and val loss track each other closely the whole way down — no sign of overfitting, which is what I wanted to confirm before committing to a much longer run. What’s next The full pipeline is confirmed working end-to-end: prepare.py → get_batch → model.py → train.py , all on my own hardware. Next step is adding a cosine learning rate schedule with warmup, then moving on to the actual 100M-param run. PS: train.py had some AI usage"}, {"post_id": 36434, "ts": "2026-07-28T15:39:08Z", "hours": 5.0886, "text": "tiny-llm: getting the data pipeline and model architecture in place Before writing any model code, I needed a way to actually get training data into a usable format. prepare.py handles that: it streams a dataset from HuggingFace (starting with TinyStories, ~470M tokens), tokenizes it with the GPT-2 BPE tokenizer via tiktoken , and writes it out as flat uint16 arrays split into train.bin and val.bin . A few details mattered here even though I didn’t write this part myself: Tokens are stored as uint16 instead of the more obvious int32 / int64 — GPT-2’s vocab is 50,257 tokens, which fits comfortably under 65,536, so uint16 cuts file size in half for free. The split between train/val happens per document , not per token. Each story gets an end-of-text token appended, and documents are randomly assigned to train or val as a whole — so a story never gets cut in half across the train/val boundary and leaks information. Files are written so they can be read later with np.memmap , meaning the corpus never has to fit in RAM — training just maps the file and reads slices from disk on demand. With the data pipeline sorted, I moved on to the part I actually wanted to understand deeply: the model itself. That’s model.py , CausalSelfAttention , MLP , Block , and GPT , all written and shape-tested from scratch. Having both pieces done means the two “boring but necessary” and “the actual point of the project” halves are finally connected: real tokenized text on one end, a transformer architecture ready to consume it on the other. Next: train.py — wiring prepare.py ’s output into model.py via memmap batching, cross-entropy loss, AdamW, and a training loop."}]...
|
Title: VoidSeed by @otzpt | Stardance
Devlogs:
ti Title: VoidSeed by @otzpt | Stardance
Devlogs:
tiny-llm: getting the data pipeline and model architecture in place Before writing any model code, I needed a way to actually get training data into a usable format. prepare.py handles that: it streams a dataset from HuggingFace (starting with TinyStories, ~470M tokens), tokenizes it with the GPT-2 BPE tokenizer via tiktoken , and writes it out as flat uint16 arrays split into train.bin and val.bin . A few details mattered here even though I didn’t write this part myself: Tokens are stored as uint16 instead of the more obvious int32 / int64 — GPT-2’s vocab is 50,257 tokens, which fits comfortably under 65,536, so uint16 cuts file size in half for free. The split between train/val happens per document , not per token. Each story gets an end-of-text token appended, and documents are randomly assigned to train or val as a whole — so a story never gets cut in half across the train/val boundary and leaks information. Files are written so they can be read later with np.memmap , meaning the corpus never has to fit in RAM — training just maps the file and reads slices from disk on demand. With the data pipeline sorted, I moved on to the part I actually wanted to understand deeply: the model itself. That’s model.py , CausalSelfAttention , MLP , Block , and GPT , all written and shape-tested from scratch. Having both pieces done means the two “boring but necessary” and “the actual point of the project” halves are finally connected: real tokenized text on one end, a transformer architecture ready to consume it on the other. Next: train.py — wiring prepare.py ’s output into model.py via memmap batching, cross-entropy loss, AdamW, and a training loop.
tiny-llm: train.py works, and the model is actually learning model.py and prepare.py were done, but nothing had actually been trained yet. This devlog covers train.py and the first real smoke test on the 24M-parameters config. Writing train.py Wrote the training loop the same way as the model piece by piece, understanding each part before moving on: get_batch — pulls random windows from the memmapped .bin files. x is a block of tokens, y is the same block shifted by one position (next-token prediction). Understanding why y is just x shifted by 1 was one of those small moments where next-token prediction actually clicked. Mixed precision (fp16 + GradScaler) — my GPU (RTX 2080 Super, Turing) doesn’t have real bf16 tensor cores, so fp16 with a GradScaler is the right call. The scaler exists because fp16 has a much narrower range than fp32 — small gradients can underflow to zero and silently vanish. The scaler multiplies the loss up before backward() and unscales before step() , so nothing gets lost in the process. Gradient clipping — caps the gradient norm at 1.0 before the optimizer step, to stop occasional exploding gradients from wrecking a good run. Validation loss — evaluates on a held-out batch from val.bin every 100 steps, wrapped in model.eval() + @torch.no_grad() , so I can actually tell if the model is generalizing instead of just memorizing. Checkpointing — saves model + optimizer state every 1000 steps. Training a real run for tens of hours without this would be a great way to lose everything to one crash. Debugging session Hit two device-mismatch errors early on — torch.arange and torch.triu both default to creating tensors on CPU, even when the rest of the model is on the GPU. Fixed by explicitly passing device=x.device wherever a new tensor gets created inside the model. Small bug, but a good reminder that PyTorch doesn’t infer device placement for you. First real run Ran the 24M-param smoke test ( n_layer=6, n_head=6, n_embd=384, block_size=256 ) on TinyStories, ~470M tokens, for 2000 steps on my RTX 2080 Super: step 0: train loss 11.01 val loss 10.62 step 1000: train loss 3.34 val loss 3.47 step 1900: train loss 2.89 val loss 3.10 Loss starts right around ln(50257) ≈ 10.8 , which is exactly what you’d expect from a model guessing uniformly over the vocabulary before it’s learned anything. Train and val loss track each other closely the whole way down — no sign of overfitting, which is what I wanted to confirm before committing to a much longer run. What’s next The full pipeline is confirmed working end-to-end: prepare.py → get_batch → model.py → train.py , all on my own hardware. Next step is adding a cosine learning rate schedule with warmup, then moving on to the actual 100M-param run. PS: train.py had some AI usage
tiny-llm: 24M model trained, and it actually generates coherent stories Picked up from the last devlog — train.py was working (fp16, grad clipping, val loss, checkpointing), but only tested on 2000 steps. This one covers finishing the training setup, the real 4-hour run, and getting the model talking through a CLI. Cosine LR with warmup Added a proper learning rate schedule before committing to a long run: Warmup — LR ramps up linearly from 0 to the target (3e-4) over the first 2000 steps, instead of hitting the model with full LR while the weights are still random. Cosine decay — after warmup, LR follows a cosine curve down toward 0 over the rest of training, so the model settles into finer adjustments by the end instead of taking large steps the whole way through. Nothing exotic here — PyTorch doesn’t need a library for this, just a function that computes the right LR for the current step and gets applied to the optimizer’s param groups each iteration. The real run 474M tokens (the full TinyStories corpus), which comes out to ~231,445 steps at batch_size=8, block_size=256 . Ran for about 4 hours on the RTX 2080 Super: step 0: train loss 11.01 val loss 10.62 step 231000: train loss 1.48 val loss 1.49 step 231400: train loss 1.82 val loss 1.69 Train and val loss tracked closely the entire run — no overfitting. Loss in the 1.4–1.8 range by the end, a solid result for a from-scratch 24M model on this corpus. sample.py: watching it actually generate Wrote a script to load a checkpoint and generate text autoregressively — feed in a prompt, predict the next token, append it, repeat. Had to fix two small but important bugs along the way: torch.arange and torch.triu inside the model default to creating tensors on CPU even when everything else is on GPU — same device-mismatch class of bug as during training, fixed the same way ( device=x.device ). Loading the checkpoint failed at first because torch.compile prefixes every parameter name with _orig_mod. — stripped it with a quick dict comprehension before calling load_state_dict . First real generation, prompted with “once upon a time”: once upon a time, there was a fish named Fin. Fin was very brave and always had a big challenge to do. One day, Fin asked his friend, Sally, “Will you marry me?” Sally said, “Yes, Fin! Let’s go!” Fin and Sally had a big adventure in the ocean… Not perfect logic (fish swimming through an ocean “full of fish to eat” is a little off), but grammatically solid, consistent character names throughout, and a real narrative arc. Exactly what you’d expect from a well-trained 24M model on TinyStories. chat.py: a quick interactive loop Wrapped the generation code in a while True loop so the model loads once and takes prompts repeatedly instead of restarting for every single generation. Worth noting for anyone trying this themselves: this is a base model , not an instruction-tuned chat model — it doesn’t “answer” prompts, it just continues them as text. Say “hello” and it treats that as the opening of a story, not a greeting to respond to. That’s expected behavior at this stage, not a bug — instruction-following is a separate fine-tuning step for later. What’s next The full pipeline — prepare.py → train.py → sample.py/chat.py — is confirmed working end-to-end, from raw dataset to a model you can actually talk to (in the “continues your text” sense). Next up: scaling to the 100M-param run on a 2B-token corpus, this time blending real security-focused text (HackTricks, PayloadsAllTheThings, and others) with general web text, plus a retrieval index so the model can pull in relevant passages instead of relying purely on memorized weights.
tiny-llm: the 100M model is trained, and RAG is wired in The 100M parameter run is done. 976,562 steps on a 2B-token corpus, and chat.py now pulls retrieved passages before generating instead of relying on memorized weights. The problem, and the fix Started out wanting this model trained purely on security content (HackTricks, PayloadsAllTheThings, SecLists, GTFOBins, CheatSheetSeries, wstg). All of that combined comes to about 6.73M tokens. Compute-optimal for a 100M model is around 2B tokens, real security wikis just don’t reach that scale, and no amount of repo-hunting was going to fix that 300x gap. The solution i found was blend the 6.73M security tokens into a 2B-token corpus, topped up with FineWeb-Edu for general English coverage. The model gets real security-domain exposure plus enough general text to actually hold together grammatically, not by inventing security content that doesn’t exist, but by being upfront about what’s actually available. The training run d_model=768, n_heads=12, n_layer=12 4x the previous 24M config. Config changes were straightforward, getting a resumable 50-hour run right was the actual work: Checkpoint pruning — early on, checkpoints/ silently grew to 561GB before a torch.save call failed with a disk-full error mid-write. Fixed by keeping only the 5 most recent checkpoints on every save, removing older ones automatically. torch.compile ordering — resuming from a checkpoint failed with a state_dict key mismatch the first time, because model = torch.compile(model) was running before the resume logic loaded the weights. Compiled models get every parameter name prefixed with _orig_mod. , so loading a plain checkpoint into a compiled model (or vice versa) breaks. Fixed by moving the resume block to before the torch.compile call — load into the “bare” model first, compile after. Verified resume actually works — killed the process mid-run, restarted, confirmed it picked up exactly where it left off (same step, same loss) before trusting it for the full 50 hours unattended. Final loss landed around 3.5–3.8 (train and val tracking closely) — expected for a corpus this heterogeneous (security docs + general web text) compared to the tighter 1.4–1.8 range on TinyStories. Wiring in retrieval A 100M model isn’t going to reliably “know” security facts from 6.73M tokens seen once inside a 2B-token corpus — so instead of hoping the weights memorized it, chat.py now retrieves first: User’s prompt goes to a local SQLite FTS5 search index built over the same repos/ content used in training Top-k matching passages come back with source, heading, and BM25 relevance score Those passages get prepended to the prompt as context before the model generates Straightforward in concept, but ran into block_size=256 limits fast, retrieved passages plus the question can easily blow past what the model was trained to handle positionally. Fixed by truncating the encoded prompt to the last 256 tokens before generation, keeping the question and “Answer:” cue intact even if some of the retrieved context gets cut from the front. What actually happens now Asked “What is SQL injection?” — with retrieval wired in, the model opens with something closer to on-topic (“one of the most powerful tools available to attackers”) instead of pure noise, but drifts into plausible-sounding but fabricated details a few sentences in. That’s the honest result at this scale: retrieval gives it real information to start from, but staying faithful to that context for 100 generated tokens is past what 100M parameters can reliably do. Better than without retrieval, not a fix for the underlying scale limit.
tiny-llm: KV-cache, a public API, and shipping the whole thing Last devlog left off with the 100M model trained and RAG wired into chat.py , generating in ~50s per reply. This one covers making that fast, and getting the whole pipeline live on the internet. Understanding KV-cache Without a cache, every new token recalculates K/V for all tokens already processed, even though those values haven’t changed. The KV cache keeps them around and only computes K/V for the new token. Three real changes to model.py : CausalSelfAttention.forward now takes an optional kv_cache , concatenates new K/V onto it along the sequence dimension, and returns the updated cache. The causal mask only applies when there’s no cache. With a cache, the new token’s query attends over the entire K/V (past + new), and since generation only ever feeds one new token at a time once a cache exists, there’s no future position to accidentally see. “No mask” is the correct causal mask in that case, not an approximation. Position embeddings need to be absolute, not relative to the current call. With a cache, x is only the new tokens, so position 0 here is really past_length in the full sequence, pulled from the cached K’s sequence-length dimension. Before relying on the cache, I added a correctness check: run the whole sequence normally, then one token at a time through the cache, compare logits with torch.allclose . They matched. Wanted to confirm correctness before worrying about performance. Wiring it into generation chat.py and backend.py now do a prefill (whole prompt through the model once, building the initial cache) followed by decode steps that only pass the newest token plus the accumulated cache, instead of re-encoding a sliding window every step. Deploying: Nest, Vercel, and bugs that only show up live Backend/model : FastAPI on Hack Club Nest (Stardance’s rules don’t allow Hugging Face for hosting), running as a systemd service, bound to 127.0.0.1 behind Caddy for TLS. Frontend : static HTML/CSS/JS on Vercel, auto-deployed via GitHub Actions. Real bugs surfaced by going live: addMessage() never returned the div it created, so every successful reply crashed setting .textContent on undefined , landing in the catch block and showing an error even when the backend answered correctly. Live on the public demo before it got caught. The rate limiter keyed on a spoofable query parameter instead of the real client IP. Fixed by reading X-Forwarded-For ’s last hop, which only Caddy can set here. No protection against concurrent requests on a 2-vCPU, 1.5GB box with a documented prior OOM kill. Queuing behind a lock still pushed memory to the ceiling, so it became a 503 (fail fast) instead. A missing message field crashed inside search() . Now returns 400 first. The model’s sanity-check block ran on every import, not just direct execution. Gated behind if __name__ == "__main__": . The result /generate went from ~50s to ~4.0s, a ~12.5x speedup, same model, same box, real public HTTPS endpoint. Verified live, not assumed. What’s running now A GPT trained from scratch, retrieval-augmented over real security docs, served with KV-cache inference behind a rate-limited public API. Every piece went through a review pass that caught real, live bugs before calling it done. The model’s output quality at 100M params is the physical ceiling of this scale, not a bug to fix, that was always the outcome of training something this size from nothing. Getting the whole stack this far, correctly, is the milestone.
Fix for ship The Ship was rejected for AI readme (wrong banner and AI written AI usage declaration, but this is not smt that counts time towards devlog so it’s not going to be mentioned) which I had already re-written, so I thought what could maybe fix the ship issue, and an idea came to mind: if the readme sounds AI written then I will fully re-write the readme from scratch and only use AI to fix typos (ex: LMM to LLM or then to than), so that is what I did, I re-wrote the entire readme. The problem There was a big problem: it had been so long I didn’t remember the code well, so I had to study the entire code base because of the readme. In the process, I found a bug in chat.py , which luckily was a quick fix, just a if there. Extra If you are wondering why the devlog is 1h and 30m, I also don’t know. If I had to guess, it is that I re-wrote the readme a first time and didn’t make the devlog, so there is that extra that could also be why it got rejected for the same reason as before (AI readme).
Ships:
My aim was never been to create a useful replacement for ChatGPT; instead, I decided to understand what goes on inside a language model and so I created the transformer, the training loop, the tokenizer/data pipeline, and the retrieval layer myself. It went through two phases: 24M parameters trained on TinyStories as the starter experiment 155M parameters trained on ~2B tokens of security documentation Full-text retrieval using SQLite FTS5 A custom training pipeline that includes the use of mixed precision, checkpointing, and cosine LR scheduling, etc. The model is awful at actually answering questions ; that’s basically the whole point. While they are able to generate coherent text and the more extensive model can make use of the security documentation that has been retrieved, don’t expect anything like frontier-model level reasoning; it’s a small model designed to learn from existing models rather than to replace those which cost millions to train. From this project I learned more regarding transformers, training, data, retrieval, and the actual situation with small models than I would have if I had just used an existing framework....
|
1793537712.4286544
|
1793624112.4286544
|
|
40357
|
Untitled by @drew | Stardance
|
drew
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @drew | Stardance
|
1793537713.5847425
|
1794142513.5847425
|