|
15256
|
the way to teal(just kill) by @love | Stardance
|
love
|
2
|
60.67
|
877
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-15T00:30:44Z", "hours": 23.0, "multiplier": 18.83, "payout": 413, "blessing": "neutral", "text": "this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"ship_num": 2, "ts": "2026-06-21T13:09:47Z", "hours": 25.0, "multiplier": 18.23, "payout": 464, "blessing": "neutral", "text": "i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!", "repo": "https://github.com/IDoTweaks/the-way-to-teal-just-kill-", "demo": "https://idotweaks.itch.io/the-way-to-tealjust-kill"}]...
|
[{"post_id": 31312, "ts": "202 [{"post_id": 31312, "ts": "2026-07-19T16:42:06Z", "hours": 4.2094, "text": "DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE"}, {"post_id": 30937, "ts": "2026-07-18T22:54:39Z", "hours": 8.4639, "text": "DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs"}, {"post_id": 28633, "ts": "2026-07-15T00:29:18Z", "hours": 1.1447, "text": "mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!"}, {"post_id": 28494, "ts": "2026-07-14T19:34:05Z", "hours": 5.3678, "text": "DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality"}, {"post_id": 26518, "ts": "2026-07-11T11:21:23Z", "hours": 5.4061, "text": "DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss"}, {"post_id": 17327, "ts": "2026-06-28T02:11:05Z", "hours": 11.3172, "text": "DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff"}, {"post_id": 13096, "ts": "2026-06-21T13:00:34Z", "hours": 2.7217, "text": "DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 12239, "ts": "2026-06-19T23:54:55Z", "hours": 4.3089, "text": "DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after"}, {"post_id": 11305, "ts": "2026-06-18T14:29:13Z", "hours": 0.5894, "text": "THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D"}, {"post_id": 10797, "ts": "2026-06-17T18:26:42Z", "hours": 2.7661, "text": "DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!"}, {"post_id": 10574, "ts": "2026-06-17T11:42:16Z", "hours": 1.5328, "text": "DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)"}, {"post_id": 9462, "ts": "2026-06-15T20:27:16Z", "hours": 1.6878, "text": "DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == \"chase\" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == \"attack\": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload(\"res://Particles/enemyExplode.tscn\") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = \"idle\" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game"}, {"post_id": 9354, "ts": "2026-06-15T18:10:19Z", "hours": 2.9417, "text": "DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early"}, {"post_id": 8257, "ts": "2026-06-13T18:56:58Z", "hours": 1.4006, "text": "DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 8086, "ts": "2026-06-13T14:35:14Z", "hours": 2.2019, "text": "DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill"}, {"post_id": 7998, "ts": "2026-06-13T10:48:12Z", "hours": 1.0583, "text": "DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T"}, {"post_id": 7964, "ts": "2026-06-13T09:10:34Z", "hours": 0.4461, "text": "mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)"}, {"post_id": 7754, "ts": "2026-06-12T23:03:36Z", "hours": 0.6658, "text": "DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game"}, {"post_id": 7503, "ts": "2026-06-12T14:46:54Z", "hours": 1.8969, "text": "DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt"}, {"post_id": 7442, "ts": "2026-06-12T12:05:00Z", "hours": 0.9031, "text": "DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```"}, {"post_id": 7416, "ts": "2026-06-12T10:55:30Z", "hours": 0.325, "text": "devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands"}]...
|
Title: the way to teal(just kill) by @love | Stard Title: the way to teal(just kill) by @love | Stardance
Devlogs:
devlog - 00 today i thought about the idea of the game it will be inspired by a song i heard as a kid of a green man in a green world and he encounters a blue man “from a whole different story” the story is that you are a blue man who is sick from the inequality so you go to a mission killing all the green top % to get to a teal world from which comes the name: the way to teal(just kill) it will be a movement shooter made in godot i will try to create the assets myself but i might end up using some free models for now we will just use this bean with hands
DEVLOG - 01 – how the way to teal(just kill) calculates sliding i added sliding and right now it isnt as smooth and polished as it might be at the end but i came up with a method that works quite well and im certain i will use it until the end how it works : if you are sliding a script checks what will be your position if you will continue in your current motion without changing the y if you wont be on the ground it means you will probably be on a slope how do we know how “sloppy”(hehe just like the game) it is? we shoot a raycast starting at the player’s feet down about 5 units(you may do whatever number you like) afterwards we check the position in which the raycast intersected with the floor and use it to calculate the force/boost we will give the player using that i can calculate everything i need to slide the player note :if you end up using it check my github because in the code you will need to adjust some things like more downward force in order for the player to not fly anyway here is a clip of it in action the game is in a newborn stage so no judging! –CODE TIME– (I NEVER USE COMMENTS BE GRATEFUL) #calculate the position in the future var horizontalVel = Vector3(velocity.x,0,velocity.z) var future = feet.global_position + horizontalVel #raycast prep var spaceState = get_world_3d().direct_space_state #starting above the future pos in case of upward slopes var rayStart = future + Vector3(0,1,0) var rayEnd = future + Vector3(0,-5,0) #setUp rayCast var rayQuery = PhysicsRayQueryParameters3D.create(rayStart,rayEnd) #so we dont hit ourselves xd rayQuery.exclude = [self.get_rid()] #now lets shoot this bad boyyy var intersect = spaceState.intersect_ray(rayQuery) #results time!!!! if intersect: #we want to return the distance from now to the future return feet.global_position.y - intersect.position.y else: #if it hits nothing we are fucking flying lets return so fucking much return 0```
DEVLOG - 02 (still day one of the project i just do a lot:) IF YOU DONT KNOW WHAT THE GAME IS ABOUT GO TO DEVLOG - 00 added teal footsteps and teal bullet holes to emphasize the mix of blue and green it was implemented using decals which it is the first time i use them so they arent the greatest as you may have noticed i also added a gun with a simple animation+particles and a raycast currently it has nothing to shoot at but i might fix it soon… so the basics are done but i do need to add movement like double jump because after all it is a movement shooter and figure out how i can copy ultrakill’s movement so my game doesnt feel so “slow” next devlog will probably be today againT_T i just cant stop working on itttt
DEVLOG - 03 added enemies that turn teal with time read devlog 00 to understand the game:) for this game i didnt want a boring health bar what i wanted was a visual indicator and well the green enemies are the health bar now you can see easily how much health they have as you can see in the video its a simple use of shaders and its my first time! I REALLY HATE THOSE but it works also look at those particles(i<3particles) –please like if you liked it and comment suggestions it really makes me feel better and improve the game
mini devlog - 03.5 i wanted some art to the game so i made this banner it isnt proffesional at all and took me a damn hour for something thats kinda bad but this is what i cam up with i hope you like it (if you are interested in the project go check out my profile:)
DEVLOG - 04 HUGE MILESTONE movement is now finished with all new momentum logic and added dashing wait… why wont you just see for your selves? try out the movement in the link here and tell me if you like it:) https://idotweaks.itch.io/the-way-to-tealjust-kill note: i added downloadable versions and a web version the game is generally for windows/linux(i am on linux so i kinda have to XD) so i will not be fixing any only web only bugs anyways i have to put an image here so watch my first attempt of a crosshairT_T
DEVLOG - 05 (it should’ve taken like 30 minutes wth) i added enemies that chase you and animations to your movements the animations were the easy part… but can someone tell me why godot uses the exact same shader to all of my models? so it took me like 50 god damn minutes to realise i need to just duplicate it and then i had a typo and i thought duplicating it doesnt work because of that so i gave up and sent it to chatgpt AND THEN I WAS RIGHT I DO NEED TO DUPLICATE IT anyways here is a clip of the game now and you have to like it ALSO SPECIAL THANKS TO CONNOR - thank him he is the reason the downloads now work in itch.io at least thats what i hope because if they dont idfk what to do itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 06 added a main menu! now as you can see THERE IS A MAIN MENU and it doesnt work very good on linux but my eye hurts so thats a problem for tommorow and let me know how it is on windows itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG - 07 added vertical dash wall jumping and started with the tutorial level today i wanted to design the first level so i looked up what good level builders there are and saw trenchbroom and after like an hour of trying to make it work on fedora i gave up and tried something called cyclops but it doesnt support my current godot version so i spent MORE TIME diving into its code because there was only 1 small error(or so i thought) which i managed to fix but then every like 3 minutes of using it it just crashed so i guess im sticking with normal godot AND it took me like 20 versions and about 5 commits that i thought i fixed it to get to a working version of the 4 line code that lets me dash vertically but setting it up based on camera lets you dash up and gain insane momentum instantly so i tried a system of my own which calculated you vertical velocity using your horizontal one and tried a bunch of formulas and ended up with this fine version so the wall jumping was very easy to do because i just reflect the current movement and add a boost the hard part was that every time before hitting the wall i would already switch in my keyboard to the other other direction so to deal with that i “predicted the future” like i did with the slopes so that the movement feels smoother but to deal with the problem of the keyboard switching i also checked for the opposite directions(which is bassicly copy paste with minuses)so here is the code for that: if is_on_floor(): canWallJump = false return var veloc = Vector3(velocity.x,velocity.y,velocity.z) #var future = self.global_position + veloc for i in get_slide_collision_count(): var collision = get_slide_collision(i) if collision.get_normal().y < .3: wallNormal = collision.get_normal() canWallJump = true return if veloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + veloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return var altVeloc = Vector3(-velocity.x,velocity.y,velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return altVeloc = Vector3(velocity.x,velocity.y,-velocity.z) if altVeloc.length() > 0.5: var spaceState = get_world_3d().direct_space_state var ray = PhysicsRayQueryParameters3D.create(global_position,global_position + altVeloc.normalized() * 1.2) ray.exclude = [self.get_rid()] var hit = spaceState.intersect_ray(ray) if hit and hit.normal.y < .3: wallNormal = hit.normal canWallJump = true return canWallJump = false``` anyway here is a clip of the tutorial level now(compressed cause it was somehow 155mb): **NOTE**: it will be updated on itch.io after i finish making this tutorial level im just a little tired today and couldnt work on the project yesterday so i uploaded this devlog early
DEVLOG - 08 added an interesting navigation optimization script i encountered some lag even with 4 enemies so sadly i had to optimize it on the bright side i saw yesterday a video about exactly that and omfg it saved me and explains the general idea of what i do its just that i do it worse and in a different way video: https://www.youtube.com/watch?v=BPNr_txi6TU&t=813s time 33(already in link) how it works? ok so its not the MOST OPTIMAL but it is good i mean i can every time an enemy die to resort it blah blah blah and use the modulo but this works good enough even though i spent half an hour fixing a bug that doesnt exist(turns out if you select a navigation region and bake navigation mesh it does that to all regions and not just the one you selected) but for some reason i did have to use a raycast down the enemy’s feet for it to work so they wont fall probably because of friction so anyways here is the code: extends Node3D var tickAssigned = [] var tickCount = [] var currentTick = 0; var tickTimer = 0.0 const TICK_RATE = 0.025 func _ready() -> void: tickAssigned.resize(navObjects.size()) tickAssigned.fill(0) tickCount.resize(20); tickCount.fill(0) var length = navObjects.size() for i in tickAssigned.size(): tickAssigned[i] = -1 var num = 20.0 /length var current = 0.0 for i in length: if current >= 20: current -= 20 tickAssigned[i] = int(current) tickCount[int(current)]+=1 current += num``` # Called every frame. 'delta' is the elapsed time since the previous frame. ```func _process(delta: float) -> void: tickTimer +=delta if tickTimer < TICK_RATE: return tickTimer = 0.0 var tickDelta = TICK_RATE var count = 0 for entity in navObjects: if entity != null: if tickAssigned[count] == currentTick: var target = entity.target if target != null: var navAgent = entity.navAgent var mode = entity.mode var gotShot = entity.gotShot var SPEED = entity.SPEED var accelaration = entity.accelaration var velocity = entity.velocity if mode == "chase" or gotShot: navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true elif mode == "attack": navAgent.target_position = Vector3(target.global_position.x,target.global_position.y,target.global_position.z) var dir = (navAgent.get_next_path_position() - entity.global_position).normalized() print(entity.name, navAgent.get_next_path_position()) entity.velocity = velocity.lerp(dir * SPEED, tickDelta * accelaration) entity.look_at(Vector3(target.global_position.x,entity.global_position.y,target.global_position.z),Vector3.UP,true) entity.shouldMove = true count+=1 currentTick +=1 if currentTick >= 20: currentTick = 0 #@onready var body =$body #@onready var explosionParticles = preload("res://Particles/enemyExplode.tscn") #var particleInstance #@export var navAgent : NavigationAgent3D #@export var damage = 10 #@export var accelaration = 10 #var target #var mode : String = "idle" #var gotShot = false``` and the enemy code is too long so i cant put it here also here is a clip of the current state of the game
DEVLOG - 09 i added a shotgun! the shotgun has a large cooldown + it applies force on you! + itch.io update IF YOU DONT CARE ABOUT THE TECHNICAL STUFF WATCH THE VIDEO DOWN HERE TO JUST SEE THE COOL SHOTGUN it was much easier to implement because all i did was add a bunch of raycasts and randomize them with this simple code: func randomizeRays(): var i : int = 0 for ray in children: if ray is RayCast3D: ray.target_position.x = orgPos[i] + randf_range(-spread,spread) i+=1 ray.target_position.y = orgPos[i] + randf_range(-spread,spread) i+=1 the actual hard part was getting both guns to work with eachother but i managed to do that the force function was also interesting because i use a chartacterbody3d in godot i have to make this stuff myself with basically only velocity so the code is pretty easy to understand i dont think i need to explain much func _applyForce(point :Vector3,force , maxRange:float = 10): var dir = global_position - point var dist = dir.length() if dist > maxRange: return dir = dir.normalized() var fallOff = clamp(1 - (dist/ maxRange),0,1) velocity += dir * force * fallOff knockbackTimer = KNOCKBACK_LOCK_TIME also the game is now updated and free on itch.io! link: https://idotweaks.itch.io/the-way-to-tealjust-kill (please download it its much better than the web version because i cant solve some web specific bugs)
DEVLOG - 10 this is a large milestone! COMPETITION ANNOUNCEMENT AT THE END i updated the map textures to a retro-ish style and updated the bullet holes and steps to look much better too! i added a timer and score with a grading system that allows for better speedrunning! i added a custom finish level orb with a custom shader that makes it look super cool look at this gameplay it looks like a real game! now the competition: so the competition will start in the next devlog because i plan to add a restart button to make it easier to speedrun and more now THE WINNER AND PRIZE: the winner will be the person that will get the highest score in 24 hours after the devlog is posted or the first person to get a perfect score of 20k(which is very hard gl) and the prize will be (imagine a drum roll) yeah you will just be on a wall or something its not that huge i will also write about you in the next devlog if thats important to you CLARIFICATIONS BECAUSE CLAUDE SAID THIS DEVLOG IS SHIT: 1.the competition will not be in the current build and will be submitted directly to me through slack/discord with the name you have in stardance 2.the prize is shit idk why claude treats it like i should try to deceive you into thinking its good, its bad i promise 3.if someone sends me they got a 20k score it will end idk whats confusing about it anyway only like 3 people will submit probably itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill (textures in web version are bugged please download!) if you have anything to say about this devlog you may comment it and i will ignore it(unless its a real question) anyway look at this clippp its happening now look at next devlog!
THE TOURNAMENT IS STARTING NOW! as you can see in the last devlog the tournament said in it is starting right now! explanation this is a speedrunning competition in my 1 level demo game(very early in development) in that game you cant even die yet so go wild rules the clips must be unedited(unless you add like an edit of lebron and then its fine) submissions end when this post reaches 24 hours/2:30 pm utc and will be sent directly to me on slack/discord(which you can find in my bio) exploits are allowed! runs can only be in the current build in itch.io -runs that are on linux/windows must not use the web version because its super bad changes this version press r to restart + finished the end gui + fixed some score calculation bugs controls: wasd + space - normal movement ngl ctrl - slide lmb - shoot(with shotgun you get knockback btw) shift - dash 1/2 - switch weapons r - restart winner the winner will be the one with highest score by the end of the 24 hours/2:30 pm utc or the first person to reach a perfect score and he will win being inside the game + in the next devlog itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill now for the general stuff my discord: swiftfishi3 my slack: loveTheGodotDeveloper (if there will be any edits i will put them here) for now take a look at my fastest run(you have to wait a bit and its mid development)- runs can only be in the current build in itch.io like and repost so more people see it:D
DEVLOG - 11 (THE GAME IS ALMOST COMPLETE) + WINNER ANNOUNCEMENT so in the competition the only person that submitted a score was in the comments and late but he is now the winner:) @Connor you won! i will add you to the game soon major things i added: a ghost of your best run that plays back (if anyone is wondering i spent like an hour making it record every input with a timestamp and the WAY easier approach i ended up using is just saving the position + rotation + weapon used every frame (if animations were important to me i would have added them its not that hard) ground slam that does damage to enemies a jump orb to make levels feel less slow minor things i added: a health bar fixed enemies to know attack with a cooldown added a death screen now the enemies have black hands because animating csg shapes is expensive the state of the game now the game now is in what i feel full technicality ready the only things needed are: more levels, bosses, more enemies, more obstacles and interesting things in general and maybe a 3rd gun but other than that its basically ready so dont forget to playtest and lmk DOWNLOAD itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill side note:D also im the developer of the game so its not that hard for me to get s+ and im sure you can too so just spam ground slam its op(expect a patch soon🫣🫣🫣)so here is a clip of me getting s+ plus you can see the ghost after
DEVLOG - 12 shipping soon notes if a reviewer sees this: i got a report about some web problems which did not happen to me, if you see the textures as too dark tho try downloading it i was not able to test the mac version as well changes i made a readme for the github added a text of damage done above enemies added a mage type enemy that shoots projectiles SHIPPING after this im shipping this so make sure to look at my github + itch.io github: https://github.com/IDoTweaks/the-way-to-teal-just-kill- itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill
DEVLOG 13 - UPDATE 1.1! this is a large update 1.1 basically doubles the size of the game and makes it actually feel good to play heres everything: enemies/combat added 4 new enemy types: the charger (rushes you and dashes), the drone (flies around and shoots), the exploder (runs at you and goes boom), and the sniper (snipes. very creative ik) added a sniper weapon for the player too shotgun and sniper now play a little reload animation between shots the new style system grading is no longer based on time insted its based on a style meter that is affected by cool things like no scoping in the air your final grade now mixes score + style + your final health ranking up the meter pops and flashes like super cool game feel hit-stop on kills(like a tiny freeze frame) FOV widens when you’re moving fast and stuff like that low health throws up a red vignette and getting hit shows an arrow pointing at whoever hit you combo kills rise in pitch the longer chain camera rolls when you strafe and dips when you land levels redesigned level 1 from scratch added levels 2 through 6 added a proper boss fight at the end added a tutorial UI + quality of life completely new UI that looks 10x better weapon indicator in the side added sound effects and music pause menu, switching weapons with the scroll wheel, on screen enemy counter settings menu for sensitivity, fov, volume, resolution, etc progress (and your best-run ghosts) now save locally web version web version is now fixed BUT its still a desktop game so its worse download github release: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill yeah thats it now go kill stuff
DEVLOG 14 - the project is super star! boss update the current boss is very lazy in design so i decided to change it completely! with a snake boss, what i did is create a self generating floor and a snake with custom pathfinding boring technical stuff the floor has a function that does holes in it and makes sure the snake cannot get soft locked(since it cant pass through its own body) then the snake turns its positon + the player’s position into a tile in the map and using breadth first search from the head’s tile to the player’s tile it finds the next tile it needs to travel to this sounds so simple why did it take 5 hours? the reason is that this mf floor does not like generating how i want it to and i am very bad at algorithms so i had to try again and again and again and then i had to do the same thing with the snake because i havnt touched bfs in like 1.5 years THANKS FOR THE SUPER STAR as you can see while i was on vacation this project got a super star! i am very grateful for it! when will it be in the game? as you can see in the video it just follows the player right now, it has no attacks or something like it so i hope i can get it done by the end of this week(its saturday now so by next saturday) and it isnt wired into the game yet so its still just the old boss
DEVLOG 15 - boss redesign boss update the boss now attacks with a couple of new attacks! you can see them in the video AND a new paralysis system da cool af part so the boss now takes you to his office where he will offer you a deal: for 20% of your health you can get your paralysis level down! ui update so it looks better now, thats it XD UPDATE! so it is now updated in both github and itch.io but its very bad in the web versionT_T please just download itch.io: https://idotweaks.itch.io/the-way-to-tealjust-kill github: https://github.com/IDoTweaks/the-way-to-teal-just-kill-/releases/tag/NEWEST video btw the video was compressed and then converted so its low quality
mini DEVLOG 16 - da final straw important if you rate it please download it, the web version is much much worse new levels added levels 7-9 unfortunate losses: sadly the styling system was very bad and i couldnt make it work so i just took it out something i had to add you could cheese everything with the dashes so im sorry… i added stamina da end so yeah i wont work on this project anymore prob but i am starting my own asm docs! be sure to stay updated!
DEVLOG 17 - i cant stop working on this last devlog i said i am done with the game but after those reviews i just cant stop key insights from the reviews so the main complains are that the game isnt visually appealing in some devices it ran poorly some mechanics arent clear/ need better tutorial the sfx are annoying (also there were some balancing issues and little bugs) i still got a little less than 19 per hour meaning people really did like it and it needs little changes so what did i change? i changed the tutorial to MAKE you do each mechanic and added a ghost that shows you how to do it new sfx i changed all the art style to be cartoonist i buffed the shotgun i did so much more but its so little that i cant point to each one so lets just say qol changes planning next i have already made 2 mini bosses and currently am working on some more enemy types, i will change the current levels to be the story mode with added story and dialogue and add a completly new mode which i will talk about in later devlogs
DEVLOG 18 - ig we got a lot of art now new things in the game so pretty much all i did was new ui, make the game fit into a cartoon art style and some cover art for it new itch.io page the itch.io page sucked so i made it again and its so much better now check it out so as always the downloadable version is much better but there is still web support try it out: https://idotweaks.itch.io/the-way-to-tealjust-kill AND I LEFT SOME OF THE ART HERE SO YOU CAN SEE
Ships:
i made a speedrunning game inspired by a song, i will add more bosses and levels but now its in a state i very much like because this is my first game that i actually like i focused on the game feel way more than the looks and it shows its so fun i made a ghost system without any tutorial something i could never dream of this project let me see that i can build things on my own also i am aiming for a 3d printer so i need like 3x the hours so expect updates!
this is a movement shooter made in godot 4.6 about a blue man in a green world, i really poured my soul into it so i hope you like it:)...
|
1793000990.3584545
|
1793087390.3584545
|
|
15290
|
Undertale OS by @ThaoVi | Stardance
|
ThaoVi
|
2
|
29.0
|
190
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T13:02:50Z", "hours": 15.0, "multiplier": 12.46, "payout": 190, "blessing": "neutral", "text": "WebOS I made an Undertale themed WebOs presenting me, with some other apps such as countdowns! This is the very first Stardance project i did, and also very first html project overall (including webos1) Features A top-bar with a live clock and a healthbar Draggable windows Closable windows Applications TrueNotes (personal) A personnal app where I put thoughts about true crime stories I enjoyed :D The design is centered around Undertale’s field of flowers, with each footstep being a story; I wanted to make it more original than the side bar I had in WebOS 1. To do app A very basic to do app. Countdown app A simple countdown app where you can set countdowns and a new window appears for each countdown. They are editable and deleteable :D You can also change the precision shown on each windows (in case seeing seconds stresses you out) Skeletale (personal) An undertale - anatomy based “autobiography” of me, it’s part of my WebOs 1 and I haven’t really updated it since. Future plans Undertale music player An intro page (WIP) where you can chose your character and background image. Make the notes apps more interactive by making the user add their own notes Undertale references The close button is a heart and it breaks when you hover on it to close the window! The field in TrueNotes are the yellow flowers from undertale. The health bar is also a reference from undertale. The fonts! They are from https://github.com/hujgup/Undertale-CSS", "repo": "https://github.com/TVDVT/webOS", "demo": "https://tvdvt.github.io/webOS/"}, {"ship_num": 2, "ts": "2026-06-27T15:46:19Z", "hours": 14.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I just finished my first WebOS. It has a top bar, welcome window and two apps. All the windows are draggable and closable, and both of the apps are representative of me :D One is about the true crimes I enjoy and the other one is a presentation of me through a skeleton. I had zero experience in website coding until I started the project, I am very proud of the result!", "repo": "https://github.com/TVDVT/webOS", "demo": "https://tvdvt.github.io/webOS/"}]...
|
[{"post_id": 70359, "ts": "202 [{"post_id": 70359, "ts": "2026-09-19T01:17:40Z", "hours": 4.2636, "text": "Pre-ship adjustments I’m shipping it, finally! I tried to make the user experience better by making the design more coherent (grayscale), although I am planning to add a lot more undertale references. I also changed my footprints color to contrast more with the yellow background. The countdown looks a little better, i removed some overlapping gaps that made everything look awkward but it’s better now!"}, {"post_id": 60796, "ts": "2026-09-03T12:03:37Z", "hours": 3.7294, "text": "i COMPLETELY changed the design of my OS to be full on undertale I found an amazing undertale css pack by chance and loved it so much so i went from wow blue aesthetic to undertale yay. I still have some customization to do I changed the close button to a heart and when you hover on it it becomes a broken heart im really proud of that I’m also almost done with the to do app the tasks are just not overflowing the way I want them to new ideas: music player to play undertale songs map to make wallpaper change based on map location have a preload screen that makes you choose your location and choose character"}, {"post_id": 57001, "ts": "2026-08-29T02:14:47Z", "hours": 2.5986, "text": "countdown working! I made it look a little better but I’m not completely satisfied yet. You can now edit and delete countdowns, change precision and some other stuff but now I want to work on making windows pinnable :^ I also want make a todo list app, I’m really thinking of making this OS my study compagnion haha but idk if its too basic for this mission. But anyways ill do it for myself not the stardust hee hee haw haw"}, {"post_id": 48918, "ts": "2026-08-17T14:13:01Z", "hours": 2.3319, "text": "Countdown app I added a countdown app/widget for some motivation so you can have something to look forward to! The CSS is definitely lacking so I will work on it once im done with JS. It was a bit hard to convert every input and change precision but I figured it out thanks to W3S. I still need to: Show a list of the cooldowns in the main window and make them editable and deleteable Make the new window closeable & pinnable Make the time input optionnal Make an icon for the app Find a way to save changes? (maybe)"}, {"post_id": 48335, "ts": "2026-08-16T17:26:05Z", "hours": 0.7083, "text": "First feature done My notes app is now cooler: Footprints instead of a text based sidebar Links open in new tab Upon first opening of the app, only footprints show on a grassy field Animations on footprints and sidebar after clicking the first footprint Things to add after finishing other features: More notes content A way to go back to the grassy field To work on next More animations Gamify Skeletale app"}, {"post_id": 47085, "ts": "2026-08-14T18:36:15Z", "hours": 1.0469, "text": "Devlog My side bar is now a menu? I made it so that content will only show after clicking on the footsteps (not yet but that’s the goal). For that, I need to write a new function in Java Script and add a blue grassy background to match with the cloudy background. My animations are now smoother as I added transitions and larger margins so that the icons getting bigger don’t impede on the other ones. I also added hover text so that we can know which story is selected when hovering on each footstep."}, {"post_id": 43615, "ts": "2026-08-08T23:50:59Z", "hours": 0.5525, "text": "WebOS 2 It’s been a month since I didn’t work on this so I forgot how to code a little. Looking at my old code is helping me remember the coding though. First new feature (Working on this) As my first new feature, I am revamping my True Notes app side bar . I want to change to to footsteps I can click on. As of now, I only imported the image and made the footprints appear for each entry. I have yet to make them as a path, center them and just have a better general layout. Second new feature I want to have hover animations. Eg if I hover on the footprints they get bigger, hovering on an app would change the top bar of the window header, etc. Third feature I haven’t really thought about it yet, either I’ll make my Skeletale app more interactive by changing back and next buttons to directly clicking on the skeleton either I will make a new app"}, {"post_id": 16967, "ts": "2026-06-27T15:30:36Z", "hours": 1.0411, "text": "Done!"}, {"post_id": 16632, "ts": "2026-06-27T01:42:50Z", "hours": 3.1203, "text": "Almost done with my second app My second app is an anatomical map of myself inspired by Undertale (not really, it’s just a pixelized skeleton). I just really like anatomy in general so I thought this would represent me well. I assigned a part of myself to many bones, the text is just placeholder right now, I will develop on it later. -I added back and next buttons for navigation to make it simpler than a side bar, It also takes less space I finished my first app a while ago but I do want to change the layout in WebOS 2 (have some art & a better side bar) Right now my goals for tomorrow are to: Put the back&next buttons inside the window Hide the skeleton image on the first tab of the app Zoom on each bone for each body part or have a heart cursor that goes in each body part like in Undertale Finish the content"}, {"post_id": 14671, "ts": "2026-06-23T21:10:04Z", "hours": 2.6467, "text": "I finished part 4, it took me a while to get it to work so I will focus on the aesthetic after i finish part 5. My notes app will show my thoughts about some true crime stories. My next app is going to be Undertale related I hope."}, {"post_id": 11551, "ts": "2026-06-18T20:54:43Z", "hours": 2.9986, "text": "Added a Notes App, but I’m not sure what its exact purpose will be"}, {"post_id": 10908, "ts": "2026-06-17T21:40:50Z", "hours": 1.8064, "text": "I’m done with part 3! Now I have: A pretty header A pretty background A CSS file with my window and window header designs that I will be able to use for my next windows. Draggable windows that can close (but will completely disappear, so I have to make a “minimize” button to be able to open it later) An open button that’s not very useful and doesn’t really work."}, {"post_id": 9556, "ts": "2026-06-15T22:40:55Z", "hours": 1.3453, "text": "Working on part 3"}, {"post_id": 6827, "ts": "2026-06-11T13:35:07Z", "hours": 0.6017, "text": "I just learned about dividers! The welcome still looks a bit awkward but it’s gonna be fine."}, {"post_id": 6805, "ts": "2026-06-11T12:41:43Z", "hours": 0.3239, "text": "First 15 minutes"}]...
|
Title: Undertale OS by @ThaoVi | Stardance
Devlog Title: Undertale OS by @ThaoVi | Stardance
Devlogs:
First 15 minutes
I just learned about dividers! The welcome still looks a bit awkward but it’s gonna be fine.
Working on part 3
I’m done with part 3! Now I have: A pretty header A pretty background A CSS file with my window and window header designs that I will be able to use for my next windows. Draggable windows that can close (but will completely disappear, so I have to make a “minimize” button to be able to open it later) An open button that’s not very useful and doesn’t really work.
Added a Notes App, but I’m not sure what its exact purpose will be
I finished part 4, it took me a while to get it to work so I will focus on the aesthetic after i finish part 5. My notes app will show my thoughts about some true crime stories. My next app is going to be Undertale related I hope.
Almost done with my second app My second app is an anatomical map of myself inspired by Undertale (not really, it’s just a pixelized skeleton). I just really like anatomy in general so I thought this would represent me well. I assigned a part of myself to many bones, the text is just placeholder right now, I will develop on it later. -I added back and next buttons for navigation to make it simpler than a side bar, It also takes less space I finished my first app a while ago but I do want to change the layout in WebOS 2 (have some art & a better side bar) Right now my goals for tomorrow are to: Put the back&next buttons inside the window Hide the skeleton image on the first tab of the app Zoom on each bone for each body part or have a heart cursor that goes in each body part like in Undertale Finish the content
Done!
WebOS 2 It’s been a month since I didn’t work on this so I forgot how to code a little. Looking at my old code is helping me remember the coding though. First new feature (Working on this) As my first new feature, I am revamping my True Notes app side bar . I want to change to to footsteps I can click on. As of now, I only imported the image and made the footprints appear for each entry. I have yet to make them as a path, center them and just have a better general layout. Second new feature I want to have hover animations. Eg if I hover on the footprints they get bigger, hovering on an app would change the top bar of the window header, etc. Third feature I haven’t really thought about it yet, either I’ll make my Skeletale app more interactive by changing back and next buttons to directly clicking on the skeleton either I will make a new app
Devlog My side bar is now a menu? I made it so that content will only show after clicking on the footsteps (not yet but that’s the goal). For that, I need to write a new function in Java Script and add a blue grassy background to match with the cloudy background. My animations are now smoother as I added transitions and larger margins so that the icons getting bigger don’t impede on the other ones. I also added hover text so that we can know which story is selected when hovering on each footstep.
First feature done My notes app is now cooler: Footprints instead of a text based sidebar Links open in new tab Upon first opening of the app, only footprints show on a grassy field Animations on footprints and sidebar after clicking the first footprint Things to add after finishing other features: More notes content A way to go back to the grassy field To work on next More animations Gamify Skeletale app
Countdown app I added a countdown app/widget for some motivation so you can have something to look forward to! The CSS is definitely lacking so I will work on it once im done with JS. It was a bit hard to convert every input and change precision but I figured it out thanks to W3S. I still need to: Show a list of the cooldowns in the main window and make them editable and deleteable Make the new window closeable & pinnable Make the time input optionnal Make an icon for the app Find a way to save changes? (maybe)
countdown working! I made it look a little better but I’m not completely satisfied yet. You can now edit and delete countdowns, change precision and some other stuff but now I want to work on making windows pinnable :^ I also want make a todo list app, I’m really thinking of making this OS my study compagnion haha but idk if its too basic for this mission. But anyways ill do it for myself not the stardust hee hee haw haw
i COMPLETELY changed the design of my OS to be full on undertale I found an amazing undertale css pack by chance and loved it so much so i went from wow blue aesthetic to undertale yay. I still have some customization to do I changed the close button to a heart and when you hover on it it becomes a broken heart im really proud of that I’m also almost done with the to do app the tasks are just not overflowing the way I want them to new ideas: music player to play undertale songs map to make wallpaper change based on map location have a preload screen that makes you choose your location and choose character
Pre-ship adjustments I’m shipping it, finally! I tried to make the user experience better by making the design more coherent (grayscale), although I am planning to add a lot more undertale references. I also changed my footprints color to contrast more with the yellow background. The countdown looks a little better, i removed some overlapping gaps that made everything look awkward but it’s better now!
Ships:
I just finished my first WebOS. It has a top bar, welcome window and two apps. All the windows are draggable and closable, and both of the apps are representative of me :D One is about the true crimes I enjoy and the other one is a presentation of me through a skeleton. I had zero experience in website coding until I started the project, I am very proud of the result!
WebOS I made an Undertale themed WebOs presenting me, with some other apps such as countdowns! This is the very first Stardance project i did, and also very first html project overall (including webos1) Features A top-bar with a live clock and a healthbar Draggable windows Closable windows Applications TrueNotes (personal) A personnal app where I put thoughts about true crime stories I enjoyed :D The design is centered around Undertale’s field of flowers, with each footstep being a story; I wanted to make it more original than the side bar I had in WebOS 1. To do app A very basic to do app. Countdown app A simple countdown app where you can set countdowns and a new window appears for each countdown. They are editable and deleteable :D You can also change the precision shown on each windows (in case seeing seconds stresses you out) Skeletale (personal) An undertale - anatomy based “autobiography” of me, it’s part of my WebOs 1 and I haven’t really updated it since. Future plans Undertale music player An intro page (WIP) where you can chose your character and background image. Make the notes apps more interactive by making the user add their own notes Undertale references The close button is a heart and it breaks when you hover on it to close the window! The field in TrueNotes are the yellow flowers from undertale. The health bar is also a reference from undertale. The fonts! They are from https://github.com/hujgup/Undertale-CSS...
|
1793105748.8367512
|
1793192148.8367512
|
|
15446
|
zap by @bernardq | Stardance
|
bernardq
|
2
|
46.68
|
338
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-16T19:23:17Z", "hours": 24.0, "multiplier": 7.58, "payout": 182, "blessing": "neutral", "text": "So, I built a package manager in Python. The biggest challenge I experienced was organizing my code, debugging, and building complex features. I’m proud that it works, and I’m proud of all the time I spent coding it. My project documentation is on GitHub, which is the best place I have to write and maintain it. Zap can install, remove, and download packages without installing them, as well as update packages and perform other features. Try out my project, and if you want to add your projects to the Zap repository, contact me on Slack or GitHub. Thanks for Reading!", "repo": "https://github.com/Bkner3/zap", "demo": "https://github.com/Bkner3/zap/releases"}, {"ship_num": 2, "ts": "2026-07-11T21:53:33Z", "hours": 16.0, "multiplier": 9.85, "payout": 156, "blessing": "neutral", "text": "Hello everyone! My project is a package manager built entirely in Python. I challenged myself to create something simple for everyone—both for the people creating the repository and for those who will use it. I am really proud of myself for dedicating so much effort to this project. ⚠️ Project Status & Requirements Please note that this project is currently in Beta and some commands might not be fully functional or ready yet. System Requirements: Python 3.0 or higher is required. To run the project in script mode, you must install the following dependencies: requests, colorama, and tqdm. Current Limitations: The tools inside repo-tools (used for creating repositories) are currently disabled while they undergo updates. In the meantime, if you want to create a repository, you can use the example index provided in the GitHub README and simply replace the package and file names with your own. If you have any questions or run into issues, please feel free to open an issue or ask here on GitHub. I am more than happy to help!", "repo": "https://github.com/Bkner3/zap", "demo": "https://github.com/Bkner3/zap/releases"}]...
|
[{"post_id": 77160, "ts": "202 [{"post_id": 77160, "ts": "2026-10-05T20:41:48Z", "hours": 1.8519, "text": "Devlog #32 I’m tired of working on this, I try one thing and it doesn’t work I try another even worse but I’m working to launch the zap for linux I just don’t have test packages or packages to release if any wants to launch their package on the zap let me know."}, {"post_id": 76875, "ts": "2026-10-04T21:59:26Z", "hours": 1.7056, "text": "Devlog #31 After some time, I finally had time to work on ZAP again. Today I started fixing some bugs in ZAP, tested the installation script, and added the installation instructions to the README on the main page. ZAP is still in beta, and I know some things don’t work yet, but I want to sleep. I tested the installer on Debian-based systems, but I haven’t tested it on Arch, Alpine, or other obscure distros yet. My linux test PC specs are shown above, and the error is also shown above."}, {"post_id": 74178, "ts": "2026-09-26T21:04:57Z", "hours": 1.0075, "text": "#Devlog #30 Updating the zap web page for the new version."}, {"post_id": 73050, "ts": "2026-09-24T08:47:09Z", "hours": 0.6928, "text": "Devlog #29 Today I finally finished the Linux installation script!"}, {"post_id": 72864, "ts": "2026-09-23T21:50:36Z", "hours": 0.6369, "text": "Devlog #28 So today, I started writing the installation script for Linux. Sorry if I don’t give many updates school just started today!"}, {"post_id": 70055, "ts": "2026-09-18T11:18:17Z", "hours": 0.3489, "text": "Devlog #27 Today, I run zap on Linux and lost my sanity with the complexity of using Linux on an old PC and all the configuration. The hello test package will be available this afternoon. Thanks for reading!"}, {"post_id": 69672, "ts": "2026-09-17T15:29:16Z", "hours": 0.4408, "text": "Devlog #26 Today, I changed the code so that ZAP can have a Linux version. I spent an hour trying to install pip on my Linux PC, but I couldn’t get it to work. I switched to another PC, and now I’m going to test it."}, {"post_id": 69197, "ts": "2026-09-16T15:56:48Z", "hours": 3.8558, "text": "Devlog #25 Making small changes to the code in the past days to launch the version 0.7.0-beta."}, {"post_id": 66646, "ts": "2026-09-12T14:35:05Z", "hours": 0.7144, "text": "Devlog #24 Today, I made some small changes to the project. The next thing I’m going to add is a system to check whether the local index is outdated and update it if necessary."}, {"post_id": 66005, "ts": "2026-09-11T15:00:04Z", "hours": 0.9475, "text": "Devlog #23 Today, I correct a error in the launcher system code and I tried to create a 3 packages to show who it works but they don’t work."}, {"post_id": 65639, "ts": "2026-09-10T22:10:37Z", "hours": 3.4558, "text": "Devlog #22 Today, yesterday I added a function that checks if all packages / dependencies are in the list to be downloaded, also adding the author variable to the database, and some minor changes. Thanks for reading! 😊"}, {"post_id": 64327, "ts": "2026-09-08T16:48:39Z", "hours": 1.4808, "text": "Devlog #21 Updating the README so I can release version 0.7 tomorrow!"}, {"post_id": 63686, "ts": "2026-09-07T16:52:05Z", "hours": 1.5267, "text": "Devlog #20 Today, with the help of ChatGPT, I created the dependency system. The ZAP can now resolve package dependencies and find the correct versions required by each package. It can also handle multiple versions of the same dependency and create launchers with the required dependencies added to the PATH. This means different packages can use different versions of the same dependency without conflicts."}, {"post_id": 61833, "ts": "2026-09-04T22:52:52Z", "hours": 0.6039, "text": "Devlog #19 Today, with the help of ChatGPT, I created a system to check if a dependency’s version is compatible with the program. For example, if a dependency is specified as dependency@>=1.0.0 , the system will analyze the required version and check whether the available version is compatible."}, {"post_id": 58496, "ts": "2026-08-30T22:28:18Z", "hours": 1.8736, "text": "Devlog #18 Today, I added a new parameter to the database for dependencies, and I started working on the dependency system. I don’t know if I mentioned it in the previous devlog, but I also created the confirmation button. Thanks for reading! And if you want to launch your project on Zap, please contact me. Thanks for reading!"}, {"post_id": 54778, "ts": "2026-08-25T21:48:08Z", "hours": 1.4942, "text": "Devlog #17 Hello! Today I finally started working on the scary part of a package manager: dependencies ⛈️⛈️. Warning Today I only worked on the system that grabs the dependencies. The way dependencies will work is through the .cmd launchers stored in: C:/Users/Your_User/AppData/Local/Zap/sl Each package will have its own launcher, and that launcher will be responsible for setting up the environment required by that package. For example, imagine your program uses lib_a version 1.0 , while another program uses lib_a version 2.0 . Instead of putting everything in the same place and causing conflicts, each .cmd launcher will temporarily add the required dependencies to the PATH . This means that both versions can coexist without interfering with each other. Dependencies can also have their own dependencies. When one package depends on another package, its launcher can create its own environment with the dependencies it requires. This creates a kind of lightweight sandbox for each package. The goal is to keep dependencies isolated while keeping the system simple and transparent. This is definitely one of the more complicated parts of the package manager, but I’m finally starting to figure out the architecture. Warning This changes are not avaiable yet!"}, {"post_id": 51693, "ts": "2026-08-21T14:52:13Z", "hours": 2.9186, "text": "Devlog #16 Today, I changed the way you configure Zap. The example below shows how to hide the logo. Before: zap config hl Now: zap config set show_logo true Previously, you couldn’t view the configuration from the program. Now, zap config list shows the current configuration. Warning The configuration is currently only used to enable, disable, or change the logo and debug settings. I’m also finally using Python’s virtual environment to work on the project. These changes will be included in the next release. For now, they are available in the dev branch. And thank you to everyone who has checked out the project and given feedback. If anyone wants to publish their projects and make them available in the Zap repository, please leave a comment or try to contact me."}, {"post_id": 40270, "ts": "2026-08-03T18:11:13Z", "hours": 2.7706, "text": "Devlog #15 Today, I re-write the Readme, launch a release (v0.6.5-beta), I created a official repository and add a test package named hello."}, {"post_id": 32531, "ts": "2026-07-21T19:25:58Z", "hours": 0.7503, "text": "Devlog #14 Today I separated repo-tools from the Zap parser and started developing it in its own branch."}, {"post_id": 30730, "ts": "2026-07-18T15:33:21Z", "hours": 0.9061, "text": "Devlog #13 Adding the info commmad."}, {"post_id": 28369, "ts": "2026-07-14T16:15:58Z", "hours": 0.7253, "text": "adding a gitignore and deleting the repo-tools to start from zero."}, {"post_id": 26852, "ts": "2026-07-11T21:29:51Z", "hours": 1.3656, "text": "Devlog #11 - Now I added upgrades to the zap website but I down publish yet. Sorry for my robotic English."}, {"post_id": 26585, "ts": "2026-07-11T14:33:30Z", "hours": 2.1264, "text": "Devlog #10 Today I added the repo-remove command, which removes a repository URL from the index file. I also made some small improvements to the project’s directory structure."}, {"post_id": 24630, "ts": "2026-07-08T10:54:59Z", "hours": 1.2447, "text": "Devlog - 09 Today I added a base_url parameter to the index configuration, allowing the domain to be changed more easily without having to manually update all links. I also fixed issues in the Makefile that were causing broken executables with no output. Finally, I merged my work from the GitHub dev branch into the GitHub main branch."}, {"post_id": 22463, "ts": "2026-07-04T22:40:05Z", "hours": 1.1542, "text": "Devlog - 08 Starting to create an installation script and configure my VS Code for another computer."}, {"post_id": 17617, "ts": "2026-06-28T14:21:40Z", "hours": 1.2869, "text": "Devlog - 07 Today, I added an upgrade feature to update ZAP to the latest version. The code is untested because I have to return my school laptop and move everything over to my dad’s computer. I don’t know when I will be back to active development."}, {"post_id": 17010, "ts": "2026-06-27T16:37:05Z", "hours": 1.5008, "text": "Devlog - 06. Today I added a function to check if a package is compatible with the operating system where the program is running."}, {"post_id": 11987, "ts": "2026-06-19T15:47:52Z", "hours": 1.6478, "text": "Devlog - 05 Beginning of the creation of the repo-tools that will be used to create and edit an index."}, {"post_id": 11537, "ts": "2026-06-18T20:43:38Z", "hours": 0.5406, "text": "Devlog - 04 Today I added a SHA-256 integrity verification system. The package manager now generates and compares file hashes to validate downloaded files and prevent corrupted or modified packages from being installed."}, {"post_id": 9316, "ts": "2026-06-15T17:01:19Z", "hours": 1.1847, "text": "Devlog - 03 Today I created and finished the update command."}, {"post_id": 6876, "ts": "2026-06-11T15:04:47Z", "hours": 2.6628, "text": "Devlog - 02 Today I finished the logging system and started updating the README. What’s new: Complete activity logging README improvements and setup guide Next step: polishing the project documentation and create a better structure for the packages."}, {"post_id": 6340, "ts": "2026-06-10T17:51:33Z", "hours": 1.0964, "text": "Now I am implementing the log system."}]...
|
Title: zap by @bernardq | Stardance
Devlogs:
Now Title: zap by @bernardq | Stardance
Devlogs:
Now I am implementing the log system.
Devlog - 02 Today I finished the logging system and started updating the README. What’s new: Complete activity logging README improvements and setup guide Next step: polishing the project documentation and create a better structure for the packages.
Devlog - 03 Today I created and finished the update command.
Devlog - 04 Today I added a SHA-256 integrity verification system. The package manager now generates and compares file hashes to validate downloaded files and prevent corrupted or modified packages from being installed.
Devlog - 05 Beginning of the creation of the repo-tools that will be used to create and edit an index.
Devlog - 06. Today I added a function to check if a package is compatible with the operating system where the program is running.
Devlog - 07 Today, I added an upgrade feature to update ZAP to the latest version. The code is untested because I have to return my school laptop and move everything over to my dad’s computer. I don’t know when I will be back to active development.
Devlog - 08 Starting to create an installation script and configure my VS Code for another computer.
Devlog - 09 Today I added a base_url parameter to the index configuration, allowing the domain to be changed more easily without having to manually update all links. I also fixed issues in the Makefile that were causing broken executables with no output. Finally, I merged my work from the GitHub dev branch into the GitHub main branch.
Devlog #10 Today I added the repo-remove command, which removes a repository URL from the index file. I also made some small improvements to the project’s directory structure.
Devlog #11 - Now I added upgrades to the zap website but I down publish yet. Sorry for my robotic English.
adding a gitignore and deleting the repo-tools to start from zero.
Devlog #13 Adding the info commmad.
Devlog #14 Today I separated repo-tools from the Zap parser and started developing it in its own branch.
Devlog #15 Today, I re-write the Readme, launch a release (v0.6.5-beta), I created a official repository and add a test package named hello.
Devlog #16 Today, I changed the way you configure Zap. The example below shows how to hide the logo. Before: zap config hl Now: zap config set show_logo true Previously, you couldn’t view the configuration from the program. Now, zap config list shows the current configuration. Warning The configuration is currently only used to enable, disable, or change the logo and debug settings. I’m also finally using Python’s virtual environment to work on the project. These changes will be included in the next release. For now, they are available in the dev branch. And thank you to everyone who has checked out the project and given feedback. If anyone wants to publish their projects and make them available in the Zap repository, please leave a comment or try to contact me.
Devlog #17 Hello! Today I finally started working on the scary part of a package manager: dependencies ⛈️⛈️. Warning Today I only worked on the system that grabs the dependencies. The way dependencies will work is through the .cmd launchers stored in: C:/Users/Your_User/AppData/Local/Zap/sl Each package will have its own launcher, and that launcher will be responsible for setting up the environment required by that package. For example, imagine your program uses lib_a version 1.0 , while another program uses lib_a version 2.0 . Instead of putting everything in the same place and causing conflicts, each .cmd launcher will temporarily add the required dependencies to the PATH . This means that both versions can coexist without interfering with each other. Dependencies can also have their own dependencies. When one package depends on another package, its launcher can create its own environment with the dependencies it requires. This creates a kind of lightweight sandbox for each package. The goal is to keep dependencies isolated while keeping the system simple and transparent. This is definitely one of the more complicated parts of the package manager, but I’m finally starting to figure out the architecture. Warning This changes are not avaiable yet!
Devlog #18 Today, I added a new parameter to the database for dependencies, and I started working on the dependency system. I don’t know if I mentioned it in the previous devlog, but I also created the confirmation button. Thanks for reading! And if you want to launch your project on Zap, please contact me. Thanks for reading!
Devlog #19 Today, with the help of ChatGPT, I created a system to check if a dependency’s version is compatible with the program. For example, if a dependency is specified as dependency@>=1.0.0 , the system will analyze the required version and check whether the available version is compatible.
Devlog #20 Today, with the help of ChatGPT, I created the dependency system. The ZAP can now resolve package dependencies and find the correct versions required by each package. It can also handle multiple versions of the same dependency and create launchers with the required dependencies added to the PATH. This means different packages can use different versions of the same dependency without conflicts.
Devlog #21 Updating the README so I can release version 0.7 tomorrow!
Devlog #22 Today, yesterday I added a function that checks if all packages / dependencies are in the list to be downloaded, also adding the author variable to the database, and some minor changes. Thanks for reading! 😊
Devlog #23 Today, I correct a error in the launcher system code and I tried to create a 3 packages to show who it works but they don’t work.
Devlog #24 Today, I made some small changes to the project. The next thing I’m going to add is a system to check whether the local index is outdated and update it if necessary.
Devlog #25 Making small changes to the code in the past days to launch the version 0.7.0-beta.
Devlog #26 Today, I changed the code so that ZAP can have a Linux version. I spent an hour trying to install pip on my Linux PC, but I couldn’t get it to work. I switched to another PC, and now I’m going to test it.
Devlog #27 Today, I run zap on Linux and lost my sanity with the complexity of using Linux on an old PC and all the configuration. The hello test package will be available this afternoon. Thanks for reading!
Devlog #28 So today, I started writing the installation script for Linux. Sorry if I don’t give many updates school just started today!
Devlog #29 Today I finally finished the Linux installation script!
#Devlog #30 Updating the zap web page for the new version.
Devlog #31 After some time, I finally had time to work on ZAP again. Today I started fixing some bugs in ZAP, tested the installation script, and added the installation instructions to the README on the main page. ZAP is still in beta, and I know some things don’t work yet, but I want to sleep. I tested the installer on Debian-based systems, but I haven’t tested it on Arch, Alpine, or other obscure distros yet. My linux test PC specs are shown above, and the error is also shown above.
Devlog #32 I’m tired of working on this, I try one thing and it doesn’t work I try another even worse but I’m working to launch the zap for linux I just don’t have test packages or packages to release if any wants to launch their package on the zap let me know.
Ships:
Hello everyone! My project is a package manager built entirely in Python. I challenged myself to create something simple for everyone—both for the people creating the repository and for those who will use it. I am really proud of myself for dedicating so much effort to this project. ⚠️ Project Status & Requirements Please note that this project is currently in Beta and some commands might not be fully functional or ready yet. System Requirements: Python 3.0 or higher is required. To run the project in script mode, you must install the following dependencies: requests, colorama, and tqdm. Current Limitations: The tools inside repo-tools (used for creating repositories) are currently disabled while they undergo updates. In the meantime, if you want to create a repository, you can use the example index provided in the GitHub README and simply replace the package and file names with your own. If you have any questions or run into issues, please feel free to open an issue or ask here on GitHub. I am more than happy to help!
So, I built a package manager in Python. The biggest challenge I experienced was organizing my code, debugging, and building complex features. I’m proud that it works, and I’m proud of all the time I spent coding it. My project documentation is on GitHub, which is the best place I have to write and maintain it. Zap can install, remove, and download packages without installing them, as well as update packages and perform other features. Try out my project, and if you want to add your projects to the Zap repository, contact me on Slack or GitHub. Thanks for Reading!...
|
1793105608.2457697
|
1793192008.2457697
|
|
15573
|
MineOS by @shaur1021 | Stardance
|
shaur1021
|
2
|
4.0
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-11T22:02:56Z", "hours": 1.0, "multiplier": 4.1, "payout": 3, "blessing": "neutral", "text": "Fixed my webOS. Images werent working", "repo": "https://github.com/shaur1021yt/MineOS", "demo": "https://shaur1021yt.github.io/MineOS/"}, {"ship_num": 2, "ts": "2026-06-11T19:32:27Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made MineOS, a minecraft operating system which works as a ad for my yt channel. The best part that I worked on, and was difficult and different from the guide is the Instagram to InstaCraft logo creation. Took me 30 mins to photoshop that. Must be an easier way but I like how it turned out", "repo": "https://github.com/shaur1021yt/MineOS", "demo": "https://shaur1021yt.github.io/MineOS/"}]...
|
[{"post_id": 7120, "ts": "2026 [{"post_id": 7120, "ts": "2026-06-11T22:02:21Z", "hours": 0.7433, "text": "Fixed the apps image working."}, {"post_id": 6602, "ts": "2026-06-11T02:29:32Z", "hours": 0.7094, "text": "Finished Part 4 Made instacraft, instagram, but minecraft. It doesnt rlly work like insta tho. is more of a notes app still. Also had to photoshop for liek 30 mins to ge the logo of instacraft"}, {"post_id": 6563, "ts": "2026-06-11T00:50:17Z", "hours": 0.9381, "text": "Finished part 3. Made code neater and also made the clsoe button a minecarft X. very fun"}, {"post_id": 6476, "ts": "2026-06-10T21:51:24Z", "hours": 0.6036, "text": "Did Part 2 I made the top bar of the OS with working time and the name of the OS. Haven’t customized it too much yet. Will do that in the next devlog. Oh yeah, I also added a nice minecraft background"}, {"post_id": 6446, "ts": "2026-06-10T20:50:58Z", "hours": 0.6944, "text": "Did the First tutorial + a bit More I followed the tutorial to see what they were talking about and what the point of the tutorial was. Then I went on my own direction after going through the whole tutorial to make this home screen. Idk what to do with it rn but if yall are reading this, maybe subscribe to my YT (Shaur1021)"}]...
|
Title: MineOS by @shaur1021 | Stardance
Devlogs:
Title: MineOS by @shaur1021 | Stardance
Devlogs:
Did the First tutorial + a bit More I followed the tutorial to see what they were talking about and what the point of the tutorial was. Then I went on my own direction after going through the whole tutorial to make this home screen. Idk what to do with it rn but if yall are reading this, maybe subscribe to my YT (Shaur1021)
Did Part 2 I made the top bar of the OS with working time and the name of the OS. Haven’t customized it too much yet. Will do that in the next devlog. Oh yeah, I also added a nice minecraft background
Finished part 3. Made code neater and also made the clsoe button a minecarft X. very fun
Finished Part 4 Made instacraft, instagram, but minecraft. It doesnt rlly work like insta tho. is more of a notes app still. Also had to photoshop for liek 30 mins to ge the logo of instacraft
Fixed the apps image working.
Ships:
I made MineOS, a minecraft operating system which works as a ad for my yt channel. The best part that I worked on, and was difficult and different from the guide is the Instagram to InstaCraft logo creation. Took me 30 mins to photoshop that. Must be an easier way but I like how it turned out
Fixed my webOS. Images werent working...
|
1793105485.8169053
|
1793191885.8169053
|
|
16179
|
Robotics RoboLens by @mira_j_maroni | Stardance
|
mira_j_maroni
|
2
|
140.27
|
26
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-07T22:22:22Z", "hours": 124.0, "multiplier": 16.83, "payout": 0, "blessing": "neutral", "text": "What did I make? Since Ship #1, RoboLens grew from one AI scanner into four connected tools. I added a rules checker that reads the actual FRC game manual (2024–2026) alongside your robot photo so it’s grounded in real rules instead of guessing. I built out a full shared battery tracker. I added a guided camera that walks you through lighting/tilt/framing and auto-captures once the angle looks right. And the biggest addition: a Team Stats & Match Center with four tabs (My Team, Stats, Events, Sim) pulling live data from The Blue Alliance and the FRC Events API, including a season-wide “World Rating,” a matchup simulator with win probabilities, and bookmarking teams to get real push notifications before their matches. I also spent a lot of time on stuff that doesn’t show up as a “feature” but makes the app actually usable: a queue + exponential backoff + retry system so the shared free-tier Gemini key doesn’t randomly fail scans under load, a report button that feeds recurring AI mistakes back into future scans, offline detection so scans fail fast instead of hanging, and a new instant-loading splash screen. What was challenging for me? The AI usage limits were the most persistent problem. Everyone shares one free-tier Gemini key, so scans would fail with no clear pattern whenever enough people hit it at once. I fixed it in stages: first a queue limiting in-flight requests, then automatic retries with backoff (and respecting the retry-after header when Gemini gave one), then finally surfacing that retry status to the user (“High demand. Retrying (2/3)…”) instead of just showing a dead spinner. The guided camera and push notifications both turned into whole rabbit holes of browser-specific pain (iOS Safari blocking camera/notification permissions unless triggered by a direct tap, no live frame streaming on web so I had to build a custom JS-interop layer from scratch, and push not working on iOS at all unless the site’s added to the home screen firs)t. My favorite bug story: the Match Center’s Events tab would spin forever with zero errors. I burned time adding timeouts and retries that did nothing before realizing the real issue. The spinner wasn’t stuck waiting on the network, it was stuck because nothing ever tried. What am I the most proud of? Going from a single-purpose AI scanner to four genuinely useful, connected tools without the codebase turning into spaghetti. I’m also proud that scans now degrade gracefully under load instead of just failing, and that notifications work reliably even though I had zero experience with service workers or VAPID keys before this. And honestly, just sticking with it. 21 devlogs and three months of real iteration based on actual user feedback instead of giving up. What should people know so they can test your project? Live app: https://mirage54321.github.io/RoboLens/ You can log in as a guest for team 4388 to browse batteries without needing an account. Push notifications currently work reliably on desktop browsers and Android (iOS Safari requires the site to be added to your home screen as a bookmark). You can test this by logging into -4388 (Yes, a negative. I needed a number that wouldn’t have a real team). The AI scan/rules tools need a robot photo to test against; if you don’t have one handy, any well-lit photo of mechanical/electrical components will still show you how the flow works.", "repo": "https://github.com/mirage54321/RoboLens", "demo": "https://mirage54321.github.io/RoboLens/"}, {"ship_num": 2, "ts": "2026-06-22T18:39:59Z", "hours": 5.0, "multiplier": 5.73, "payout": 26, "blessing": "neutral", "text": "I made an app for specifically robotics teams (although this could be used for other things too). This is still a work in progress because there is so much more I want to add. I did this project so that I could make something with an AI model and I’m really proud of myself because Flutter was really hard to work with!", "repo": "https://github.com/mirage54321/RoboLens", "demo": "https://mirage54321.github.io/RoboLens/"}]...
|
[{"post_id": 65393, "ts": "202 [{"post_id": 65393, "ts": "2026-09-10T14:37:50Z", "hours": 6.5575, "text": "Devlog #23 -> Fixed the camera disconnect crash from the feedback. Turns out the camera plugin doesn’t actually throw an error when the hardware gets yanked mid-session, it just quietly flips an internal hasError flag and keeps going. Which is why the app was crashing somewhere random instead of failing cleanly. Nothing in my code was listening for that flag, so it just kept trying to read frames and capture photos off a dead controller. Fixed it by adding a listener that actually watches for that error state, cleans everything up, and drops the user onto a proper “Camera disconnected, try again” screen instead of freezing or throwing. Also fixed the retry logic after a failed capture so it doesn’t try to restart a stream on a controller that’s already dead. Next up: the cursor. Someone pointed that out, because every button on web just shows the default arrow. Live app: https://mirage54321.github.io/RoboLens/a"}, {"post_id": 64602, "ts": "2026-09-09T03:43:12Z", "hours": 4.7133, "text": "Devlog #22 -> I was looking at the comments people left me from my ship and the first thing I noticed that I should work on is the load-in page. It is definitely kind of plain. To be honest, I used Claude to help a lot with this one. Making the spinning circle was pretty easy but I had some complex ideas I wanted to put to work and I just didn’t know how to do it. It has a huge radar that has the colors pop up and says “scounting __ teams”. Overall, I am so happy about this new design! Let me know what you guys think! I also added a folder for the photos so it looks more organized! The next thing I plan to work on “loop crashes if the camera disconnects” comment. Live app: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63881, "ts": "2026-09-07T21:41:15Z", "hours": 2.065, "text": "Updates!!! Basically, I’ve been checking to see how many users and views I have. I have google analytics on my project to keep an eye on it. Right now I have 52 users and 163 views. Which honestly, I am pretty dang happy about. (1) I haven’t really been advertising (2) I literally thought it was gonna be like 20 views Woop woop! Okay, now on these past few days I have been working on getting as many hours as possible. I don’t have a personal computer so I am really aiming for literally any of the laptops. Now, programatically I have been working on removing the 3 burst messages for iPhone (it wouldn’t compact itself on the Apple homescreen). FYI: 90% of the time for this was spent removing the 3 burst messages for iPhone and writing Ship #2… so you better be ready for Ship 2! View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63811, "ts": "2026-09-07T19:35:43Z", "hours": 0.7911, "text": "Notifications are working again! Basically, the rebuilding of Render helped fix the issue which is kind of ragebait. I’m getting a little nervous though because I wonder what happens if someone doesn’t reopen the bookmark (because that is how it resets). Would they still get the messages? Will it update automatically? Overall, it works great. I just worry there may be an error that arises (that is a risk with any project honestly). View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63771, "ts": "2026-09-07T18:47:23Z", "hours": 5.1583, "text": "Devlog #19 -> I know I just committed a bunch the last few days. I guess I realized there is only a few days left and I found how to be way more efficent in getting hours. If I just keep this open and something else on another computer and work with them kinda being different windows then I get a lot more time because the switching of windows in the same computer made me keep forgetting to come back and work on the project (and I’m guessing was cutting the time too). Anywho! The most recent changes I have made is removing the ? mark button. I think I was going for a like “about me” thing but I think it was a little redundant and kind of unneccessary to say the least. I added a report button instead (it’s just in the home page). I got this idea from lovable which was something I worked with during my internship. I highkey have been working so much on this project (you can see by all my hours) that I didn’t want to connect it to the backend. It is just a popout that takes you to an gmail link and you can click send. Maybe if I run out of ideas I can add it as a backend. Now, if I am going to be so honest. I have worked a lot on this project and I want to ship but I also want to just crank out some more hours. I’m extremely proud of this project and I need to get it out to the world so that I can get some users! My issues to work on are: Low MongoDB storage for free account Professionalizing (now just looking back over and seeing if there is anything I wanna fix before putting on chief delphi) View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 63405, "ts": "2026-09-07T07:05:48Z", "hours": 8.2653, "text": "Devlog #18 -> Okay, super short devlog just to explain what I am doing. Basically all my hours are spent on fixing the notifications. It is super annoying right now because I am trying to finalize my project and the notifications randomly stop working. I tried clearing out mongoDB and checking on my cron-job and those seem to be working just fine. I’m not sure what to do. I pushed the hours up (for the practice day so I can check it earlier) and redeployed with Render. I shall see tomorrow if it works. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 62347, "ts": "2026-09-05T17:45:39Z", "hours": 8.4539, "text": "Devlog #17 -> Part 3, wrapping this one up Last piece was making the retrying actually visible instead of just quietly happening in the background. Before, if a scan was retrying you’d just stare at a spinner with no idea what was going on. Now the loading screen updates to say something like “High demand. Retrying (2/3)…” so people know the app hasn’t frozen, it’s just waiting its turn. Between the queueing, the backoff retries on both ends, and this messaging, this should turn a lot of what used to be “scan failed, try again” moments into just a few extra seconds of waiting instead. Doesn’t make the free tier limit go away entirely, but it’s a big improvement over what I had. Current problems / what’s next: Low MongoDB storage for free account Professionalizing (before putting on Chief Delphi)"}, {"post_id": 61646, "ts": "2026-09-04T17:29:48Z", "hours": 9.4403, "text": "Devlog #16 -> Part 2, continuing from #15 Got retries working on top of the queue from last time. If Gemini comes back with a 429 (rate limited) or 503 (overloaded) instead of an actual answer, the backend now waits and tries again automatically, using exponential backoff (2s, then 4s, then 8s) instead of hammering it again right away, up to a few attempts before it actually gives up and reports failure. It also checks for a retry-after header first and uses that instead of the backoff timer if Gemini actually tells us how long to wait. Then I mirrored the same idea on the Flutter side, so if the backend’s retries still aren’t enough, the app itself will retry the whole request a couple more times before showing the user an error."}, {"post_id": 60875, "ts": "2026-09-03T14:59:25Z", "hours": 12.3994, "text": "Devlog #15 -> Part 1 (still working on this one!) Finally started actually tackling the AI usage limit problem from devlog #2. Since everyone using the app shares the same free-tier Gemini key, scans would just randomly fail with no real pattern whenever enough people were hitting it at once. Started on the backend side first: instead of letting every incoming scan hit Gemini immediately, I added a little queue that only lets 2 requests be in-flight to Gemini at a time, and everything else waits its turn. Next step is getting it to actually retry instead of just failing after the wait, but that’s for the next devlog."}, {"post_id": 60344, "ts": "2026-09-02T16:57:27Z", "hours": 7.4197, "text": "Devlog #14 -> Part 5 of 5 Finally! This final devlog is about the small tweaks I made in the app. I made it have a new photo Small one, just swapped out one of the app’s images for something more current since the old one was from way back in devlog #1 and didn’t really represent what the app looks like anymore. Nothing technical here, just housekeeping. It kinda works offline I say “kinda” because this isn’t a real offline mode where you can browse cached data with no internet, it’s more like the app now knows when it’s offline and fails fast instead of just hanging. Basically, I added a ConnectivityCheck helper that on web reads navigator.onLine (a free, instant, synchronous browser check for whether the device has a network interface up) so if you’re in airplane mode or your wifi is off, the AI scan screens can immediately say “can’t use this when offline” instead of sitting there for a full request timeout before failing. On native platforms there’s no real equivalent without pulling in a whole new plugin like connectivity_plus, so I just made the stub always report “online” there — an actually-offline phone still gets caught by the AI request’s own timeout/retry handling, just without the instant fail I get on web. One thing worth noting: this only checks if the device thinks it has a network connection, not whether that network actually has working internet behind it. So a wifi network that’s connected but dead will still say “online” here. That case still gets caught eventually, just the slower way through the request timeout instead of instantly. Good enough for now though, this was mostly about killing the most common case of someone trying to scan with their phone in airplane mode and just watching the app hang. I changed the load in screen Went back and reworked the loading screen from devlog #5. It’s now a plain CSS screen sitting directly in index.html instead of living inside the Flutter app itself, which means it can actually paint the instant the page loads, before Flutter has even finished downloading and booting up. That was the whole point: the old version technically only appeared once Flutter itself was far enough along to render it, so there was still a blank/white flash before it. Now there’s a little animated wordmark and spinner (the spinner’s colored arc cycles through the same colors as the logo letters) that fades out and removes itself once Flutter fires its first real frame. While I was in there I also fixed something unrelated but annoying: Flutter’s web service worker by default waits to activate a new version until every open instance of the app is fully closed, which for something people add to their home screen basically never happens naturally. So people could keep opening an old cached version of the app for a long time after I’d pushed updates. Added a bit of JS to force any newly installed service worker to skip that wait and take over immediately (reloading the page once it does), so the next time someone opens the app after I ship something, they actually get it. And that’s it, I’m all caught up! Five devlogs in one sitting was a lot, but future updates should go back to being posted as I actually build them instead of in one giant backlog dump. Current problems / what’s next: Low MongoDB storage for free account Releasing the app (onto chief delphi to get feedback)!! Making it ready to release (working on the ? and report button) Future ideas: team tracker, public chat for teams, judging/interview prep tool, callout tool, round robin generator View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 59335, "ts": "2026-09-01T02:11:53Z", "hours": 9.7772, "text": "Devlog #13 -> Part 4 of 5 Continuing from #12: more on the match center, mostly the stuff that actually broke on me. Biggest bug of the bunch: on the Events tab, tapping into an event was supposed to show “scheduled to attend” info and the competing teams list, but both of those sections would just spin forever, no error, nothing. I assumed it was a network timing issue at first and went down a whole rabbit hole adding timeouts and retry logic that did absolutely nothing. Turns out the actual problem was way dumber: when I pushed the EventDetailScreen with Navigator.push, that screen gets placed in the Overlay as a sibling of the tab tree, not a child of it, meaning it’s NOT under my MatchScope anymore. So the second that screen tried to call MatchScope.of(context), it threw an assertion error immediately, before initState even got the chance to call setState and load anything. The spinner wasn’t stuck because of a slow network, it was stuck because the load call never even ran. Fixed it by just re-wrapping the pushed route in its own MatchScope using the same controller instance. Felt very silly once I found it, but also weirdly satisfying to finally understand. Next was the matchup simulator and win probabilities. On the schedule screen I show a rough “Red 45% / Blue 55%” prediction for each match. My first instinct was to use each event’s own OPR for this, but that falls apart for upcoming events since OPR doesn’t exist until a team has actually played a match there. So instead I based predictions on the season-wide World Rating from the Stats tab (average points across every event a team’s played all season), which actually gives predictions even for a event that hasn’t started yet. Also went back and hooked the push notification bell (from devlog #11) directly into the match center’s top bar now that there’s finally a “your team” + “your event” to actually attach a subscription to. There’s a little pulsing glow animation on the bell the first time you land on a screen where you could enable alerts, just so people notice it’s there instead of it blending into the top bar. Took way too many attempts to get the glow animation timing feeling smooth and not epileptic-seizure-inducing, but I think I landed on something decent. Genuinely didn’t expect the 4th app to take this many devlogs but here we are. One more to wrap up some small stuff and then I think I’m caught up! View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 58655, "ts": "2026-08-31T04:34:12Z", "hours": 9.4486, "text": "Devlog #12 -> Part 3 of 5 Okay, actual 4th app time: Team Stats & Match Center (internally I’ve just been calling it “match” in the code, so if you dig around the file names that’s why). I started by mocking everything out before touching any real API, just so I could get the UI feeling right first. Made an intro screen (basically pitching the three features: match alerts, team stats, matchup simulator) and a fake mockTeams list with made-up EPA numbers just so I had something to look at while building. Once the layout felt right, I started swapping the fake data for real stuff from The Blue Alliance’s API, proxied through my backend the same way I already had set up for the FRC Events API (so I’m not spamming TBA directly from a bunch of client apps and to keep my API key private). Architecture-wise, I did something different from my other three apps: instead of passing state down through a million constructor params, I made a MatchDataController (basically one class holding all the team/event/match data + loading state) and wrapped the whole feature in a MatchScope, which is just an InheritedNotifier. So anywhere in the match center I can just call MatchScope.of(context) and get the controller without threading it through every single widget. Probably overkill for how big this feature ended up being, but once I had 4 tabs and a handful of sub-screens all needing the same data, I was really glad I did it this way instead of my usual pass-everything-into-the-constructor approach. Speaking of tabs, I split it into 4: My Team -> your team’s own info/next match Stats -> a season-wide “World Rating” I calculate from aggregating TBA’s OPR data across events (this was its own whole thing, might do a separate devlog on it someday) Events -> browse every FRC event, filter by time or location, see who’s live right now Sim -> the matchup simulator I keep promising Getting match data to actually parse right from TBA’s JSON took a minute (comp levels like qm/qf/sf/f needed their own label logic, predicted_time vs actual_time needed fallback logic since actual_time barely ever gets posted until after the match is already over, that kind of thing) but nothing too crazy, just tedious model-writing. Devlog #13 is basically a straight continuation of this one, mostly bug stories and the simulator, so be ready for that. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 55760, "ts": "2026-08-27T19:05:53Z", "hours": 4.8611, "text": "Devlog #11 -> Part 2 of 5 Now for the second devlog, I am going to talk about how I got notifications to work. This is the one that ate my week. So the goal: when a match is coming up for a team you bookmarked, get a push notification even if the app/tab isn’t open. That last part is the whole problem, because it means I can’t just pop a normal in-app alert, I actually need real browser push notifications, which meant learning a whole new stack: service workers, VAPID keys, and the Push API. Here’s roughly how it works now ->Subscribe -> user picks a team number + event key, the app asks the browser for notification permission, and if granted it registers a push subscription through the service worker using my VAPID public key. Send to backend -> that subscription (plus team number/event key) gets sent to my Express backend and stored in MongoDB. Actually sending them -> the backend uses the web-push npm package to send the push whenever it detects a match coming up for that team. Getting the Flutter side to talk to any of this was its own adventure, since none of this exists as a nice Dart package, so I had to write a JS interop layer (basically a matchPush object in plain JS that Dart calls into) and wire it up through the same conditional-export trick I used for the guided camera: one file for web, one stub file that just says “unsupported” for native, so the app doesn’t explode on phone builds while I haven’t built native push yet. Problems I ran into (there were many) ->iOS Safari straight up does not support web push at all unless the site has been added to the home screen first. So right now notifications basically only work reliably on desktop browsers and Android, and I have to eventually explain that to iOS users somehow. Permission requests have the same “must be triggered by a direct tap” rule I fought with on the guided camera, so subscribing has to happen from an actual button press, no auto-subscribing on load. Debugging this was rough because half the errors happen silently in the service worker, not in the normal Flutter console, so I was stuck adding console.logs into push.js and checking devtools like a caveman for a while.It works now though! Bookmark a team, subscribe, and you’ll get pinged. Native (phone-installed) push notifications are still a “later” problem since that needs a totally different setup (probably Firebase Cloud Messaging), so for now the stub just returns unsupported on native and I’m keeping my scope to web. Two devlogs about the 4th app itself coming up next, promise. View it here: https://mirage54321.github.io/RoboLens/ P.S. For right now there are 3 notifications that send for iOS I plan to change that though!"}, {"post_id": 54198, "ts": "2026-08-25T02:42:40Z", "hours": 8.6025, "text": "Devlog #10 -> Part 1 of 5 Please don’t hurt me, but I have to post multiple devlogs because I worked on so many things in all this time. It’s a lot of stuff to talk about and I don’t want to write it all into one because it will be super unorganized and hard for me to find in the future. In this first devlog, I am going to talk about how I got bookmarks to work. The idea came from thinking ahead to the match notifier. If someone wants alerts for a match, they need a way to say “these are the teams I care about” without having to retype a team number every single time. So I added a bookmark system using shared_preferences (just storing a list of team numbers locally on the device/browser). You can now star a team from a few places in the app and it’ll save to your bookmarks list, which I’m planning to hook the notifier into so it can just loop through your saved teams instead of asking you every time. This one was honestly pretty painless compared to my usual chaos. The only annoying part was making sure the bookmarked list actually persisted correctly on web (learned my lesson from the MongoDB flutter-web thing, so I tested this one on both platforms before moving on lol). Turns out shared_preferences just works with local storage under the hood on web, so no weird surprises this time. Short devlog, I know, but wait till you see what devlog #11 turned into. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 49268, "ts": "2026-08-17T23:33:09Z", "hours": 6.1139, "text": "Devlog #9 -> Okay, so getting the report button to work was a little finicky. I wasn’t sure what approach to take: I could make it easy by just sending me the reported things and I could look at them and just change the prompt, or I could make it difficult by just feeding every single reported issue back into the AI model so that the AI tries to not make the same mistake (which might be a problem because someone could report something that was actually right), or make it VERY difficult make it feed back into the AI if a similar issues were coming up again and again. Guess which one I chose? Yup, the third. Basically, I decided to store the reports in MongoDB and look for recurring mistakes instead of letting a single report change the AI. That way, if one person reports something incorrectly, it doesn’t immediately affect everyone else’s scans. If the same type of mistake keeps getting reported, I can investigate it and use those reports to improve the AI.This seems really complex, and it was. It took me 4 hours (it says 6 on the devlog but 2 of them was working on the 4th app). Alright, ready for my fourth widget idea………. a match notifier!! Now don’t get too excited. I have more to tell. So, every FRC kid knows that there’s a website called Nexus that sends messages for when your game is going to start so you can get in queue, and it works really well. There’s also this thing I came across called statbotics, and it calculates many things like EPA, and more (I didn’t really stay on that website for too long). So, what I plan to do is combine them. Hopefully, I’m not getting myself into too much of a challenge. This will most definitely be the hardest thing I have ever done on this app. Wish me luck! P.S. I started making the fourth widget before the report button then switched to finish the report button halfway so if you see my commits in a confusing order that’s why. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 43541, "ts": "2026-08-08T21:26:06Z", "hours": 0.3608, "text": "Devlog #8 -> Part 2/2 (part 2 of this devlog) I also posted my app onto reddit (r/FRC) and got some feedback. From the feedback, I got the message that an AI scanner can’t be all that reliable/useful without a user-end customization. I totally agree with this. The problem is that I’m not sure if it is worth it to spend time on adding in customization tools for the AI as there is not a lot of return from it. Therefore, I think that right now the AI’s are at the best product they can be as of now (besides adding functionality to the report button). So, my time would be better spent adding in more apps into the app. On the bright side, there were lots of positive reviews about the battery section! I am now going to work on the report button for the UI because I think it will take less time to add than adding a fourth app. In my next post, I will have a confirmed idea for the fourth app! Things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ (Going to do this first because it is easier) Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Adding fourth ‘app’ ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 43529, "ts": "2026-08-08T21:02:52Z", "hours": 6.3211, "text": "Devlog #7 -> Part 2/2 (but part 1 of this devlog) Okay. This was very annoying to work on because every single time I would edit the code, I would have to recommit in order to see it on the github pages (because the permissions wouldn’t work on the flutter web-server). So, getting the guided camera working on web brought a whole lot of browser-specific issues that don’t show up on native mobile. First, the app would hang on a black loading screen because permission_handler and frame streaming aren’t supported in browsers. I then fixed that by branching on kIsWeb to skip those native-only calls and let the browser’s own getUserMedia prompt handle camera access instead.Next, iOS Safari blocked the camera request outright because it requires permission calls to fire directly from a user tap with no delay -> solved by gating the whole flow behind an explicit “Enable Camera” button instead of auto-starting on page load. Since camera_web doesn’t support live frame streaming and sensors_plus doesn’t handle iOS’s motion permission prompt, live guidance (tilt, brightness, sharpness) had to be rebuilt from scratch for web: a custom JS-interop layer (WebProbe) draws each video frame onto a hidden canvas to sample brightness/sharpness, and separately requests iOS’s DeviceMotionEvent permission to read tilt.That introduced two more subtle bugs (a Dart generics issue causing a null-cast crash in the interop code, and a timing issue where the element wasn’t in the DOM yet when we went looking for it) both fixed with explicit type arguments and a retry loop. With all of that sorted, the guided camera now works consistently across native and web, with live tilt/lighting/sharpness feedback and autocapture. View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 37868, "ts": "2026-07-30T20:50:16Z", "hours": 4.4522, "text": "Devlog #6 -> Part 1/2 Hey! I know it has been awhile since I worked on my project (adding the guided camera has been taking a lot of will power), but I have a new update. I have added the guided camera to the scan screen (which I will add to the rules screen too after it is finished). The process that the guided camera uses is: Startup -> requests camera permission immediately for phone usage (permission_handler) or waits for a tap on “Enable Camera” first for browser usage. Camera setup -> fetches available cameras (from Flutter’s camera plugin), picks the back-facing one (falls back to the first available camera on the device if no back camera is found), sets resolution to high on phone or medium on browser (since browsers often reject high-res requests), then calls initialize() to start the live preview. Manual fallback for taking photos -> the shutter button is always available to captures the photo; this is the primary method right now. Capture -> stops the frame stream (phone only), takes the picture, reads the bytes, then returns them to the previous screen via Navigator.pop(context, bytes). An issue I ran into was camera permissions on iPhone Safari. It worked fine on my laptop but wouldn’t work on my phone. I eventually figured out that iPhones are notorious for always requiring explicit permission prompts, so I solved it by requiring the camera request to be triggered by a direct user tap. Basically, I added an “Enable Camera” button on web that only calls the camera setup when tapped, since iOS Safari silently blocks getUserMedia (instead of showing an error) if there’s any delay between the tap and the request. Now I am working on the flutter comments (“too dark”, “focus”, etc.) because right now those aren’t working. Once I get the live guidance to work, then I will be able to implement an auto-capture (that way the photo is taken when at a good angle). View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 29717, "ts": "2026-07-16T20:11:47Z", "hours": 4.3139, "text": "Devlog #5 -> My app now has a load in screen! Yay! I figured it was necessary just to make my whole app look more professional. It was pretty easy (took lots of time though) to add and I didn’t fall into any huge difficulties. Only a mini one because I tried to make the animation in the home screen class and it got chaotic. Once it was its own file it was quite easy because then I just needed to fix up the UI. Look here if you want to learn more about how to do animations in your own project (if using Flutter): https://docs.flutter.dev/ui/animations I also added a very tiny change to the error message for logging in. Instead of saying “Team already registered”, it tells you to contact my email if you cannot access your team. I guess I got really nervous that someone would try to access their team, and if they couldn’t, they would go and put another team’s number and so on indefinitely. Right now, I think this is a good way to fix the issue, but I’ll add a way to report it in the app; that way, the issue can be solved quicker, and you won’t have to send an email to someone. I did have the idea to make it so there is identification of some sort for each team; however, that would just make the app complex, and my whole goal was to have a simple solution to problems. So, if this app actually does really well in the FRC world, I will add some sort of verification; that way lost accounts can be found, and it would just give all-around easier access. Next, I am going to focus on my long put off task: photo to video. I am not sure how I am going to do this, if I am going to be so honest. My idea for it came fom the Smile Doctors invisalign app where it opens up your camera and tells you things like “go to better lighting” or “move to the left”. However, I think that will be super complex and difficult to implement so I might have to start a lot smaller. Best of luck to myself, I guess! List of current tasks: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 28023, "ts": "2026-07-14T00:50:11Z", "hours": 4.6822, "text": "Devlog #4 -> Hey! I have been working on the issues I talked about in my last devlog. So far I have successfully solved one: How I solved “Connenction to MongoDB working for flutter web but not github?” -> The issue was that GitHub Pages is a static hosting service and couldn’t connect directly to MongoDB. Therefore I had to update the application so the GitHub Pages frontend communicates with the Express backend on Render. Basically, I just modified some of the backend configuration like changing (in very very simple terms): fetch(‘/battery’) to something like fetch(‘ https://ridgeboticsapp.onrender.com/battery ’). I also added a ? mark button so that if clicked on it can tell you a little more about the app. Right now, it is just saying some basic things but I plan to show this app to my friends and see what they think I should add to that text in order to help people figure out what is going on if they just found my app. Finally, I fixed an error I wasn’t even aware of: the name finder for each teams batteries. I made it so when you sign up your team, it will try to search up the team name with that FRC number. However, there would be times where I would sign in as my team and it would show up with some random name like “Robo-Knights” or something weird. I think this was related to the Gemini model because I had used it while testing, soincorrect team names could have been stored and reused instead of being verified. To fix this, I connected my backend to the official FRC Events API. Now, the app sends the team’s FRC number to FIRST to retrieve the official team information to then save the verified team name. This prevents teams from accidentally being assigned another team’s name and makes sure the battery data is connected to the correct FRC team. It was never too big of an issue because I could always just edit the names in MongoDB but having it so it says the name right 100% of the time is just much easier for me. Now my new top things to work on are: If team is signed up but you don’t have access to your team Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) Report button working better to fix the AI’s findings View it here: https://mirage54321.github.io/RoboLens/ P.S. If you are trying things out you can sign in as a guest for 4388 and see my teams batteries"}, {"post_id": 24928, "ts": "2026-07-08T20:05:31Z", "hours": 1.5633, "text": "Devlog #3 -> In the past few days I have been working on adding a battery tracker because I believe that it has the potential to be very helpful to FRC teams. Tracking batteries is always a pain for my team, and other teams I’ve connected with can probably agree with that statement. Batteries can randomly fail by not charging or just full-on dying in two minutes. Although one might assume that keeping track of all this is easy, it truly is not. Having a system to hold records and data, I believe, can be very helpful to teams! I’ve added the third tool to the app: a shared battery tracker where a team can log in with a team number and passcode, add batteries, and mark each one as charging, in use, or available. It also lets you flag a battery as weak or unreliable with a note, so if a battery dies mid-match, the whole team can see that history the next time they’re deciding which one to grab. I even added an option for the AI to recommend which battery to use next based on how long it’s been charged and whether it’s been flagged before. My new challenge for this tool has been working with MongoDB. It stores the data fine, but it wasn’t letting me log in (it kept throwing an error). What confused me more is that when I ran it in Flutter web, it worked just fine. This is what I plan to work on for the next few days. To fix my last problem, which was with the AI saying it had spikes in usage, I changed the message to ask the user to try again because it usually works on the try right after. Right now, this is just a temporary solution until I can find a new AI model. List of things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI Find permanant solution for the AI usage Connenction to MongoDB working for flutter web but not github? Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) View it here: https://mirage54321.github.io/RoboLens/ Log in as guest for team 4388 if you just want to view it. P.S. My logged time is glitching out a bunch and I would love if someone could help me in the #stardance-help on slack."}, {"post_id": 23707, "ts": "2026-07-06T20:19:01Z", "hours": 9.0781, "text": "Devlog #2-> Now that I’ve finished the foundation of my project, I can keep adding tools! On my last ship, I realized I should keep more documentation. So be ready for more devlogs going forward! To get a little more comfortable with what I’m doing, I decided to add another AI scanning tool that I have been thinking about: a rules checker. The general scanner already looked for physical problems like wiring and cracks, but I wanted something that could actually check a robot against the official FRC rulebook. So I added the actual PDFs of past FRC game manuals (2024, 2025, and 2026) and let the user pick which season’s rules to check against. That PDF gets fed into the AI alongside the photo, so instead of relying on whatever general FRC knowledge the model already has (which could be outdated or made up), it’s reading the exact rulebook for that year while it looks at the image. Getting the PDF into the AI request in the first place took some figuring out. I had to load it from the app’s assets, converting it into a format the API would actually accept, and making sure it got sent alongside the image without breaking anything. Once it worked though, the difference was noticeable (the AI’s answers started actually referencing real rules instead of guesses). The bigger challenge was AI usage limits. Not “too many messages” though. Instead, it was more that other people using the same free model at the same time meant my requests were competing with everyone else’s. Half the time a scan would go through fine, and the other half it just wouldn’t, with no real pattern I could find. To fix this I… haven’t yet, honestly. Still an open problem :(. Hoping to hear from you guys for some ideas! I’m a little nervous because AI kind of has a negative connotation in FRC. To address that issue, I’m planning to make the whole app not centered around AI so I’ll be adding more tools. Excited to keep going though, because I just started programming my new idea: adding a battery tracker! View it here: https://mirage54321.github.io/RoboLens/"}, {"post_id": 13860, "ts": "2026-06-22T18:21:53Z", "hours": 4.63, "text": "Devlog #1-> I’ve finished the foundation of my project! The app currently has a simple UI and one AI tool that takes in a photo and tells you what’s wrong with it — whether it’s frayed wiring, loose screws, cracked/bent frames, or corrosion. Goal of my project: cut down the time it takes to find an issue so an FRC team has more time to actually fix the problem, and flag problems a human might miss during a rushed pit-stop check. Working with Flutter to program the UI wasn’t too bad. I’ve always been used to Java and JavaScript, so although Dart isn’t exactly the same, I picked it up pretty fast. I had the most difficulty implementing the AI. I started with an Ollama model, but it was way too slow — it would time out before it ever finished telling me what it noticed in the photo. I then found out Google lets you use a free Gemini model, so I got an API key for that and added it in. The new problem: every time I published my app as a GitHub Page, the API key would get disabled because it wasn’t safe sitting in client-side code. I finally learned the key needs to live on a backend to actually be secure, so I set one up using Render. I’m so proud of how my project is looking so far! Next up, I plan to add more tools, like a rules scanner."}]...
|
Title: Robotics RoboLens by @mira_j_maroni | Stard Title: Robotics RoboLens by @mira_j_maroni | Stardance
Devlogs:
Devlog #1-> I’ve finished the foundation of my project! The app currently has a simple UI and one AI tool that takes in a photo and tells you what’s wrong with it — whether it’s frayed wiring, loose screws, cracked/bent frames, or corrosion. Goal of my project: cut down the time it takes to find an issue so an FRC team has more time to actually fix the problem, and flag problems a human might miss during a rushed pit-stop check. Working with Flutter to program the UI wasn’t too bad. I’ve always been used to Java and JavaScript, so although Dart isn’t exactly the same, I picked it up pretty fast. I had the most difficulty implementing the AI. I started with an Ollama model, but it was way too slow — it would time out before it ever finished telling me what it noticed in the photo. I then found out Google lets you use a free Gemini model, so I got an API key for that and added it in. The new problem: every time I published my app as a GitHub Page, the API key would get disabled because it wasn’t safe sitting in client-side code. I finally learned the key needs to live on a backend to actually be secure, so I set one up using Render. I’m so proud of how my project is looking so far! Next up, I plan to add more tools, like a rules scanner.
Devlog #2-> Now that I’ve finished the foundation of my project, I can keep adding tools! On my last ship, I realized I should keep more documentation. So be ready for more devlogs going forward! To get a little more comfortable with what I’m doing, I decided to add another AI scanning tool that I have been thinking about: a rules checker. The general scanner already looked for physical problems like wiring and cracks, but I wanted something that could actually check a robot against the official FRC rulebook. So I added the actual PDFs of past FRC game manuals (2024, 2025, and 2026) and let the user pick which season’s rules to check against. That PDF gets fed into the AI alongside the photo, so instead of relying on whatever general FRC knowledge the model already has (which could be outdated or made up), it’s reading the exact rulebook for that year while it looks at the image. Getting the PDF into the AI request in the first place took some figuring out. I had to load it from the app’s assets, converting it into a format the API would actually accept, and making sure it got sent alongside the image without breaking anything. Once it worked though, the difference was noticeable (the AI’s answers started actually referencing real rules instead of guesses). The bigger challenge was AI usage limits. Not “too many messages” though. Instead, it was more that other people using the same free model at the same time meant my requests were competing with everyone else’s. Half the time a scan would go through fine, and the other half it just wouldn’t, with no real pattern I could find. To fix this I… haven’t yet, honestly. Still an open problem :(. Hoping to hear from you guys for some ideas! I’m a little nervous because AI kind of has a negative connotation in FRC. To address that issue, I’m planning to make the whole app not centered around AI so I’ll be adding more tools. Excited to keep going though, because I just started programming my new idea: adding a battery tracker! View it here: https://mirage54321.github.io/RoboLens/
Devlog #3 -> In the past few days I have been working on adding a battery tracker because I believe that it has the potential to be very helpful to FRC teams. Tracking batteries is always a pain for my team, and other teams I’ve connected with can probably agree with that statement. Batteries can randomly fail by not charging or just full-on dying in two minutes. Although one might assume that keeping track of all this is easy, it truly is not. Having a system to hold records and data, I believe, can be very helpful to teams! I’ve added the third tool to the app: a shared battery tracker where a team can log in with a team number and passcode, add batteries, and mark each one as charging, in use, or available. It also lets you flag a battery as weak or unreliable with a note, so if a battery dies mid-match, the whole team can see that history the next time they’re deciding which one to grab. I even added an option for the AI to recommend which battery to use next based on how long it’s been charged and whether it’s been flagged before. My new challenge for this tool has been working with MongoDB. It stores the data fine, but it wasn’t letting me log in (it kept throwing an error). What confused me more is that when I ran it in Flutter web, it worked just fine. This is what I plan to work on for the next few days. To fix my last problem, which was with the AI saying it had spikes in usage, I changed the message to ask the user to try again because it usually works on the try right after. Right now, this is just a temporary solution until I can find a new AI model. List of things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI Find permanant solution for the AI usage Connenction to MongoDB working for flutter web but not github? Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) View it here: https://mirage54321.github.io/RoboLens/ Log in as guest for team 4388 if you just want to view it. P.S. My logged time is glitching out a bunch and I would love if someone could help me in the #stardance-help on slack.
Devlog #4 -> Hey! I have been working on the issues I talked about in my last devlog. So far I have successfully solved one: How I solved “Connenction to MongoDB working for flutter web but not github?” -> The issue was that GitHub Pages is a static hosting service and couldn’t connect directly to MongoDB. Therefore I had to update the application so the GitHub Pages frontend communicates with the Express backend on Render. Basically, I just modified some of the backend configuration like changing (in very very simple terms): fetch(‘/battery’) to something like fetch(‘ https://ridgeboticsapp.onrender.com/battery ’). I also added a ? mark button so that if clicked on it can tell you a little more about the app. Right now, it is just saying some basic things but I plan to show this app to my friends and see what they think I should add to that text in order to help people figure out what is going on if they just found my app. Finally, I fixed an error I wasn’t even aware of: the name finder for each teams batteries. I made it so when you sign up your team, it will try to search up the team name with that FRC number. However, there would be times where I would sign in as my team and it would show up with some random name like “Robo-Knights” or something weird. I think this was related to the Gemini model because I had used it while testing, soincorrect team names could have been stored and reused instead of being verified. To fix this, I connected my backend to the official FRC Events API. Now, the app sends the team’s FRC number to FIRST to retrieve the official team information to then save the verified team name. This prevents teams from accidentally being assigned another team’s name and makes sure the battery data is connected to the correct FRC team. It was never too big of an issue because I could always just edit the names in MongoDB but having it so it says the name right 100% of the time is just much easier for me. Now my new top things to work on are: If team is signed up but you don’t have access to your team Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) Report button working better to fix the AI’s findings View it here: https://mirage54321.github.io/RoboLens/ P.S. If you are trying things out you can sign in as a guest for 4388 and see my teams batteries
Devlog #5 -> My app now has a load in screen! Yay! I figured it was necessary just to make my whole app look more professional. It was pretty easy (took lots of time though) to add and I didn’t fall into any huge difficulties. Only a mini one because I tried to make the animation in the home screen class and it got chaotic. Once it was its own file it was quite easy because then I just needed to fix up the UI. Look here if you want to learn more about how to do animations in your own project (if using Flutter): https://docs.flutter.dev/ui/animations I also added a very tiny change to the error message for logging in. Instead of saying “Team already registered”, it tells you to contact my email if you cannot access your team. I guess I got really nervous that someone would try to access their team, and if they couldn’t, they would go and put another team’s number and so on indefinitely. Right now, I think this is a good way to fix the issue, but I’ll add a way to report it in the app; that way, the issue can be solved quicker, and you won’t have to send an email to someone. I did have the idea to make it so there is identification of some sort for each team; however, that would just make the app complex, and my whole goal was to have a simple solution to problems. So, if this app actually does really well in the FRC world, I will add some sort of verification; that way lost accounts can be found, and it would just give all-around easier access. Next, I am going to focus on my long put off task: photo to video. I am not sure how I am going to do this, if I am going to be so honest. My idea for it came fom the Smile Doctors invisalign app where it opens up your camera and tells you things like “go to better lighting” or “move to the left”. However, I think that will be super complex and difficult to implement so I might have to start a lot smaller. Best of luck to myself, I guess! List of current tasks: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Photo to video (that way it can help you find the right orientation for the AI to scan with the best feedback possible) ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/
Devlog #6 -> Part 1/2 Hey! I know it has been awhile since I worked on my project (adding the guided camera has been taking a lot of will power), but I have a new update. I have added the guided camera to the scan screen (which I will add to the rules screen too after it is finished). The process that the guided camera uses is: Startup -> requests camera permission immediately for phone usage (permission_handler) or waits for a tap on “Enable Camera” first for browser usage. Camera setup -> fetches available cameras (from Flutter’s camera plugin), picks the back-facing one (falls back to the first available camera on the device if no back camera is found), sets resolution to high on phone or medium on browser (since browsers often reject high-res requests), then calls initialize() to start the live preview. Manual fallback for taking photos -> the shutter button is always available to captures the photo; this is the primary method right now. Capture -> stops the frame stream (phone only), takes the picture, reads the bytes, then returns them to the previous screen via Navigator.pop(context, bytes). An issue I ran into was camera permissions on iPhone Safari. It worked fine on my laptop but wouldn’t work on my phone. I eventually figured out that iPhones are notorious for always requiring explicit permission prompts, so I solved it by requiring the camera request to be triggered by a direct user tap. Basically, I added an “Enable Camera” button on web that only calls the camera setup when tapped, since iOS Safari silently blocks getUserMedia (instead of showing an error) if there’s any delay between the tap and the request. Now I am working on the flutter comments (“too dark”, “focus”, etc.) because right now those aren’t working. Once I get the live guidance to work, then I will be able to implement an auto-capture (that way the photo is taken when at a good angle). View it here: https://mirage54321.github.io/RoboLens/
Devlog #7 -> Part 2/2 (but part 1 of this devlog) Okay. This was very annoying to work on because every single time I would edit the code, I would have to recommit in order to see it on the github pages (because the permissions wouldn’t work on the flutter web-server). So, getting the guided camera working on web brought a whole lot of browser-specific issues that don’t show up on native mobile. First, the app would hang on a black loading screen because permission_handler and frame streaming aren’t supported in browsers. I then fixed that by branching on kIsWeb to skip those native-only calls and let the browser’s own getUserMedia prompt handle camera access instead.Next, iOS Safari blocked the camera request outright because it requires permission calls to fire directly from a user tap with no delay -> solved by gating the whole flow behind an explicit “Enable Camera” button instead of auto-starting on page load. Since camera_web doesn’t support live frame streaming and sensors_plus doesn’t handle iOS’s motion permission prompt, live guidance (tilt, brightness, sharpness) had to be rebuilt from scratch for web: a custom JS-interop layer (WebProbe) draws each video frame onto a hidden canvas to sample brightness/sharpness, and separately requests iOS’s DeviceMotionEvent permission to read tilt.That introduced two more subtle bugs (a Dart generics issue causing a null-cast crash in the interop code, and a timing issue where the element wasn’t in the DOM yet when we went looking for it) both fixed with explicit type arguments and a retry loop. With all of that sorted, the guided camera now works consistently across native and web, with live tilt/lighting/sharpness feedback and autocapture. View it here: https://mirage54321.github.io/RoboLens/
Devlog #8 -> Part 2/2 (part 2 of this devlog) I also posted my app onto reddit (r/FRC) and got some feedback. From the feedback, I got the message that an AI scanner can’t be all that reliable/useful without a user-end customization. I totally agree with this. The problem is that I’m not sure if it is worth it to spend time on adding in customization tools for the AI as there is not a lot of return from it. Therefore, I think that right now the AI’s are at the best product they can be as of now (besides adding functionality to the report button). So, my time would be better spent adding in more apps into the app. On the bright side, there were lots of positive reviews about the battery section! I am now going to work on the report button for the UI because I think it will take less time to add than adding a fourth app. In my next post, I will have a confirmed idea for the fourth app! Things to work on: Low MongoDB storage for free account Report button on the UI needs to feed into the AI ⭐ (Going to do this first because it is easier) Find solution for Render (takes a long time to power on and first time you try to do anything it always fails) Adding fourth ‘app’ ⭐⭐ View it here: https://mirage54321.github.io/RoboLens/
Devlog #9 -> Okay, so getting the report button to work was a little finicky. I wasn’t sure what approach to take: I could make it easy by just sending me the reported things and I could look at them and just change the prompt, or I could make it difficult by just feeding every single reported issue back into the AI model so that the AI tries to not make the same mistake (which might be a problem because someone could report something that was actually right), or make it VERY difficult make it feed back into the AI if a similar issues were coming up again and again. Guess which one I chose? Yup, the third. Basically, I decided to store the reports in MongoDB and look for recurring mistakes instead of letting a single report change the AI. That way, if one person reports something incorrectly, it doesn’t immediately affect everyone else’s scans. If the same type of mistake keeps getting reported, I can investigate it and use those reports to improve the AI.This seems really complex, and it was. It took me 4 hours (it says 6 on the devlog but 2 of them was working on the 4th app). Alright, ready for my fourth widget idea………. a match notifier!! Now don’t get too excited. I have more to tell. So, every FRC kid knows that there’s a website called Nexus that sends messages for when your game is going to start so you can get in queue, and it works really well. There’s also this thing I came across called statbotics, and it calculates many things like EPA, and more (I didn’t really stay on that website for too long). So, what I plan to do is combine them. Hopefully, I’m not getting myself into too much of a challenge. This will most definitely be the hardest thing I have ever done on this app. Wish me luck! P.S. I started making the fourth widget before the report button then switched to finish the report button halfway so if you see my commits in a confusing order that’s why. View it here: https://mirage54321.github.io/RoboLens/
Devlog #10 -> Part 1 of 5 Please don’t hurt me, but I have to post multiple devlogs because I worked on so many things in all this time. It’s a lot of stuff to talk about and I don’t want to write it all into one because it will be super unorganized and hard for me to find in the future. In this first devlog, I am going to talk about how I got bookmarks to work. The idea came from thinking ahead to the match notifier. If someone wants alerts for a match, they need a way to say “these are the teams I care about” without having to retype a team number every single time. So I added a bookmark system using shared_preferences (just storing a list of team numbers locally on the device/browser). You can now star a team from a few places in the app and it’ll save to your bookmarks list, which I’m planning to hook the notifier into so it can just loop through your saved teams instead of asking you every time. This one was honestly pretty painless compared to my usual chaos. The only annoying part was making sure the bookmarked list actually persisted correctly on web (learned my lesson from the MongoDB flutter-web thing, so I tested this one on both platforms before moving on lol). Turns out shared_preferences just works with local storage under the hood on web, so no weird surprises this time. Short devlog, I know, but wait till you see what devlog #11 turned into. View it here: https://mirage54321.github.io/RoboLens/
Devlog #11 -> Part 2 of 5 Now for the second devlog, I am going to talk about how I got notifications to work. This is the one that ate my week. So the goal: when a match is coming up for a team you bookmarked, get a push notification even if the app/tab isn’t open. That last part is the whole problem, because it means I can’t just pop a normal in-app alert, I actually need real browser push notifications, which meant learning a whole new stack: service workers, VAPID keys, and the Push API. Here’s roughly how it works now ->Subscribe -> user picks a team number + event key, the app asks the browser for notification permission, and if granted it registers a push subscription through the service worker using my VAPID public key. Send to backend -> that subscription (plus team number/event key) gets sent to my Express backend and stored in MongoDB. Actually sending them -> the backend uses the web-push npm package to send the push whenever it detects a match coming up for that team. Getting the Flutter side to talk to any of this was its own adventure, since none of this exists as a nice Dart package, so I had to write a JS interop layer (basically a matchPush object in plain JS that Dart calls into) and wire it up through the same conditional-export trick I used for the guided camera: one file for web, one stub file that just says “unsupported” for native, so the app doesn’t explode on phone builds while I haven’t built native push yet. Problems I ran into (there were many) ->iOS Safari straight up does not support web push at all unless the site has been added to the home screen first. So right now notifications basically only work reliably on desktop browsers and Android, and I have to eventually explain that to iOS users somehow. Permission requests have the same “must be triggered by a direct tap” rule I fought with on the guided camera, so subscribing has to happen from an actual button press, no auto-subscribing on load. Debugging this was rough because half the errors happen silently in the service worker, not in the normal Flutter console, so I was stuck adding console.logs into push.js and checking devtools like a caveman for a while.It works now though! Bookmark a team, subscribe, and you’ll get pinged. Native (phone-installed) push notifications are still a “later” problem since that needs a totally different setup (probably Firebase Cloud Messaging), so for now the stub just returns unsupported on native and I’m keeping my scope to web. Two devlogs about the 4th app itself coming up next, promise. View it here: https://mirage54321.github.io/RoboLens/ P.S. For right now there are 3 notifications that send for iOS I plan to change that though!
Devlog #12 -> Part 3 of 5 Okay, actual 4th app time: Team Stats & Match Center (internally I’ve just been calling it “match” in the code, so if you dig around the file names that’s why). I started by mocking everything out before touching any real API, just so I could get the UI feeling right first. Made an intro screen (basically pitching the three features: match alerts, team stats, matchup simulator) and a fake mockTeams list with made-up EPA numbers just so I had something to look at while building. Once the layout felt right, I started swapping the fake data for real stuff from The Blue Alliance’s API, proxied through my backend the same way I already had set up for the FRC Events API (so I’m not spamming TBA directly from a bunch of client apps and to keep my API key private). Architecture-wise, I did something different from my other three apps: instead of passing state down through a million constructor params, I made a MatchDataController (basically one class holding all the team/event/match data + loading state) and wrapped the whole feature in a MatchScope, which is just an InheritedNotifier. So anywhere in the match center I can just call MatchScope.of(context) and get the controller without threading it through every single widget. Probably overkill for how big this feature ended up being, but once I had 4 tabs and a handful of sub-screens all needing the same data, I was really glad I did it this way instead of my usual pass-everything-into-the-constructor approach. Speaking of tabs, I split it into 4: My Team -> your team’s own info/next match Stats -> a season-wide “World Rating” I calculate from aggregating TBA’s OPR data across events (this was its own whole thing, might do a separate devlog on it someday) Events -> browse every FRC event, filter by time or location, see who’s live right now Sim -> the matchup simulator I keep promising Getting match data to actually parse right from TBA’s JSON took a minute (comp levels like qm/qf/sf/f needed their own label logic, predicted_time vs actual_time needed fallback logic since actual_time barely ever gets posted until after the match is already over, that kind of thing) but nothing too crazy, just tedious model-writing. Devlog #13 is basically a straight continuation of this one, mostly bug stories and the simulator, so be ready for that. View it here: https://mirage54321.github.io/RoboLens/
Devlog #13 -> Part 4 of 5 Continuing from #12: more on the match center, mostly the stuff that actually broke on me. Biggest bug of the bunch: on the Events tab, tapping into an event was supposed to show “scheduled to attend” info and the competing teams list, but both of those sections would just spin forever, no error, nothing. I assumed it was a network timing issue at first and went down a whole rabbit hole adding timeouts and retry logic that did absolutely nothing. Turns out the actual problem was way dumber: when I pushed the EventDetailScreen with Navigator.push, that screen gets placed in the Overlay as a sibling of the tab tree, not a child of it, meaning it’s NOT under my MatchScope anymore. So the second that screen tried to call MatchScope.of(context), it threw an assertion error immediately, before initState even got the chance to call setState and load anything. The spinner wasn’t stuck because of a slow network, it was stuck because the load call never even ran. Fixed it by just re-wrapping the pushed route in its own MatchScope using the same controller instance. Felt very silly once I found it, but also weirdly satisfying to finally understand. Next was the matchup simulator and win probabilities. On the schedule screen I show a rough “Red 45% / Blue 55%” prediction for each match. My first instinct was to use each event’s own OPR for this, but that falls apart for upcoming events since OPR doesn’t exist until a team has actually played a match there. So instead I based predictions on the season-wide World Rating from the Stats tab (average points across every event a team’s played all season), which actually gives predictions even for a event that hasn’t started yet. Also went back and hooked the push notification bell (from devlog #11) directly into the match center’s top bar now that there’s finally a “your team” + “your event” to actually attach a subscription to. There’s a little pulsing glow animation on the bell the first time you land on a screen where you could enable alerts, just so people notice it’s there instead of it blending into the top bar. Took way too many attempts to get the glow animation timing feeling smooth and not epileptic-seizure-inducing, but I think I landed on something decent. Genuinely didn’t expect the 4th app to take this many devlogs but here we are. One more to wrap up some small stuff and then I think I’m caught up! View it here: https://mirage54321.github.io/RoboLens/
Devlog #14 -> Part 5 of 5 Finally! This final devlog is about the small tweaks I made in the app. I made it have a new photo Small one, just swapped out one of the app’s images for something more current since the old one was from way back in devlog #1 and didn’t really represent what the app looks like anymore. Nothing technical here, just housekeeping. It kinda works offline I say “kinda” because this isn’t a real offline mode where you can browse cached data with no internet, it’s more like the app now knows when it’s offline and fails fast instead of just hanging. Basically, I added a ConnectivityCheck helper that on web reads navigator.onLine (a free, instant, synchronous browser check for whether the device has a network interface up) so if you’re in airplane mode or your wifi is off, the AI scan screens can immediately say “can’t use this when offline” instead of sitting there for a full request timeout before failing. On native platforms there’s no real equivalent without pulling in a whole new plugin like connectivity_plus, so I just made the stub always report “online” there — an actually-offline phone still gets caught by the AI request’s own timeout/retry handling, just without the instant fail I get on web. One thing worth noting: this only checks if the device thinks it has a network connection, not whether that network actually has working internet behind it. So a wifi network that’s connected but dead will still say “online” here. That case still gets caught eventually, just the slower way through the request timeout instead of instantly. Good enough for now though, this was mostly about killing the most common case of someone trying to scan with their phone in airplane mode and just watching the app hang. I changed the load in screen Went back and reworked the loading screen from devlog #5. It’s now a plain CSS screen sitting directly in index.html instead of living inside the Flutter app itself, which means it can actually paint the instant the page loads, before Flutter has even finished downloading and booting up. That was the whole point: the old version technically only appeared once Flutter itself was far enough along to render it, so there was still a blank/white flash before it. Now there’s a little animated wordmark and spinner (the spinner’s colored arc cycles through the same colors as the logo letters) that fades out and removes itself once Flutter fires its first real frame. While I was in there I also fixed something unrelated but annoying: Flutter’s web service worker by default waits to activate a new version until every open instance of the app is fully closed, which for something people add to their home screen basically never happens naturally. So people could keep opening an old cached version of the app for a long time after I’d pushed updates. Added a bit of JS to force any newly installed service worker to skip that wait and take over immediately (reloading the page once it does), so the next time someone opens the app after I ship something, they actually get it. And that’s it, I’m all caught up! Five devlogs in one sitting was a lot, but future updates should go back to being posted as I actually build them instead of in one giant backlog dump. Current problems / what’s next: Low MongoDB storage for free account Releasing the app (onto chief delphi to get feedback)!! Making it ready to release (working on the ? and report button) Future ideas: team tracker, public chat for teams, judging/interview prep tool, callout tool, round robin generator View it here: https://mirage54321.github.io/RoboLens/
Devlog #15 -> Part 1 (still working on this one!) Finally started actually tackling the AI usage limit problem from devlog #2. Since everyone using the app shares the same free-tier Gemini key, scans would just randomly fail with no real pattern whenever enough people were hitting it at once. Started on the backend side first: instead of letting every incoming scan hit Gemini immediately, I added a little queue that only lets 2 requests be in-flight to Gemini at a time, and everything else waits its turn. Next step is getting it to actually retry instead of just failing after the wait, but that’s for the next devlog.
Devlog #16 -> Part 2, continuing from #15 Got retries working on top of the queue from last time. If Gemini comes back with a 429 (rate limited) or 503 (overloaded) instead of an actual answer, the backend now waits and tries again automatically, using exponential backoff (2s, then 4s, then 8s) instead of hammering it again right away, up to a few attempts before it actually gives up and reports failure. It also checks for a retry-after header first and uses that instead of the backoff timer if Gemini actually tells us how long to wait. Then I mirrored the same idea on the Flutter side, so if the backend’s retries still aren’t enough, the app itself will retry the whole request a couple more times before showing the user an error.
Devlog #17 -> Part 3, wrapping this one up Last piece was making the retrying actually visible instead of just quietly happening in the background. Before, if a scan was retrying you’d just stare at a spinner with no idea what was going on. Now the loading screen updates to say something like “High demand. Retrying (2/3)…” so people know the app hasn’t frozen, it’s just waiting its turn. Between the queueing, the backoff retries on both ends, and this messaging, this should turn a lot of what used to be “scan failed, try again” moments into just a few extra seconds of waiting instead. Doesn’t make the free tier limit go away entirely, but it’s a big improvement over what I had. Current problems / what’s next: Low MongoDB storage for free account Professionalizing (before putting on Chief Delphi)
Devlog #18 -> Okay, super short devlog just to explain what I am doing. Basically all my hours are spent on fixing the notifications. It is super annoying right now because I am trying to finalize my project and the notifications randomly stop working. I tried clearing out mongoDB and checking on my cron-job and those seem to be working just fine. I’m not sure what to do. I pushed the hours up (for the practice day so I can check it earlier) and redeployed with Render. I shall see tomorrow if it works. View it here: https://mirage54321.github.io/RoboLens/
Devlog #19 -> I know I just committed a bunch the last few days. I guess I realized there is only a few days left and I found how to be way more efficent in getting hours. If I just keep this open and something else on another computer and work with them kinda being different windows then I get a lot more time because the switching of windows in the same computer made me keep forgetting to come back and work on the project (and I’m guessing was cutting the time too). Anywho! The most recent changes I have made is removing the ? mark button. I think I was going for a like “about me” thing but I think it was a little redundant and kind of unneccessary to say the least. I added a report button instead (it’s just in the home page). I got this idea from lovable which was something I worked with during my internship. I highkey have been working so much on this project (you can see by all my hours) that I didn’t want to connect it to the backend. It is just a popout that takes you to an gmail link and you can click send. Maybe if I run out of ideas I can add it as a backend. Now, if I am going to be so honest. I have worked a lot on this project and I want to ship but I also want to just crank out some more hours. I’m extremely proud of this project and I need to get it out to the world so that I can get some users! My issues to work on are: Low MongoDB storage for free account Professionalizing (now just looking back over and seeing if there is anything I wanna fix before putting on chief delphi) View it here: https://mirage54321.github.io/RoboLens/
Notifications are working again! Basically, the rebuilding of Render helped fix the issue which is kind of ragebait. I’m getting a little nervous though because I wonder what happens if someone doesn’t reopen the bookmark (because that is how it resets). Would they still get the messages? Will it update automatically? Overall, it works great. I just worry there may be an error that arises (that is a risk with any project honestly). View it here: https://mirage54321.github.io/RoboLens/
Updates!!! Basically, I’ve been checking to see how many users and views I have. I have google analytics on my project to keep an eye on it. Right now I have 52 users and 163 views. Which honestly, I am pretty dang happy about. (1) I haven’t really been advertising (2) I literally thought it was gonna be like 20 views Woop woop! Okay, now on these past few days I have been working on getting as many hours as possible. I don’t have a personal computer so I am really aiming for literally any of the laptops. Now, programatically I have been working on removing the 3 burst messages for iPhone (it wouldn’t compact itself on the Apple homescreen). FYI: 90% of the time for this was spent removing the 3 burst messages for iPhone and writing Ship #2… so you better be ready for Ship 2! View it here: https://mirage54321.github.io/RoboLens/
Devlog #22 -> I was looking at the comments people left me from my ship and the first thing I noticed that I should work on is the load-in page. It is definitely kind of plain. To be honest, I used Claude to help a lot with this one. Making the spinning circle was pretty easy but I had some complex ideas I wanted to put to work and I just didn’t know how to do it. It has a huge radar that has the colors pop up and says “scounting __ teams”. Overall, I am so happy about this new design! Let me know what you guys think! I also added a folder for the photos so it looks more organized! The next thing I plan to work on “loop crashes if the camera disconnects” comment. Live app: https://mirage54321.github.io/RoboLens/
Devlog #23 -> Fixed the camera disconnect crash from the feedback. Turns out the camera plugin doesn’t actually throw an error when the hardware gets yanked mid-session, it just quietly flips an internal hasError flag and keeps going. Which is why the app was crashing somewhere random instead of failing cleanly. Nothing in my code was listening for that flag, so it just kept trying to read frames and capture photos off a dead controller. Fixed it by adding a listener that actually watches for that error state, cleans everything up, and drops the user onto a proper “Camera disconnected, try again” screen instead of freezing or throwing. Also fixed the retry logic after a failed capture so it doesn’t try to restart a stream on a controller that’s already dead. Next up: the cursor. Someone pointed that out, because every button on web just shows the default arrow. Live app: https://mirage54321.github.io/RoboLens/a
Ships:
I made an app for specifically robotics teams (although this could be used for other things too). This is still a work in progress because there is so much more I want to add. I did this project so that I could make something with an AI model and I’m really proud of myself because Flutter was really hard to work with!
What did I make? Since Ship #1, RoboLens grew from one AI scanner into four connected tools. I added a rules checker that reads the actual FRC game manual (2024–2026) alongside your robot photo so it’s grounded in real rules instead of guessing. I built out a full shared battery tracker. I added a guided camera that walks you through lighting/tilt/framing and auto-captures once the angle looks right. And the biggest addition: a Team Stats & Match Center with four tabs (My Team, Stats, Events, Sim) pulling live data from The Blue Alliance and the FRC Events API, including a season-wide “World Rating,” a matchup simulator with win probabilities, and bookmarking teams to get real push notifications before their matches. I also spent a lot of time on stuff that doesn’t show up as a “feature” but makes the app actually usable: a queue + exponential backoff + retry system so the shared free-tier Gemini key doesn’t randomly fail scans under load, a report button that feeds recurring AI mistakes back into future scans, offline detection so scans fail fast instead of hanging, and a new instant-loading splash screen. What was challenging for me? The AI usage limits were the most persistent problem. Everyone shares one free-tier Gemini key, so scans would fail with no clear pattern whenever enough people hit it at once. I fixed it in stages: first a queue limiting in-flight requests, then automatic retries with backoff (and respecting the retry-after header when Gemini gave one), then finally surfacing that retry status to the user (“High demand. Retrying (2/3)…”) instead of just showing a dead spinner. The guided camera and push notifications both turned into whole rabbit holes of browser-specific pain (iOS Safari blocking camera/notification permissions unless triggered by a direct tap, no live frame streaming on web so I had to build a custom JS-interop layer from scratch, and push not working on iOS at all unless the site’s added to the home screen firs)t. My favorite bug story: the Match Center’s Events tab would spin forever with zero errors. I burned time adding timeouts and retries that did nothing before realizing the real issue. The spinner wasn’t stuck waiting on the network, it was stuck because nothing ever tried. What am I the most proud of? Going from a single-purpose AI scanner to four genuinely useful, connected tools without the codebase turning into spaghetti. I’m also proud that scans now degrade gracefully under load instead of just failing, and that notifications work reliably even though I had zero experience with service workers or VAPID keys before this. And honestly, just sticking with it. 21 devlogs and three months of real iteration based on actual user feedback instead of giving up. What should people know so they can test your project? Live app: https://mirage54321.github.io/RoboLens/ You can log in as a guest for team 4388 to browse batteries without needing an account. Push notifications currently work reliably on desktop browsers and Android (iOS Safari requires the site to be added to your home screen as a bookmark). You can test this by logging into -4388 (Yes, a negative. I needed a number that wouldn’t have a real team). The AI scan/rules tools need a robot photo to test against; if you don’t have one handy, any well-lit photo of mechanical/electrical components will still show you how the flow works....
|
1792875207.636436
|
1793739207.636436
|
|
16183
|
Slackword Bot by @ketchupismm | Stardance
|
ketchupismm
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-10T12:56:18Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it.", "repo": "https://github.com/ketchupismm-cell/Slackword-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}, {"ship_num": 2, "ts": "2026-07-02T01:55:13Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it.", "repo": "https://github.com/ketchupismm-cell/Slackword-Bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}]...
|
[{"post_id": 25926, "ts": "202 [{"post_id": 25926, "ts": "2026-07-10T12:55:41Z", "hours": 0.4089, "text": "For my bot, I have two commands and one feature on my slackword app. /slackword-define, /slackword-help the one feature is the examples when you click the yes button when you use the define command"}, {"post_id": 20455, "ts": "2026-07-02T01:37:45Z", "hours": 1.4642, "text": "I published my work into Github, run it on Nest and as a systemd service"}, {"post_id": 19768, "ts": "2026-07-01T04:47:37Z", "hours": 2.0594, "text": "Finally finished up with adding in exemplar button after definition command is used and took a while to polish everything Planning to add on other commands such as daily word tomorrow"}, {"post_id": 19546, "ts": "2026-06-30T21:24:32Z", "hours": 2.3167, "text": "I added GROQ as a LLM for special-nouns"}, {"post_id": 18822, "ts": "2026-06-30T00:54:20Z", "hours": 1.9583, "text": "Working on cleaning code and adding additional features to definitions"}]...
|
Title: Slackword Bot by @ketchupismm | Stardance
Title: Slackword Bot by @ketchupismm | Stardance
Devlogs:
Working on cleaning code and adding additional features to definitions
I added GROQ as a LLM for special-nouns
Finally finished up with adding in exemplar button after definition command is used and took a while to polish everything Planning to add on other commands such as daily word tomorrow
I published my work into Github, run it on Nest and as a systemd service
For my bot, I have two commands and one feature on my slackword app. /slackword-define, /slackword-help the one feature is the examples when you click the yes button when you use the define command
Ships:
I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it.
I made a dictionary slack app that has 3 functions. Definitions using command, examples are using definitions command, and help command to show all commands. Something that was extremely challenging was adding in the dictionary API and then the GROQ after and had to use ai at the end to help me set up the yes button, polishing my work to be readable, and just small debugging issues like mistypes. I’m really proud of how everything went from learning commands and learning APIs, it’s pretty much my first passion project. The setup is pretty annoying and I’ve tried to explain it as simple as I could in Github when I published it....
|
1793094783.3553972
|
1793181183.3553972
|
|
16300
|
EpochOS by @Mokila | Stardance
|
Mokila
|
2
|
119.0
|
2078
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T09:43:03Z", "hours": 112.0, "multiplier": 19.26, "payout": 2078, "blessing": "neutral", "text": "EpochOS is a fully functional operating system built entirely with vanilla JavaScript, HTML, and CSS. It doesnt require any client side installations or anything and runs directly in your browser. Its features include a file explorer, a browser, a media player, many essential applications, lots of customisation, widgets, and an actual ecosystem that mimics a real operating system. It also has no backend so it’s all run locally on your browser using the browser’s localStorage. Some things you should know before you test this out: Firstly, please don’t finish rating this project until you experience all the features because there are many hidden features that might change your opinion. An example is easter eggs. I implemented many easter eggs which you must experience before voting because these easter eggs are very devloped. If you can’t find them or are stuck on one of the easter eggs, read ARCHITECTURE.md and at the very bottom, i listed all the easter eggs so you can check them out. In fact, read the ARCHITECTURE.md because it provides valuable info about many of the features in the OS and how they work so make sure to read that aswell Secondly, this OS is not compatible with mobile or tablet devices and is optimized for desktop only. So please keep that in mind when you are testing it. Thank you so much for testing this project and hope you enjoy it :)", "repo": "https://github.com/Moksha-0102/MyOwnWebOS", "demo": "https://my-web-os-inky.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-13T15:31:39Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a simple operating system with HTML, CSS, and Javascript that runs on you web browser. It has a nostalgic look and feel with old-styled buttons and looks. To make it more like an OS, a calculator and a notepad have been created and implemented in the app. Moreover, to allow the user to personalise as much as they want, many settings have been included, from custom wallpapers to wallpapers that come from NASA itself and more. This was my first large scale project that I have coded so it’s an interesting experience for me. Before this, I only used to do challenges on platforms like Codewars and other than some small side projects, I don’t have a practical experience. Therefore, i think this project has taught me a lot on how to built stuff yourself. I hope you like my project :)", "repo": "https://github.com/Moksha-0102/MyOwnWebOS", "demo": "https://my-web-os-inky.vercel.app/"}]...
|
[{"post_id": 32866, "ts": "202 [{"post_id": 32866, "ts": "2026-07-22T09:36:10Z", "hours": 0.3622, "text": "WebOS 2 Devlog #21: Final Submission Just did some final changes to the welcome text and am about to ship it"}, {"post_id": 32842, "ts": "2026-07-22T07:57:53Z", "hours": 1.0103, "text": "WebOS 2 Devlog #20: Updated README.md and ARCHITECTURE.md + changed properties window I just realised I had a properties window in the OS and that was quite outdated so I changed to include some new info like the Last Modified date which updates everytime the user saves something because i added a localStorage.setItem that saves the timestamp. I also updated the README and ARCHITECTURE files to make them sound better and to add some additional info. Anyway, this devlog is probably the last on for this project! Hope you enjoy :)"}, {"post_id": 32822, "ts": "2026-07-22T06:51:37Z", "hours": 7.8417, "text": "WebOS 2 Devlog #19: README.md + ARCHITECTURE.md + additional customisation features I’m in the final stages of the project and in this long session, I did many things. Firstly, I wrote a README.md with all the necessary stuff and i also made an ARCHITECTURE.md file which explains the nitty gritty insides of the WebOS so anyone can understand how the website works. Other than that I added a couple of other stuff. Firstly, i realised that even though I have accents to customize the desktop, I don’t have a wallpaper gallery (except the nasa apod) which I found was quite necessary. At first, i coded my own wallpapers like a synthwave grid wallpaper, pinstripe wallpaper for the legace theme, a tranforming aurora wallpaper and like 3 more but after i coded them, they just looked so damn ugly. So i scratched the idea of me coding my own wallpapers and added three categories of wallpapers in the wallpaper dropdown with each category having three 4k wallpapers in them so every time you pick that category, you get a random wallpaper from the three. I also added an about section in the settings which has a buttton that leads to the github page."}, {"post_id": 32308, "ts": "2026-07-21T12:14:02Z", "hours": 5.4103, "text": "WebOS 2 Devlog #18: Debugging session I swear random bugs keep popping up no matter how much debugging I do. There’s always something that’s wrong or doesn’t work but that’s just how it is. In this session which was longer than expected, i fixed a lot of different bugs. Here is a summary of the changes i did: I spent lots of time rewriting the mathematics for the desktop icon layout, and also changed the strict grid-snapping to free-form placement cus it felt it was quite annoying not to be able to place stuff on the desktop wherever you want. Unfortunately, it took too long and i abandoned the idea and just moved on without making any changes. I also spent some time cleaning up the code and tried to optimizing the code. Some other bugs I fixed include: Desktop icons were randomly rearranging themselves every time a file was saved. I found out that the reason was that since the localStorage returns keys randomly, everytime i wrote sth to localStorage, the items were randomized so the ordier they appeared on the desktop changed. So i rewrote the logic to sort the stuff alphabetically before displaying. The Notepad app was also blindly overwriting existing files with the same name. I fixed it by adding a localStorage query to intercept matching keys and to display an osConfirm dialog, forcing the user to explicitly authorize the overwrite. The internal browser was throwing captchas all the time and failed to load error screens for blocked domains. Since Google aggressively blocks embeds and flags them as bot traffic, i changed the default browser to Bing, which was much better and i didn’t get captchas everytime i search somehting up I also modified the system daemon engine so that it introduces itself when a user first view the OS. The weather widget was pulling the location not from where the user was but rather where my ISP was routing my traffic through. So if i lived in a village and ISP routes my traffic through like New York, the weather that showed up was that of New York. To fix this, i swapped the logic to request exact hardware GPS coordinates via navigator.geolocation, while falling back to the IP routing API if the user denies the browser prompt. If the location is inaccurate the user can enable the location permission in the browser and the weather widget then shows the correct location. The visualizer widget was working perfectly but i had the idea to add a text container above the bars which shows what the user is playing. I made way way more changes but many of them conform to the easter eggs and mainly about the theme that gets unlocked (small spoiler there ;)) so i won’t really get too much into it."}, {"post_id": 31915, "ts": "2026-07-20T18:15:51Z", "hours": 10.1178, "text": "WebOS 2 Devlog #17: Media player + Audio spectrum widget implementation It has been a massive coding session. And I barely managed to keep the time below 10 hours and I still went over it. But, on the bright side, the OS now has a fully functional, media player and an audio spectrum widget! In the media player, anyone can listen to radios, and lots of music. But the reason it took 10 hours is because implementing these stuff required facing some serious bugs-some of them for genuinely stupid mistakes-and rebuilding the audio engine the right way (you’ll see what I mean). Here is a breakdown of how these new features work, what went wrong, and some other stuff: Overview of features The Media Player: The new Media Player is a audio application that routes requests to three distinct APIs to fetch music that the user can listen two: Audius: This is a “decentralized music streaming platform for artists, labels, and fans.” And it’s free! I fetches some of the music from this API. Radio-Browser: This is a platform that is, in a nutshell, Wikipedia for radios. I fetched thousands of live, global radio broadcasts using this API Apple iTunes (Preview): This was a golden find because I didn’t know this existed (not for free anyway). This API pulls top hits and previews of music. Granted, it’s not full music tracks but the songs are much more famous and popular. The Audio Spectrum Widget To complement the player, I also added an Audio Spectrum visualizer. It uses the Web Audio API, or more specifically, its AudioContext and an AnalyserNode to get the frequency data from the audio element. That data is then mapped to an HTML5 element. Using requestAnimationFrame, I made it such that the spectrum repaints 40 individual frequency bars roughly 60 times a second, which creates the audio visualiser waveform thing. Challenges The Geolocation failure: The OS was originally hardcoded to fetch radio stations from my address because I hardcoded that for testing purposes. But I stupidly forgot to remove that so when attempting to make this dynamic by using vpns I spent like 40 minutes trying to figure out why ut kept showing stations from my local area and not japan (where my VPN was connected to). And the reason for that is the hardcoded address I mentioned earlier. Moreover, some of the API queries were too specific, causing the media player to return empty for smaller regions like the Bahamas. To fix it i used the BigDataCloud API to quietly ping the user’s IP address, cache their true country code, and inject it into the API queries. the broken audio spectrum: Initially, the audio visualizer was completely blank. Even when fixed, the baseline would just disappear the second music started playing. The canvas drawing logic was also aggressively using clearRect to wipe the entire widget, which erased the idle state baseline. To fix it, I changed the baseline math so that the baseline sits firmly at the bottom of the widget. I also remade the drawing loop to explicitly redraw the baseline before checking the isPlaying state, so the frequency bars can work smoothly. retro theme problems: I completely forgot about the retro theme as i was just focused on building the player and the widget. So, in the end i had to make the stuff retro theme aswell. I encountered some problems there like some white on white text and some styles not applying which turned out to be because my dumbass brain mispelled the ids and classes Oh, and I found some other big bugs. The dragging engine was hella laggy. Like the response time was like 3 seconds before it registered. I would go deeped but im abt to cross the 4000 character devlog word limit but in a nutshell I realised it was because the mousemove event listener was directly updating the inline CSS (style.left and style.top) on every single microscopic mouse movement so it was really laggy."}, {"post_id": 30592, "ts": "2026-07-18T09:18:19Z", "hours": 8.5214, "text": "WebOS 2 Devlog #16: Widget implementation + debugging In this session, i made multiple changes to the OS to improve the overall UX. I had to pull another all nighter again 🥲. Here is what i changed: Change 1: Debugging Everytime i enabled the system daemon in the settngs, the entire os reloaded which was quite annoying so I ripped out the location.reload() in the Settings app. I also moved him to the body so he didn’t get trapped behind windows, because most of the time the daemon was floating behind windows and i couldnt really see him. I also gave the Welcome screen a massive 9999999 z-index so the daemon would float behind it because my previous step was too effective and he was infront of every single screen including like the bootloading screen. Challenges: I ran into z-index hell because I didn’t plan the stacking initially. He was either in the very front or at the very back and it was all a bit weird. Change 2: Widget implementation I initially wanted to implement sticky notes as a widget which was inspired my the mac sticky notes so i coded all of that in first but I realised i can take it a step further and code in multiple widgets. Challenge: But the thing was i hardcoded the sticky notes widget so i had to recode everything and integrate all of the widgets at once I added a simple analog clock widget I added a calendar widget I initially added a system monitor with like the ram and cpu data but the thing was due to the security restrictions, I can’t get the actualy live hardware data so it would have to be a simulation, which i didnt want so I replace the system monitor with a live weather widget which uses the BigDataCloud and Open-Meteo APIs to provide weather data. Change 3: Originally I had all hte widgets in the context menu on after the other but they looked like a list and a bit redundant. So i removed all then in the html file and added one ‘Add a widget…’ option which connects to a screen with all the widget options"}, {"post_id": 30122, "ts": "2026-07-17T13:15:43Z", "hours": 6.5461, "text": "WebOS 2 Devlog #15: System Daemon implementation To keep the users more engaged so even when they saw everythign, they would still spend more time doing stuff, I wanted to build something alive for the desktop environment that would interact with the user. So, instead of a standard app, I built a system daemon! If you dont know what that is, it is a digital pet that hangs out on your desktop and does random stuff. I dont hav ea name for him yet so ill just call him daemon for now. When he’s healthy, he flies around the screen and shouts random stuff at you. But I didn’t want him to just be a visual gimmick. He interacts with the actual operating system itself and has states: He is hungry: Because I previously built a drag-and-drop system for the File Explorer, I hooked him into it. You can drag actual text files or folders out of your explorer and drop them on his face. He will chew them up and literally delete them from the virtual hard drive (localStorage). He has a digestive tract: I built a array for his stomach that records what he has last eaten. If he ate a file you actually needed, you can rapid-click his face 5 times. He will regurgitate the raw file data perfectly back onto your desktop. He has boundaries: I ‘taught’ him to recognize core OS files. If you try to feed him Notepad.app or the System Settings, he will violently reject them and yell at you. He has one more state but that relates to the easter egg so i wont provide any additional details in order to not spoil it Oh, and i changed his appearance for the retro theme. anywhat that’s all for this change. I didn’t get into the nitty gritty of how I built him because I am so excited to finish this project. Just a few more features and then I’m done."}, {"post_id": 29444, "ts": "2026-07-16T12:05:56Z", "hours": 7.8072, "text": "WebOS 2 Devlog #14: Easter Eggs Pt. 2 I am now done with making the easter eggs and in total i made 5 of them, which may seem less but some of them are really really complex and developed. I stayed up till 2am making these 😭. Out of these 5, three of them are simple easter eggs, one is more complex but still quite simple and the final one is essentialyl the absolut highlight. It is the reason why the easter egg section took me so long. I am not going to go into detail to avoid spoilers. Anyway i hope you have fun with the easter eggs :) p.s the attached pic is a screen shot again cus i dont want to give spoilers"}, {"post_id": 29017, "ts": "2026-07-15T17:46:09Z", "hours": 8.8292, "text": "WebOS 2 Devlog #13: Easter Eggs Pt. 1 I was looking forward to this a looooot. I’m not giving any spoilers whatsoever but I was so locked in tday and yesterday coding easter eggs into the OS. I added like 2 easter eggs (might seem less but trust me they’re very developed), one’s a very simple one but the other one is my favourite and is the reason this devlog took so long. It’s still not finished and im only lik halfway done w/ it but I’m not going to go into any details because it will spoil the fun but im sure you’ll enjoy it. Also, im not done with making easter eggs and i just made this devlog cus the time is almost 10hrs. I still have to finish the second easter egg and do more on top of that. The next one will hopefully be the final easter egg session (unless i get another absolute brainwave). p.s to prevent spoilers, the attached pic is just a screenshot once again"}, {"post_id": 28283, "ts": "2026-07-14T13:15:34Z", "hours": 3.2847, "text": "WebOS 2 Devlog #12: Debugging Session + retro theme redesign In this session I started debugging the os and wow i found a lot of bugs. Im not going to get into them because it would take too long but some of them include how the bootloading sequence absolutely breaks if the user presses escape before the setup is finished because the cache isnt cleared properly so when the user gets the setup agian, he wont we able to configure some stuff like the password because the cache wasnt cleared properly. I also redesigned the retro theme because it looked ugly because the accents i implemented in the modern theme appeared in the retro theme which didnt fit together. Moreover, some of the aspects of the retro theme, such as the top part of the web browser or the settings screen were just uncomfortable to look at. Changing the retro theme was such a pain because everytime i thought i fixed it, a new discrepancy appears and at one point after i fixed it, my retro-theme.css was so messy i couldnt be bothered to fix it so i just inputted the messy working version into gemini and it cleaned it up. Anyway that was all i changed this time. And I did more and more changes but many of them are small and it would take too long to explain in a devlog. p.s. didnt know which pic to attach so its just a simple screenshot of the desktop."}, {"post_id": 28127, "ts": "2026-07-14T06:44:53Z", "hours": 9.4628, "text": "WebOS 2 Devlog #11: Reset btn + Notepad IDE + other changes This was a long long coding session. Had to stay awake till like 2am. Here are the changes i made. Ill try to keep everythign concise because theres a 4000 char limit and i have lot more to say than that. Change 1: I added a factory reset button in settings that directs the user to the webos setup screen like the one they get when they first enter the website. When testing this feature, i realised that random variables from completely different web projects started appearing in the File Manager. Because browsers share localStorage databases across the same local port (e.g., 127.0.0.1:5500), the OS was inheriting the ghosts of old projects. The solution: I had to upgrade the Initial Setup Utility. When formatting the Virtual Hard Drive, the system now temporarily caches the user’s OS credentials in memory that they entered, executes a total localStorage.clear() wipe to delete all the localStorage varialbles, and then safely restores the username and stuff before continuing normally. Change 2: Notepad IDE This was the part that took the longest (and its still not done). I wanted to create something absolutely unique that i havent seen in any other webos projects that i saw. And i realised, why dont i make an IDE in me webos? Not an actual IDE ofc but the goal was to allow users to write raw HTML/JS in the Notepad, save it as a .app file, and double-click it on the desktop to launch it as a fully functioning, program. Attempt 1 (Failure): I initially tried parsing the saved text and running it directly in the OS context using eval(). It was an absolute security and stability nightmare. The custom app had root access to the OS memory and instantly overwrote the osState object, completely crashing the Window Manager within seconds. Attempt 2 (Failure): I tried fixing attempt 1 but messed up the entire code in the process so i had to revert to that commit and this time, i tried putting the apps in Web Components and the Shadow DOM. While this successfully isolated the CSS so custom apps didn’t break the OS styling, the JavaScript still executed in the global window scope. Running two different custom apps simultaneously caused variable collisions that bricked the taskbar. It was too complex and fundamentally flawed. I wiped the slate clean again. Attempt 3 (Success): I realised that the answer was looking straignt at me. I was so stupid. I can just take the code and slap it on to an iframe, and it runs it, just like how i made the web browser. The solution was that When a user double-clicks a custom .app, the OS takes the raw code and converts it into a text/html Blob. It then passes that Blob through URL.createObjectURL(), creating a localized URL. By feeding that URL into an , the custom app boots perfectly. I am really proud of this feature. It’s still not fully done but i had to make a devlog since the tracked time almost reached 10hrs."}, {"post_id": 27267, "ts": "2026-07-12T18:02:31Z", "hours": 4.4556, "text": "WebOS 2 Devlog #10: icon implementation + taskbar remodeling When i looked at the webos, i realised it missed something to look like an actual os. It wasnt realistic enough. So, i decided to do two changes to make it more realistic. Here is what it did: Change 1: I added some real user data in the taskbar. More specifically, the host device’s actual network and battery status and date. I used the the browser’s native navigator.onLine and the navigator.getBattery() APIs. I also made it such that the os actively listens for network connection drops such as when wifi is disconnected and battery charging/level events, and updates the data accordingly. Change 2: I also noticed that my entire os is filled with emojis for stuff like calculator, file manages (all the apps essentially), the taskbar, the browser, the sites in the browser, etc. THis made it look really unprofessional so i fixed it. I replace all system emojis with Google Material Symbols to make it look a lot better. I did face one challenge however, the emojis in my website in my web browser weren’t being replaced by icons for some reason and I then realised that the iframe sites acts as a sandbox and they dont inherit the imported apis from the main html file. So I just injected a tag and imported the Google Material Symbols API directly in the isolated HTML code in my js file. Change 3: The goal of this change was ot allow the user to snap the taskbar to the top of the screen (Linux style). This was the part that took longer than expected. I originally just added an optoin in the settings to move my taskbar to the top of the screen but the pill-like, floating taskbar i had was really ugly when it was at the top. So, i spent like more than an hour and half trying out new designs and redesigning the taskbar so it looks good both when its at the top and the bottom and finalised a design that actually looks much better than what i had before. It now takes up like the entire bottom/top of the screen instead of floating in the middle liek before. That was all the changes made since the last devlog."}, {"post_id": 26774, "ts": "2026-07-11T19:22:51Z", "hours": 3.2697, "text": "WebOS 2 Devlog #9: Implemented color accents and some browser improvements I was originally going to do some debugging and finish of this project but i was looking through other peoples’ webos projects and realised there was much i could improve. I then got like a huge brainwave about new stuff to implement so ig it’ll be a bit longer before I ship this project. One of these ideas was adding color accents because right now my modern theme is limited only to a light pinkish color. Here are the changes i made: Change 1: Accents In the settings screen, i added an option to choose the system accents. I also gave some basic presets and added an option to pick a color by adding a color picker option. Implementing this was quite simple, just replace all hardcoded pink colors with –os-accent (which i added in css). I linked htis –os-accents attribute/class to the color that the user chooses in js and made ti that all the places where the accent pops up, the color variable there is replaced with –os-accents. So if the user changes the accent in settings, the places where –os-accent is set changes color automatically. Challenge 1: Contrasting invisible text The problem: Swapping a single hex code for an accent color that the user chooses breaks all translucent UI elements (like shadows). Furthermore, if a user picks a bright color (like Mint Green or Yellow), the hardcoded white text on the title bars becomes completely invisible. The Solution: I implemented a Hex-to-RGB engine that injects raw RGB values directly into the CSS :root. This solves the first part of the problem. To solve the text contrast issue, I implemented the WCAG Relative Luminance algorithm ( used a bit of outside help here iykwim ;)). The OS now mathematically calculates the perceived brightness of the user’s chosen color. If the relative luminance passes a threshold of 0.179, the OS flips the title bar text to pitch black so its legible comfortable. Change 2: i was just playing around in the webbrowser and exploring, and i found some stuff that needed to be fixed: when building a simulated web browser using tags, embedding sites like google resulted in a “Refused to Connect” error. These servers send an X-Frame-Options: DENY header. Because client-side JavaScript is legally blind to server headers, the OS couldn’t detect the block to show the custom error screen I made. I knew this error existed and knew this was a thing but only after experiencing it like a real user did i realise how annoyinf this was and it made my os seem broken. Solution 1 (attempt): I initially tried routing requests through a third-party API to read the headers, but ad-blockers and privacy shields just made the API requests not work, crashing the entire browser app (at least thats what i think is the cause). The Solution: I used a massive Regex blocklist, such that the browser now instantly intercepts requests to 99% of top-tier websites that block iframes (like youtube or google), and routs the user to a custom error page. (did these stuff with the help of some ai only) Next Problem: When a user searches Google inside the iframe and clicks a link in the embedded page, the OS address bar wouldn’t update. This is a browser restriction. Browsers mathematically lock JavaScript out of reading cross-origin URLs for security reasons. At this point i just stopped instead of trying to waste my time trying to break through some military grade (i think?) restrictions. Change 3: Before, only iframe compatible websites worked but i had an idea to route all queries (except the ones in websites format) through a google search. Apparently, google.com doesn work in iframe but the google search works. So now if i type hello world, it just redirects me to a google search page with hello world searched. P.S. I made some other tiny changes aswell but i cant rlly remember them now sry"}, {"post_id": 20257, "ts": "2026-07-01T20:07:19Z", "hours": 2.9408, "text": "WebOS 2 Devlog #8: Migrated to ES6 arch. and split css into any files I just realised that essentially all my code is squished into three files-index.html, index.css, and index.js. And all of them were quite big. Like the js file had more than 2,000 lines, and css had more than a 1,000 lines. I dont know why i havent noticed it before but im glad that i did now because i was plannign to do a deep debugging session next and it wouldve been hella hard to do in a 2000+ line file. Plus, a single bug in e.g. the calculator could crash the file manager, and debugging required scrolling through thousands of lines of code. So, i decided to migrate the index.js into an ES6 architecture and split the index.css into multiple manageable files. That’s all i can say for this devlog ig. There was nothing new except some lines of code i had to add after the migration to make sure everything is working. There were no really new features added. But there were many things that delayed me: i accidentally deleted a block of code in the index.css without moving it and didnt notice it so some styles were broken and i had to like retrace my steps and stuff to fix all the problems it caused. That’s all ig. The project is almost coming to an end! Can’t wait to ship it :)"}, {"post_id": 19868, "ts": "2026-07-01T08:56:38Z", "hours": 3.9269, "text": "WebOS 2 Devlog #7: Web Browser Implementation I reached the final couple of phases of my project and this is one is one of the crucial ones: building a web browser. My plan was to use iframe. But the thing about building a webbrowser inside a webbrowser or inside a sandboxed environment like a website is most websites (about 99%) like google, youtube, or github use X-Frame-Options and Content-Security-Policy: frame-ancestors ‘none’ which means they specifically block their websites from being displayed in cases like this ot prevent clickjacking. So every time i tried loading a webpage, it just says this webpage refused to connect or sth. I used ai to try bypassing it but it didnt work, so with the help of the same aforementioned ai, i implemented a solution. The solution: Since I cannot disable host browser security policies, and i dont have a backend proxy server, I had an idea to just build my own native ‘browser’: EpochOS IntraNet (just decided on the name EpochOS btw). This didnt take too long cus i had someone (ai) helping me cus it was almost midnight and i was tired as hell. Here are the features: I wrote a parser that intercepts navigation requests. If the user navigates to webos://home or webos://directory, the engine injects a large data:text/html;charset=utf-8 string directly into the iframe’s src attribute. This opens a local, HTML dashboard without triggering cross-origin blocks. Essentially, i wrote html in js and injected that html into the iframe src, so i essentially made my own ‘web-page’. Standard links inside a data URI iframe will try to navigate the iframe itself, which doesn’t update the OS address bar. To fix this, I set up a window.addEventListener(‘message’) listener on the parent OS. The buttons inside the iframe use parent.postMessage() to pass the target URL up to the OS, allowing the JavaScript engine to handle the routing and update the UI properly. A real browser alse doesn’t lose a page’s state (like scroll position) when you switch tabs. And im trying to make a real browser. So, to achieve this, the browser engine now doesn’t share a single iframe but rather new ones get created: Every time the user clicks the “New Tab” button, a new node is generated and appended to the container. Switching tabs simply toggles the CSS display property between none and block. This keeps inactive pages fully loaded in memory. Because cross-origin security rules (the ones i mentioned before) lock us out of accessing the iframe’s native window.history object, I had to build a custom history router. Every tab object in the JS array maintains its own history array and a historyIndex pointer. The back/forward buttons just decrement or increment this pointer and re-apply the URL to the iframe. Kinda genius ngl (this was an idea from ai btw) But for a browser to be useful, it needs to have some proper webpages. After some scouring, i found some webpages that do work in iframe and dont have the restrictions that websites like google do. I’m not gonna tell you what websites those are, you just have to see yourself. I found like 10 or sth so there’ll be plenty of stuff to do. Other features of the browser include: bookmarking, reloading (i also added a reloading spinner btw) and some more stuff."}, {"post_id": 19207, "ts": "2026-06-30T14:00:14Z", "hours": 1.9208, "text": "WebOS 2 Devlog #6: UI, UX and functionality improvements This update focuses heavily on stabilizing what i already have and also refining the less finer aspects of the UI. Here is what i did: Theme improvenets: I overhauled the .theme-retro class. stuff were contradicting each other with one thing saying this and the other saying that (too many to even give an example). I also changed some other minor stuff too like increased the grid size in the desktop to prevent icons from overlapping. But this was the main change: System Security & Identity Manager: Implemented a global sanitizeIdentity utility (Regex: /[^a-zA-Z0-9_-]/g) to remove spaces and illegal characters from usernames and hostnames when the user sets it before writing to localStorage because if i have sth like ‘John Doe’ as the username and ‘my school computer’ as the host name, the terminal command would look sth like John Doe@my school computer. And this just looks hella ugly. Dedicated Identity UI: removed the raw identity inputs out of the Settings menu like i had before and moved them into a dedicated Identity Manager window because its more secure that way. I also added an authenticaiton wall before this window pops up. To do this, i wrote an async while loop for identity verification. All the users now have successfully pass the password prompt (or use the recover override to bypass the password) before it allows them to modify any identity settings. Bootloader improvements: btn-shutdown now properly halts system processes (clearing systemClockInterval and locking pointer events) instead of just hiding the UI like it did before where it just had like a black screen with text on it saying shutting down and stuff. It now has like a loading screen and all that stuff. Context Booting: i also implemented sessionStorage.setItem(‘boot_context’, ‘warm’) to track system restarts so different boots have like different bootloading sequences (the point below this). This didn’t take too long as i could just copy and past what i had in other sequenes and just take the text. Differnet Boot Sequences: The bootloader now reads the sessionStorage context. A Cold Boot triggers the full POST memory checks and hardware scans (dont know what this is. had to use ai for the sequences cus i didnt know what the data was). A Warm Boot (restart) bypasses POST and executes a different initialization sequence. THis makes the user more immersed in the environment."}, {"post_id": 18635, "ts": "2026-06-29T20:34:42Z", "hours": 3.7578, "text": "WebOS 2 Devlog #5: File manager overhaul + custom dialog box I realised that always having the custom browser alerts was kinda boring and interrupting so i made my own dialogue box. I also changed the file manager to include some essential functions that it was missing to make it more like an OS (see below). Here are the changes i made: I abandoned the old array-based folders. I made it so that it now reads and writes directly to localStorage using stricter pathing (e.g., webos-file-Root/Documents/file.txt). I also built a native getUniqueName() function. If you create a duplicate file or folder, there’s no like a (1), (2), etc. at the end of it, which prevents data overwrites. This makes it more like a real OS Drag-and-Drop: I alos removed the old custom JavaScript coordinate trackers for file movement. It now uses the native HTML5 Drag-and-Drop API. You can physically pick up a file from the Explorer window, drag it out, and drop it directly onto the visual Desktop wallpaper. Custom Dialog Box: Native browser popups (alert(), confirm()) look hella ugly and break the flow so i built a custom dialog engine using JavaScript Promises. Now, when the system needs confirmation a custom window that fits with the theme appears. Because it uses async/await, the JavaScript pauses and waits for user acceoting or declining without freezing the browser. List View & Item Properties: I introduced a hybrid Grid/List view (just like a real os like mac). Because tracking file metadata (like Date Modified) from the start would have been way to complicated, I just built this engine where when the File Explorer encounters a file without a timestamp, it instantly generates metadata key (os-meta-path) using Date.now() and saves it permanently, which means that it allows for Date sorting without breaking anything."}, {"post_id": 17638, "ts": "2026-06-28T14:55:23Z", "hours": 4.0281, "text": "WebOS 2 Devlog #4: Initial bootloading sequence + login (optional) When i looked at other projects i realised that they all have some kind of flashy bootloading sequences but mine didnt have any so i built one. I didn’t want it to be too flashy so i made a simple, straightforward sequence. I also knew what exactly I wanted so I managed to finish this in 4hrs on the dot or it would’ve taken a lot longer. This is what it consists of: Bootloader that takes into account the selected theme: Since I had two themes in my OS (Modern and Legacy), it didnt make sense for both to have the same loading screen. So the system now actually boots up differnetly before loading the UI. Depending on your settings, you’ll either get a quick Modern UEFI startup, or a 1995 Legacy BIOS sequence complete with memory checks, IDE drive detection, and ASCII loading bars (had to use some outside help [ai] for this one as I’m not that old to know all that stuff). Hardware Interrupts: Just like a real PC, if you hit esc while the system is booting, it triggers a hardware interrupt and drops you into a configuration screen. Interactive OS Installation: If it’s your first time booting up (or you reset your system), you now have to actually “install” the OS. You can type in your preferred Username, network Hostname, and set an Administrator Password right inside the terminal. You even get the option to format your virtual hard drive. Login: If you set a password (which is optoinal) during setup, the boot sequence will actually halt and lock the system until you type it in. (Don’t worry, I added a recover command bypass in case anyone forgets it). Terminal Integration: The CLI terminal now dynamically reads your setup data. Instead of a normal prompt that you used to get with the default user@stardance or sth, you’ll see your actual custom username@hostname:~/$. Loading text: as the os loads and goes through the bootloading sequence some highly advanced random computer text ‘loads’ to add a little bit to the realism. Some of them are actual data from the host computer such as ram, gpu, and stuff like that. I had lots of other text and loading content that came from the the user’s actual real life hardware and software data, which added to the realism I had to research and use ai to make this because I had no knowledge of how computers were back then. There’s more but it wont fit here so you’ll just have to see it when i host it after my next ship."}, {"post_id": 17451, "ts": "2026-06-28T07:29:09Z", "hours": 2.8478, "text": "WebOS 2 Devlog #3: Building a UNIX Terminal + some other improvements This was a major update today for WebOS 2.0 as i built a genuinely realistic CLI. It’s looks and acts like a Mac Terminal (cus i use mac). Here is what i implemented: In the terminal, i implemented the following commands: help, clear, pwd, ls, cd, cat, touch, mkdir, rm, echo, whoami, date, history, and nano. This part itseld wasnt so difficult cus I had previously done something similar before but it was still challenging nonetheless. I wanted the CLI to be as realistic as possible so I implemented (with a little bit of help from gemini) a custom AST-style parser. It fully supports logical command chaining (&&, ||, ;), quotation marks usage (both single and double), and file redirection (>, ») straight into the virtual hard drive. Autocomplete: This was probably the hardest thing i tried to build and i am happy with how it turned out. I implemented a zsh-style Tab completion system. Pressing Tab auto-fills the longest common prefix and then shows all the possible options directly beneath your active prompt. This is one of the things I a most proud of because after using it, it was essentially very similar to the mac Terminal. This autocomplete works both for commands and files/folders. Errors and stuff: The terminal behaves exactly like real bash. If you type ls -la (-la is not implemented [yet?]) or cd too many args, it won’t just blindly execute or fail silently (it originally did so i had to change it), but it will spit back the same error message you’d expect to see on a real machine. GUI/CLI Integration: When i was implementing nano, i tried to think of how to implement a CLI editor. But i then realised, i can just connect the nano command to the notepad that I alreadu made. So typing nano test.txt in the terminal now just launches the Notepad app and opens the file for editing. And I made some other changes to stuff like the file manager but the terminal implementation above is the biggest change."}, {"post_id": 16900, "ts": "2026-06-27T13:19:35Z", "hours": 1.9075, "text": "WebOS 2 Devlog #2: UI & UX Debugging + UI Improvements This was quite a short session mainly focused on debugging. Here are the changes for this session. New Setup Wizard: The Welcome Screen has been completely redesigned into a classic two-pane setup wizard. (In Retro mode, it even has the iconic sideways teal text on the sidebar). State Persistence: The OS now remembers your settings. Your preferences for military time, desktop icon labels, and whether you want to see the welcome screen on boot are all permanently saved to localStorage. Calculator & Layout Fixes: The calculator now properly displays full math expressions (e.g., 3 + 5) instead of instantly wiping the screen. Before it still worked but it just showed the numbers and the answer-it didnt show what the user was doing. I also fixed a ton of bugs. Apps that are maximized now perfectly snap to the taskbar without overlapping, and the File Explorer drag-to-select doesn’t glitch when you move the window because before the drag-to-select used to activate when i was dragging the window."}, {"post_id": 16391, "ts": "2026-06-26T17:48:49Z", "hours": 13.705, "text": "WebOS 2 Devlog #1: Transitioning into an actual OS. The WebOS 2 mission just unlocked so all the time before i spent working on this overhaul, hence the 13 hour devlog. In the last devlog, i had a very basic beginning: a basic onboarding screen with some text and a “Continue” button. There was no actualy proper desktop, not that many apps, and definitely no File Explorer. Over the last 13 hours, I managed to change the project into a fully functioning, browser-based operating system with its own virtual file system, and app ecosystem. Here is a breakdown of everything that was built in this time. Since i made a lot of changes, i’ll keep it brief and won’t go into it too much: The Window & Desktop Engine: the core physics of the OS were built completely from scratch. Drag and Drop: Windows can be dragged freely but are strictly clamped to the viewport so they can never be lost off-screen. Window Controls: remade the full Minimize, Maximize, and Close logic. Animations: Implemented a requestAnimationFrame state machine so windows don’t just appear—they like animate and scale and fade out into the taskbar. Desktop Grid: Desktop icons are draggable and auto-snap to an invisible grid when released. File System (File Manager): Going from zero file management to a complete virtual system was perhaps the biggest change. It is powered by localStorage, and the OS now remembers everything: Dynamic File Explorer: Built a grid/list view system complete with a sidebar, path breadcrumbs, and directory navigation. Context Menus: Right-clicking files now opens custom context menus to rename, delete, or restore items. Recycle Bin: Files are moved to a functional Trash directory where they can be permanently emptied or restored to the Root folder. Drag-and-Select: made a custom mouse-drag selection box (the translucent pink lasso) to highlight multiple files at once. App Ecosystem: Themes: I built a dynamic theme engine with two main themes. Modern Dark: The default OS features premium glassmorphism, background blurs, and other stuff, and has like a pink accent color. Retro: It changes the OS back to what it looked like in like 1995 by replacing animations and toggles with grey borders, checkboxes, and the blue desktop background. The New Welcome Screen: That old, basic onboarding screen looked ass so it was completely scrapped. I replaced it with a better and cleaner on that also remembers their preference if they check “Don’t show this on startup.”"}, {"post_id": 8031, "ts": "2026-06-13T12:06:02Z", "hours": 0.6592, "text": "Devlog #3: Onboarding and Eliminating FOUC Before shipping the WebOS 1 project and moving on to WebOS 2 project, I needed to implement an Onboarding/Welcome Screen to introduce users to the OS environment. This required a full-screen dark overlay. this is what i did: Z-index mismatch Because my custom Drag Engine automatically increments the zIndex of any .window it touches, the moment I clicked the Welcome Screen, the engine overwrote its god-tier Z-Index (99999). This caused an immediate Z-Index collapse, burying the modal underneath the desktop icons and the dark overlay. The Fix: I had to implement a strict exception in the JavaScript mousedown event listener to protect the Welcome Screen’s ID from being overwritten. DOM Reordering: To guarantee that the Welcome Screen will be at the very top,, I moved the Welcome Screen to the absolute bottom of the document. This means it will naturally sit on top of the other elements. Eliminating the FOUC I used the localStorage API so users could check a “Don’t show this again” box, saving their preference to the hard drive. However, this caused a massive FOUC bug. The Problem: HTML renders faster than JavaScript executes. On boot, the browser would instantly paint the Welcome Screen to the monitor. A few milliseconds later, JavaScript would read the hard drive, realize the user disabled the screen, and violently delete it—causing an ugly flicker. Fix: I basically just inverted the rendering logic. I hardcoded ‘display: none;’ directly into the HTML so the modal is completely invisible by default. Now, the browser paints nothing. JavaScript checks the hard drive, and only turns the welcome screen on if it confirms the user actually wants to see it. Now it’s much better. Ig this is the end of my WebOS 1 project. I will be shipping this project and then moving on to WebOS 2 where I’ll be implementing File Management, In-browser-browser?, and maybe some other built in tools. That’s the plan for now."}, {"post_id": 8007, "ts": "2026-06-13T11:10:55Z", "hours": 0.6994, "text": "Devlog #2: Debugging + Icon dragging features + localStorage implementation The core window manager is working properly so this second session was all about polishing the UI and UX aspects. But there were some challenges: The faulty dragging I transitioned the desktop icons from a static flexbox grid to absolute positioning so they could be freely dragged around the screen (like an actual operating system). However, this immediately triggered native browser collisions. The Problem: When clicking and dragging an icon, the browser saw the action as trying to highlight text or drag an image to a new tab. This triggered a native HTML “ghost drag,” completely overriding my custom JavaScript drag engine and leaving the icon permanently stuck to the cursor. The Solution: I just basically implemented multiple stuff to solve this: Applied ‘-webkit-user-select: none’ and ‘user-select: none’ to prevent highlighting. Injected ‘draggable=“false”’ natively into the HTML. Applied ‘pointer-events: none’ on the inner emoji and label text. This forces the mouse click to pass through the text and hit the icon container directly, ensuring my custom e.preventDefault() mousedown event works properly every time. State Persistence (The Local Storage API) An OS is useless if it resets every time you turn it on. I wired up the browser’s native localStorage API so it saves some of the stuff that the user did. So far it’s only the position of the icons, but I’m planning to add more stuff to the localStorage. Here are the changes: Upgraded the mouseup event listener to capture the exact X and Y coordinates of an icon the moment it is let go after dragging. Built a boot sequence that loops through .desktop-icon elements on page load, fetches their saved coordinates , and implementes them. Wallpaper changing bug The NASA API integration was fetching data successfully, but massive high-res images were causing visual lag, leading to a blank blue screen while the image downloaded in the background. Made a new thing where the newImage() is inserted into the virtual memory of the js. The UI now triggers a document.body.style.cursor = ‘wait’ loading wheel and displays a “Downloading…” status. JavaScript intentionally halts the DOM update until the virtual image’s ‘.onload’ event fires, ensuring the wallpaper only gets applied to the screen exactly when it is 100% ready. Lastly, I also added a setting in the settings tab where the user can choose if the icon labels are hidded or shown. What’s Next? The desktop environment is now completely stable, personalized, and persistent. Next up: More UI and UX refinements before shipping for WebOS 1. Gonna implement File Management for WebOS 2 :)"}, {"post_id": 7644, "ts": "2026-06-12T19:27:06Z", "hours": 5.5711, "text": "Devlog #1: Booting Up - Building a Custom Window Manager & Desktop Environment from Scratch Today marks the official first boot of my WebOS project. I’m trying to build a full OS that runs in the Web Browser directly using HTML, CSS, and Vanilla JavaScript. It acts like an actual operating system, like windows for example, but the only difference is the way it looks, it’s identity and that it runs in your web browser. Over the past few hours, I changed the project from a static layout into a fully interactive environment. Here is a breakdown of the core engine and features that I currently built. The Custom Window Manager The hardest part of making an OS is handling window states. I built a universal Drag-and-Drop engine with dynamic Z-Index management. The Problem: Windows would get stuck behind each other, or the browser would lose track of the mouse if the user dragged too fast or threw the window off-screen, so i wouldn’t be able to drag it back. The Solution: I implemented an event elegation system attached to the document root, calculating mouse offsets relative to the title bars. This means wherever the mouse moves, the title bars move to keep that offset difference the same, which is essentially what the drag and drop function is. I also engineered physical constraints so windows can never be dragged out of the viewport. The Desktop Environment To not make seem like this is just a website, I completely changed the browser’s default behavior. I Implemented double-click event listeners for desktop icons and then overrode the native browser right-click menu ( e.preventDefault() ) and built a custom OS context menu this makes it feel more unique. Core Applications Notepad: A fully resizable text editor using CSS flexbox so the typing area automatically expands with the window. Calculator: Quite self-explanatory. Engineered the math logic from scratch. Settings (NASA API): Built a customization menu that toggles a global 12hr/24hr clock state, and fetches real-time data from NASA’s APOD API to dynamically change the desktop wallpaper based on the NASA Picture of the Day. What’s Next? The UI feels like an OS, but it lacks permanence. Next on the roadmap: File Management. I’ll be engineering a system to actually save the data typed into the Notepad so it survives page refreshes. Also, I want to create a web browser with actual internet access to really bring that OS feeling. That’s all I have planned out. p.s. I’ve attached some pictures of my website below - hope you like it :) Stay tuned."}]...
|
Title: EpochOS by @Mokila | Stardance
Devlogs:
De Title: EpochOS by @Mokila | Stardance
Devlogs:
Devlog #1: Booting Up - Building a Custom Window Manager & Desktop Environment from Scratch Today marks the official first boot of my WebOS project. I’m trying to build a full OS that runs in the Web Browser directly using HTML, CSS, and Vanilla JavaScript. It acts like an actual operating system, like windows for example, but the only difference is the way it looks, it’s identity and that it runs in your web browser. Over the past few hours, I changed the project from a static layout into a fully interactive environment. Here is a breakdown of the core engine and features that I currently built. The Custom Window Manager The hardest part of making an OS is handling window states. I built a universal Drag-and-Drop engine with dynamic Z-Index management. The Problem: Windows would get stuck behind each other, or the browser would lose track of the mouse if the user dragged too fast or threw the window off-screen, so i wouldn’t be able to drag it back. The Solution: I implemented an event elegation system attached to the document root, calculating mouse offsets relative to the title bars. This means wherever the mouse moves, the title bars move to keep that offset difference the same, which is essentially what the drag and drop function is. I also engineered physical constraints so windows can never be dragged out of the viewport. The Desktop Environment To not make seem like this is just a website, I completely changed the browser’s default behavior. I Implemented double-click event listeners for desktop icons and then overrode the native browser right-click menu ( e.preventDefault() ) and built a custom OS context menu this makes it feel more unique. Core Applications Notepad: A fully resizable text editor using CSS flexbox so the typing area automatically expands with the window. Calculator: Quite self-explanatory. Engineered the math logic from scratch. Settings (NASA API): Built a customization menu that toggles a global 12hr/24hr clock state, and fetches real-time data from NASA’s APOD API to dynamically change the desktop wallpaper based on the NASA Picture of the Day. What’s Next? The UI feels like an OS, but it lacks permanence. Next on the roadmap: File Management. I’ll be engineering a system to actually save the data typed into the Notepad so it survives page refreshes. Also, I want to create a web browser with actual internet access to really bring that OS feeling. That’s all I have planned out. p.s. I’ve attached some pictures of my website below - hope you like it :) Stay tuned.
Devlog #2: Debugging + Icon dragging features + localStorage implementation The core window manager is working properly so this second session was all about polishing the UI and UX aspects. But there were some challenges: The faulty dragging I transitioned the desktop icons from a static flexbox grid to absolute positioning so they could be freely dragged around the screen (like an actual operating system). However, this immediately triggered native browser collisions. The Problem: When clicking and dragging an icon, the browser saw the action as trying to highlight text or drag an image to a new tab. This triggered a native HTML “ghost drag,” completely overriding my custom JavaScript drag engine and leaving the icon permanently stuck to the cursor. The Solution: I just basically implemented multiple stuff to solve this: Applied ‘-webkit-user-select: none’ and ‘user-select: none’ to prevent highlighting. Injected ‘draggable=“false”’ natively into the HTML. Applied ‘pointer-events: none’ on the inner emoji and label text. This forces the mouse click to pass through the text and hit the icon container directly, ensuring my custom e.preventDefault() mousedown event works properly every time. State Persistence (The Local Storage API) An OS is useless if it resets every time you turn it on. I wired up the browser’s native localStorage API so it saves some of the stuff that the user did. So far it’s only the position of the icons, but I’m planning to add more stuff to the localStorage. Here are the changes: Upgraded the mouseup event listener to capture the exact X and Y coordinates of an icon the moment it is let go after dragging. Built a boot sequence that loops through .desktop-icon elements on page load, fetches their saved coordinates , and implementes them. Wallpaper changing bug The NASA API integration was fetching data successfully, but massive high-res images were causing visual lag, leading to a blank blue screen while the image downloaded in the background. Made a new thing where the newImage() is inserted into the virtual memory of the js. The UI now triggers a document.body.style.cursor = ‘wait’ loading wheel and displays a “Downloading…” status. JavaScript intentionally halts the DOM update until the virtual image’s ‘.onload’ event fires, ensuring the wallpaper only gets applied to the screen exactly when it is 100% ready. Lastly, I also added a setting in the settings tab where the user can choose if the icon labels are hidded or shown. What’s Next? The desktop environment is now completely stable, personalized, and persistent. Next up: More UI and UX refinements before shipping for WebOS 1. Gonna implement File Management for WebOS 2 :)
Devlog #3: Onboarding and Eliminating FOUC Before shipping the WebOS 1 project and moving on to WebOS 2 project, I needed to implement an Onboarding/Welcome Screen to introduce users to the OS environment. This required a full-screen dark overlay. this is what i did: Z-index mismatch Because my custom Drag Engine automatically increments the zIndex of any .window it touches, the moment I clicked the Welcome Screen, the engine overwrote its god-tier Z-Index (99999). This caused an immediate Z-Index collapse, burying the modal underneath the desktop icons and the dark overlay. The Fix: I had to implement a strict exception in the JavaScript mousedown event listener to protect the Welcome Screen’s ID from being overwritten. DOM Reordering: To guarantee that the Welcome Screen will be at the very top,, I moved the Welcome Screen to the absolute bottom of the document. This means it will naturally sit on top of the other elements. Eliminating the FOUC I used the localStorage API so users could check a “Don’t show this again” box, saving their preference to the hard drive. However, this caused a massive FOUC bug. The Problem: HTML renders faster than JavaScript executes. On boot, the browser would instantly paint the Welcome Screen to the monitor. A few milliseconds later, JavaScript would read the hard drive, realize the user disabled the screen, and violently delete it—causing an ugly flicker. Fix: I basically just inverted the rendering logic. I hardcoded ‘display: none;’ directly into the HTML so the modal is completely invisible by default. Now, the browser paints nothing. JavaScript checks the hard drive, and only turns the welcome screen on if it confirms the user actually wants to see it. Now it’s much better. Ig this is the end of my WebOS 1 project. I will be shipping this project and then moving on to WebOS 2 where I’ll be implementing File Management, In-browser-browser?, and maybe some other built in tools. That’s the plan for now.
WebOS 2 Devlog #1: Transitioning into an actual OS. The WebOS 2 mission just unlocked so all the time before i spent working on this overhaul, hence the 13 hour devlog. In the last devlog, i had a very basic beginning: a basic onboarding screen with some text and a “Continue” button. There was no actualy proper desktop, not that many apps, and definitely no File Explorer. Over the last 13 hours, I managed to change the project into a fully functioning, browser-based operating system with its own virtual file system, and app ecosystem. Here is a breakdown of everything that was built in this time. Since i made a lot of changes, i’ll keep it brief and won’t go into it too much: The Window & Desktop Engine: the core physics of the OS were built completely from scratch. Drag and Drop: Windows can be dragged freely but are strictly clamped to the viewport so they can never be lost off-screen. Window Controls: remade the full Minimize, Maximize, and Close logic. Animations: Implemented a requestAnimationFrame state machine so windows don’t just appear—they like animate and scale and fade out into the taskbar. Desktop Grid: Desktop icons are draggable and auto-snap to an invisible grid when released. File System (File Manager): Going from zero file management to a complete virtual system was perhaps the biggest change. It is powered by localStorage, and the OS now remembers everything: Dynamic File Explorer: Built a grid/list view system complete with a sidebar, path breadcrumbs, and directory navigation. Context Menus: Right-clicking files now opens custom context menus to rename, delete, or restore items. Recycle Bin: Files are moved to a functional Trash directory where they can be permanently emptied or restored to the Root folder. Drag-and-Select: made a custom mouse-drag selection box (the translucent pink lasso) to highlight multiple files at once. App Ecosystem: Themes: I built a dynamic theme engine with two main themes. Modern Dark: The default OS features premium glassmorphism, background blurs, and other stuff, and has like a pink accent color. Retro: It changes the OS back to what it looked like in like 1995 by replacing animations and toggles with grey borders, checkboxes, and the blue desktop background. The New Welcome Screen: That old, basic onboarding screen looked ass so it was completely scrapped. I replaced it with a better and cleaner on that also remembers their preference if they check “Don’t show this on startup.”
WebOS 2 Devlog #2: UI & UX Debugging + UI Improvements This was quite a short session mainly focused on debugging. Here are the changes for this session. New Setup Wizard: The Welcome Screen has been completely redesigned into a classic two-pane setup wizard. (In Retro mode, it even has the iconic sideways teal text on the sidebar). State Persistence: The OS now remembers your settings. Your preferences for military time, desktop icon labels, and whether you want to see the welcome screen on boot are all permanently saved to localStorage. Calculator & Layout Fixes: The calculator now properly displays full math expressions (e.g., 3 + 5) instead of instantly wiping the screen. Before it still worked but it just showed the numbers and the answer-it didnt show what the user was doing. I also fixed a ton of bugs. Apps that are maximized now perfectly snap to the taskbar without overlapping, and the File Explorer drag-to-select doesn’t glitch when you move the window because before the drag-to-select used to activate when i was dragging the window.
WebOS 2 Devlog #3: Building a UNIX Terminal + some other improvements This was a major update today for WebOS 2.0 as i built a genuinely realistic CLI. It’s looks and acts like a Mac Terminal (cus i use mac). Here is what i implemented: In the terminal, i implemented the following commands: help, clear, pwd, ls, cd, cat, touch, mkdir, rm, echo, whoami, date, history, and nano. This part itseld wasnt so difficult cus I had previously done something similar before but it was still challenging nonetheless. I wanted the CLI to be as realistic as possible so I implemented (with a little bit of help from gemini) a custom AST-style parser. It fully supports logical command chaining (&&, ||, ;), quotation marks usage (both single and double), and file redirection (>, ») straight into the virtual hard drive. Autocomplete: This was probably the hardest thing i tried to build and i am happy with how it turned out. I implemented a zsh-style Tab completion system. Pressing Tab auto-fills the longest common prefix and then shows all the possible options directly beneath your active prompt. This is one of the things I a most proud of because after using it, it was essentially very similar to the mac Terminal. This autocomplete works both for commands and files/folders. Errors and stuff: The terminal behaves exactly like real bash. If you type ls -la (-la is not implemented [yet?]) or cd too many args, it won’t just blindly execute or fail silently (it originally did so i had to change it), but it will spit back the same error message you’d expect to see on a real machine. GUI/CLI Integration: When i was implementing nano, i tried to think of how to implement a CLI editor. But i then realised, i can just connect the nano command to the notepad that I alreadu made. So typing nano test.txt in the terminal now just launches the Notepad app and opens the file for editing. And I made some other changes to stuff like the file manager but the terminal implementation above is the biggest change.
WebOS 2 Devlog #4: Initial bootloading sequence + login (optional) When i looked at other projects i realised that they all have some kind of flashy bootloading sequences but mine didnt have any so i built one. I didn’t want it to be too flashy so i made a simple, straightforward sequence. I also knew what exactly I wanted so I managed to finish this in 4hrs on the dot or it would’ve taken a lot longer. This is what it consists of: Bootloader that takes into account the selected theme: Since I had two themes in my OS (Modern and Legacy), it didnt make sense for both to have the same loading screen. So the system now actually boots up differnetly before loading the UI. Depending on your settings, you’ll either get a quick Modern UEFI startup, or a 1995 Legacy BIOS sequence complete with memory checks, IDE drive detection, and ASCII loading bars (had to use some outside help [ai] for this one as I’m not that old to know all that stuff). Hardware Interrupts: Just like a real PC, if you hit esc while the system is booting, it triggers a hardware interrupt and drops you into a configuration screen. Interactive OS Installation: If it’s your first time booting up (or you reset your system), you now have to actually “install” the OS. You can type in your preferred Username, network Hostname, and set an Administrator Password right inside the terminal. You even get the option to format your virtual hard drive. Login: If you set a password (which is optoinal) during setup, the boot sequence will actually halt and lock the system until you type it in. (Don’t worry, I added a recover command bypass in case anyone forgets it). Terminal Integration: The CLI terminal now dynamically reads your setup data. Instead of a normal prompt that you used to get with the default user@stardance or sth, you’ll see your actual custom username@hostname:~/$. Loading text: as the os loads and goes through the bootloading sequence some highly advanced random computer text ‘loads’ to add a little bit to the realism. Some of them are actual data from the host computer such as ram, gpu, and stuff like that. I had lots of other text and loading content that came from the the user’s actual real life hardware and software data, which added to the realism I had to research and use ai to make this because I had no knowledge of how computers were back then. There’s more but it wont fit here so you’ll just have to see it when i host it after my next ship.
WebOS 2 Devlog #5: File manager overhaul + custom dialog box I realised that always having the custom browser alerts was kinda boring and interrupting so i made my own dialogue box. I also changed the file manager to include some essential functions that it was missing to make it more like an OS (see below). Here are the changes i made: I abandoned the old array-based folders. I made it so that it now reads and writes directly to localStorage using stricter pathing (e.g., webos-file-Root/Documents/file.txt). I also built a native getUniqueName() function. If you create a duplicate file or folder, there’s no like a (1), (2), etc. at the end of it, which prevents data overwrites. This makes it more like a real OS Drag-and-Drop: I alos removed the old custom JavaScript coordinate trackers for file movement. It now uses the native HTML5 Drag-and-Drop API. You can physically pick up a file from the Explorer window, drag it out, and drop it directly onto the visual Desktop wallpaper. Custom Dialog Box: Native browser popups (alert(), confirm()) look hella ugly and break the flow so i built a custom dialog engine using JavaScript Promises. Now, when the system needs confirmation a custom window that fits with the theme appears. Because it uses async/await, the JavaScript pauses and waits for user acceoting or declining without freezing the browser. List View & Item Properties: I introduced a hybrid Grid/List view (just like a real os like mac). Because tracking file metadata (like Date Modified) from the start would have been way to complicated, I just built this engine where when the File Explorer encounters a file without a timestamp, it instantly generates metadata key (os-meta-path) using Date.now() and saves it permanently, which means that it allows for Date sorting without breaking anything.
WebOS 2 Devlog #6: UI, UX and functionality improvements This update focuses heavily on stabilizing what i already have and also refining the less finer aspects of the UI. Here is what i did: Theme improvenets: I overhauled the .theme-retro class. stuff were contradicting each other with one thing saying this and the other saying that (too many to even give an example). I also changed some other minor stuff too like increased the grid size in the desktop to prevent icons from overlapping. But this was the main change: System Security & Identity Manager: Implemented a global sanitizeIdentity utility (Regex: /[^a-zA-Z0-9_-]/g) to remove spaces and illegal characters from usernames and hostnames when the user sets it before writing to localStorage because if i have sth like ‘John Doe’ as the username and ‘my school computer’ as the host name, the terminal command would look sth like John Doe@my school computer. And this just looks hella ugly. Dedicated Identity UI: removed the raw identity inputs out of the Settings menu like i had before and moved them into a dedicated Identity Manager window because its more secure that way. I also added an authenticaiton wall before this window pops up. To do this, i wrote an async while loop for identity verification. All the users now have successfully pass the password prompt (or use the recover override to bypass the password) before it allows them to modify any identity settings. Bootloader improvements: btn-shutdown now properly halts system processes (clearing systemClockInterval and locking pointer events) instead of just hiding the UI like it did before where it just had like a black screen with text on it saying shutting down and stuff. It now has like a loading screen and all that stuff. Context Booting: i also implemented sessionStorage.setItem(‘boot_context’, ‘warm’) to track system restarts so different boots have like different bootloading sequences (the point below this). This didn’t take too long as i could just copy and past what i had in other sequenes and just take the text. Differnet Boot Sequences: The bootloader now reads the sessionStorage context. A Cold Boot triggers the full POST memory checks and hardware scans (dont know what this is. had to use ai for the sequences cus i didnt know what the data was). A Warm Boot (restart) bypasses POST and executes a different initialization sequence. THis makes the user more immersed in the environment.
WebOS 2 Devlog #7: Web Browser Implementation I reached the final couple of phases of my project and this is one is one of the crucial ones: building a web browser. My plan was to use iframe. But the thing about building a webbrowser inside a webbrowser or inside a sandboxed environment like a website is most websites (about 99%) like google, youtube, or github use X-Frame-Options and Content-Security-Policy: frame-ancestors ‘none’ which means they specifically block their websites from being displayed in cases like this ot prevent clickjacking. So every time i tried loading a webpage, it just says this webpage refused to connect or sth. I used ai to try bypassing it but it didnt work, so with the help of the same aforementioned ai, i implemented a solution. The solution: Since I cannot disable host browser security policies, and i dont have a backend proxy server, I had an idea to just build my own native ‘browser’: EpochOS IntraNet (just decided on the name EpochOS btw). This didnt take too long cus i had someone (ai) helping me cus it was almost midnight and i was tired as hell. Here are the features: I wrote a parser that intercepts navigation requests. If the user navigates to webos://home or webos://directory, the engine injects a large data:text/html;charset=utf-8 string directly into the iframe’s src attribute. This opens a local, HTML dashboard without triggering cross-origin blocks. Essentially, i wrote html in js and injected that html into the iframe src, so i essentially made my own ‘web-page’. Standard links inside a data URI iframe will try to navigate the iframe itself, which doesn’t update the OS address bar. To fix this, I set up a window.addEventListener(‘message’) listener on the parent OS. The buttons inside the iframe use parent.postMessage() to pass the target URL up to the OS, allowing the JavaScript engine to handle the routing and update the UI properly. A real browser alse doesn’t lose a page’s state (like scroll position) when you switch tabs. And im trying to make a real browser. So, to achieve this, the browser engine now doesn’t share a single iframe but rather new ones get created: Every time the user clicks the “New Tab” button, a new node is generated and appended to the container. Switching tabs simply toggles the CSS display property between none and block. This keeps inactive pages fully loaded in memory. Because cross-origin security rules (the ones i mentioned before) lock us out of accessing the iframe’s native window.history object, I had to build a custom history router. Every tab object in the JS array maintains its own history array and a historyIndex pointer. The back/forward buttons just decrement or increment this pointer and re-apply the URL to the iframe. Kinda genius ngl (this was an idea from ai btw) But for a browser to be useful, it needs to have some proper webpages. After some scouring, i found some webpages that do work in iframe and dont have the restrictions that websites like google do. I’m not gonna tell you what websites those are, you just have to see yourself. I found like 10 or sth so there’ll be plenty of stuff to do. Other features of the browser include: bookmarking, reloading (i also added a reloading spinner btw) and some more stuff.
WebOS 2 Devlog #8: Migrated to ES6 arch. and split css into any files I just realised that essentially all my code is squished into three files-index.html, index.css, and index.js. And all of them were quite big. Like the js file had more than 2,000 lines, and css had more than a 1,000 lines. I dont know why i havent noticed it before but im glad that i did now because i was plannign to do a deep debugging session next and it wouldve been hella hard to do in a 2000+ line file. Plus, a single bug in e.g. the calculator could crash the file manager, and debugging required scrolling through thousands of lines of code. So, i decided to migrate the index.js into an ES6 architecture and split the index.css into multiple manageable files. That’s all i can say for this devlog ig. There was nothing new except some lines of code i had to add after the migration to make sure everything is working. There were no really new features added. But there were many things that delayed me: i accidentally deleted a block of code in the index.css without moving it and didnt notice it so some styles were broken and i had to like retrace my steps and stuff to fix all the problems it caused. That’s all ig. The project is almost coming to an end! Can’t wait to ship it :)
WebOS 2 Devlog #9: Implemented color accents and some browser improvements I was originally going to do some debugging and finish of this project but i was looking through other peoples’ webos projects and realised there was much i could improve. I then got like a huge brainwave about new stuff to implement so ig it’ll be a bit longer before I ship this project. One of these ideas was adding color accents because right now my modern theme is limited only to a light pinkish color. Here are the changes i made: Change 1: Accents In the settings screen, i added an option to choose the system accents. I also gave some basic presets and added an option to pick a color by adding a color picker option. Implementing this was quite simple, just replace all hardcoded pink colors with –os-accent (which i added in css). I linked htis –os-accents attribute/class to the color that the user chooses in js and made ti that all the places where the accent pops up, the color variable there is replaced with –os-accents. So if the user changes the accent in settings, the places where –os-accent is set changes color automatically. Challenge 1: Contrasting invisible text The problem: Swapping a single hex code for an accent color that the user chooses breaks all translucent UI elements (like shadows). Furthermore, if a user picks a bright color (like Mint Green or Yellow), the hardcoded white text on the title bars becomes completely invisible. The Solution: I implemented a Hex-to-RGB engine that injects raw RGB values directly into the CSS :root. This solves the first part of the problem. To solve the text contrast issue, I implemented the WCAG Relative Luminance algorithm ( used a bit of outside help here iykwim ;)). The OS now mathematically calculates the perceived brightness of the user’s chosen color. If the relative luminance passes a threshold of 0.179, the OS flips the title bar text to pitch black so its legible comfortable. Change 2: i was just playing around in the webbrowser and exploring, and i found some stuff that needed to be fixed: when building a simulated web browser using tags, embedding sites like google resulted in a “Refused to Connect” error. These servers send an X-Frame-Options: DENY header. Because client-side JavaScript is legally blind to server headers, the OS couldn’t detect the block to show the custom error screen I made. I knew this error existed and knew this was a thing but only after experiencing it like a real user did i realise how annoyinf this was and it made my os seem broken. Solution 1 (attempt): I initially tried routing requests through a third-party API to read the headers, but ad-blockers and privacy shields just made the API requests not work, crashing the entire browser app (at least thats what i think is the cause). The Solution: I used a massive Regex blocklist, such that the browser now instantly intercepts requests to 99% of top-tier websites that block iframes (like youtube or google), and routs the user to a custom error page. (did these stuff with the help of some ai only) Next Problem: When a user searches Google inside the iframe and clicks a link in the embedded page, the OS address bar wouldn’t update. This is a browser restriction. Browsers mathematically lock JavaScript out of reading cross-origin URLs for security reasons. At this point i just stopped instead of trying to waste my time trying to break through some military grade (i think?) restrictions. Change 3: Before, only iframe compatible websites worked but i had an idea to route all queries (except the ones in websites format) through a google search. Apparently, google.com doesn work in iframe but the google search works. So now if i type hello world, it just redirects me to a google search page with hello world searched. P.S. I made some other tiny changes aswell but i cant rlly remember them now sry
WebOS 2 Devlog #10: icon implementation + taskbar remodeling When i looked at the webos, i realised it missed something to look like an actual os. It wasnt realistic enough. So, i decided to do two changes to make it more realistic. Here is what it did: Change 1: I added some real user data in the taskbar. More specifically, the host device’s actual network and battery status and date. I used the the browser’s native navigator.onLine and the navigator.getBattery() APIs. I also made it such that the os actively listens for network connection drops such as when wifi is disconnected and battery charging/level events, and updates the data accordingly. Change 2: I also noticed that my entire os is filled with emojis for stuff like calculator, file manages (all the apps essentially), the taskbar, the browser, the sites in the browser, etc. THis made it look really unprofessional so i fixed it. I replace all system emojis with Google Material Symbols to make it look a lot better. I did face one challenge however, the emojis in my website in my web browser weren’t being replaced by icons for some reason and I then realised that the iframe sites acts as a sandbox and they dont inherit the imported apis from the main html file. So I just injected a tag and imported the Google Material Symbols API directly in the isolated HTML code in my js file. Change 3: The goal of this change was ot allow the user to snap the taskbar to the top of the screen (Linux style). This was the part that took longer than expected. I originally just added an optoin in the settings to move my taskbar to the top of the screen but the pill-like, floating taskbar i had was really ugly when it was at the top. So, i spent like more than an hour and half trying out new designs and redesigning the taskbar so it looks good both when its at the top and the bottom and finalised a design that actually looks much better than what i had before. It now takes up like the entire bottom/top of the screen instead of floating in the middle liek before. That was all the changes made since the last devlog.
WebOS 2 Devlog #11: Reset btn + Notepad IDE + other changes This was a long long coding session. Had to stay awake till like 2am. Here are the changes i made. Ill try to keep everythign concise because theres a 4000 char limit and i have lot more to say than that. Change 1: I added a factory reset button in settings that directs the user to the webos setup screen like the one they get when they first enter the website. When testing this feature, i realised that random variables from completely different web projects started appearing in the File Manager. Because browsers share localStorage databases across the same local port (e.g., 127.0.0.1:5500), the OS was inheriting the ghosts of old projects. The solution: I had to upgrade the Initial Setup Utility. When formatting the Virtual Hard Drive, the system now temporarily caches the user’s OS credentials in memory that they entered, executes a total localStorage.clear() wipe to delete all the localStorage varialbles, and then safely restores the username and stuff before continuing normally. Change 2: Notepad IDE This was the part that took the longest (and its still not done). I wanted to create something absolutely unique that i havent seen in any other webos projects that i saw. And i realised, why dont i make an IDE in me webos? Not an actual IDE ofc but the goal was to allow users to write raw HTML/JS in the Notepad, save it as a .app file, and double-click it on the desktop to launch it as a fully functioning, program. Attempt 1 (Failure): I initially tried parsing the saved text and running it directly in the OS context using eval(). It was an absolute security and stability nightmare. The custom app had root access to the OS memory and instantly overwrote the osState object, completely crashing the Window Manager within seconds. Attempt 2 (Failure): I tried fixing attempt 1 but messed up the entire code in the process so i had to revert to that commit and this time, i tried putting the apps in Web Components and the Shadow DOM. While this successfully isolated the CSS so custom apps didn’t break the OS styling, the JavaScript still executed in the global window scope. Running two different custom apps simultaneously caused variable collisions that bricked the taskbar. It was too complex and fundamentally flawed. I wiped the slate clean again. Attempt 3 (Success): I realised that the answer was looking straignt at me. I was so stupid. I can just take the code and slap it on to an iframe, and it runs it, just like how i made the web browser. The solution was that When a user double-clicks a custom .app, the OS takes the raw code and converts it into a text/html Blob. It then passes that Blob through URL.createObjectURL(), creating a localized URL. By feeding that URL into an , the custom app boots perfectly. I am really proud of this feature. It’s still not fully done but i had to make a devlog since the tracked time almost reached 10hrs.
WebOS 2 Devlog #12: Debugging Session + retro theme redesign In this session I started debugging the os and wow i found a lot of bugs. Im not going to get into them because it would take too long but some of them include how the bootloading sequence absolutely breaks if the user presses escape before the setup is finished because the cache isnt cleared properly so when the user gets the setup agian, he wont we able to configure some stuff like the password because the cache wasnt cleared properly. I also redesigned the retro theme because it looked ugly because the accents i implemented in the modern theme appeared in the retro theme which didnt fit together. Moreover, some of the aspects of the retro theme, such as the top part of the web browser or the settings screen were just uncomfortable to look at. Changing the retro theme was such a pain because everytime i thought i fixed it, a new discrepancy appears and at one point after i fixed it, my retro-theme.css was so messy i couldnt be bothered to fix it so i just inputted the messy working version into gemini and it cleaned it up. Anyway that was all i changed this time. And I did more and more changes but many of them are small and it would take too long to explain in a devlog. p.s. didnt know which pic to attach so its just a simple screenshot of the desktop.
WebOS 2 Devlog #13: Easter Eggs Pt. 1 I was looking forward to this a looooot. I’m not giving any spoilers whatsoever but I was so locked in tday and yesterday coding easter eggs into the OS. I added like 2 easter eggs (might seem less but trust me they’re very developed), one’s a very simple one but the other one is my favourite and is the reason this devlog took so long. It’s still not finished and im only lik halfway done w/ it but I’m not going to go into any details because it will spoil the fun but im sure you’ll enjoy it. Also, im not done with making easter eggs and i just made this devlog cus the time is almost 10hrs. I still have to finish the second easter egg and do more on top of that. The next one will hopefully be the final easter egg session (unless i get another absolute brainwave). p.s to prevent spoilers, the attached pic is just a screenshot once again
WebOS 2 Devlog #14: Easter Eggs Pt. 2 I am now done with making the easter eggs and in total i made 5 of them, which may seem less but some of them are really really complex and developed. I stayed up till 2am making these 😭. Out of these 5, three of them are simple easter eggs, one is more complex but still quite simple and the final one is essentialyl the absolut highlight. It is the reason why the easter egg section took me so long. I am not going to go into detail to avoid spoilers. Anyway i hope you have fun with the easter eggs :) p.s the attached pic is a screen shot again cus i dont want to give spoilers
WebOS 2 Devlog #15: System Daemon implementation To keep the users more engaged so even when they saw everythign, they would still spend more time doing stuff, I wanted to build something alive for the desktop environment that would interact with the user. So, instead of a standard app, I built a system daemon! If you dont know what that is, it is a digital pet that hangs out on your desktop and does random stuff. I dont hav ea name for him yet so ill just call him daemon for now. When he’s healthy, he flies around the screen and shouts random stuff at you. But I didn’t want him to just be a visual gimmick. He interacts with the actual operating system itself and has states: He is hungry: Because I previously built a drag-and-drop system for the File Explorer, I hooked him into it. You can drag actual text files or folders out of your explorer and drop them on his face. He will chew them up and literally delete them from the virtual hard drive (localStorage). He has a digestive tract: I built a array for his stomach that records what he has last eaten. If he ate a file you actually needed, you can rapid-click his face 5 times. He will regurgitate the raw file data perfectly back onto your desktop. He has boundaries: I ‘taught’ him to recognize core OS files. If you try to feed him Notepad.app or the System Settings, he will violently reject them and yell at you. He has one more state but that relates to the easter egg so i wont provide any additional details in order to not spoil it Oh, and i changed his appearance for the retro theme. anywhat that’s all for this change. I didn’t get into the nitty gritty of how I built him because I am so excited to finish this project. Just a few more features and then I’m done.
WebOS 2 Devlog #16: Widget implementation + debugging In this session, i made multiple changes to the OS to improve the overall UX. I had to pull another all nighter again 🥲. Here is what i changed: Change 1: Debugging Everytime i enabled the system daemon in the settngs, the entire os reloaded which was quite annoying so I ripped out the location.reload() in the Settings app. I also moved him to the body so he didn’t get trapped behind windows, because most of the time the daemon was floating behind windows and i couldnt really see him. I also gave the Welcome screen a massive 9999999 z-index so the daemon would float behind it because my previous step was too effective and he was infront of every single screen including like the bootloading screen. Challenges: I ran into z-index hell because I didn’t plan the stacking initially. He was either in the very front or at the very back and it was all a bit weird. Change 2: Widget implementation I initially wanted to implement sticky notes as a widget which was inspired my the mac sticky notes so i coded all of that in first but I realised i can take it a step further and code in multiple widgets. Challenge: But the thing was i hardcoded the sticky notes widget so i had to recode everything and integrate all of the widgets at once I added a simple analog clock widget I added a calendar widget I initially added a system monitor with like the ram and cpu data but the thing was due to the security restrictions, I can’t get the actualy live hardware data so it would have to be a simulation, which i didnt want so I replace the system monitor with a live weather widget which uses the BigDataCloud and Open-Meteo APIs to provide weather data. Change 3: Originally I had all hte widgets in the context menu on after the other but they looked like a list and a bit redundant. So i removed all then in the html file and added one ‘Add a widget…’ option which connects to a screen with all the widget options
WebOS 2 Devlog #17: Media player + Audio spectrum widget implementation It has been a massive coding session. And I barely managed to keep the time below 10 hours and I still went over it. But, on the bright side, the OS now has a fully functional, media player and an audio spectrum widget! In the media player, anyone can listen to radios, and lots of music. But the reason it took 10 hours is because implementing these stuff required facing some serious bugs-some of them for genuinely stupid mistakes-and rebuilding the audio engine the right way (you’ll see what I mean). Here is a breakdown of how these new features work, what went wrong, and some other stuff: Overview of features The Media Player: The new Media Player is a audio application that routes requests to three distinct APIs to fetch music that the user can listen two: Audius: This is a “decentralized music streaming platform for artists, labels, and fans.” And it’s free! I fetches some of the music from this API. Radio-Browser: This is a platform that is, in a nutshell, Wikipedia for radios. I fetched thousands of live, global radio broadcasts using this API Apple iTunes (Preview): This was a golden find because I didn’t know this existed (not for free anyway). This API pulls top hits and previews of music. Granted, it’s not full music tracks but the songs are much more famous and popular. The Audio Spectrum Widget To complement the player, I also added an Audio Spectrum visualizer. It uses the Web Audio API, or more specifically, its AudioContext and an AnalyserNode to get the frequency data from the audio element. That data is then mapped to an HTML5 element. Using requestAnimationFrame, I made it such that the spectrum repaints 40 individual frequency bars roughly 60 times a second, which creates the audio visualiser waveform thing. Challenges The Geolocation failure: The OS was originally hardcoded to fetch radio stations from my address because I hardcoded that for testing purposes. But I stupidly forgot to remove that so when attempting to make this dynamic by using vpns I spent like 40 minutes trying to figure out why ut kept showing stations from my local area and not japan (where my VPN was connected to). And the reason for that is the hardcoded address I mentioned earlier. Moreover, some of the API queries were too specific, causing the media player to return empty for smaller regions like the Bahamas. To fix it i used the BigDataCloud API to quietly ping the user’s IP address, cache their true country code, and inject it into the API queries. the broken audio spectrum: Initially, the audio visualizer was completely blank. Even when fixed, the baseline would just disappear the second music started playing. The canvas drawing logic was also aggressively using clearRect to wipe the entire widget, which erased the idle state baseline. To fix it, I changed the baseline math so that the baseline sits firmly at the bottom of the widget. I also remade the drawing loop to explicitly redraw the baseline before checking the isPlaying state, so the frequency bars can work smoothly. retro theme problems: I completely forgot about the retro theme as i was just focused on building the player and the widget. So, in the end i had to make the stuff retro theme aswell. I encountered some problems there like some white on white text and some styles not applying which turned out to be because my dumbass brain mispelled the ids and classes Oh, and I found some other big bugs. The dragging engine was hella laggy. Like the response time was like 3 seconds before it registered. I would go deeped but im abt to cross the 4000 character devlog word limit but in a nutshell I realised it was because the mousemove event listener was directly updating the inline CSS (style.left and style.top) on every single microscopic mouse movement so it was really laggy.
WebOS 2 Devlog #18: Debugging session I swear random bugs keep popping up no matter how much debugging I do. There’s always something that’s wrong or doesn’t work but that’s just how it is. In this session which was longer than expected, i fixed a lot of different bugs. Here is a summary of the changes i did: I spent lots of time rewriting the mathematics for the desktop icon layout, and also changed the strict grid-snapping to free-form placement cus it felt it was quite annoying not to be able to place stuff on the desktop wherever you want. Unfortunately, it took too long and i abandoned the idea and just moved on without making any changes. I also spent some time cleaning up the code and tried to optimizing the code. Some other bugs I fixed include: Desktop icons were randomly rearranging themselves every time a file was saved. I found out that the reason was that since the localStorage returns keys randomly, everytime i wrote sth to localStorage, the items were randomized so the ordier they appeared on the desktop changed. So i rewrote the logic to sort the stuff alphabetically before displaying. The Notepad app was also blindly overwriting existing files with the same name. I fixed it by adding a localStorage query to intercept matching keys and to display an osConfirm dialog, forcing the user to explicitly authorize the overwrite. The internal browser was throwing captchas all the time and failed to load error screens for blocked domains. Since Google aggressively blocks embeds and flags them as bot traffic, i changed the default browser to Bing, which was much better and i didn’t get captchas everytime i search somehting up I also modified the system daemon engine so that it introduces itself when a user first view the OS. The weather widget was pulling the location not from where the user was but rather where my ISP was routing my traffic through. So if i lived in a village and ISP routes my traffic through like New York, the weather that showed up was that of New York. To fix this, i swapped the logic to request exact hardware GPS coordinates via navigator.geolocation, while falling back to the IP routing API if the user denies the browser prompt. If the location is inaccurate the user can enable the location permission in the browser and the weather widget then shows the correct location. The visualizer widget was working perfectly but i had the idea to add a text container above the bars which shows what the user is playing. I made way way more changes but many of them conform to the easter eggs and mainly about the theme that gets unlocked (small spoiler there ;)) so i won’t really get too much into it.
WebOS 2 Devlog #19: README.md + ARCHITECTURE.md + additional customisation features I’m in the final stages of the project and in this long session, I did many things. Firstly, I wrote a README.md with all the necessary stuff and i also made an ARCHITECTURE.md file which explains the nitty gritty insides of the WebOS so anyone can understand how the website works. Other than that I added a couple of other stuff. Firstly, i realised that even though I have accents to customize the desktop, I don’t have a wallpaper gallery (except the nasa apod) which I found was quite necessary. At first, i coded my own wallpapers like a synthwave grid wallpaper, pinstripe wallpaper for the legace theme, a tranforming aurora wallpaper and like 3 more but after i coded them, they just looked so damn ugly. So i scratched the idea of me coding my own wallpapers and added three categories of wallpapers in the wallpaper dropdown with each category having three 4k wallpapers in them so every time you pick that category, you get a random wallpaper from the three. I also added an about section in the settings which has a buttton that leads to the github page.
WebOS 2 Devlog #20: Updated README.md and ARCHITECTURE.md + changed properties window I just realised I had a properties window in the OS and that was quite outdated so I changed to include some new info like the Last Modified date which updates everytime the user saves something because i added a localStorage.setItem that saves the timestamp. I also updated the README and ARCHITECTURE files to make them sound better and to add some additional info. Anyway, this devlog is probably the last on for this project! Hope you enjoy :)
WebOS 2 Devlog #21: Final Submission Just did some final changes to the welcome text and am about to ship it
Ships:
I created a simple operating system with HTML, CSS, and Javascript that runs on you web browser. It has a nostalgic look and feel with old-styled buttons and looks. To make it more like an OS, a calculator and a notepad have been created and implemented in the app. Moreover, to allow the user to personalise as much as they want, many settings have been included, from custom wallpapers to wallpapers that come from NASA itself and more. This was my first large scale project that I have coded so it’s an interesting experience for me. Before this, I only used to do challenges on platforms like Codewars and other than some small side projects, I don’t have a practical experience. Therefore, i think this project has taught me a lot on how to built stuff yourself. I hope you like my project :)
EpochOS is a fully functional operating system built entirely with vanilla JavaScript, HTML, and CSS. It doesnt require any client side installations or anything and runs directly in your browser. Its features include a file explorer, a browser, a media player, many essential applications, lots of customisation, widgets, and an actual ecosystem that mimics a real operating system. It also has no backend so it’s all run locally on your browser using the browser’s localStorage. Some things you should know before you test this out: Firstly, please don’t finish rating this project until you experience all the features because there are many hidden features that might change your opinion. An example is easter eggs. I implemented many easter eggs which you must experience before voting because these easter eggs are very devloped. If you can’t find them or are stuck on one of the easter eggs, read ARCHITECTURE.md and at the very bottom, i listed all the easter eggs so you can check them out. In fact, read the ARCHITECTURE.md because it provides valuable info about many of the features in the OS and how they work so make sure to read that aswell Secondly, this OS is not compatible with mobile or tablet devices and is optimized for desktop only. So please keep that in mind when you are testing it. Thank you so much for testing this project and hope you enjoy it :)...
|
1792997400.770447
|
1793083800.770447
|
|
16318
|
BloomDesk by @NITHIN | Stardance
|
NITHIN
|
2
|
5.0
|
8
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-23T05:01:44Z", "hours": 1.0, "multiplier": 8.56, "payout": 8, "blessing": "neutral", "text": "BloomDesk is a browser-based personal operating system built as a single HTML file. It runs entirely offline and tracks your notes, mood, focus sessions, and activity over time. The interface responds to how you work, shifting its visual state based on your behavior. All data is stored locally in your browser with no server required.", "repo": "https://github.com/Nithinfgs/BloomDesk", "demo": "https://glittery-crepe-01b1da.netlify.app/"}, {"ship_num": 2, "ts": "2026-06-12T14:21:57Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What I made: NovaOS, a single-file web-based desktop environment a fake \"OS\" that runs entirely in the browser with draggable windows, a taskbar, Start menu, and several built-in apps (Notepad, Calculator, Terminal, Devlog, Settings). Challenges: Getting window dragging, resizing, and z-index focus stacking to all work smoothly together without conflicts was tricky, especially making sure the taskbar stayed in sync with open/minimized windows. Building a mini Terminal that could actually parse commands and trigger real actions (like changing themes or opening apps) took some extra logic too. What I'm proud of: The Terminal app it feels like a real hidden feature beyond the basic requirements, since you can type commands to control the OS itself. I'm also happy with how the glassy/gradient visual style came together to give it its own identity.", "repo": "https://github.com/Nithinfgs/BloomDesk", "demo": "https://glittery-crepe-01b1da.netlify.app/"}]...
|
[{"post_id": 14152, "ts": "202 [{"post_id": 14152, "ts": "2026-06-23T04:08:38Z", "hours": 0.0, "text": "I’ve officially renamed and reworked the project into BloomDesk.What started as an earlier experiment has now been rebuilt with a completely different direction and identity.Instead of feeling like a traditional operating system or a futuristic dashboard, BloomDesk is becoming a cozy, living creative workspace that feels more human and personal.I’ve been reworking both the design and the feature set to make it feel unique rather than another WebOS clone."}, {"post_id": 7564, "ts": "2026-06-12T17:24:37Z", "hours": 0.0, "text": "Added a secure password generator and a snippet vault. Focused on building tools that save time on everyday tasks."}, {"post_id": 7480, "ts": "2026-06-12T14:09:35Z", "hours": 4.0, "text": "Just completed"}]...
|
Title: BloomDesk by @NITHIN | Stardance
Devlogs:
Title: BloomDesk by @NITHIN | Stardance
Devlogs:
Just completed
Added a secure password generator and a snippet vault. Focused on building tools that save time on everyday tasks.
I’ve officially renamed and reworked the project into BloomDesk.What started as an earlier experiment has now been rebuilt with a completely different direction and identity.Instead of feeling like a traditional operating system or a futuristic dashboard, BloomDesk is becoming a cozy, living creative workspace that feels more human and personal.I’ve been reworking both the design and the feature set to make it feel unique rather than another WebOS clone.
Ships:
What I made: NovaOS, a single-file web-based desktop environment a fake "OS" that runs entirely in the browser with draggable windows, a taskbar, Start menu, and several built-in apps (Notepad, Calculator, Terminal, Devlog, Settings). Challenges: Getting window dragging, resizing, and z-index focus stacking to all work smoothly together without conflicts was tricky, especially making sure the taskbar stayed in sync with open/minimized windows. Building a mini Terminal that could actually parse commands and trigger real actions (like changing themes or opening apps) took some extra logic too. What I'm proud of: The Terminal app it feels like a real hidden feature beyond the basic requirements, since you can type commands to control the OS itself. I'm also happy with how the glassy/gradient visual style came together to give it its own identity.
BloomDesk is a browser-based personal operating system built as a single HTML file. It runs entirely offline and tracks your notes, mood, focus sessions, and activity over time. The interface responds to how you work, shifting its visual state based on your behavior. All data is stored locally in your browser with no server required....
|
1792882103.4341521
|
1793746103.4341521
|
|
16473
|
Chill Record Player by @miles_s_aguilar | Stardanc Chill Record Player by @miles_s_aguilar | Stardance...
|
|
2
|
83.25
|
623
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T18:29:14Z", "hours": 30.0, "multiplier": 19.74, "payout": 466, "blessing": "neutral", "text": "I made a website for playing vinyls! I think an important aspect of enjoying music is being able to experience it physically, through interacting personally with the forms it comes in. Now obviously, this record player is online, so I did my best to bring that physical experience into a virtual website. Hopefully everything is self-explanatory on the site, and I incorperated a lot of feedback from the first round!! In the future, I plan to make this a standalone app, giving people the ability to upload their own music. Also, I’ll try to fix performance issues as I understand this website can be a bit resource-itensive.", "repo": "https://github.com/stackofdoggos/Chill-Music-Player", "demo": "https://milesaguilar.com/music/"}, {"ship_num": 2, "ts": "2026-06-21T07:05:21Z", "hours": 10.0, "multiplier": 16.59, "payout": 157, "blessing": "neutral", "text": "Hey everyone, I made a 3D vinyl player online to play classical music. Please try it!!! It’s fully hosted on my personal website at https://milesaguilar.com/music One of the most challenging aspects of this project was making everything feel as tactile as possible. To do this, I needed to balance realism with how annoying things would be to use. To this end, I spent a lot of time thinking about which controls were most intuitive. In the future, I plan to let people upload their own vinyls and have more furniture in the room. This is mostly just a proof of concept to see if people find this interesting", "repo": "https://github.com/stackofdoggos/Chill-Music-Player", "demo": "https://milesaguilar.com/music/"}]...
|
[{"post_id": 39588, "ts": "202 [{"post_id": 39588, "ts": "2026-08-02T17:44:39Z", "hours": 8.6531, "text": "Devlog #12: Chill Record Player I think the video I attatched was too large so I’m now rewriting this devlog ;-; Anyways, I’ve spent the last week implementing the Yandhi intro as I mentioned last devlog/product idea. I spent a ton of time modelling/keyframing it in Blender, then integrating it with the website to infinitely loop, then dissasemble the vinyl when a user enters the website. What took the longest was definitely the smooth yet neat transition where the inside of the record turns into the room, so please check it out!! PS caustics take foreverrrr to render…"}, {"post_id": 35320, "ts": "2026-07-26T17:17:22Z", "hours": 0.3014, "text": "CONCEPT: Loading Screen Hey all! This isn’t gonna be a normal devlog, but rather a quick update on something I’ll be hoping to add to the app. I’ve been tossing around a couple loading screen ideas but I think I have a really cool one. I want to mimic the Yandhi opening where an exploded view of a CD comes together and begins to spin. I think I can recreate that with my record player (or maybe just one vinyl, although that would be boring-ish?) Since this animation is a little long, I’ll probably only have it play when the user hasn’t logged on in awhile or something."}, {"post_id": 35076, "ts": "2026-07-26T08:21:15Z", "hours": 8.665, "text": "Devlog #11: Chill Record Player Spent all day adding a new table, and then using TypeScript to change the texture on it. I’m a bit worried about how I’m dividing the texturing between Blender and ts, as I have no rhyme or reason right now between which textures I delegate to which platform. Usually, the procedurally-generated textures are loaded in ts though. I also smoothed the grain on the bookshelf. The rug looks bad so I’ll work on that next, and then prepare the website for a MacOS app and implement more of the features I talked about in Devlog #9!!"}, {"post_id": 33809, "ts": "2026-07-24T01:31:18Z", "hours": 7.1611, "text": "Devlog #10: Chill Record Player Made a much more simplified loading screen and recorded some sound effects. Truthfully, I haven’t had that much time to work on the website. AND, I wasn’t able to export my original idea for a loading screen without a watermark. I’m gonna try and make something better than this…"}, {"post_id": 27539, "ts": "2026-07-13T06:03:22Z", "hours": 1.7986, "text": "Devlog #9: Chill Record Player A little hard to tell, but I updated the model of the bookshelf to be more visually interesting (extended the rails and added a metal base) and I also re-UV-unwrapped the bookshelf so the wood texture looks less stretched. I think I’m going to try and code something that blurs the texture a little though as the black parts are a little too dark for my taste. I was also thinking of adding this really cool animation I saw (see below) on Twitter to my loading screen, so keep an eye out for that!"}, {"post_id": 26712, "ts": "2026-07-11T17:41:40Z", "hours": 10.0772, "text": "Devlog #8: Chill Record Player I implemented more major performance enhancements, specifically aimed at increasing performance on retinal displays. Since retinal displays have so many pixels, computers bundle individual pixels together into logical pixels. The ratio at which this happens is called DPR. A higher DPR means sharper images but lower performance. I capped the DPR at 2x on “High”. Other changes were: Capped FPS at 60 -> 45 Added performance benchmarking to determine optimal settings for device Brought back temporal blur post-fx scan with extra leeway gained by reducing FPS Made “reflections on” default behavior Pushed more work to the loading screen Further performance changes planned before standalone app release Seeing if there’s a way to smush the 8x post-fx render stack into fewer passes Decimating more geometry Further ideas planned before app release: MAJOR: Letting user add more music MAJOR: Letting user add own props MAJOR: Tutorial/more tooltips MAJOR: Fixing flip animations upon un-focusing MAJOR: Adding zoom view to baskets MAJOR: Fixing audio bug between tracks (hard to pin down and test fixes, I’ll work on that tomorrow probably) MINOR: Generating normal maps for textures and replacing procedurally-generated floor MINOR: Modelling a better-looking table with legs that aren’t just metal poles lol MINOR: Fixing weird blur bug on the vinyl cover MINOR: Adding above-vinyl view that shows users where the start and end of every track is in different colors, allowing greater control over what songs can be played and when (see image below)"}, {"post_id": 26221, "ts": "2026-07-10T21:41:53Z", "hours": 6.5947, "text": "HOTFIX: Performance Enhancement So I was messing around with the website today and realized it was maxing out my GPU, which I thought was ridiculous. It turns out I had been vastly underestimating the performance impacts of some of the effects I had on the website, as well as the meshes I was using. I decimated a model I had on top of the bookshelf but it was simply too many tris, so I removed it and implemented other code that made the default graphical settings less taxing."}, {"post_id": 24858, "ts": "2026-07-08T18:26:22Z", "hours": 0.8017, "text": "Devlog #7: Chill Record Player Last one before ship #2! Got everything in order, including uploading things to my site and adding some more props. Also fixed some pathing issues. I also kinda got rid of the blur… After adding HDRIs, it looked kinda like Garry’s mod lol"}, {"post_id": 24323, "ts": "2026-07-07T20:36:35Z", "hours": 12.4606, "text": "Devlog #6: Chill Music Player Added a bonsai tree and started modelling other objects I want in the room. Pulled an all-nighter for this. While I was doing this, I realized that the file format I was using to render the room (glb) doesnt support specific node setups and textures. This essentially limited the realism of the textures I was trying to create. To alleviate this, I’ll have to rely heavily on realistic lighting and things like glossiness. So, I decided that the lighting should be handled by an HDR and reflections be rendered in real time (I wonder how bad the performance hit will be on this). However, I also want to keep the day-night slider. This poses an issue, as HDRs are static images. This means I’ll need to write code to interpolate (probably just a linear ramp) between a couple HDRs throughout the day. Now, I don’t know if this will give me the same very warm lighting I have now. I also intend to add reflections to the glass cover of the record player after I implement HDRs, but we’ll see… Other changes: Removed emitted dots Performance changes Worked on modeling a new table behind the scenes (I modeled my dining room table a year ago but p sure I deleted it unforch)"}, {"post_id": 23214, "ts": "2026-07-06T01:09:10Z", "hours": 14.3861, "text": "Devlog #5: Chill Record Player After a monumental amount of work, I’ve ported the geometry of the room (which I had originally written in typescript) into Blender. Hopefully, this gives me more control over adding more complex geometry into the scene like plants on the ground and trinkets on the desk before I export it as a GLB file. I really can’t emphasize enough how long this took; this literally doubled the amount of time I’ve spent on this project. Anyways, some of you may have noticed that the scene in Blender looks pretty plain, though, and that’s intentional! I’m gonna handle the lighting and some of the texturing in typescript. Some of the other features I’ve added/fixes I’ve done are a nicer settings panel, warm lighting, and reducing the crackle from the record player, which I heard was a little annoying. I’ve also added post-processing to the camera, including chromatic abberation, some bloom, and a grain filter which becomes more noticeable during sunset.. My next goal will be to add as much detail to the scene as I can in Blender to really make the scene come alive. That definitely means replacing the cactus-ish plant on top of the bookshelf lol."}, {"post_id": 22020, "ts": "2026-07-04T08:14:47Z", "hours": 2.7978, "text": "Devlog #4: Chill Record Player Since my ship, I’ve been working on more features such as a day-night slider (which I hope I can sync to the user’s time at some point), a remodeled bookshelf (this took awhile), and a better lighting system. I also added bins below the bookshelf for bulk storage of records after I friend recommended I do that. Some features people have been asking for and my thoughts: Hosting your own music: until I set up a dedicated DB for this, this is not going to be possible. Once I make this a standalone app I’ll definitely implement that. Also note that I can’t add non-classical music here because 99.99% of non-classical music that is popular right now is not in the public domain. Tutorial: Yes! I’ll work on accessability Favoriting records: Yes, with the new bookshelf I can implement that For now, I’m going to try and make the room feel warmer/more cozy by using volumetric shaders and introducing subsurface scattering on my models if I can do that without hurting performance. Follow to stay updated!!!!"}, {"post_id": 12970, "ts": "2026-06-21T07:01:31Z", "hours": 0.865, "text": "Devlog 3: Before first ship! added a custom shader which allows the user to switch between what time of day it is. will get rid of the slider in a future ship but its the best i could do for now…"}, {"post_id": 11517, "ts": "2026-06-18T20:15:15Z", "hours": 3.5244, "text": "Devlog 2: A super chill music website Over the past few days, I’ve been slowly chipping away at some QOL features. Users can now see which keystrokes can be used at any given moment and users can now inspect vinyls. Other features that were improved were the ability to move the arm of the record player with higher precision, and a top-down view which enhances that experience. Unfortunately, I had to change the records to be public domain in preparation for my first ship. MBDTF will not be avaliable, but maybe I’ll let users locally host their own vinyls! Ideas ideas ideas… Maybe this could also become a standalone app. Planned features (either before or after first ship) Custom shaders -> Moody lighting or time of day slider with lamp u can turn on and off Ability to locally host music or add your own Way more records Ability to change record order More views for inspecting your records Improve the top-down angle to show when tracks begin and end on a record Ability to customize painting"}, {"post_id": 7310, "ts": "2026-06-12T05:42:23Z", "hours": 5.2231, "text": "A super chill music website Recently, I’ve been kind of inspired by this Brian Eno quote: “Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature. CD distortion, the jitteriness of digital video, the crap sound of 8-bit — all of these will be cherished and emulated as soon as they can be avoided. It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart. The distorted guitar sound is the sound of something too loud for the medium supposed to carry it. The blues singer with the cracked voice is the sound of an emotional cry too powerful for the throat that releases it. The excitement of grainy film, of bleached-out black and white, is the excitement of witnessing events too momentous for the medium assigned to record them.” For this reason, I’ve decided to build a chill music website for listening to vinyl records. Imo, the feel of interacting with music is just as important as listening to the music itself, and in an age of ultra-high-fidelity lossless downloads on Spotify, I think there’s something special about vinyl (and this is coming from someone who listens to a ton of Spotify). It’s taken a while to get this 3D view set up, and there are still a lot of bugs and sound effects I want to fix or implement to bring everything to life, but the challenge has been making the experience feel as tactile as possible. I look forward to seeing where this’ll go :)"}]...
|
Title: Chill Record Player by @miles_s_aguilar | S Title: Chill Record Player by @miles_s_aguilar | Stardance
Devlogs:
A super chill music website Recently, I’ve been kind of inspired by this Brian Eno quote: “Whatever you now find weird, ugly, uncomfortable and nasty about a new medium will surely become its signature. CD distortion, the jitteriness of digital video, the crap sound of 8-bit — all of these will be cherished and emulated as soon as they can be avoided. It’s the sound of failure: so much modern art is the sound of things going out of control, of a medium pushing to its limits and breaking apart. The distorted guitar sound is the sound of something too loud for the medium supposed to carry it. The blues singer with the cracked voice is the sound of an emotional cry too powerful for the throat that releases it. The excitement of grainy film, of bleached-out black and white, is the excitement of witnessing events too momentous for the medium assigned to record them.” For this reason, I’ve decided to build a chill music website for listening to vinyl records. Imo, the feel of interacting with music is just as important as listening to the music itself, and in an age of ultra-high-fidelity lossless downloads on Spotify, I think there’s something special about vinyl (and this is coming from someone who listens to a ton of Spotify). It’s taken a while to get this 3D view set up, and there are still a lot of bugs and sound effects I want to fix or implement to bring everything to life, but the challenge has been making the experience feel as tactile as possible. I look forward to seeing where this’ll go :)
Devlog 2: A super chill music website Over the past few days, I’ve been slowly chipping away at some QOL features. Users can now see which keystrokes can be used at any given moment and users can now inspect vinyls. Other features that were improved were the ability to move the arm of the record player with higher precision, and a top-down view which enhances that experience. Unfortunately, I had to change the records to be public domain in preparation for my first ship. MBDTF will not be avaliable, but maybe I’ll let users locally host their own vinyls! Ideas ideas ideas… Maybe this could also become a standalone app. Planned features (either before or after first ship) Custom shaders -> Moody lighting or time of day slider with lamp u can turn on and off Ability to locally host music or add your own Way more records Ability to change record order More views for inspecting your records Improve the top-down angle to show when tracks begin and end on a record Ability to customize painting
Devlog 3: Before first ship! added a custom shader which allows the user to switch between what time of day it is. will get rid of the slider in a future ship but its the best i could do for now…
Devlog #4: Chill Record Player Since my ship, I’ve been working on more features such as a day-night slider (which I hope I can sync to the user’s time at some point), a remodeled bookshelf (this took awhile), and a better lighting system. I also added bins below the bookshelf for bulk storage of records after I friend recommended I do that. Some features people have been asking for and my thoughts: Hosting your own music: until I set up a dedicated DB for this, this is not going to be possible. Once I make this a standalone app I’ll definitely implement that. Also note that I can’t add non-classical music here because 99.99% of non-classical music that is popular right now is not in the public domain. Tutorial: Yes! I’ll work on accessability Favoriting records: Yes, with the new bookshelf I can implement that For now, I’m going to try and make the room feel warmer/more cozy by using volumetric shaders and introducing subsurface scattering on my models if I can do that without hurting performance. Follow to stay updated!!!!
Devlog #5: Chill Record Player After a monumental amount of work, I’ve ported the geometry of the room (which I had originally written in typescript) into Blender. Hopefully, this gives me more control over adding more complex geometry into the scene like plants on the ground and trinkets on the desk before I export it as a GLB file. I really can’t emphasize enough how long this took; this literally doubled the amount of time I’ve spent on this project. Anyways, some of you may have noticed that the scene in Blender looks pretty plain, though, and that’s intentional! I’m gonna handle the lighting and some of the texturing in typescript. Some of the other features I’ve added/fixes I’ve done are a nicer settings panel, warm lighting, and reducing the crackle from the record player, which I heard was a little annoying. I’ve also added post-processing to the camera, including chromatic abberation, some bloom, and a grain filter which becomes more noticeable during sunset.. My next goal will be to add as much detail to the scene as I can in Blender to really make the scene come alive. That definitely means replacing the cactus-ish plant on top of the bookshelf lol.
Devlog #6: Chill Music Player Added a bonsai tree and started modelling other objects I want in the room. Pulled an all-nighter for this. While I was doing this, I realized that the file format I was using to render the room (glb) doesnt support specific node setups and textures. This essentially limited the realism of the textures I was trying to create. To alleviate this, I’ll have to rely heavily on realistic lighting and things like glossiness. So, I decided that the lighting should be handled by an HDR and reflections be rendered in real time (I wonder how bad the performance hit will be on this). However, I also want to keep the day-night slider. This poses an issue, as HDRs are static images. This means I’ll need to write code to interpolate (probably just a linear ramp) between a couple HDRs throughout the day. Now, I don’t know if this will give me the same very warm lighting I have now. I also intend to add reflections to the glass cover of the record player after I implement HDRs, but we’ll see… Other changes: Removed emitted dots Performance changes Worked on modeling a new table behind the scenes (I modeled my dining room table a year ago but p sure I deleted it unforch)
Devlog #7: Chill Record Player Last one before ship #2! Got everything in order, including uploading things to my site and adding some more props. Also fixed some pathing issues. I also kinda got rid of the blur… After adding HDRIs, it looked kinda like Garry’s mod lol
HOTFIX: Performance Enhancement So I was messing around with the website today and realized it was maxing out my GPU, which I thought was ridiculous. It turns out I had been vastly underestimating the performance impacts of some of the effects I had on the website, as well as the meshes I was using. I decimated a model I had on top of the bookshelf but it was simply too many tris, so I removed it and implemented other code that made the default graphical settings less taxing.
Devlog #8: Chill Record Player I implemented more major performance enhancements, specifically aimed at increasing performance on retinal displays. Since retinal displays have so many pixels, computers bundle individual pixels together into logical pixels. The ratio at which this happens is called DPR. A higher DPR means sharper images but lower performance. I capped the DPR at 2x on “High”. Other changes were: Capped FPS at 60 -> 45 Added performance benchmarking to determine optimal settings for device Brought back temporal blur post-fx scan with extra leeway gained by reducing FPS Made “reflections on” default behavior Pushed more work to the loading screen Further performance changes planned before standalone app release Seeing if there’s a way to smush the 8x post-fx render stack into fewer passes Decimating more geometry Further ideas planned before app release: MAJOR: Letting user add more music MAJOR: Letting user add own props MAJOR: Tutorial/more tooltips MAJOR: Fixing flip animations upon un-focusing MAJOR: Adding zoom view to baskets MAJOR: Fixing audio bug between tracks (hard to pin down and test fixes, I’ll work on that tomorrow probably) MINOR: Generating normal maps for textures and replacing procedurally-generated floor MINOR: Modelling a better-looking table with legs that aren’t just metal poles lol MINOR: Fixing weird blur bug on the vinyl cover MINOR: Adding above-vinyl view that shows users where the start and end of every track is in different colors, allowing greater control over what songs can be played and when (see image below)
Devlog #9: Chill Record Player A little hard to tell, but I updated the model of the bookshelf to be more visually interesting (extended the rails and added a metal base) and I also re-UV-unwrapped the bookshelf so the wood texture looks less stretched. I think I’m going to try and code something that blurs the texture a little though as the black parts are a little too dark for my taste. I was also thinking of adding this really cool animation I saw (see below) on Twitter to my loading screen, so keep an eye out for that!
Devlog #10: Chill Record Player Made a much more simplified loading screen and recorded some sound effects. Truthfully, I haven’t had that much time to work on the website. AND, I wasn’t able to export my original idea for a loading screen without a watermark. I’m gonna try and make something better than this…
Devlog #11: Chill Record Player Spent all day adding a new table, and then using TypeScript to change the texture on it. I’m a bit worried about how I’m dividing the texturing between Blender and ts, as I have no rhyme or reason right now between which textures I delegate to which platform. Usually, the procedurally-generated textures are loaded in ts though. I also smoothed the grain on the bookshelf. The rug looks bad so I’ll work on that next, and then prepare the website for a MacOS app and implement more of the features I talked about in Devlog #9!!
CONCEPT: Loading Screen Hey all! This isn’t gonna be a normal devlog, but rather a quick update on something I’ll be hoping to add to the app. I’ve been tossing around a couple loading screen ideas but I think I have a really cool one. I want to mimic the Yandhi opening where an exploded view of a CD comes together and begins to spin. I think I can recreate that with my record player (or maybe just one vinyl, although that would be boring-ish?) Since this animation is a little long, I’ll probably only have it play when the user hasn’t logged on in awhile or something.
Devlog #12: Chill Record Player I think the video I attatched was too large so I’m now rewriting this devlog ;-; Anyways, I’ve spent the last week implementing the Yandhi intro as I mentioned last devlog/product idea. I spent a ton of time modelling/keyframing it in Blender, then integrating it with the website to infinitely loop, then dissasemble the vinyl when a user enters the website. What took the longest was definitely the smooth yet neat transition where the inside of the record turns into the room, so please check it out!! PS caustics take foreverrrr to render…
Ships:
Hey everyone, I made a 3D vinyl player online to play classical music. Please try it!!! It’s fully hosted on my personal website at https://milesaguilar.com/music One of the most challenging aspects of this project was making everything feel as tactile as possible. To do this, I needed to balance realism with how annoying things would be to use. To this end, I spent a lot of time thinking about which controls were most intuitive. In the future, I plan to let people upload their own vinyls and have more furniture in the room. This is mostly just a proof of concept to see if people find this interesting
I made a website for playing vinyls! I think an important aspect of enjoying music is being able to experience it physically, through interacting personally with the forms it comes in. Now obviously, this record player is online, so I did my best to bring that physical experience into a virtual website. Hopefully everything is self-explanatory on the site, and I incorperated a lot of feedback from the first round!! In the future, I plan to make this a standalone app, giving people the ability to upload their own music. Also, I’ll try to fix performance issues as I understand this website can be a bit resource-itensive....
|
1793065652.6572995
|
1793152052.6572995
|
|
16818
|
My very own WebOS by @avycado13 | Stardance
|
avycado13
|
2
|
9.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T21:26:40Z", "hours": 1.0, "multiplier": 2.51, "payout": 2, "blessing": "neutral", "text": "I made an OS Kernel in the web! i also ported it to run natively and i want to have almost complete feautre parity between them!", "repo": "https://github.com/avycado13/webos", "demo": "http://finicky-knot.surge.sh/"}, {"ship_num": 2, "ts": "2026-07-01T01:01:21Z", "hours": 8.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made an os that works in both wasm in the browser and in x86. it doesnt have a window manager yet but it has a console and a basic file system. I plan on adding more advanced functionality and maybe even a gui!", "repo": "https://github.com/avycado13/webos", "demo": "http://finicky-knot.surge.sh/"}]...
|
[{"post_id": 24979, "ts": "202 [{"post_id": 24979, "ts": "2026-07-08T21:25:26Z", "hours": 0.4697, "text": "random work to polish it up. not much changed"}, {"post_id": 19771, "ts": "2026-07-01T04:54:49Z", "hours": 0.3511, "text": "i added better readme"}, {"post_id": 19648, "ts": "2026-07-01T00:58:24Z", "hours": 2.2219, "text": "I added more browser support including a console in a canvas and a filesystem and shell. the filesystem is just a vector where each file is just a string for path and a vector of u8s for its bytes."}, {"post_id": 18696, "ts": "2026-06-29T21:39:11Z", "hours": 2.1514, "text": "i got it to work in the browser!! next i should add canvas rendering and also maybe some actual programs and a filesystem"}, {"post_id": 7286, "ts": "2026-06-12T04:33:38Z", "hours": 3.1797, "text": "I followed https://os.phil-opp.com/ and now i am going to try to get this to run on the web and add a basic shell"}]...
|
Title: My very own WebOS by @avycado13 | Stardance Title: My very own WebOS by @avycado13 | Stardance
Devlogs:
I followed https://os.phil-opp.com/ and now i am going to try to get this to run on the web and add a basic shell
i got it to work in the browser!! next i should add canvas rendering and also maybe some actual programs and a filesystem
I added more browser support including a console in a canvas and a filesystem and shell. the filesystem is just a vector where each file is just a string for path and a vector of u8s for its bytes.
i added better readme
random work to polish it up. not much changed
Ships:
I made an os that works in both wasm in the browser and in x86. it doesnt have a window manager yet but it has a console and a basic file system. I plan on adding more advanced functionality and maybe even a gui!
I made an OS Kernel in the web! i also ported it to run natively and i want to have almost complete feautre parity between them!...
|
1793098075.2519636
|
1793184475.2519636
|
|
16838
|
AlpineOS by @ashish-raj-singh | Stardance
|
ashish-raj-singh
|
2
|
23.0
|
72
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-24T08:32:33Z", "hours": 11.0, "multiplier": 6.36, "payout": 72, "blessing": "neutral", "text": "This is AlpineOS 2 (WebOS-2) upgraded from the previous version of AlpineOS 1 (WebOS-2) UPss Window animations are now smoother and more responsive. Introduced Widgets and are draggable anywhere on the desktop screen Truly FullScreen mode is here, previously the fullscreen was still not using the space behind the dock and menu bar at top, now it does Menu Bar improvements, now it has calender, wifi and a brightness slider which actually workd A new Settings app, which now has the personalization settings, and a new Widgets section where you can add widgets to your desktop Auto hide dock is now working, it simply hides the dock and shows on hovering th bottom of the desktop and it can be toggled in the settings app The Challenge? The main hurdle for me was understanding the actual OS, and its working as i hve tried to keep this project as realistic as i could understand other then that, the animations and drag and drop functionality was a bit challenging, so right now drag and drop us not supported as i have my exams coming up ans stardance is also going to end 30 sep to i dont have that much time The Excitement? this project was particularly exiting for me not because of the web technologies like used react heavily i have been a web dev for like a year main thing was the OS part, i have never worked on an OS before and this was a new experience for me, and i really loved it i tried to understand the real Operating System i leanred about scheduling algorithms like FCFS, SJF, memory management,how kernel works and communicated, how things are separated and modularized so much more What can you do? just right click on desktop and try to add a widget try to hide dock from the settings app, and hover at the bottom of the desktop and see the dock appear back try to minimize and maximize the windows and see the animations try increasing and decreasing the brightness from the menu bar", "repo": "https://github.com/ashish757/AlpineOS", "demo": "https://alpine-os-eight.vercel.app"}, {"ship_num": 2, "ts": "2026-06-13T12:16:11Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I built AlpineOS, A fully functional, persistent, browser-based operating system, not just a CSS UI mockup it’s powered by a custom Redux “kernel” that actually manages background processes independently from the visual windows. live Activity Manager that tracks active PIDs and simulated CPU/Memory telemetry. It includes a persistent Virtual File System An draggable Window Manager Terminal engine that interacts with the File System Persistency , File and folders are persistennt and so it the state of the OS, you leave and come back just find that it has retained the state. The Challange? The architecture and state management were incredibly complex. Synchonizing the UI with the actual process mangement in the “kernal” Persistence, making the whole website persistence. Creatin an Task manager was fun and exciting, it felt like a real low level OS feature Excitement??? hell yeah my whole time I have been building, high-level websites and backend. I never tried a low level project, although this is not Low Level but it forced me to explore the architecture and concepts of hoow operating system works at Low level, how terminal connect with the file system. who doesn’t get excited by low level ?? Being able to selec multiple files and folder, not dragable yet, but soon will be What can i do? When you boot it up, don’t just click the icons and look and design and colors, stress test the ARCHITECTURE! Open the Terminal , use cd to change directory and try standard commands like mkdir, touch, ls, and interact with the file system Open the Activity Manager side-by-side with other apps to watch the active processes update and check the live charts (dummy) Right-click the desktop to open Personalization and change the wallpaper. Most importantly: Open a few windows, move them around the screen, and then hard refresh your browser or maybe just restart and Watch the persistence engine drop you right back where you left off.", "repo": "https://github.com/ashish757/AlpineOS", "demo": "https://alpine-os-eight.vercel.app"}]...
|
[{"post_id": 73046, "ts": "202 [{"post_id": 73046, "ts": "2026-09-24T08:31:29Z", "hours": 2.3342, "text": "Devlog 3 Launchpad as promised i have created the launchpad , but the serach functionlity is not working in it sorry i know its just s amll filter thing but i got my exmas this week, im in rush need to feactor the whole assets thing as i wasn initially importing the images but now i have moved it to the public and how just load them all updated the readme and added icon for the launchpad A lot can be done i think, but i am limited with this event ending 30 sep and also my exams are coming up SO BYE FOR NOWW, i really loved this project"}, {"post_id": 72817, "ts": "2026-09-23T19:47:31Z", "hours": 3.2872, "text": "Real OS true now this feels like a real operating system Widgets added widgets to the desktop, can be added from the settings right there are jsut widgets for clock and calander but same design can be used to simply add many more kinds of widgets Menu Bar menu bar now has the brightnes control slider and wifi options (obviously wifi are fake here) Dock can now be auto hidden from settings and only shows up when you hover in the bottom jsut like real macos Integrated the perosnalization in the settings app up next i will add a launch pad, some more little apps, fix a issue related to navigation in finder that i just found out"}, {"post_id": 71881, "ts": "2026-09-21T18:06:25Z", "hours": 1.4678, "text": "Devlog 2 i think i have laid a good foundation for process and window management i am now focusing on the UI and UX of the desktop environment and adding some more app, fetures, and more OS like fell Minimizing and maximizing windows implemented feature to minimize and maxiimize the windows maximizing feature existed but there were some bugs and it wasnt really fullscreen so i fixed that and now it works as expected improve Dock to open or focus the app by detecting wheter app is open or closed or minimized Started improving and adding animations used framer-motion to animate the appearance and disappearance of the windows later i will add transitions to other elements as well Created a settings app to handle the widgets , appearance and general setting all i one place also fixed an infinite render issue in ActivityManagerApp that was caused by the useEffect"}, {"post_id": 70213, "ts": "2026-09-18T18:31:33Z", "hours": 4.1772, "text": "Devlog 1 (after shipping webos1) so its been like 2 months since i last worked on this project so i just revised the whole codebase once Realism so when i decided to build this my main goal was to make it as realistic as possible by realistic i mean to make use of concepts that is used in real linux OS, not just UI but the actual inner workking What went down any application when opened in OS has two parts The window The process Like for notepad app, there is a wrapper window which has the close button and menu options and then there is the actual notepad process which handles things related to the creation and saving of the notes file what was the problem In real OS whenever we try to close a window, the window wrapper simply sends a closing signal to the actual process saying hey process user wants to close you for now. after this the process either saves logs, current changes or show user a confirmation dialog before closing but in my webOS i was jsut closign the process when user clicked the close button on the window wrapper, which is not realistic at all There are three kinds of closing signals that a process can receive SIGTERM SIGKILL SIGQUIT i will not get into the details of these signals but they mean different things , like SIGTERM is a request to terminate the process whereas SIGKILL forces the process to terminate. Solution so i basically added a new property to the window state to track if a window has requested to close the process process actively listen to such state change from the window and replies accordingly and closes the app performs tasks like askeing user to save changes, show warning dialog etc before closing the process there are still some bugs and a lot of things to improve in this thing but i will do that in the next devlog"}, {"post_id": 8020, "ts": "2026-06-13T11:46:24Z", "hours": 3.6642, "text": "#update number 0.0000033 The old man, Terminal Now terminal supports file system operations, can create and delete folders and files Textpad now it can open text files and edit those and save, can create new files as well Activity Manger , task manager Shows the currently running processes in the os, also gives and option to forcefully terminate any process, shows CPU and RAM usage (dummy but mindful of currently running processes) Menu bar menu bar now has specific and dynamic context menu options for each app although its not available yet for each app, but the logic is implemented, I just need to write json config for the ui to display Personalization Right click on desktop and click on Personalization to change wallpaper, will support more customization soon Boot added a cool mock up to mimic shutdown and booting process of OS,"}, {"post_id": 7578, "ts": "2026-06-12T17:50:11Z", "hours": 3.2947, "text": "DevLOG FOURRR What do we got this time well well I now have a complete basic file management system build, I can create text files, edit them, open them, save them in any specific location , delete it, terminal now can run more commands ‘’‘ls, mkdir, rm. touch, echo, clear, etc’’’’ context menus It was time taking and exhausting as every section of the operating system required different type of context menus. It was so much messed up. I ended up creating something central where a single config can decide and make a whole context menu, Desktop is ALIVE Long awaited something I wanted to do is to display what there is in the desktop directory directly onto the desktop after making the complete file system."}, {"post_id": 7422, "ts": "2026-06-12T11:20:38Z", "hours": 0.8694, "text": "Dev Log Threeeee Added a browser as of now only a few websites are accessible like wikipedia.org, other websites reject the connection in a iframe, I am looking for solution to this, I was thinking to maybe compile a rust model web browser using ecmascript and run a browser in browser, looks tough for limited time I have for this project , will definitely give it a shot ( if you guys got any idea let me know ) yayyyy File system is now persistent well despite coolest feature this was fairly easy redux-persistence saved the day, used indexDB as localstorage is synchronous and only allows 5MB of storage -> the files created in desktop folder now show up on the desktop on top of wallpaper NEXT GOAL add some more commands in terminal like ls, touch, mkdir, rm ability to create and save text files make files and folders drag-able (DREAMYYYY) personlization options"}, {"post_id": 7393, "ts": "2026-06-12T10:04:18Z", "hours": 0.6861, "text": "Dev Log 2 Implemented resizing and maximizing of windows (easypzy lemon squeeze) Added some dummy options in the menu bar (will soon make them functional too 😉) Improved UI of file manager (Finder)"}, {"post_id": 7245, "ts": "2026-06-12T02:47:35Z", "hours": 3.4803, "text": "AlpineOS, lightweight web os for study and space research(will be coming soon) The name inspiration come from the alpine images of docker “light weight” I am trying to build is os such that user can sort of study about space. as of now I have build some basic file system, dragable windows, I have setup basic architecture for applications, processes, and files and folders hope fully in my next DEVlog, I will have implemented /fixed resizable windows control panel file and folder persistence some cool apps on space theme preventing windows from going out of screen, will try to make terminal somewhat working improve the UI ability to minimize the windows drag and drop upload of files like text, pdf, word excel etc,"}]...
|
Title: AlpineOS by @ashish-raj-singh | Stardance
Title: AlpineOS by @ashish-raj-singh | Stardance
Devlogs:
AlpineOS, lightweight web os for study and space research(will be coming soon) The name inspiration come from the alpine images of docker “light weight” I am trying to build is os such that user can sort of study about space. as of now I have build some basic file system, dragable windows, I have setup basic architecture for applications, processes, and files and folders hope fully in my next DEVlog, I will have implemented /fixed resizable windows control panel file and folder persistence some cool apps on space theme preventing windows from going out of screen, will try to make terminal somewhat working improve the UI ability to minimize the windows drag and drop upload of files like text, pdf, word excel etc,
Dev Log 2 Implemented resizing and maximizing of windows (easypzy lemon squeeze) Added some dummy options in the menu bar (will soon make them functional too 😉) Improved UI of file manager (Finder)
Dev Log Threeeee Added a browser as of now only a few websites are accessible like wikipedia.org, other websites reject the connection in a iframe, I am looking for solution to this, I was thinking to maybe compile a rust model web browser using ecmascript and run a browser in browser, looks tough for limited time I have for this project , will definitely give it a shot ( if you guys got any idea let me know ) yayyyy File system is now persistent well despite coolest feature this was fairly easy redux-persistence saved the day, used indexDB as localstorage is synchronous and only allows 5MB of storage -> the files created in desktop folder now show up on the desktop on top of wallpaper NEXT GOAL add some more commands in terminal like ls, touch, mkdir, rm ability to create and save text files make files and folders drag-able (DREAMYYYY) personlization options
DevLOG FOURRR What do we got this time well well I now have a complete basic file management system build, I can create text files, edit them, open them, save them in any specific location , delete it, terminal now can run more commands ‘’‘ls, mkdir, rm. touch, echo, clear, etc’’’’ context menus It was time taking and exhausting as every section of the operating system required different type of context menus. It was so much messed up. I ended up creating something central where a single config can decide and make a whole context menu, Desktop is ALIVE Long awaited something I wanted to do is to display what there is in the desktop directory directly onto the desktop after making the complete file system.
#update number 0.0000033 The old man, Terminal Now terminal supports file system operations, can create and delete folders and files Textpad now it can open text files and edit those and save, can create new files as well Activity Manger , task manager Shows the currently running processes in the os, also gives and option to forcefully terminate any process, shows CPU and RAM usage (dummy but mindful of currently running processes) Menu bar menu bar now has specific and dynamic context menu options for each app although its not available yet for each app, but the logic is implemented, I just need to write json config for the ui to display Personalization Right click on desktop and click on Personalization to change wallpaper, will support more customization soon Boot added a cool mock up to mimic shutdown and booting process of OS,
Devlog 1 (after shipping webos1) so its been like 2 months since i last worked on this project so i just revised the whole codebase once Realism so when i decided to build this my main goal was to make it as realistic as possible by realistic i mean to make use of concepts that is used in real linux OS, not just UI but the actual inner workking What went down any application when opened in OS has two parts The window The process Like for notepad app, there is a wrapper window which has the close button and menu options and then there is the actual notepad process which handles things related to the creation and saving of the notes file what was the problem In real OS whenever we try to close a window, the window wrapper simply sends a closing signal to the actual process saying hey process user wants to close you for now. after this the process either saves logs, current changes or show user a confirmation dialog before closing but in my webOS i was jsut closign the process when user clicked the close button on the window wrapper, which is not realistic at all There are three kinds of closing signals that a process can receive SIGTERM SIGKILL SIGQUIT i will not get into the details of these signals but they mean different things , like SIGTERM is a request to terminate the process whereas SIGKILL forces the process to terminate. Solution so i basically added a new property to the window state to track if a window has requested to close the process process actively listen to such state change from the window and replies accordingly and closes the app performs tasks like askeing user to save changes, show warning dialog etc before closing the process there are still some bugs and a lot of things to improve in this thing but i will do that in the next devlog
Devlog 2 i think i have laid a good foundation for process and window management i am now focusing on the UI and UX of the desktop environment and adding some more app, fetures, and more OS like fell Minimizing and maximizing windows implemented feature to minimize and maxiimize the windows maximizing feature existed but there were some bugs and it wasnt really fullscreen so i fixed that and now it works as expected improve Dock to open or focus the app by detecting wheter app is open or closed or minimized Started improving and adding animations used framer-motion to animate the appearance and disappearance of the windows later i will add transitions to other elements as well Created a settings app to handle the widgets , appearance and general setting all i one place also fixed an infinite render issue in ActivityManagerApp that was caused by the useEffect
Real OS true now this feels like a real operating system Widgets added widgets to the desktop, can be added from the settings right there are jsut widgets for clock and calander but same design can be used to simply add many more kinds of widgets Menu Bar menu bar now has the brightnes control slider and wifi options (obviously wifi are fake here) Dock can now be auto hidden from settings and only shows up when you hover in the bottom jsut like real macos Integrated the perosnalization in the settings app up next i will add a launch pad, some more little apps, fix a issue related to navigation in finder that i just found out
Devlog 3 Launchpad as promised i have created the launchpad , but the serach functionlity is not working in it sorry i know its just s amll filter thing but i got my exmas this week, im in rush need to feactor the whole assets thing as i wasn initially importing the images but now i have moved it to the public and how just load them all updated the readme and added icon for the launchpad A lot can be done i think, but i am limited with this event ending 30 sep and also my exams are coming up SO BYE FOR NOWW, i really loved this project
Ships:
I built AlpineOS, A fully functional, persistent, browser-based operating system, not just a CSS UI mockup it’s powered by a custom Redux “kernel” that actually manages background processes independently from the visual windows. live Activity Manager that tracks active PIDs and simulated CPU/Memory telemetry. It includes a persistent Virtual File System An draggable Window Manager Terminal engine that interacts with the File System Persistency , File and folders are persistennt and so it the state of the OS, you leave and come back just find that it has retained the state. The Challange? The architecture and state management were incredibly complex. Synchonizing the UI with the actual process mangement in the “kernal” Persistence, making the whole website persistence. Creatin an Task manager was fun and exciting, it felt like a real low level OS feature Excitement??? hell yeah my whole time I have been building, high-level websites and backend. I never tried a low level project, although this is not Low Level but it forced me to explore the architecture and concepts of hoow operating system works at Low level, how terminal connect with the file system. who doesn’t get excited by low level ?? Being able to selec multiple files and folder, not dragable yet, but soon will be What can i do? When you boot it up, don’t just click the icons and look and design and colors, stress test the ARCHITECTURE! Open the Terminal , use cd to change directory and try standard commands like mkdir, touch, ls, and interact with the file system Open the Activity Manager side-by-side with other apps to watch the active processes update and check the live charts (dummy) Right-click the desktop to open Personalization and change the wallpaper. Most importantly: Open a few windows, move them around the screen, and then hard refresh your browser or maybe just restart and Watch the persistence engine drop you right back where you left off.
This is AlpineOS 2 (WebOS-2) upgraded from the previous version of AlpineOS 1 (WebOS-2) UPss Window animations are now smoother and more responsive. Introduced Widgets and are draggable anywhere on the desktop screen Truly FullScreen mode is here, previously the fullscreen was still not using the space behind the dock and menu bar at top, now it does Menu Bar improvements, now it has calender, wifi and a brightness slider which actually workd A new Settings app, which now has the personalization settings, and a new Widgets section where you can add widgets to your desktop Auto hide dock is now working, it simply hides the dock and shows on hovering th bottom of the desktop and it can be toggled in the settings app The Challenge? The main hurdle for me was understanding the actual OS, and its working as i hve tried to keep this project as realistic as i could understand other then that, the animations and drag and drop functionality was a bit challenging, so right now drag and drop us not supported as i have my exams coming up ans stardance is also going to end 30 sep to i dont have that much time The Excitement? this project was particularly exiting for me not because of the web technologies like used react heavily i have been a web dev for like a year main thing was the OS part, i have never worked on an OS before and this was a new experience for me, and i really loved it i tried to understand the real Operating System i leanred about scheduling algorithms like FCFS, SJF, memory management,how kernel works and communicated, how things are separated and modularized so much more What can you do? just right click on desktop and try to add a widget try to hide dock from the settings app, and hover at the bottom of the desktop and see the dock appear back try to minimize and maximize the windows and see the animations try increasing and decreasing the brightness from the menu bar...
|
1793101821.4929519
|
1793188221.4929519
|
|
16885
|
Hackfetch by @xerneas | Stardance
|
|
2
|
124.4
|
1751
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T11:04:00Z", "hours": 63.0, "multiplier": 19.6, "payout": 1381, "blessing": "neutral", "text": "HACKFETCH V2.0 it’s been a few weeks since ship #1 and hackfetch is a completely different tool now. faster, smaller, quieter, actually correct, and now lives in places besides your terminal window. v2.0.0 is out. what changed: fits in your tmux status bar with one line of config. same story for lualine. hackfetch -status prints a compact one-liner meant to be shelled out to every minute. fits everywhere else too. now on the AUR (yay -S hackfetch-bin) alongside the existing brew tap, curl installer, powershell installer, and go install. seven install channels total. runs in ~20ms on repeat calls thanks to an on-disk cache. tmux polling every minute is basically free now. was ~700ms cold before. runs in ~0.7s cold thanks to a parallel API fetch. was ~1.7s before. shows a smooth truecolor gradient on any modern terminal. auto-detects $COLORTERM. falls back to 256-color on older ones. -doctor walks a colored checklist of your setup and tells you exactly what’s broken. green if fine, orange if not, non-zero exit if you wanna script it. new pizza logo because hack club runs on pizza. seven logos total. streak is finally correct after silently saying “1 day” for a month. /summaries is gone from hackatime so hackfetch now reconstructs streak from every coding session in your history via /heartbeats/spans. real streak: 9 days for me right now. 7-day sparkline baked into the fetch (with -v) and available as -status –sparkline for the tmux bar. default fetch got leaner. slack handle, machines count, and the sparkline moved behind -v so the normal fetch stays focused on hours + project + language. loading spinner on the api fetch so you know something is happening. and then the cache made it show up almost never. one install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Arch family: yay -S hackfetch-bin macOS / Linuxbrew: brew install xerneas3318/tap/hackfetch For more install methods check out the github page: https://github.com/xerneas3318/hackfetch teasing the next big thing: hackfetch -leaderboard is coming next, using the public leaderboard endpoints i found in hackatime’s routes file. compete with friends on daily and weekly hours right from your terminal. private friend groups on a hackclub nest box after that. if you try it, thanks. send me some feedback", "repo": "https://github.com/xerneas3318/hackfetch", "demo": "https://github.com/xerneas3318/hackfetch/releases"}, {"ship_num": 2, "ts": "2026-07-07T00:01:54Z", "hours": 27.0, "multiplier": 17.78, "payout": 370, "blessing": "neutral", "text": "Every fetch tool tells you your OS. Mine tells you your streak. hackfetch is a Hack Club themed terminal fetch tool. Inspired by neofetch (originally bash, now archived) and fastfetch (its C successor), written in pure Go. Instead of just showing your kernel and CPU, it pulls live stats from your Hackatime account: today’s hours, weekly total, current streak, top project, top language. Right in your terminal. Six Hack Club themed ASCII logos (including my GOAT orpheus). Fourteen color schemes (pride, trans, bi, pan included). Live watch mode that refreshes while you code. And as of today, you can export the whole thing as a PNG, JPG, or SVG card and post it anywhere. One line to install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Tell me how it was! Follow and like for updates.", "repo": "https://github.com/xerneas3318/hackfetch", "demo": "https://github.com/xerneas3318/hackfetch/releases"}]...
|
[{"post_id": 39919, "ts": "202 [{"post_id": 39919, "ts": "2026-08-03T07:26:53Z", "hours": 6.6894, "text": "Hackfetdch natively in your readme hackfetch -readme it spits out a markdown stats card ready to paste straight into your github profile README. pipe it into a file and commit: hackfetch -readme > stats.md this is the cool bit or drop it in your README.md between two html comments and set up a github action to run it on a schedule so it auto refreshes every day. your profile now has a live coding stats card next to your pinned repos with no cron server, no vercel deploy, no api key stashed in secrets. its literally just markdown. zero extra api calls too. the readme card reads from the same cached hackatime response the normal fetch uses so if you just ran hackfetch it takes ~20ms. the streak emoji is a lil detail i had fun with. 3+ days gets a 🔥 upgrade with brew upgrade hackfetch or yay -S hackfetch-bin (once aur maintenance wraps up) or curl the installer curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh"}, {"post_id": 39223, "ts": "2026-08-02T01:40:31Z", "hours": 7.6967, "text": "HACKFETCH BATTLES??? two features in one release. hackfetch already knows a scary amount about you (thanks hackatime) so why not turn that into more features. hackfetch vs @ someone head to head compare. give it a hackatime username and hackfetch fetches both your histories in parallel, buckets them into today / this week / all time / streak, and prints them side by side with a winner arrow on every row. accepts @name , name , or a full profile url like hackatime.hackclub.com/@name . also works positional: hackfetch vs @you . use it to settle arguments, motivate yourself, or realize your friend has coded 265 hours and you should probably close discord. hackfetch -records personal bests. computed entirely from data hackfetch already fetches (streak + sparkline already use it), so zero new api calls $ hackfetch -records ✦ personal records @you biggest day 12h 41m on 2026-07-18 longest streak 25 days ended 2026-07-01 longest session 43m on 2026-07-17 days coded 86 first day 2026-04-24 99 days ago lifetime 208h 29m the “longest streak” tracks your all time best not just your current one. and “first day” tells you how long ago you started so you can feel old. grab it brew upgrade hackfetch yay -S hackfetch-bin install curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Next devlog is gonna be a fun one, I have an idea cooking up"}, {"post_id": 38323, "ts": "2026-07-31T17:22:26Z", "hours": 9.4408, "text": "big thank you for everyone’s feedback! fresh out of the oven: hackfetch v2.1.1 (aka the reviewer bug fix pass) what got fixed: shell detection used to just read $SHELL which is your login shell. if you log in as bash but run fish, hackfetch was calling you a bash user. it now checks $FISH_VERSION / $ZSH_VERSION / $BASH_VERSION and falls back to asking the OS who your parent process actually is editor detection was two bugs in a trench coat. it wasnt stripping args so zeditor --wait showed up as “zeditor –wait” instead of “Zed”, and if you had no $EDITOR set it defaulted to nano even if you had literally never opened nano. now it strips flags, maps launcher names to human ones (zeditor -> Zed, code -> VS Code, cursor -> Cursor, hx -> Helix etc), and says “-” instead of nano if nothing is set. top project label was ambiguous. it was pulling weekly stats but the row just said “top project” so people thought it meant all time. now weekly rows read top proj 7d , top lang 7d , top ed 7d , top cat 7d . setup dialog was scaring people. it always printed “file exists but has no api_key” whenever it reached the setup flow, even if the api_key line was actually there but just failing to parse. loadConfig is now more forgiving (inline comments, quoted values, case insensitive keys) and setup tells you WHY its stuck instead of gaslighting you about your own config. also short circuits if you run hackfetch -setup when youre already set up. people said they wanted a gay flag color was already there under the name pride but that wasnt obvious. gay is now an alias so both work. grab it: brew upgrade hackfetch or yay -S hackfetch-bin or curl / powershell installer if you don’t have it yet curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh again thank you to everyone who took the time to actually run it and tell me what was broken!"}, {"post_id": 34562, "ts": "2026-07-25T12:00:09Z", "hours": 10.5769, "text": "hackfetch COLLAB?? so my last two devlogs teased two features. shipping both today. -leaderboard last devlog i said “compete with your friends on hackatime hours is coming soon.” i thought i was gonna have to build a whole nest server for it. turns out /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist and are public on hackatime. just a single call!! so hackfetch -leaderboard daily (or weekly) now shows the top 10: ✦ daily leaderboard Last 24 hours 🥇 1. soaphia14 11h 12m 🥈 2. AnastKara 10h 32m 🥉 3. RoSerMar 10h 6m 4. euledone 10h 5. TheShovel 10h 6. Dylhouse 9h 1m 7. Dexrn 8h 59m 8. HexFud 8h 31m 9. zeddash 8h 29m 10. Trtotomotoro 8h 26m every username is an OSC 8 clickable link to that person’s hackatime profile. modern terminals (iterm2, kitty, wezterm, alacritty, gnome-terminal) render it as an actual hyperlink you can click. terminals without OSC 8 just show the plain text so it doesnt look broken. if you’re on the board it highlights your row in orange and adds (you) next to your name. json addon the other thing. someone else competing in stardance messaged me the other day about integrating hackatime into their own project and needed help figuring out the api (YAY). helping them made me realize hackfetch is doing a bunch of work (auth, caching, streak reconstruction, per-day bucketing) that other tools would love to piggyback on. so now: $ hackfetch -json { \"version\": \"2\", \"fetched_at\": \"2026-07-25T17:00: 20.900829+05:30\", \"system\": { \"user\": \"xerneas\", \"host\": \"Macbook-Pro\", \"os\": \"macOS 26.5.2\", ... }, \"hackatime\": { \"slack\": \"@U0B8FHHRQPJ\", \"streak\": 12, \"today_seconds\": 15820, \"week_seconds\": 237501, \"top_project\": { \"name\": \"hackfetch\", \" \"top_language\": { \"name\": \"Go\", \"seconds\": 97418 }, \"week_chart\": [36967, 31651, 33841, 284 \"machines\": 3 } } week_chart is 7 numbers = daily seconds oldest to newest same as the sparkline. top_language skips the unknown/other buckets. everything lines up with what the normal fetch would show, just parseable. ship landed in v2.1.0. brew update && brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then try: hackfetch -leaderboard weekly hackfetch -json | jq For a general install use: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh"}, {"post_id": 32880, "ts": "2026-07-22T10:20:45Z", "hours": 8.6689, "text": "my streak was lying to me for a month went to add a simple 7-day sparkline. by the end of the night i had rewritten how hackfetch talks to hackatime and my streak field is finally accurate for the first time in weeks. the plan was get the status from the last 7 days. draw ▁▂▃▄▅▆▇█ bars except the endpoint i needed straight up 404s. /users/current/summaries doesnt exist on the current hackatime deployment. Which means every single time i ran hackfetch it was quietly making a 30-day range call that always failed, then falling back to a placeholder that said “if today has activity, streak = 1”. thats it. no matter how long ive actually been on a streak, the fetch would just show 1 day. 🤦 my streak has said 1 day for the last 2 weeks even though ive been coding literally every day. never noticed because 1 day looks kinda plausible (i added 1 day as a fallback so that it didn’t show an error a couple weeks ago and forgot ) the fix: went digging in hackatimes rails routes on github. turns out theres a whole /api/v1/ namespace i was never using. and one of the endpoints is /api/v1/users/:id/heartbeats/spans. one call, ~150kb of json, every coding session ive ever logged with start_time, end_time, duration. 2000+ spans. which is exactly what i need for both features. bucket the timestamps by local calendar day, count unique days for streak, sum durations per day for the sparkline. one request covers both. and while i was already in the api layer i noticed fetchUser was making a whole separate call for my slack handle, which is silly because that data is already in the weekly stats response we cache. so i piggybacked it. weve gone from 4 api calls per fetch to 3. the sparkline: 7-day chart ▄▄▇▅▄▅▃ 65h 28m oldest on the left, newest on the right. that tall bar in the middle is a big lock-in session from earlier in the week. the two shorter ones on the right are today (still coding) and yesterday (took a break). opt in for -status --sparkline if you want it in your tmux bar too: 2h 9m today · streak 9 · ▄▄▇▅▄▅▃ 65h 28m teasing a backend: I’m planning on building a whole leaderboard server on a free hack club nest box so people can compete on their hackatime hours. while i was poking around the routes file for the streak fix i noticed something. /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist. public. no auth needed. no server needed. no cron sync. hackatime literally already has it directly. so hackfetch -leaderboard is coming soon (private friend groups and personal competitions can come later) last devlog before my next ship after the ship the devlogs are going to be huge. stay tuned :P"}, {"post_id": 32268, "ts": "2026-07-21T10:28:54Z", "hours": 9.7706, "text": "caching or i owe hackclub money so heres what my day looked like: nvim was calling hackfetch -status on every redraw for my lualine. tmux was calling it every 60 seconds for the status bar. i had 3 tmux sessions open. and every time i actually opened a new terminal, hackfetch fired again on shell start. quick napkin math: nvim redraws are basically continuous when im typing, tmux was hitting the api 3x/minute across sessions, plus every terminal open = another fetch. we’re talking hundreds of calls to hackatime in a normal work session. from ONE user. me hackatime is a free hack club service and i was starting to feel bad lol. the fix: cache the response ~/.cache/hackfetch/last.json stores the last snapshot with a timestamp. every fetch checks that file first. if its fresh enough, skip the network entirely and just render from disk. TTL is different depending on the caller: hackfetch (one-shot): 30 seconds. long enough that a normal re-run inside a devlog attempt is instant, short enough that you dont get badly stale numbers. hackfetch -status: 60 seconds tmux polls roughly this often anyway so its basically free now. hackfetch -watch: ignores the cache, always fresh (thats the whole point of watch mode). opt out with -no-cache or HACKFETCH_CACHE_TTL=0 if you want. also HACKFETCH_CACHE_TTL=300 to be even more polite. So yea tmux is now basically free . but the real win writing this made me realize the cache does more than save milliseconds: every fetch was a full TLS handshake, wifi radio spin up, etc. now most fetches touch the disk once and nothing else. macbook fan appreciates it. offline. if your wifi drops mid coding session you keep working from the cache instead of showing a spinner forever. tmux bar just keeps saying what it said 40 seconds ago. battery again but for the hackatime server. hackfetch stops asking the api 5-10x more than they need to. multiply by everyone who has it in their tmux config and thats a real thing. atomic write via .tmp + rename so nothing ever reads a half-written file. cache is user-only (0600), because it does contain your top project name. bonus: -doctor while i was fixing the polite-to-the-api stuff i added -doctor , which walks a checklist and tells you whats broken: hackfetch doctor ✓ wakatime config exists /Users/xerneas/.wakatime.cfg ✓ api_key present loaded from config ✓ wakatime-cli found /Users/xerneas/.wakatime/wakatime-cli ✓ hackatime api reachable today: 28m ✓ terminal supports truecolor $COLORTERM=truecolor ✓ browser opener available /usr/bin/open green if its working, orange if its not, and non-zero exit if anything failed so you can script it. this was going to be a small self-diagnosis feature and it caught a real bug in the api client on the very first run i did while writing it lol (a string field where hackatime returns an int, so one of the fields was silently missing from every fetch since v1.0). fixed that too. ship both landed in v1.10.0. update as usual: brew update brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then run hackfetch -doctor first, and if anything is broken it’ll tell you exactly what."}, {"post_id": 31673, "ts": "2026-07-20T08:45:06Z", "hours": 8.4247, "text": "hackfetch is now TMUX + NVIM COMPATIBLE new thing today: hackfetch will just show up wherever you already look. tmux status bar. nvim statusline. any tool that can shell out to a command and put text on a screen. The addition was simple: hackfetch -status prints one line: 2h 11m today · hackfetch (45m) · streak 12 just the numbers, for tools that already have their own rendering. hackfetch is a data source now, not just a display. in tmux two lines in ~/.tmux.conf : set -g status-interval 60 thats it. every tmux session, every window, refreshing once a minute. i dropped it in a pink Catppuccin capsule to the left of my existing date capsule and now i cant stop glancing at it lol. in neovim (lualine) same story, five lines of lua: sections = { lualine_z = { function () return vim . fn . system ( \"hackfetch -status\" ): gsub ( \" \\n \" , \"\" ) end } } } shells out on every redraw. works with airline too, or any custom statusline that lets you plug in a function. the fun part making hackfetch call safe for “something tmux runs every 60s forever” meant fixing three assumptions the normal fetch was making. this was way harder than it should have been ngl. setup cant block. if you dont have ~/.wakatime.cfg, normal hackfetch throws you into an interactive setup wizard (ask me how i know). in status mode that would freeze your tmux bar until you notice and Ctrl+C it. so status mode is fully non interactive now. no config → print nothing → tmux shows nothing → no deadlock 🙏 api errors cant leak into your bar. hackatime offline? old behavior would dump HTTP 500 timeout into your status area which looks INSANE. now status mode exits silently instead so your bar stays clean every call has to be cheap. hackfetch’s parallel fetch alr seconds, and the shared HTTP client keeps connections alive across the 4 API calls it fires, so tmux polling every 60s is easy on the API. a proper local file cache is on the list for later but honestly not needed for now (i’m lazy) ship landed in v1.9.0. if you already have it: brew update brew upgrade hackfetch or arch family: yay -Syu hackfetch-bin (for more installs for ur specific os check out the github pls) then drop the tmux or lualine snippet above into your dotfiles and its just there in every terminal. no plugin. no config. no daemon. just a flag."}, {"post_id": 31042, "ts": "2026-07-19T03:42:21Z", "hours": 8.7494, "text": "Hackfetch Gets Real Colors New thing today: hackfetch now emits 24-bit color when your terminal supports it, and spreads gradients smoothly across each row instead of cycling through the palette one character at a time. Before and after Old behavior: for a per-char scheme like rainbow , each character got exactly one palette entry, wrapping around every N characters. On a 30-column row with a 3-color palette, that looked like ten cycles of red, green, blue, red, green, blue… basically RGB static. New behavior: the palette spreads across the row once, and characters between palette entries get interpolated in-between colors. Same 3-color palette on a 30-column row now shows red, olive, green, teal, blue, magenta, back to red. Why the rebuild Terminals speak two color modes: 256-color ( \\x1b[38;5;Nm ): pick from a fixed palette of 256 preset RGB values. 24-bit / truecolor ( \\x1b[38;2;R;G;Bm ): specify any of ~16 million RGB values directly. The old code always used 256-color. That meant every character had to snap to one of the palette entries. No in-betweens possible. The new code checks $COLORTERM (set to truecolor by iTerm2, kitty, WezTerm, Alacritty, GNOME Terminal, and most modern terminals) and emits 24-bit escapes when supported. When it’s not, it falls back to the old cycled-palette behavior automatically. You can force it either way with HACKFETCH_TRUECOLOR=1 or =0 . Where you’ll notice it The built-in rainbow scheme has 23 palette stops, so the difference on that one is small. You just see a smoother color distribution and less banding. The change is dramatic on: custom themes with few stops (try 3 colors in your ~/.config/hackfetch/colors.json for the wildest gradient) the stardance palette (11 stops, per-char), where sparkles now flow through the spectrum in order instead of landing on random-looking colors any per-line scheme ( pride , trans , bi , pan , sunset , ocean , forest ) since they now emit exact RGB values instead of nearest-256-color Bonus: the SVG, PNG, and JPG export paths use the smooth interpolation too, so exported cards look better regardless of your terminal. Ship Landed in v1.8.0 . brew update brew upgrade hackfetch Or on the Arch family: yay -Syu hackfetch-bin Try hackfetch rocket forest and just watch."}, {"post_id": 30475, "ts": "2026-07-18T02:33:55Z", "hours": 10.1122, "text": "One More Way to Install (and Pizza) Two small things today: hackfetch is now on the AUR, and there’s a new logo. hackfetch on the AUR A reviewer on my last ship said they had a hard time getting hackfetch running on CachyOS (an Arch-based Linux distro). Instead of trying to reproduce their exact issue, I figured the cleanest fix was to publish hackfetch through the package manager Arch users already trust. So hackfetch is now up as hackfetch-bin on the AUR: aur.archlinux.org/packages/hackfetch-bin If you’re on Arch, CachyOS, Manjaro, EndeavourOS, Garuda, or any other Arch-based distro: yay -S hackfetch-bin Or with paru: paru -S hackfetch-bin The package pulls the pre-built binary straight from the GitHub release, so there’s no waiting on a source build. Works on both x86_64 and aarch64 . Add it up and hackfetch is now installable one command from: brew (macOS and Linuxbrew) apt / dnf / yum / pacman / zypper / apk (all through the curl installer) the AUR (Arch family) go install (any platform with Go) the PowerShell installer (Windows) This thing is getting kind of hard to NOT install. Pizza logo Hack Club runs on pizza. Now hackfetch does too. hackfetch pizza It’s a triangular slice viewed from the tip, HACK CLUB baked into the middle, and a rolled crust at the wide edge. The tricky part was the crust. I went through three drafts trying to make it curve at the bottom without breaking the connection to the slice’s diagonal sides (turns out you can’t cleanly connect diagonal characters to horizontal ones in a monospace grid). Landed on a two-row rolled crust where the diagonals keep going and the interior fills with a double horizontal band. Pairs surprisingly well with sunset: hackfetch pizza sunset Turns your terminal into a golden-hour pizza box. Ship Both landed in v1.7.3 . If you’re on Arch-family: yay -S hackfetch-bin Elsewhere: brew update brew upgrade hackfetch Now try hackfetch pizza and tell me if the crust looks right."}, {"post_id": 29524, "ts": "2026-07-16T14:40:13Z", "hours": 3.2108, "text": "Hackfetch Is Now Actually Fast Last log I added a loading spinner so you’d have something to look at while hackfetch was hitting the Hackatime API. This week I made it so you barely have time to see the spinner at all (undoing all my work lol) The problem hackfetch was making four separate calls to Hackatime for every fetch: /users/current/heartbeats/most_recent (for your slack handle) /users/current/summaries (for your streak) /users/current/statusbar/today (for today's coding time) /users/current/stats/last_7_days (for weekly stats) Doing them one after another meant the total wait was the sum of all four. Turns out that’s about 1.7 seconds on a normal connection. Not the end of the world, but very noticeable when you just want to open a terminal. The fix: run them all at the same time Now hackfetch fires all four calls in parallel using goroutines, waits for the slowest one to come back, and then builds the fetch from the responses. Total wait drops from “sum of all four” to “just the slowest one.” Before: ~1.7 seconds After: ~0.7 seconds 60% faster . Every single fetch. Every single time. One tiny bonus optimization While I was in there, I also switched to a single shared HTTP client with a bigger connection pool. The default Go setup caps you at 2 open connections per host, which is fine when you’re calling one endpoint at a time but hurts when you’re firing four at once. Now the parallel calls can share connections instead of stacking up on each other. Nothing about the fetch itself changed. Same info, same layout, same colors. Just faster. Ship Shipped in v1.7.2. If you have hackfetch installed: brew update brew upgrade hackfetch time hackfetch Watch the spinner barely have time to appear."}, {"post_id": 29398, "ts": "2026-07-16T10:18:00Z", "hours": 13.6781, "text": "Loading Spinner and Splitting Up main.go Thanks so much to everyone who took the time to comment, rate, and drop feedback on my latest ship. All of it was genuinely so helpful and I’ve been spending the last couple days fixing things up a bit. I totally forgot to devlog so I’m actually losing a couple hours since it’s been over ten hours since my last one :sob A loading spinner while Hackatime fetches One reviewer pointed out that hackfetch takes a couple of seconds when it’s pulling your Hackatime stats for the first time, and there was no signal that anything was happening. Now there is. ⠋ fetching Hackatime... The spinner cycles through 10 braille frames and the whole line clears out the instant the fetch finishes. Same fetch, way less awkward pause. Two small details that make it feel right: It only shows when stderr is actually a terminal, so it doesn’t spam control codes into your log files if you redirect output. It prints one frame immediately, so fast fetches still flash something instead of nothing. hackfetch runs it around the API calls automatically. No config, no opt-in. It’s just there. Splitting up main.go Another reviewer said the 1.5k-line file was too much. They were completely right. hackfetch had grown into one giant main.go that held the logos, the color schemes, the Hackatime API client, the terminal render, the SVG exporter, the PNG rasterizer, everything. Refactored today into files that each do one thing: logos.go: the ASCII logos colors.go: color schemes and the ANSI → hex table config.go: reads ~/.wakatime.cfg hackatime.go: the API client, caching, and language inference sysinfo.go: OS, shell, editor, terminal setup.go: the -setup flow render.go: terminal render, watch loop, and layout export.go: SVG, PNG, and JPG exporters main.go: just flag parsing and the entry point (~100 lines instead of 1,600) Same binary, same behavior, zero user-visible change. But next time I want to add a new logo or a new color scheme, I know exactly which file to open. Also way friendlier for anyone who wants to hack on it. Ship Both landed in v1.7.1. If you already have it: brew update brew upgrade hackfetch Or the curl installer will pull v1.7.1 the next time you run it. Try it."}, {"post_id": 23812, "ts": "2026-07-06T23:42:52Z", "hours": 7.1119, "text": "New feature today: hackfetch can turn itself into a shareable image. The goal was simple: your terminal fetch should be more than a terminal thing. If it looks cool on your screen, you should be able to post it in a Slack channel or drop it in a devlog without ever having to take a screenshot. hackfetch -export card.svg Run that and instead of printing to your terminal, hackfetch writes an SVG file that looks exactly like the fetch on your screen: logo on the left, stats on the right, rounded corners, monospace font, every color preserved. Getting the general SVG output was the easy part. Draw a rectangle, put text inside it, done. The hard part was preserving the colors. Terminals speak ANSI 256-color codes. SVGs speak hex color strings. They don’t line up one-to-one, so a naive export just drops every color and produces a black-and-white version of the fetch. Not very shareable. The fix: a lookup table from ANSI 256-color codes to hex values, plus a rendering path that emits every styled character as its own SVG element with the correct fill color. That’s actually a lot of tspans. Schemes like per-char, where every single glyph has its own gradient stop, can produce hundreds of colored elements per fetch. But it works. The SVG renders smoothly in any browser and looks identical to what shows up in your terminal. Use It Anywhere Some things you can do with the exported card: open it in a browser to see it drop it into a Slack channel or a devlog convert it to PNG with rsvg-convert if you need a raster image hackfetch -export card.svg trans Open it. Post it. Ship it."}, {"post_id": 19472, "ts": "2026-06-30T20:03:24Z", "hours": 2.2483, "text": "Live Hackfetch New milestone today: hackfetch can now stay open and update itself while you code. The goal was simple: run hackfetch once, leave it in the corner of your terminal, and watch the numbers move in real time as you work. hackfetch -watch Your today-hours tick up. Your top project changes when you switch repos. Your streak rolls over at midnight. All without running the command a second time. The static render was already in place from the regular one-shot fetch. The new part was redrawing without scrolling. That sounds simple. It is not. In a terminal, every time you print something, it appends to the bottom of the screen. By default, refreshing the fetch would just print a second copy of itself underneath the first, then a third, then a fourth. Within a minute you’d have a wall of identical fetches scrolling away into the past. The trick is ANSI escape codes. There’s a sequence that means “move the cursor up N lines” and one that means “clear the rest of the screen from here down.” Together they let you erase the previous fetch and redraw a new one in the same spot. Same screen, fresh data, no scroll. Why every 30 seconds? Two reasons: Hackatime aggregates heartbeats in 1-minute buckets internally, so polling faster than that doesn’t tell you anything new 30 seconds is fast enough to feel “live” without hammering the API for no reason Ctrl+C to quit. Resizing the terminal doesn’t break it. Pair it with a gradient color scheme and the whole thing turns into a tiny dashboard for your coding session: hackfetch -watch sunset"}, {"post_id": 16604, "ts": "2026-06-27T00:38:28Z", "hours": 0.5825, "text": "Hackfetch Installs Itself Anywhere Hackfetch crossed another milestone today: you no longer need Go installed to use it. Or Homebrew. Or anything, really. The goal was simple: one command, any Linux, any Mac, no prerequisites. curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Run that on Ubuntu, Fedora, Alpine, Arch, openSUSE, whatever you have, and a few seconds later hackfetch is on your PATH. Getting the basic installer working was the easy part. Detect your OS, detect your CPU architecture, grab the matching binary from GitHub Releases, drop it in /usr/local/bin. Standard installer stuff. The harder problem was the script itself failing on some Linuxes. I’d written the first version in Bash, with set -euo pipefail at the top and $'\\033[1m' style escape sequences sprinkled through. Worked great on my Mac. Worked great on Ubuntu. Then I checked which shell Alpine Linux ships by default. Not Bash. The whole script would die on line one for anyone on a minimal container. So I rewrote it in POSIX sh, which is the one shell every Unix system actually has. No Bash-isms, no fancy quoting, no pipefail. Smaller, dumber, way more portable. Speaking Seven Package Managers The next problem: the script needs curl and tar to do its job. If you don’t have them, normally you’d just be stuck. Instead, the installer now detects your system’s package manager and installs the missing prereqs for you: apt (Debian, Ubuntu) dnf (Fedora, RHEL) yum (CentOS, older RHEL) pacman (Arch) zypper (openSUSE) apk (Alpine) brew (macOS) They all do the same thing. They all use different words for it. The installer knows all seven. One line. Any Linux. No prereqs."}, {"post_id": 15120, "ts": "2026-06-24T15:57:10Z", "hours": 0.4172, "text": "Hackfetch Meets Orpheus! If you’ve been around Hack Club for more than five minutes, you know Orpheus. The little dinosaur shows up everywhere: stickers, websites, T-shirts, hackathon merch. Until today, he wasn’t in hackfetch. That’s been bugging me since v1.0. The goal was simple: give Orpheus a spot in the logo lineup, the same way flag, bot, and rocket already have one. hackfetch orpheus Drawing him was the harder part. Every logo in hackfetch has to fit inside a fixed width of 33 characters, otherwise the system info column next to it gets pushed off the screen. 33 characters is not a lot of room to draw a recognizable dinosaur, especially one with personality. I tried him head-on first. It didn’t work. Round dinosaur faces in ASCII end up looking like blobs because you don’t have curves, only corners. So I redrew him in profile. The result: a snout sticking out to one side one big eye (◉) that catches the light a HACK CLUB body underneath two tiny stubby legs at the bottom Nine lines tall. No wasted rows. He plays especially well with the gradient color schemes: hackfetch orpheus -color forest hackfetch orpheus -color sunset Forest makes him look like he’s wandering through tall grass. Sunset gives him a “main character in the closing shot” vibe. The mascot finally has a seat at the terminal. Long overdue! Also if any better artists want to have a crack at it, I’m super open to that, and I can credit you in my repo as a collaborator! THNX!"}, {"post_id": 14410, "ts": "2026-06-23T15:08:46Z", "hours": 6.8756, "text": "Hackfetch Can Finally Fetch Hackfetch crossed a pretty big milestone today: it actually fetches things. The goal is simple: build a Neofetch-style dashboard for Hack Club. Run a single command and get a snapshot of your machine alongside your Hack Club activity. hackfetch and instantly see information like: OS Hostname Username Shell Terminal Editor Hackatime stats Getting the system information was the easy part. Go makes it straightforward to grab things like the current user, hostname, operating system, and environment variables. The harder problem was rendering everything cleanly beside an ASCII logo. Each logo has different dimensions and line lengths, so I ended up building a small layout engine that calculates the width of every logo row and pads it dynamically before printing the corresponding information. Without that, the text column slowly drifts into the logo and the entire fetch screen looks broken. Hooking into Hackatime The more interesting work was integrating with the Hackatime API.Hackfetch reads your API key from: ~/.wakatime.cfg authenticates with Hackatime, and pulls fresh coding statistics every time you run the command.Right now it can display: Today’s coding time Weekly coding time Current streak Top project Most-used language No browser. No dashboard. Just a terminal command."}, {"post_id": 7579, "ts": "2026-06-12T17:50:14Z", "hours": 0.5989, "text": "In honor of pride month, I have added a pride color scheme to my custom hackfetch. It is currently installable via brew. On macs, simply run: brew install xerneas3318/tap/hackfetch Currently working on better support for more operating systems. Follow and like to stay updated!"}, {"post_id": 7526, "ts": "2026-06-12T15:50:51Z", "hours": 8.7181, "text": "Introducing hackfetch a tiny terminal fetch tool for hackatime. Run hackfetch and get your hours today, weekly total, streak, top project, and top language right in your terminal. 5 logos. 8 color schemes. mix and match: hackfetch stardance rainbow How it works: hackfetch reads your hackatime key from ~/.wakatime.cfg, fetches your Hackatime summaries and heartbeats, then renders your stats directly in the terminal."}]...
|
Title: Hackfetch by @xerneas | Stardance
Devlogs: Title: Hackfetch by @xerneas | Stardance
Devlogs:
Introducing hackfetch a tiny terminal fetch tool for hackatime. Run hackfetch and get your hours today, weekly total, streak, top project, and top language right in your terminal. 5 logos. 8 color schemes. mix and match: hackfetch stardance rainbow How it works: hackfetch reads your hackatime key from ~/.wakatime.cfg, fetches your Hackatime summaries and heartbeats, then renders your stats directly in the terminal.
In honor of pride month, I have added a pride color scheme to my custom hackfetch. It is currently installable via brew. On macs, simply run: brew install xerneas3318/tap/hackfetch Currently working on better support for more operating systems. Follow and like to stay updated!
Hackfetch Can Finally Fetch Hackfetch crossed a pretty big milestone today: it actually fetches things. The goal is simple: build a Neofetch-style dashboard for Hack Club. Run a single command and get a snapshot of your machine alongside your Hack Club activity. hackfetch and instantly see information like: OS Hostname Username Shell Terminal Editor Hackatime stats Getting the system information was the easy part. Go makes it straightforward to grab things like the current user, hostname, operating system, and environment variables. The harder problem was rendering everything cleanly beside an ASCII logo. Each logo has different dimensions and line lengths, so I ended up building a small layout engine that calculates the width of every logo row and pads it dynamically before printing the corresponding information. Without that, the text column slowly drifts into the logo and the entire fetch screen looks broken. Hooking into Hackatime The more interesting work was integrating with the Hackatime API.Hackfetch reads your API key from: ~/.wakatime.cfg authenticates with Hackatime, and pulls fresh coding statistics every time you run the command.Right now it can display: Today’s coding time Weekly coding time Current streak Top project Most-used language No browser. No dashboard. Just a terminal command.
Hackfetch Meets Orpheus! If you’ve been around Hack Club for more than five minutes, you know Orpheus. The little dinosaur shows up everywhere: stickers, websites, T-shirts, hackathon merch. Until today, he wasn’t in hackfetch. That’s been bugging me since v1.0. The goal was simple: give Orpheus a spot in the logo lineup, the same way flag, bot, and rocket already have one. hackfetch orpheus Drawing him was the harder part. Every logo in hackfetch has to fit inside a fixed width of 33 characters, otherwise the system info column next to it gets pushed off the screen. 33 characters is not a lot of room to draw a recognizable dinosaur, especially one with personality. I tried him head-on first. It didn’t work. Round dinosaur faces in ASCII end up looking like blobs because you don’t have curves, only corners. So I redrew him in profile. The result: a snout sticking out to one side one big eye (◉) that catches the light a HACK CLUB body underneath two tiny stubby legs at the bottom Nine lines tall. No wasted rows. He plays especially well with the gradient color schemes: hackfetch orpheus -color forest hackfetch orpheus -color sunset Forest makes him look like he’s wandering through tall grass. Sunset gives him a “main character in the closing shot” vibe. The mascot finally has a seat at the terminal. Long overdue! Also if any better artists want to have a crack at it, I’m super open to that, and I can credit you in my repo as a collaborator! THNX!
Hackfetch Installs Itself Anywhere Hackfetch crossed another milestone today: you no longer need Go installed to use it. Or Homebrew. Or anything, really. The goal was simple: one command, any Linux, any Mac, no prerequisites. curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Run that on Ubuntu, Fedora, Alpine, Arch, openSUSE, whatever you have, and a few seconds later hackfetch is on your PATH. Getting the basic installer working was the easy part. Detect your OS, detect your CPU architecture, grab the matching binary from GitHub Releases, drop it in /usr/local/bin. Standard installer stuff. The harder problem was the script itself failing on some Linuxes. I’d written the first version in Bash, with set -euo pipefail at the top and $'\033[1m' style escape sequences sprinkled through. Worked great on my Mac. Worked great on Ubuntu. Then I checked which shell Alpine Linux ships by default. Not Bash. The whole script would die on line one for anyone on a minimal container. So I rewrote it in POSIX sh, which is the one shell every Unix system actually has. No Bash-isms, no fancy quoting, no pipefail. Smaller, dumber, way more portable. Speaking Seven Package Managers The next problem: the script needs curl and tar to do its job. If you don’t have them, normally you’d just be stuck. Instead, the installer now detects your system’s package manager and installs the missing prereqs for you: apt (Debian, Ubuntu) dnf (Fedora, RHEL) yum (CentOS, older RHEL) pacman (Arch) zypper (openSUSE) apk (Alpine) brew (macOS) They all do the same thing. They all use different words for it. The installer knows all seven. One line. Any Linux. No prereqs.
Live Hackfetch New milestone today: hackfetch can now stay open and update itself while you code. The goal was simple: run hackfetch once, leave it in the corner of your terminal, and watch the numbers move in real time as you work. hackfetch -watch Your today-hours tick up. Your top project changes when you switch repos. Your streak rolls over at midnight. All without running the command a second time. The static render was already in place from the regular one-shot fetch. The new part was redrawing without scrolling. That sounds simple. It is not. In a terminal, every time you print something, it appends to the bottom of the screen. By default, refreshing the fetch would just print a second copy of itself underneath the first, then a third, then a fourth. Within a minute you’d have a wall of identical fetches scrolling away into the past. The trick is ANSI escape codes. There’s a sequence that means “move the cursor up N lines” and one that means “clear the rest of the screen from here down.” Together they let you erase the previous fetch and redraw a new one in the same spot. Same screen, fresh data, no scroll. Why every 30 seconds? Two reasons: Hackatime aggregates heartbeats in 1-minute buckets internally, so polling faster than that doesn’t tell you anything new 30 seconds is fast enough to feel “live” without hammering the API for no reason Ctrl+C to quit. Resizing the terminal doesn’t break it. Pair it with a gradient color scheme and the whole thing turns into a tiny dashboard for your coding session: hackfetch -watch sunset
New feature today: hackfetch can turn itself into a shareable image. The goal was simple: your terminal fetch should be more than a terminal thing. If it looks cool on your screen, you should be able to post it in a Slack channel or drop it in a devlog without ever having to take a screenshot. hackfetch -export card.svg Run that and instead of printing to your terminal, hackfetch writes an SVG file that looks exactly like the fetch on your screen: logo on the left, stats on the right, rounded corners, monospace font, every color preserved. Getting the general SVG output was the easy part. Draw a rectangle, put text inside it, done. The hard part was preserving the colors. Terminals speak ANSI 256-color codes. SVGs speak hex color strings. They don’t line up one-to-one, so a naive export just drops every color and produces a black-and-white version of the fetch. Not very shareable. The fix: a lookup table from ANSI 256-color codes to hex values, plus a rendering path that emits every styled character as its own SVG element with the correct fill color. That’s actually a lot of tspans. Schemes like per-char, where every single glyph has its own gradient stop, can produce hundreds of colored elements per fetch. But it works. The SVG renders smoothly in any browser and looks identical to what shows up in your terminal. Use It Anywhere Some things you can do with the exported card: open it in a browser to see it drop it into a Slack channel or a devlog convert it to PNG with rsvg-convert if you need a raster image hackfetch -export card.svg trans Open it. Post it. Ship it.
Loading Spinner and Splitting Up main.go Thanks so much to everyone who took the time to comment, rate, and drop feedback on my latest ship. All of it was genuinely so helpful and I’ve been spending the last couple days fixing things up a bit. I totally forgot to devlog so I’m actually losing a couple hours since it’s been over ten hours since my last one :sob A loading spinner while Hackatime fetches One reviewer pointed out that hackfetch takes a couple of seconds when it’s pulling your Hackatime stats for the first time, and there was no signal that anything was happening. Now there is. ⠋ fetching Hackatime... The spinner cycles through 10 braille frames and the whole line clears out the instant the fetch finishes. Same fetch, way less awkward pause. Two small details that make it feel right: It only shows when stderr is actually a terminal, so it doesn’t spam control codes into your log files if you redirect output. It prints one frame immediately, so fast fetches still flash something instead of nothing. hackfetch runs it around the API calls automatically. No config, no opt-in. It’s just there. Splitting up main.go Another reviewer said the 1.5k-line file was too much. They were completely right. hackfetch had grown into one giant main.go that held the logos, the color schemes, the Hackatime API client, the terminal render, the SVG exporter, the PNG rasterizer, everything. Refactored today into files that each do one thing: logos.go: the ASCII logos colors.go: color schemes and the ANSI → hex table config.go: reads ~/.wakatime.cfg hackatime.go: the API client, caching, and language inference sysinfo.go: OS, shell, editor, terminal setup.go: the -setup flow render.go: terminal render, watch loop, and layout export.go: SVG, PNG, and JPG exporters main.go: just flag parsing and the entry point (~100 lines instead of 1,600) Same binary, same behavior, zero user-visible change. But next time I want to add a new logo or a new color scheme, I know exactly which file to open. Also way friendlier for anyone who wants to hack on it. Ship Both landed in v1.7.1. If you already have it: brew update brew upgrade hackfetch Or the curl installer will pull v1.7.1 the next time you run it. Try it.
Hackfetch Is Now Actually Fast Last log I added a loading spinner so you’d have something to look at while hackfetch was hitting the Hackatime API. This week I made it so you barely have time to see the spinner at all (undoing all my work lol) The problem hackfetch was making four separate calls to Hackatime for every fetch: /users/current/heartbeats/most_recent (for your slack handle) /users/current/summaries (for your streak) /users/current/statusbar/today (for today's coding time) /users/current/stats/last_7_days (for weekly stats) Doing them one after another meant the total wait was the sum of all four. Turns out that’s about 1.7 seconds on a normal connection. Not the end of the world, but very noticeable when you just want to open a terminal. The fix: run them all at the same time Now hackfetch fires all four calls in parallel using goroutines, waits for the slowest one to come back, and then builds the fetch from the responses. Total wait drops from “sum of all four” to “just the slowest one.” Before: ~1.7 seconds After: ~0.7 seconds 60% faster . Every single fetch. Every single time. One tiny bonus optimization While I was in there, I also switched to a single shared HTTP client with a bigger connection pool. The default Go setup caps you at 2 open connections per host, which is fine when you’re calling one endpoint at a time but hurts when you’re firing four at once. Now the parallel calls can share connections instead of stacking up on each other. Nothing about the fetch itself changed. Same info, same layout, same colors. Just faster. Ship Shipped in v1.7.2. If you have hackfetch installed: brew update brew upgrade hackfetch time hackfetch Watch the spinner barely have time to appear.
One More Way to Install (and Pizza) Two small things today: hackfetch is now on the AUR, and there’s a new logo. hackfetch on the AUR A reviewer on my last ship said they had a hard time getting hackfetch running on CachyOS (an Arch-based Linux distro). Instead of trying to reproduce their exact issue, I figured the cleanest fix was to publish hackfetch through the package manager Arch users already trust. So hackfetch is now up as hackfetch-bin on the AUR: aur.archlinux.org/packages/hackfetch-bin If you’re on Arch, CachyOS, Manjaro, EndeavourOS, Garuda, or any other Arch-based distro: yay -S hackfetch-bin Or with paru: paru -S hackfetch-bin The package pulls the pre-built binary straight from the GitHub release, so there’s no waiting on a source build. Works on both x86_64 and aarch64 . Add it up and hackfetch is now installable one command from: brew (macOS and Linuxbrew) apt / dnf / yum / pacman / zypper / apk (all through the curl installer) the AUR (Arch family) go install (any platform with Go) the PowerShell installer (Windows) This thing is getting kind of hard to NOT install. Pizza logo Hack Club runs on pizza. Now hackfetch does too. hackfetch pizza It’s a triangular slice viewed from the tip, HACK CLUB baked into the middle, and a rolled crust at the wide edge. The tricky part was the crust. I went through three drafts trying to make it curve at the bottom without breaking the connection to the slice’s diagonal sides (turns out you can’t cleanly connect diagonal characters to horizontal ones in a monospace grid). Landed on a two-row rolled crust where the diagonals keep going and the interior fills with a double horizontal band. Pairs surprisingly well with sunset: hackfetch pizza sunset Turns your terminal into a golden-hour pizza box. Ship Both landed in v1.7.3 . If you’re on Arch-family: yay -S hackfetch-bin Elsewhere: brew update brew upgrade hackfetch Now try hackfetch pizza and tell me if the crust looks right.
Hackfetch Gets Real Colors New thing today: hackfetch now emits 24-bit color when your terminal supports it, and spreads gradients smoothly across each row instead of cycling through the palette one character at a time. Before and after Old behavior: for a per-char scheme like rainbow , each character got exactly one palette entry, wrapping around every N characters. On a 30-column row with a 3-color palette, that looked like ten cycles of red, green, blue, red, green, blue… basically RGB static. New behavior: the palette spreads across the row once, and characters between palette entries get interpolated in-between colors. Same 3-color palette on a 30-column row now shows red, olive, green, teal, blue, magenta, back to red. Why the rebuild Terminals speak two color modes: 256-color ( \x1b[38;5;Nm ): pick from a fixed palette of 256 preset RGB values. 24-bit / truecolor ( \x1b[38;2;R;G;Bm ): specify any of ~16 million RGB values directly. The old code always used 256-color. That meant every character had to snap to one of the palette entries. No in-betweens possible. The new code checks $COLORTERM (set to truecolor by iTerm2, kitty, WezTerm, Alacritty, GNOME Terminal, and most modern terminals) and emits 24-bit escapes when supported. When it’s not, it falls back to the old cycled-palette behavior automatically. You can force it either way with HACKFETCH_TRUECOLOR=1 or =0 . Where you’ll notice it The built-in rainbow scheme has 23 palette stops, so the difference on that one is small. You just see a smoother color distribution and less banding. The change is dramatic on: custom themes with few stops (try 3 colors in your ~/.config/hackfetch/colors.json for the wildest gradient) the stardance palette (11 stops, per-char), where sparkles now flow through the spectrum in order instead of landing on random-looking colors any per-line scheme ( pride , trans , bi , pan , sunset , ocean , forest ) since they now emit exact RGB values instead of nearest-256-color Bonus: the SVG, PNG, and JPG export paths use the smooth interpolation too, so exported cards look better regardless of your terminal. Ship Landed in v1.8.0 . brew update brew upgrade hackfetch Or on the Arch family: yay -Syu hackfetch-bin Try hackfetch rocket forest and just watch.
hackfetch is now TMUX + NVIM COMPATIBLE new thing today: hackfetch will just show up wherever you already look. tmux status bar. nvim statusline. any tool that can shell out to a command and put text on a screen. The addition was simple: hackfetch -status prints one line: 2h 11m today · hackfetch (45m) · streak 12 just the numbers, for tools that already have their own rendering. hackfetch is a data source now, not just a display. in tmux two lines in ~/.tmux.conf : set -g status-interval 60 thats it. every tmux session, every window, refreshing once a minute. i dropped it in a pink Catppuccin capsule to the left of my existing date capsule and now i cant stop glancing at it lol. in neovim (lualine) same story, five lines of lua: sections = { lualine_z = { function () return vim . fn . system ( "hackfetch -status" ): gsub ( " \n " , "" ) end } } } shells out on every redraw. works with airline too, or any custom statusline that lets you plug in a function. the fun part making hackfetch call safe for “something tmux runs every 60s forever” meant fixing three assumptions the normal fetch was making. this was way harder than it should have been ngl. setup cant block. if you dont have ~/.wakatime.cfg, normal hackfetch throws you into an interactive setup wizard (ask me how i know). in status mode that would freeze your tmux bar until you notice and Ctrl+C it. so status mode is fully non interactive now. no config → print nothing → tmux shows nothing → no deadlock 🙏 api errors cant leak into your bar. hackatime offline? old behavior would dump HTTP 500 timeout into your status area which looks INSANE. now status mode exits silently instead so your bar stays clean every call has to be cheap. hackfetch’s parallel fetch alr seconds, and the shared HTTP client keeps connections alive across the 4 API calls it fires, so tmux polling every 60s is easy on the API. a proper local file cache is on the list for later but honestly not needed for now (i’m lazy) ship landed in v1.9.0. if you already have it: brew update brew upgrade hackfetch or arch family: yay -Syu hackfetch-bin (for more installs for ur specific os check out the github pls) then drop the tmux or lualine snippet above into your dotfiles and its just there in every terminal. no plugin. no config. no daemon. just a flag.
caching or i owe hackclub money so heres what my day looked like: nvim was calling hackfetch -status on every redraw for my lualine. tmux was calling it every 60 seconds for the status bar. i had 3 tmux sessions open. and every time i actually opened a new terminal, hackfetch fired again on shell start. quick napkin math: nvim redraws are basically continuous when im typing, tmux was hitting the api 3x/minute across sessions, plus every terminal open = another fetch. we’re talking hundreds of calls to hackatime in a normal work session. from ONE user. me hackatime is a free hack club service and i was starting to feel bad lol. the fix: cache the response ~/.cache/hackfetch/last.json stores the last snapshot with a timestamp. every fetch checks that file first. if its fresh enough, skip the network entirely and just render from disk. TTL is different depending on the caller: hackfetch (one-shot): 30 seconds. long enough that a normal re-run inside a devlog attempt is instant, short enough that you dont get badly stale numbers. hackfetch -status: 60 seconds tmux polls roughly this often anyway so its basically free now. hackfetch -watch: ignores the cache, always fresh (thats the whole point of watch mode). opt out with -no-cache or HACKFETCH_CACHE_TTL=0 if you want. also HACKFETCH_CACHE_TTL=300 to be even more polite. So yea tmux is now basically free . but the real win writing this made me realize the cache does more than save milliseconds: every fetch was a full TLS handshake, wifi radio spin up, etc. now most fetches touch the disk once and nothing else. macbook fan appreciates it. offline. if your wifi drops mid coding session you keep working from the cache instead of showing a spinner forever. tmux bar just keeps saying what it said 40 seconds ago. battery again but for the hackatime server. hackfetch stops asking the api 5-10x more than they need to. multiply by everyone who has it in their tmux config and thats a real thing. atomic write via .tmp + rename so nothing ever reads a half-written file. cache is user-only (0600), because it does contain your top project name. bonus: -doctor while i was fixing the polite-to-the-api stuff i added -doctor , which walks a checklist and tells you whats broken: hackfetch doctor ✓ wakatime config exists /Users/xerneas/.wakatime.cfg ✓ api_key present loaded from config ✓ wakatime-cli found /Users/xerneas/.wakatime/wakatime-cli ✓ hackatime api reachable today: 28m ✓ terminal supports truecolor $COLORTERM=truecolor ✓ browser opener available /usr/bin/open green if its working, orange if its not, and non-zero exit if anything failed so you can script it. this was going to be a small self-diagnosis feature and it caught a real bug in the api client on the very first run i did while writing it lol (a string field where hackatime returns an int, so one of the fields was silently missing from every fetch since v1.0). fixed that too. ship both landed in v1.10.0. update as usual: brew update brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then run hackfetch -doctor first, and if anything is broken it’ll tell you exactly what.
my streak was lying to me for a month went to add a simple 7-day sparkline. by the end of the night i had rewritten how hackfetch talks to hackatime and my streak field is finally accurate for the first time in weeks. the plan was get the status from the last 7 days. draw ▁▂▃▄▅▆▇█ bars except the endpoint i needed straight up 404s. /users/current/summaries doesnt exist on the current hackatime deployment. Which means every single time i ran hackfetch it was quietly making a 30-day range call that always failed, then falling back to a placeholder that said “if today has activity, streak = 1”. thats it. no matter how long ive actually been on a streak, the fetch would just show 1 day. 🤦 my streak has said 1 day for the last 2 weeks even though ive been coding literally every day. never noticed because 1 day looks kinda plausible (i added 1 day as a fallback so that it didn’t show an error a couple weeks ago and forgot ) the fix: went digging in hackatimes rails routes on github. turns out theres a whole /api/v1/ namespace i was never using. and one of the endpoints is /api/v1/users/:id/heartbeats/spans. one call, ~150kb of json, every coding session ive ever logged with start_time, end_time, duration. 2000+ spans. which is exactly what i need for both features. bucket the timestamps by local calendar day, count unique days for streak, sum durations per day for the sparkline. one request covers both. and while i was already in the api layer i noticed fetchUser was making a whole separate call for my slack handle, which is silly because that data is already in the weekly stats response we cache. so i piggybacked it. weve gone from 4 api calls per fetch to 3. the sparkline: 7-day chart ▄▄▇▅▄▅▃ 65h 28m oldest on the left, newest on the right. that tall bar in the middle is a big lock-in session from earlier in the week. the two shorter ones on the right are today (still coding) and yesterday (took a break). opt in for -status --sparkline if you want it in your tmux bar too: 2h 9m today · streak 9 · ▄▄▇▅▄▅▃ 65h 28m teasing a backend: I’m planning on building a whole leaderboard server on a free hack club nest box so people can compete on their hackatime hours. while i was poking around the routes file for the streak fix i noticed something. /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist. public. no auth needed. no server needed. no cron sync. hackatime literally already has it directly. so hackfetch -leaderboard is coming soon (private friend groups and personal competitions can come later) last devlog before my next ship after the ship the devlogs are going to be huge. stay tuned :P
hackfetch COLLAB?? so my last two devlogs teased two features. shipping both today. -leaderboard last devlog i said “compete with your friends on hackatime hours is coming soon.” i thought i was gonna have to build a whole nest server for it. turns out /api/v1/leaderboard/daily and /api/v1/leaderboard/weekly already exist and are public on hackatime. just a single call!! so hackfetch -leaderboard daily (or weekly) now shows the top 10: ✦ daily leaderboard Last 24 hours 🥇 1. soaphia14 11h 12m 🥈 2. AnastKara 10h 32m 🥉 3. RoSerMar 10h 6m 4. euledone 10h 5. TheShovel 10h 6. Dylhouse 9h 1m 7. Dexrn 8h 59m 8. HexFud 8h 31m 9. zeddash 8h 29m 10. Trtotomotoro 8h 26m every username is an OSC 8 clickable link to that person’s hackatime profile. modern terminals (iterm2, kitty, wezterm, alacritty, gnome-terminal) render it as an actual hyperlink you can click. terminals without OSC 8 just show the plain text so it doesnt look broken. if you’re on the board it highlights your row in orange and adds (you) next to your name. json addon the other thing. someone else competing in stardance messaged me the other day about integrating hackatime into their own project and needed help figuring out the api (YAY). helping them made me realize hackfetch is doing a bunch of work (auth, caching, streak reconstruction, per-day bucketing) that other tools would love to piggyback on. so now: $ hackfetch -json { "version": "2", "fetched_at": "2026-07-25T17:00: 20.900829+05:30", "system": { "user": "xerneas", "host": "Macbook-Pro", "os": "macOS 26.5.2", ... }, "hackatime": { "slack": "@U0B8FHHRQPJ", "streak": 12, "today_seconds": 15820, "week_seconds": 237501, "top_project": { "name": "hackfetch", " "top_language": { "name": "Go", "seconds": 97418 }, "week_chart": [36967, 31651, 33841, 284 "machines": 3 } } week_chart is 7 numbers = daily seconds oldest to newest same as the sparkline. top_language skips the unknown/other buckets. everything lines up with what the normal fetch would show, just parseable. ship landed in v2.1.0. brew update && brew upgrade hackfetch or arch: yay -Syu hackfetch-bin then try: hackfetch -leaderboard weekly hackfetch -json | jq For a general install use: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh
big thank you for everyone’s feedback! fresh out of the oven: hackfetch v2.1.1 (aka the reviewer bug fix pass) what got fixed: shell detection used to just read $SHELL which is your login shell. if you log in as bash but run fish, hackfetch was calling you a bash user. it now checks $FISH_VERSION / $ZSH_VERSION / $BASH_VERSION and falls back to asking the OS who your parent process actually is editor detection was two bugs in a trench coat. it wasnt stripping args so zeditor --wait showed up as “zeditor –wait” instead of “Zed”, and if you had no $EDITOR set it defaulted to nano even if you had literally never opened nano. now it strips flags, maps launcher names to human ones (zeditor -> Zed, code -> VS Code, cursor -> Cursor, hx -> Helix etc), and says “-” instead of nano if nothing is set. top project label was ambiguous. it was pulling weekly stats but the row just said “top project” so people thought it meant all time. now weekly rows read top proj 7d , top lang 7d , top ed 7d , top cat 7d . setup dialog was scaring people. it always printed “file exists but has no api_key” whenever it reached the setup flow, even if the api_key line was actually there but just failing to parse. loadConfig is now more forgiving (inline comments, quoted values, case insensitive keys) and setup tells you WHY its stuck instead of gaslighting you about your own config. also short circuits if you run hackfetch -setup when youre already set up. people said they wanted a gay flag color was already there under the name pride but that wasnt obvious. gay is now an alias so both work. grab it: brew upgrade hackfetch or yay -S hackfetch-bin or curl / powershell installer if you don’t have it yet curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh again thank you to everyone who took the time to actually run it and tell me what was broken!
HACKFETCH BATTLES??? two features in one release. hackfetch already knows a scary amount about you (thanks hackatime) so why not turn that into more features. hackfetch vs @ someone head to head compare. give it a hackatime username and hackfetch fetches both your histories in parallel, buckets them into today / this week / all time / streak, and prints them side by side with a winner arrow on every row. accepts @name , name , or a full profile url like hackatime.hackclub.com/@name . also works positional: hackfetch vs @you . use it to settle arguments, motivate yourself, or realize your friend has coded 265 hours and you should probably close discord. hackfetch -records personal bests. computed entirely from data hackfetch already fetches (streak + sparkline already use it), so zero new api calls $ hackfetch -records ✦ personal records @you biggest day 12h 41m on 2026-07-18 longest streak 25 days ended 2026-07-01 longest session 43m on 2026-07-17 days coded 86 first day 2026-04-24 99 days ago lifetime 208h 29m the “longest streak” tracks your all time best not just your current one. and “first day” tells you how long ago you started so you can feel old. grab it brew upgrade hackfetch yay -S hackfetch-bin install curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Next devlog is gonna be a fun one, I have an idea cooking up
Hackfetdch natively in your readme hackfetch -readme it spits out a markdown stats card ready to paste straight into your github profile README. pipe it into a file and commit: hackfetch -readme > stats.md this is the cool bit or drop it in your README.md between two html comments and set up a github action to run it on a schedule so it auto refreshes every day. your profile now has a live coding stats card next to your pinned repos with no cron server, no vercel deploy, no api key stashed in secrets. its literally just markdown. zero extra api calls too. the readme card reads from the same cached hackatime response the normal fetch uses so if you just ran hackfetch it takes ~20ms. the streak emoji is a lil detail i had fun with. 3+ days gets a 🔥 upgrade with brew upgrade hackfetch or yay -S hackfetch-bin (once aur maintenance wraps up) or curl the installer curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh
Ships:
Every fetch tool tells you your OS. Mine tells you your streak. hackfetch is a Hack Club themed terminal fetch tool. Inspired by neofetch (originally bash, now archived) and fastfetch (its C successor), written in pure Go. Instead of just showing your kernel and CPU, it pulls live stats from your Hackatime account: today’s hours, weekly total, current streak, top project, top language. Right in your terminal. Six Hack Club themed ASCII logos (including my GOAT orpheus). Fourteen color schemes (pride, trans, bi, pan included). Live watch mode that refreshes while you code. And as of today, you can export the whole thing as a PNG, JPG, or SVG card and post it anywhere. One line to install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Tell me how it was! Follow and like for updates.
HACKFETCH V2.0 it’s been a few weeks since ship #1 and hackfetch is a completely different tool now. faster, smaller, quieter, actually correct, and now lives in places besides your terminal window. v2.0.0 is out. what changed: fits in your tmux status bar with one line of config. same story for lualine. hackfetch -status prints a compact one-liner meant to be shelled out to every minute. fits everywhere else too. now on the AUR (yay -S hackfetch-bin) alongside the existing brew tap, curl installer, powershell installer, and go install. seven install channels total. runs in ~20ms on repeat calls thanks to an on-disk cache. tmux polling every minute is basically free now. was ~700ms cold before. runs in ~0.7s cold thanks to a parallel API fetch. was ~1.7s before. shows a smooth truecolor gradient on any modern terminal. auto-detects $COLORTERM. falls back to 256-color on older ones. -doctor walks a colored checklist of your setup and tells you exactly what’s broken. green if fine, orange if not, non-zero exit if you wanna script it. new pizza logo because hack club runs on pizza. seven logos total. streak is finally correct after silently saying “1 day” for a month. /summaries is gone from hackatime so hackfetch now reconstructs streak from every coding session in your history via /heartbeats/spans. real streak: 9 days for me right now. 7-day sparkline baked into the fetch (with -v) and available as -status –sparkline for the tmux bar. default fetch got leaner. slack handle, machines count, and the sparkline moved behind -v so the normal fetch stays focused on hours + project + language. loading spinner on the api fetch so you know something is happening. and then the cache made it show up almost never. one install: Linux / Mac: curl -fsSL https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.sh | sh Windows: irm https://raw.githubusercontent.com/xerneas3318/hackfetch/main/install.ps1 | iex Arch family: yay -S hackfetch-bin macOS / Linuxbrew: brew install xerneas3318/tap/hackfetch For more install methods check out the github page: https://github.com/xerneas3318/hackfetch teasing the next big thing: hackfetch -leaderboard is coming next, using the public leaderboard endpoints i found in hackatime’s routes file. compete with friends on daily and weekly hours right from your terminal. private friend groups on a hackclub nest box after that. if you try it, thanks. send me some feedback...
|
1792878603.0227313
|
1793742603.0227313
|
|
16968
|
My very own WebOS by @Sair | Stardance
|
Sair
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T11:30:11Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own WebOS named SairOS. Functions that were for WebOS 1 mission: Live clock Notes app Calculator My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Functions for the WebOS 2 mission: Settings(where you can change the wallpaper) Calculator Boot animation with sound effect I recommend pressing ctrl+shift+R in github page if something does not work. Also the green button is both maximise and minimise buttons.", "repo": "https://github.com/Sairsides/SairOS", "demo": "https://sairsides.github.io/SairOS/"}, {"ship_num": 2, "ts": "2026-06-15T18:02:30Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made my own WebOS named SairOS. Functions: Live clock Notes app Calculator Settings(where you can change the wallpaper) My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Most challenging part was making my first own Welcome window, after I finished it and understood how everything works, I did not have problem making more windows. I really had fun making a this protect!", "repo": "https://github.com/Sairsides/SairOS", "demo": "https://sairsides.github.io/SairOS/"}]...
|
[{"post_id": 15602, "ts": "202 [{"post_id": 15602, "ts": "2026-06-25T11:22:34Z", "hours": 0.7783, "text": "Added boot animation with sound. Fixed maximise and minimise bug with window(btw green button is both maximise and minimise button)"}, {"post_id": 9376, "ts": "2026-06-15T18:29:55Z", "hours": 0.2731, "text": "Fixed buttons, now there are 2 working buttons, close and maximize buttons"}, {"post_id": 9338, "ts": "2026-06-15T17:46:47Z", "hours": 1.3722, "text": "Added calculator, Settings, and connection to https://sairsides.github.io/"}, {"post_id": 9188, "ts": "2026-06-15T12:49:35Z", "hours": 1.0311, "text": "Made hover animation. An app(note app). To open it you need to double click like in a real OS. Added also little details like, that the window and go under or over the top bar. If for example the Welcome Window is blocking the Notes app, just click the Notes app to bring it back to the front. Did not make the other buttons work yet."}, {"post_id": 8717, "ts": "2026-06-14T14:12:33Z", "hours": 1.2919, "text": "Fixed a bug with the background. Welcome window is now draggable, closable and openable. You can open the Welcome Window by pressing the SairOS on the top bar. Next I suppose I will make the other buttons work also."}, {"post_id": 8406, "ts": "2026-06-13T23:38:10Z", "hours": 1.97, "text": "Today I added a window, wallpaper, top bar with an OS name and a live ticking clock with JS. Next time I will make windows closable, openable and draggable."}, {"post_id": 7498, "ts": "2026-06-12T14:38:08Z", "hours": 1.1861, "text": "Progress so far, added SairOS logo and basic Welcome Screen. Next i will add Wallpaper, Window, Top bar, Tracking time with JS. You can also check out the the OS here: https://sairsides.github.io/SairOS/"}]...
|
Title: My very own WebOS by @Sair | Stardance
Dev Title: My very own WebOS by @Sair | Stardance
Devlogs:
Progress so far, added SairOS logo and basic Welcome Screen. Next i will add Wallpaper, Window, Top bar, Tracking time with JS. You can also check out the the OS here: https://sairsides.github.io/SairOS/
Today I added a window, wallpaper, top bar with an OS name and a live ticking clock with JS. Next time I will make windows closable, openable and draggable.
Fixed a bug with the background. Welcome window is now draggable, closable and openable. You can open the Welcome Window by pressing the SairOS on the top bar. Next I suppose I will make the other buttons work also.
Made hover animation. An app(note app). To open it you need to double click like in a real OS. Added also little details like, that the window and go under or over the top bar. If for example the Welcome Window is blocking the Notes app, just click the Notes app to bring it back to the front. Did not make the other buttons work yet.
Added calculator, Settings, and connection to https://sairsides.github.io/
Fixed buttons, now there are 2 working buttons, close and maximize buttons
Added boot animation with sound. Fixed maximise and minimise bug with window(btw green button is both maximise and minimise button)
Ships:
I made my own WebOS named SairOS. Functions: Live clock Notes app Calculator Settings(where you can change the wallpaper) My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Most challenging part was making my first own Welcome window, after I finished it and understood how everything works, I did not have problem making more windows. I really had fun making a this protect!
I made my own WebOS named SairOS. Functions that were for WebOS 1 mission: Live clock Notes app Calculator My Portfolio(connected https://sairsides.github.io/ through iframe) Welcome window(you can open it back by pressing “SairOS” on the top bar) Functions for the WebOS 2 mission: Settings(where you can change the wallpaper) Calculator Boot animation with sound effect I recommend pressing ctrl+shift+R in github page if something does not work. Also the green button is both maximise and minimise buttons....
|
1793112654.9336932
|
1793199054.9336932
|
|
17012
|
Health decoder by @vatsamalakar | Stardance
|
vatsamalakar
|
2
|
2.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-17T19:50:21Z", "hours": 1.0, "multiplier": 2.11, "payout": 3, "blessing": "neutral", "text": "Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.", "repo": "https://github.com/vatsamalakar/HealthDecoder", "demo": "https://health-decoder-kappa.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-13T20:05:23Z", "hours": 1.0, "multiplier": 1.39, "payout": 1, "blessing": "neutral", "text": "Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.", "repo": "https://github.com/vatsamalakar/HealthDecoder", "demo": "https://health-decoder-kappa.vercel.app/"}]...
|
[{"post_id": 23534, "ts": "202 [{"post_id": 23534, "ts": "2026-07-06T15:43:31Z", "hours": 1.3706, "text": "I worked on deploying Health Decoder to Vercel, making it accessible online so users can upload and decode their health insurance plans without needing to install or run the project themselves!"}, {"post_id": 8267, "ts": "2026-06-13T19:12:49Z", "hours": 0.9917, "text": "I have been working on Health Decoder which lets you add your health insurance and then you recieve a broken down response that outlines the copay, premium, coverage, and more in terms that are easier to understand. I also added an AI chatbot so that users can ask questions about their insurance plan and receive grounded answers, as the chatbot will only refer to their insurance plan when answering."}]...
|
Title: Health decoder by @vatsamalakar | Stardance Title: Health decoder by @vatsamalakar | Stardance
Devlogs:
I have been working on Health Decoder which lets you add your health insurance and then you recieve a broken down response that outlines the copay, premium, coverage, and more in terms that are easier to understand. I also added an AI chatbot so that users can ask questions about their insurance plan and receive grounded answers, as the chatbot will only refer to their insurance plan when answering.
I worked on deploying Health Decoder to Vercel, making it accessible online so users can upload and decode their health insurance plans without needing to install or run the project themselves!
Ships:
Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq.
Health Decoder is an AI-powered web app that helps users understand their health insurance plans in simple, easy-to-understand language. Users can upload a PDF of their insurance policy, get a simplified summary, and ask questions about their coverage using an AI chatbot powered by Groq....
|
1792882097.4261076
|
1793746097.4261076
|
|
17103
|
NebulaOS by @azure | Stardance
|
azure
|
2
|
18.0
|
5
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-07T04:12:01Z", "hours": 1.0, "multiplier": 5.63, "payout": 5, "blessing": "neutral", "text": "I Created a web os space themed with 5 apps and 3 backgrounds with an app bar, drop downs, and music player with tileable windows and adjustable sizes", "repo": "https://github.com/BraedynL0530/web-os", "demo": "https://web-os-hh4f.vercel.app/boot"}, {"ship_num": 2, "ts": "2026-06-21T07:22:03Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a web OS, it has an app launcher, basic window management such as dragging, resizing, closing, maximizing and ok snapping, music player with YouTube links, various apps, changeable backgrounds, an app launcher at bottom, meant to look like riced linux but im not the best at frontend. its spaced themed, some of the apis aren’t consistent like weather rate limits and privacy may mess it up, currently media server so music player isn’t working, debugging that now. when it does work it’ll be instant as backed is separate.", "repo": "https://github.com/BraedynL0530/web-os", "demo": "https://web-os-hh4f.vercel.app/boot"}]...
|
[{"post_id": 23926, "ts": "202 [{"post_id": 23926, "ts": "2026-07-07T04:11:07Z", "hours": 0.375, "text": "Final finished the playlist issue now it should run fine, music works, slight ui changes nothing too noticeable."}, {"post_id": 22611, "ts": "2026-07-05T05:07:25Z", "hours": 0.5686, "text": "removed refrences to backend opting for invisible i frame as i couldnt figure it out, it now has quing and autoplay/loops videos now. working on cleaning up ui, and ill try to get titles of music."}, {"post_id": 12971, "ts": "2026-06-21T07:05:12Z", "hours": 0.4353, "text": "Polishing for deployment."}, {"post_id": 12944, "ts": "2026-06-21T05:43:49Z", "hours": 0.8317, "text": "final devlog, i added window management, ship ill add the jpgs for backgrounds in, i tried to fit all the apps in menu in here but gave up so it looks like this, had a minor hitch topbar was hiding controls so i had to add more offset for that. final-ish desktop environment look"}, {"post_id": 12913, "ts": "2026-06-21T04:32:34Z", "hours": 4.0825, "text": "GIANT dev log heres what i added: fixed media handling, now it displays song title, saves, and more, made windows fit no matter if they are maximized or not. added calculator, notes, terminal, and snake(the game) apps. added a few gifs, fixed weather api. Added background handling into settings menu despite no images a bunch of styling, but mainly debugging the window issue which was stupid simple fix i didn’t see but that took forever, and media server being inconstant, one issue was that local storage wouldn’t save as an array causing the frontend to crash and just dispaly black, more with snake logic and matching it to screen. and a few minor issues like weather api not working rate limits, and more. everything is functional as of now, next ill add background images then tiling/window management because its pretty cluttered right now. but this feels like it took less time than it says, mainly debugging, styling, and a few new apps."}, {"post_id": 12350, "ts": "2026-06-20T04:39:19Z", "hours": 4.1592, "text": "Test devlog, wakatime has been glitched at 2:51/ 59minutes in my ide seeing if this fixes it"}, {"post_id": 11083, "ts": "2026-06-18T03:50:36Z", "hours": 1.2617, "text": "i fixed the dragging issues, windows now work fully and fixed the background issue on whiteboard, all controls work as well, added a dropdown(css and functionality isn’t fully finished) and re aligned some things in top bar. no real issues on this one other than i cant draw with an mouse, i wanna make music work next and app searching would be nice, ill try to finish all of this by today or tomorrow"}, {"post_id": 10909, "ts": "2026-06-17T21:41:36Z", "hours": 1.1758, "text": "WIP: desktop environment, Filler is for icons, forgot about drop-down and i think i wanna add a background to time and move it to the right, works well. i had trouble with using components functions from desktop because i didn’t realize React doesn’t work like python with component.method() so i had to refactor a small chunk of code but now that works, another issue i haven’t fixed yet is: weather isn’t displaying, and currently react-dragable doesn’t work with Vite so i need to re configure or make my own. its coming out pretty good though. ill fix CSS then dragable, and add more apps, Hopefully a background too and test out music."}, {"post_id": 8453, "ts": "2026-06-14T01:47:08Z", "hours": 1.6211, "text": "Created app launcher, made windows draggable, added routing so i can test tho blank screens as half finished, fixed music API and made backend for it using an old project and decided to stream instead of downloading in backed and keeping it in local storage(not yet but it will) so that everyone doesn’t have to share the same music and i don’t need to host all the mp3s. also added an whiteboard app and placeholders for others. one struggle is tiling not sure how ill do that just yet, and another was deciding how i would get music since HTML is limited to browser i cant just sync browser visuals to music or control it i need to stream the music. also spelling was an issue for a bit and i still cant see my desktop due to references to stuff that’s incomplete and no CSS. good work so far though, i plan to polish add more apps and try to get a simple tiling system along with just floating windows next. and having desktop visible. same SS for now, promise next one will have a visual update (;ŏ﹏ŏ;)"}, {"post_id": 7872, "ts": "2026-06-13T04:11:13Z", "hours": 0.6658, "text": "created window manager now i can close, min/max windows, and display apps in theory no data or CSS to back it up. top-bar has features basically done i do need to finish and get assets for the drop down in it so placeholders for now. one issue ive been having is that react is very annoying and a lot of moving parts to set up stuff im more used to python. going to develop some apps and backend, set up nav, fix dragging because i didnt add that ablity yet, and create launcher and bg next. img is still boot screen i think i should add stars in background as well."}, {"post_id": 7779, "ts": "2026-06-13T00:07:28Z", "hours": 1.3011, "text": "Improved boot menu, i added ASCII Saturn to right of terminal and made loading bar inside terminal window. started work on window manager, placeholder for api.js, added clock in top-bar placeholder for more features, and begin work for windows.jsx. i realized react doesn’t work like python so i cant dynamically render apps like i wanted to in windows so ill have to have to change how apps will be rendered. no CSS for top bar yet. i plan to complete top-bar features next update and have working windows/app launching."}, {"post_id": 7309, "ts": "2026-06-12T05:37:36Z", "hours": 1.2728, "text": "Creating the welcome/bootscreen rough draft complete., made desktop and project skeleton with dynamic apps/launching for future starting topbar. react is hard and i need to sync animations better as well as continue work on more features. ill complete topbar and windows next."}]...
|
Title: NebulaOS by @azure | Stardance
Devlogs:
Cr Title: NebulaOS by @azure | Stardance
Devlogs:
Creating the welcome/bootscreen rough draft complete., made desktop and project skeleton with dynamic apps/launching for future starting topbar. react is hard and i need to sync animations better as well as continue work on more features. ill complete topbar and windows next.
Improved boot menu, i added ASCII Saturn to right of terminal and made loading bar inside terminal window. started work on window manager, placeholder for api.js, added clock in top-bar placeholder for more features, and begin work for windows.jsx. i realized react doesn’t work like python so i cant dynamically render apps like i wanted to in windows so ill have to have to change how apps will be rendered. no CSS for top bar yet. i plan to complete top-bar features next update and have working windows/app launching.
created window manager now i can close, min/max windows, and display apps in theory no data or CSS to back it up. top-bar has features basically done i do need to finish and get assets for the drop down in it so placeholders for now. one issue ive been having is that react is very annoying and a lot of moving parts to set up stuff im more used to python. going to develop some apps and backend, set up nav, fix dragging because i didnt add that ablity yet, and create launcher and bg next. img is still boot screen i think i should add stars in background as well.
Created app launcher, made windows draggable, added routing so i can test tho blank screens as half finished, fixed music API and made backend for it using an old project and decided to stream instead of downloading in backed and keeping it in local storage(not yet but it will) so that everyone doesn’t have to share the same music and i don’t need to host all the mp3s. also added an whiteboard app and placeholders for others. one struggle is tiling not sure how ill do that just yet, and another was deciding how i would get music since HTML is limited to browser i cant just sync browser visuals to music or control it i need to stream the music. also spelling was an issue for a bit and i still cant see my desktop due to references to stuff that’s incomplete and no CSS. good work so far though, i plan to polish add more apps and try to get a simple tiling system along with just floating windows next. and having desktop visible. same SS for now, promise next one will have a visual update (;ŏ﹏ŏ;)
WIP: desktop environment, Filler is for icons, forgot about drop-down and i think i wanna add a background to time and move it to the right, works well. i had trouble with using components functions from desktop because i didn’t realize React doesn’t work like python with component.method() so i had to refactor a small chunk of code but now that works, another issue i haven’t fixed yet is: weather isn’t displaying, and currently react-dragable doesn’t work with Vite so i need to re configure or make my own. its coming out pretty good though. ill fix CSS then dragable, and add more apps, Hopefully a background too and test out music.
i fixed the dragging issues, windows now work fully and fixed the background issue on whiteboard, all controls work as well, added a dropdown(css and functionality isn’t fully finished) and re aligned some things in top bar. no real issues on this one other than i cant draw with an mouse, i wanna make music work next and app searching would be nice, ill try to finish all of this by today or tomorrow
Test devlog, wakatime has been glitched at 2:51/ 59minutes in my ide seeing if this fixes it
GIANT dev log heres what i added: fixed media handling, now it displays song title, saves, and more, made windows fit no matter if they are maximized or not. added calculator, notes, terminal, and snake(the game) apps. added a few gifs, fixed weather api. Added background handling into settings menu despite no images a bunch of styling, but mainly debugging the window issue which was stupid simple fix i didn’t see but that took forever, and media server being inconstant, one issue was that local storage wouldn’t save as an array causing the frontend to crash and just dispaly black, more with snake logic and matching it to screen. and a few minor issues like weather api not working rate limits, and more. everything is functional as of now, next ill add background images then tiling/window management because its pretty cluttered right now. but this feels like it took less time than it says, mainly debugging, styling, and a few new apps.
final devlog, i added window management, ship ill add the jpgs for backgrounds in, i tried to fit all the apps in menu in here but gave up so it looks like this, had a minor hitch topbar was hiding controls so i had to add more offset for that. final-ish desktop environment look
Polishing for deployment.
removed refrences to backend opting for invisible i frame as i couldnt figure it out, it now has quing and autoplay/loops videos now. working on cleaning up ui, and ill try to get titles of music.
Final finished the playlist issue now it should run fine, music works, slight ui changes nothing too noticeable.
Ships:
I made a web OS, it has an app launcher, basic window management such as dragging, resizing, closing, maximizing and ok snapping, music player with YouTube links, various apps, changeable backgrounds, an app launcher at bottom, meant to look like riced linux but im not the best at frontend. its spaced themed, some of the apis aren’t consistent like weather rate limits and privacy may mess it up, currently media server so music player isn’t working, debugging that now. when it does work it’ll be instant as backed is separate.
I Created a web os space themed with 5 apps and 3 backgrounds with an app bar, drop downs, and music player with tileable windows and adjustable sizes...
|
1792878561.4045687
|
1793742561.4045687
|
|
17153
|
CloudCore OS by @Christianlikes67_Bobbpheus | Star CloudCore OS by @Christianlikes67_Bobbpheus | Stardance...
|
Christianlikes67_Bobbpheus
|
2
|
4.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-11T10:51:23Z", "hours": 2.0, "multiplier": 1.66, "payout": 4, "blessing": "neutral", "text": "CloudCore OS CloudCore OS is a browser-based desktop environment built with HTML, CSS, and JavaScript . It recreates the feel of a modern operating system directly inside the browser, featuring a window-based interface, application management, personalization, and persistent local storage. The project is focused on creating a lightweight and expandable WebOS while demonstrating what can be achieved using only standard web technologies. ✨ Features Desktop Environment Modern desktop interface Draggable and focusable application windows Responsive layout Glassmorphism-inspired UI Taskbar and desktop icons Window management system Built-in Applications 🌐 Browser 📝 Notes (Auto Save) 📖 Journal 🧮 Calculator ⚙️ Settings Personalization Wallpaper selection Custom wallpaper uploads Persistent user preferences Desktop customization Application Management Built-in App Store Install new applications Uninstall installed applications Dynamic application loading Storage Local Storage support Automatically saves: Notes Journal entries Wallpapers Installed apps User settings 🛠 Built With HTML5 CSS3 JavaScript (Vanilla) No frameworks or external libraries are required. 💡 How It Works CloudCore OS runs entirely inside the browser. Every application opens inside its own movable desktop window, providing an operating system-like experience without requiring any installation. User data is stored locally using the browser’s Local Storage API, allowing applications, wallpapers, notes, and settings to persist between sessions. 🌐 Live Demo Visit CloudCore OS here: https://christianlikes67.github.io/CloudCore-OS/", "repo": "https://github.com/Christianlikes67/CloudCore-OS", "demo": "https://christianlikes67.github.io/CloudCore-OS/"}, {"ship_num": 2, "ts": "2026-06-25T17:32:05Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "CloudCore OS began as a simple desktop webpage and gradually evolved into a functional browser-based operating system. The project features draggable windows, a built-in browser, notes, a journal, a calculator, a settings app, and an app store. One of the biggest challenges was creating a window system that allowed applications to be moved freely while staying organized. Another challenge was implementing persistent storage so wallpapers, notes, journal entries, and installed apps would remain saved after refreshing the page. The most interesting part of development was turning the desktop into a customizable environment. Users can change wallpapers, upload their own backgrounds, install or uninstall apps, and personalize the experience. The project was built entirely with HTML, CSS, and JavaScript. HTML provides the structure, CSS handles the visual design and effects, and JavaScript powers the operating system’s functionality. Overall, CloudCore OS became a much larger and more advanced project than originally planned, making it both challenging and rewarding to develop.", "repo": "https://github.com/Christianlikes67/CloudCore-OS", "demo": "https://christianlikes67.github.io/CloudCore-OS/"}]...
|
[{"post_id": 24786, "ts": "202 [{"post_id": 24786, "ts": "2026-07-08T16:11:12Z", "hours": 0.6903, "text": "just began coding for the Web OS 2 mission"}, {"post_id": 17493, "ts": "2026-06-28T09:26:29Z", "hours": 1.4681, "text": "#4 - Actual final devlog for my WebOS basiccaly the same as #3 but now it is actually working"}, {"post_id": 15775, "ts": "2026-06-25T17:19:58Z", "hours": 0.3133, "text": "Devlog #03 (the final one!) i am pretty much done with my Web OS called CloudCore OS and i had some extra ideas for what i could add but i kept RAGEQUITTING so eventually i gave up but i like like what i have rn and even though it has been hard to make and smacked my laptop sometimes im glad about what i have made and i hope you guys are gonna like so here we go!"}, {"post_id": 15178, "ts": "2026-06-24T17:37:08Z", "hours": 1.0456, "text": "Devlog #2 working on the app designs and working on browser browser third-party capability so the browser from google work inside my browser without it opening i completely new tab with google itself and right the the only things working (In the browser tab ofc) is opening i link that actually gets shown inside my OS which is FANTASTIC and some of the things are VERY hard but i LOVE working with this very cool project! Follow to get more to know about my OS!"}, {"post_id": 9891, "ts": "2026-06-16T11:35:54Z", "hours": 0.7686, "text": "I am working on my very own WebOS and its called CloudCore OS. Right now i am having a VERY hard time coding my features but im trying to absoulutely COOK take a look!"}]...
|
Title: CloudCore OS by @Christianlikes67_Bobbpheus Title: CloudCore OS by @Christianlikes67_Bobbpheus | Stardance
Devlogs:
I am working on my very own WebOS and its called CloudCore OS. Right now i am having a VERY hard time coding my features but im trying to absoulutely COOK take a look!
Devlog #2 working on the app designs and working on browser browser third-party capability so the browser from google work inside my browser without it opening i completely new tab with google itself and right the the only things working (In the browser tab ofc) is opening i link that actually gets shown inside my OS which is FANTASTIC and some of the things are VERY hard but i LOVE working with this very cool project! Follow to get more to know about my OS!
Devlog #03 (the final one!) i am pretty much done with my Web OS called CloudCore OS and i had some extra ideas for what i could add but i kept RAGEQUITTING so eventually i gave up but i like like what i have rn and even though it has been hard to make and smacked my laptop sometimes im glad about what i have made and i hope you guys are gonna like so here we go!
#4 - Actual final devlog for my WebOS basiccaly the same as #3 but now it is actually working
just began coding for the Web OS 2 mission
Ships:
CloudCore OS began as a simple desktop webpage and gradually evolved into a functional browser-based operating system. The project features draggable windows, a built-in browser, notes, a journal, a calculator, a settings app, and an app store. One of the biggest challenges was creating a window system that allowed applications to be moved freely while staying organized. Another challenge was implementing persistent storage so wallpapers, notes, journal entries, and installed apps would remain saved after refreshing the page. The most interesting part of development was turning the desktop into a customizable environment. Users can change wallpapers, upload their own backgrounds, install or uninstall apps, and personalize the experience. The project was built entirely with HTML, CSS, and JavaScript. HTML provides the structure, CSS handles the visual design and effects, and JavaScript powers the operating system’s functionality. Overall, CloudCore OS became a much larger and more advanced project than originally planned, making it both challenging and rewarding to develop.
CloudCore OS CloudCore OS is a browser-based desktop environment built with HTML, CSS, and JavaScript . It recreates the feel of a modern operating system directly inside the browser, featuring a window-based interface, application management, personalization, and persistent local storage. The project is focused on creating a lightweight and expandable WebOS while demonstrating what can be achieved using only standard web technologies. ✨ Features Desktop Environment Modern desktop interface Draggable and focusable application windows Responsive layout Glassmorphism-inspired UI Taskbar and desktop icons Window management system Built-in Applications 🌐 Browser 📝 Notes (Auto Save) 📖 Journal 🧮 Calculator ⚙️ Settings Personalization Wallpaper selection Custom wallpaper uploads Persistent user preferences Desktop customization Application Management Built-in App Store Install new applications Uninstall installed applications Dynamic application loading Storage Local Storage support Automatically saves: Notes Journal entries Wallpapers Installed apps User settings 🛠 Built With HTML5 CSS3 JavaScript (Vanilla) No frameworks or external libraries are required. 💡 How It Works CloudCore OS runs entirely inside the browser. Every application opens inside its own movable desktop window, providing an operating system-like experience without requiring any installation. User data is stored locally using the browser’s Local Storage API, allowing applications, wallpapers, notes, and settings to persist between sessions. 🌐 Live Demo Visit CloudCore OS here: https://christianlikes67.github.io/CloudCore-OS/...
|
1792878601.714651
|
1793742601.714651
|
|
17270
|
File Compressor in C by @barseghian_daniel | Stard File Compressor in C by @barseghian_daniel | Stardance...
|
barseghian_daniel
|
2
|
81.0
|
1044
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-27T08:05:03Z", "hours": 12.0, "multiplier": 14.9, "payout": 181, "blessing": "neutral", "text": "made a website for my C code! It was really challenging to work with the WASM module since it’s limited to 32 bits (4GB RAM), but I managed to make it work! I also optimized the C code to use much less RAM (see the devlog). Sadly the website is limited to 220MB per file (because of WASM), but you can still process large files with the GitHub release! You can test it via the website or the GitHub release!", "repo": "https://github.com/danielbarseghian/file-compressor", "demo": "https://dancing-hotteok-83ce45.netlify.app/"}, {"ship_num": 2, "ts": "2026-07-17T21:45:09Z", "hours": 69.0, "multiplier": 12.73, "payout": 863, "blessing": "neutral", "text": "I made a file compressor/decompressor written in C! You can use it on Linux, Windows, and macOS. The part that took the most time was DEBUGGING . It took SOOOOO much more time than I expected! I’m really proud of finishing the project. I consider this my first full project, so yeah, it took some time, but I finally finished it! You should know that all the information is in the README (installation, description, etc.). It was really fun working on it, but all good things come to an end!", "repo": "https://github.com/danielbarseghian/file-compressor", "demo": "https://dancing-hotteok-83ce45.netlify.app/"}]...
|
[{"post_id": 55426, "ts": "202 [{"post_id": 55426, "ts": "2026-08-27T07:56:40Z", "hours": 0.3333, "text": "ITS DEPLOYED! i added a small status text to know when its compressing/decompressing. you can try it the website here !"}, {"post_id": 55045, "ts": "2026-08-26T14:03:53Z", "hours": 3.1169, "text": "ITS REALEAAAAASEDD the updated C code is release go check it out here !"}, {"post_id": 54104, "ts": "2026-08-24T22:04:14Z", "hours": 3.4836, "text": "Optimized code for less R*M usage! For a 2.8gb file it was taking 2.8gb of ram but now its taking 42 KB! I was putting the file in the ram but now i stream the file to ram for 99.999% less ram usage!"}, {"post_id": 51584, "ts": "2026-08-21T11:04:04Z", "hours": 0.2833, "text": "Imported decompressor ! well it was super easy to import the decompressor since it was very similar to the compressor code!"}, {"post_id": 51554, "ts": "2026-08-21T10:19:38Z", "hours": 1.0667, "text": "Compressed file directly in the browser ! i compiled the C code into wasm (web assembly) so i can use it inside the browser!"}, {"post_id": 50560, "ts": "2026-08-19T19:27:18Z", "hours": 3.5453, "text": "BACK ON C ! F**K WINDOWS, C# AND UNITY i missed C so much and working on linux too its just so much more fun and fast and, i can’t make game look good… look at my latest project . Im finally back at my roots"}, {"post_id": 30609, "ts": "2026-07-18T10:06:56Z", "hours": 0.3169, "text": "My Ship got rejected… kinda My Ship got requested change because my banner didn’t showcase the project now i changed it, here i compress and decompress a jpeg file and then open it! Hope this next ship will be accepted!"}, {"post_id": 30322, "ts": "2026-07-17T19:42:36Z", "hours": 1.9761, "text": "ITS REALEAAAAAASED You can use it for Windows, macOS, and Linux. The tutorial is mentioned under the README for all three systems. I tested it on Windows and Linux. I don’t have any Apple devices to test it out. :("}, {"post_id": 29790, "ts": "2026-07-16T22:05:17Z", "hours": 2.9333, "text": "about the website… So… I abandoned it I CAN’T MAKE WEBSITES, I CAN’T STAND JAVASCRIPT. I tried to use WebAssembly, but it’s not widely used, so it’s really hard to work with. How can you use it? Well, use it with the CLI like a super nerd Don’t worry, everything is documented in the README. CLI » JAVASCRIPT"}, {"post_id": 29200, "ts": "2026-07-15T22:51:38Z", "hours": 2.3436, "text": "Started website, web assembly and my own extension! Extension I added the .huff extension since it will help me recognize files compressed by my compressor. The format used is .extension.huff (example: image.jpg.huff). Web Assembly I compiled the code to web assembly so it can run directly on the user’s PC and not on servers. Website I’m creating a simple website that just does the j*b (still woking on it, this is just the core). The website will not communicate with other APIs or services, thanks to web assembly. I hate JavaScript."}, {"post_id": 28517, "ts": "2026-07-14T20:28:35Z", "hours": 7.76, "text": "I reached… the end? So i’ve been testing for a while now and i didn’t have much to say…. I successfully compressed, decompressed and burnt a linux iso and booted into one ! It required alot of troubleshooting and waiting ( 5 - 15min PER TRY ) but hey now it works on any file!"}, {"post_id": 26022, "ts": "2026-07-10T16:30:07Z", "hours": 2.9822, "text": "how did it work? i REALLY don’t know how it worked but it worked, a famouse programming therm if it works, don’t touch it! I just changed a char to an unsigned char lol."}, {"post_id": 22897, "ts": "2026-07-05T15:12:46Z", "hours": 1.25, "text": "Learned mmap open …. I did some exercices on mmap , open , fstat and learned thoses, next i have to implemente it in compressor.c"}, {"post_id": 22178, "ts": "2026-07-04T14:41:32Z", "hours": 4.1289, "text": "Found the problem for segmentation error (I’m back) So i had this error for the past 4 days and i coudn’t fix it so i even take a step back for 2 days but still coudn’t find it, the problem was that i had to wait 5 min for every try i did. Fix ? I used claude so he run test on faster machines, and i got the errors i have to fix. (He wanted to script it himself, i obviously said no)."}, {"post_id": 19304, "ts": "2026-06-30T15:58:16Z", "hours": 4.4594, "text": "FINALLYYYYYYYYYYYYY I successfully compressed and decompressed a file other than text files, I used binary to write the files so it supports all the file types now! What was the problem ? So the compressed file were written in text and decompressed with text wich limited the compression for only text files. What was the fix ? I wrote the compressed file and decompressed in binary. (small part of the code i changed)"}, {"post_id": 17826, "ts": "2026-06-28T19:16:21Z", "hours": 2.0475, "text": "IT WORKS but only in text files… Why dosn’t it work? In the metadata, i write it as a text file (a:1|b:5…), it works fine for text files but for other files type, it dosn’t work since its written in binary. Any solutions? i have to write the metadata in binary, yayyy…"}, {"post_id": 17618, "ts": "2026-06-28T14:25:13Z", "hours": 4.9825, "text": "NEVER code something with AI What happened? So i said to myself that i can code this small part with AI since i don’t know the synstaxe and I did it and its the problem now. I learned bitwise operators and logique and then recoded the part, didnt finish yet."}, {"post_id": 16911, "ts": "2026-06-27T13:48:34Z", "hours": 1.3667, "text": "it’s SO HOT in europe There was an issue with compressor.c while doing it with other files than png. I’m still working on decompressor.c it can’t decode normally a file other than png. Text files still works. Heatwave Its so hot in europe, I can’t work normally, the temperatures will go down monday hopefully."}, {"post_id": 16759, "ts": "2026-06-27T06:54:22Z", "hours": 2.5828, "text": "FINALLY FINISHED compressor.c AND decompressor.c THE BUG so the main bug was that the two arrays which contained the frequencies of each letter were reversed so the huffman tree was not the same and the codes too weren’t the same. THE FIX so in decompressor.c i just reversed the codes. this is not a permanent fix will investigate further into compressor.c to see why its reversed!"}, {"post_id": 15823, "ts": "2026-06-25T18:36:34Z", "hours": 2.865, "text": "Finished reading bytes, Almost finished I’m almost finished with my code (this is my longest project yet) i’m so existed ! What am i doing next? pray for no bugs"}, {"post_id": 15143, "ts": "2026-06-24T16:30:30Z", "hours": 3.1906, "text": "Fixed swapping issues, transfer list array into node array, and building codes works Swapping issues i had an issue where i was putting the new node in first in the link list so i fix it, drawing it on a sketch really helped . Transfer list to node So i transfer it into an array since its easier to use it and i coudn’t built it before since an array is a fixed size, thats why I used a linked list to first get the values and the length. Building huffman codes I just imported function i already programmed in compressor.c . image from wikipedia"}, {"post_id": 14259, "ts": "2026-06-23T09:03:36Z", "hours": 5.0258, "text": "Started to code decompresor.c i have alot of problems with decompressor.c notably two nulls caracters at the start."}, {"post_id": 12483, "ts": "2026-06-20T11:51:35Z", "hours": 2.3331, "text": "FREED ALL THE MEMORY All this memory can be reused for other good causes now"}, {"post_id": 12168, "ts": "2026-06-19T21:33:52Z", "hours": 1.2511, "text": "Finally FINISHED compressor.c when you finally finished that code"}, {"post_id": 11891, "ts": "2026-06-19T11:42:29Z", "hours": 1.3531, "text": "C programmer TOUCHING grass for the FIRST TIME I didnt program for 2 days and touched some grass. How was it ? it was weird since it was grass (wich i don’t touch) but it was ok. btw it was fake grass"}, {"post_id": 9454, "ts": "2026-06-15T20:20:27Z", "hours": 0.9128, "text": "why are we only using I in loops? its a real question why only I ? I used f it was so cool. Use other letters for your loops. I’m onto something guys, it’s the next big thing. P.S : I’m going to take a break from coding in C since its pretty anoying and im not really doing anything while working maybe this challenge is really too hard for me. I’m maybe going to start another project then see."}, {"post_id": 8873, "ts": "2026-06-14T19:33:29Z", "hours": 0.6917, "text": "Brain cells aren’t connecting I’m super tired and my brain cells aren’t working right. sticker by fancy void"}, {"post_id": 8756, "ts": "2026-06-14T15:48:50Z", "hours": 2.1778, "text": "FINISHED COMPRESSOR.C Finnaly finished compressor.c after 7 hours on it! How did it did it ? Well i used AI… Yes I’m not proud but hey its finished! I was really tired and I just vibe coded it but now no more AI for decompressor.c ! Did i learn something? Yes i didn’t blindly ask AI do give answers i asked to help debug the code! What do i do next? Probably sleep, I’m so tired."}, {"post_id": 8557, "ts": "2026-06-14T07:01:26Z", "hours": 1.4881, "text": "Building huffman code tree Finally finished coding everything but the tree. I can finally code without AI so for relearning, i authorized myself to use AI but only to debug, now i can finally not use it (since i relearned C) Problems I ran into several problems: Segmentation problems, i was accessing things i normally can’t Future problem, i can’t name something with more than two carrecters so when i’m merging two nodes i can’t rename thoses."}, {"post_id": 8314, "ts": "2026-06-13T20:33:53Z", "hours": 3.7689, "text": "FINALLY FIXED SEGMENTATION PROBLEMS For context i was building the compressor and i had segmentation problems What is a segmentation problem? A segmentation problem is when you try and access memory your don’t have access. What was the problems? First the allocation, i didnt allocate for the array of pointers to my struct. Didnt check for NULL, so my arrays have 256 nodes (for all of the ASCII values) and i was trying to access values that just didnt existed. How did i fix it? I used AI to debug my code, I didnt directly asked for the awnsers, i asked it to help me without giving out awnsers. AI was very useful since i mad alot of small mistakes since i didnt program in C for a long time."}, {"post_id": 7715, "ts": "2026-06-12T21:35:38Z", "hours": 4.4744, "text": "CS50x C Refresher Redid one exercise from CS50x Psets 2, 3, 4, and 5. I wanted to refresh my C programming skills because after Week 5 the course shifts more toward web applications, databases, and other topics. This was a good way to get back into writing C before continuing work on Stardance."}, {"post_id": 7461, "ts": "2026-06-12T13:14:46Z", "hours": 0.2653, "text": "Studying Huffman Coding Huffman Coding is a lossless compression algorithm . Example text: ffffcdabdfdeeebcc First, count how often each character appears: f:4 c:3 d:3 e:3 b:2 a:1 Then repeatedly merge the least frequent characters into a binary tree until one final tree remains. Each character gets a binary code: Left = 0 Right = 1 More frequent characters receive shorter codes , reducing the total file size. A key rule: no code can start with another code . If f = 1 , then 100 cannot be another character, so decoding stays unambiguous. Time complexity: O(n log n) Image: GeeksforGeeks Video: Computerphile – Huffman Coding"}]...
|
Title: File Compressor in C by @barseghian_daniel Title: File Compressor in C by @barseghian_daniel | Stardance
Devlogs:
Studying Huffman Coding Huffman Coding is a lossless compression algorithm . Example text: ffffcdabdfdeeebcc First, count how often each character appears: f:4 c:3 d:3 e:3 b:2 a:1 Then repeatedly merge the least frequent characters into a binary tree until one final tree remains. Each character gets a binary code: Left = 0 Right = 1 More frequent characters receive shorter codes , reducing the total file size. A key rule: no code can start with another code . If f = 1 , then 100 cannot be another character, so decoding stays unambiguous. Time complexity: O(n log n) Image: GeeksforGeeks Video: Computerphile – Huffman Coding
CS50x C Refresher Redid one exercise from CS50x Psets 2, 3, 4, and 5. I wanted to refresh my C programming skills because after Week 5 the course shifts more toward web applications, databases, and other topics. This was a good way to get back into writing C before continuing work on Stardance.
FINALLY FIXED SEGMENTATION PROBLEMS For context i was building the compressor and i had segmentation problems What is a segmentation problem? A segmentation problem is when you try and access memory your don’t have access. What was the problems? First the allocation, i didnt allocate for the array of pointers to my struct. Didnt check for NULL, so my arrays have 256 nodes (for all of the ASCII values) and i was trying to access values that just didnt existed. How did i fix it? I used AI to debug my code, I didnt directly asked for the awnsers, i asked it to help me without giving out awnsers. AI was very useful since i mad alot of small mistakes since i didnt program in C for a long time.
Building huffman code tree Finally finished coding everything but the tree. I can finally code without AI so for relearning, i authorized myself to use AI but only to debug, now i can finally not use it (since i relearned C) Problems I ran into several problems: Segmentation problems, i was accessing things i normally can’t Future problem, i can’t name something with more than two carrecters so when i’m merging two nodes i can’t rename thoses.
FINISHED COMPRESSOR.C Finnaly finished compressor.c after 7 hours on it! How did it did it ? Well i used AI… Yes I’m not proud but hey its finished! I was really tired and I just vibe coded it but now no more AI for decompressor.c ! Did i learn something? Yes i didn’t blindly ask AI do give answers i asked to help debug the code! What do i do next? Probably sleep, I’m so tired.
Brain cells aren’t connecting I’m super tired and my brain cells aren’t working right. sticker by fancy void
why are we only using I in loops? its a real question why only I ? I used f it was so cool. Use other letters for your loops. I’m onto something guys, it’s the next big thing. P.S : I’m going to take a break from coding in C since its pretty anoying and im not really doing anything while working maybe this challenge is really too hard for me. I’m maybe going to start another project then see.
C programmer TOUCHING grass for the FIRST TIME I didnt program for 2 days and touched some grass. How was it ? it was weird since it was grass (wich i don’t touch) but it was ok. btw it was fake grass
Finally FINISHED compressor.c when you finally finished that code
FREED ALL THE MEMORY All this memory can be reused for other good causes now
Started to code decompresor.c i have alot of problems with decompressor.c notably two nulls caracters at the start.
Fixed swapping issues, transfer list array into node array, and building codes works Swapping issues i had an issue where i was putting the new node in first in the link list so i fix it, drawing it on a sketch really helped . Transfer list to node So i transfer it into an array since its easier to use it and i coudn’t built it before since an array is a fixed size, thats why I used a linked list to first get the values and the length. Building huffman codes I just imported function i already programmed in compressor.c . image from wikipedia
Finished reading bytes, Almost finished I’m almost finished with my code (this is my longest project yet) i’m so existed ! What am i doing next? pray for no bugs
FINALLY FINISHED compressor.c AND decompressor.c THE BUG so the main bug was that the two arrays which contained the frequencies of each letter were reversed so the huffman tree was not the same and the codes too weren’t the same. THE FIX so in decompressor.c i just reversed the codes. this is not a permanent fix will investigate further into compressor.c to see why its reversed!
it’s SO HOT in europe There was an issue with compressor.c while doing it with other files than png. I’m still working on decompressor.c it can’t decode normally a file other than png. Text files still works. Heatwave Its so hot in europe, I can’t work normally, the temperatures will go down monday hopefully.
NEVER code something with AI What happened? So i said to myself that i can code this small part with AI since i don’t know the synstaxe and I did it and its the problem now. I learned bitwise operators and logique and then recoded the part, didnt finish yet.
IT WORKS but only in text files… Why dosn’t it work? In the metadata, i write it as a text file (a:1|b:5…), it works fine for text files but for other files type, it dosn’t work since its written in binary. Any solutions? i have to write the metadata in binary, yayyy…
FINALLYYYYYYYYYYYYY I successfully compressed and decompressed a file other than text files, I used binary to write the files so it supports all the file types now! What was the problem ? So the compressed file were written in text and decompressed with text wich limited the compression for only text files. What was the fix ? I wrote the compressed file and decompressed in binary. (small part of the code i changed)
Found the problem for segmentation error (I’m back) So i had this error for the past 4 days and i coudn’t fix it so i even take a step back for 2 days but still coudn’t find it, the problem was that i had to wait 5 min for every try i did. Fix ? I used claude so he run test on faster machines, and i got the errors i have to fix. (He wanted to script it himself, i obviously said no).
Learned mmap open …. I did some exercices on mmap , open , fstat and learned thoses, next i have to implemente it in compressor.c
how did it work? i REALLY don’t know how it worked but it worked, a famouse programming therm if it works, don’t touch it! I just changed a char to an unsigned char lol.
I reached… the end? So i’ve been testing for a while now and i didn’t have much to say…. I successfully compressed, decompressed and burnt a linux iso and booted into one ! It required alot of troubleshooting and waiting ( 5 - 15min PER TRY ) but hey now it works on any file!
Started website, web assembly and my own extension! Extension I added the .huff extension since it will help me recognize files compressed by my compressor. The format used is .extension.huff (example: image.jpg.huff). Web Assembly I compiled the code to web assembly so it can run directly on the user’s PC and not on servers. Website I’m creating a simple website that just does the j*b (still woking on it, this is just the core). The website will not communicate with other APIs or services, thanks to web assembly. I hate JavaScript.
about the website… So… I abandoned it I CAN’T MAKE WEBSITES, I CAN’T STAND JAVASCRIPT. I tried to use WebAssembly, but it’s not widely used, so it’s really hard to work with. How can you use it? Well, use it with the CLI like a super nerd Don’t worry, everything is documented in the README. CLI » JAVASCRIPT
ITS REALEAAAAAASED You can use it for Windows, macOS, and Linux. The tutorial is mentioned under the README for all three systems. I tested it on Windows and Linux. I don’t have any Apple devices to test it out. :(
My Ship got rejected… kinda My Ship got requested change because my banner didn’t showcase the project now i changed it, here i compress and decompress a jpeg file and then open it! Hope this next ship will be accepted!
BACK ON C ! F**K WINDOWS, C# AND UNITY i missed C so much and working on linux too its just so much more fun and fast and, i can’t make game look good… look at my latest project . Im finally back at my roots
Compressed file directly in the browser ! i compiled the C code into wasm (web assembly) so i can use it inside the browser!
Imported decompressor ! well it was super easy to import the decompressor since it was very similar to the compressor code!
Optimized code for less R*M usage! For a 2.8gb file it was taking 2.8gb of ram but now its taking 42 KB! I was putting the file in the ram but now i stream the file to ram for 99.999% less ram usage!
ITS REALEAAAAASEDD the updated C code is release go check it out here !
ITS DEPLOYED! i added a small status text to know when its compressing/decompressing. you can try it the website here !
Ships:
I made a file compressor/decompressor written in C! You can use it on Linux, Windows, and macOS. The part that took the most time was DEBUGGING . It took SOOOOO much more time than I expected! I’m really proud of finishing the project. I consider this my first full project, so yeah, it took some time, but I finally finished it! You should know that all the information is in the README (installation, description, etc.). It was really fun working on it, but all good things come to an end!
made a website for my C code! It was really challenging to work with the WASM module since it’s limited to 32 bits (4GB RAM), but I managed to make it work! I also optimized the C code to use much less RAM (see the devlog). Sadly the website is limited to 220MB per file (because of WASM), but you can still process large files with the GitHub release! You can test it via the website or the GitHub release!...
|
1793001046.8565345
|
1793087446.8565345
|
|
17271
|
VinylBot by @F3rro_32 | Stardance
|
F3rro_32
|
2
|
20.12
|
98
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-23T11:44:07Z", "hours": 7.0, "multiplier": 14.66, "payout": 98, "blessing": "neutral", "text": "This project contains three microprojects, all related. There’s the slack_bot, already shipped for the mission. There’ s the ds_bot, improved from it’s first version in flavortown. And there’s a newborn, a website, containing everything necessary for the bot, with also docs, for hosting the bot locally. For making the design of the website, since I’m not that great with graphics, I used v0, which generated mockups for me. That’s why the website Ui seems so AI.", "repo": "https://github.com/AlessioFerrari8/VinylBot", "demo": "https://vinylbot.alessio.hackclub.app/"}, {"ship_num": 2, "ts": "2026-07-22T10:28:10Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "This ship is just for the slack bot. For now ignore the rest, it will come later.", "repo": "https://github.com/AlessioFerrari8/VinylBot", "demo": "https://vinylbot.alessio.hackclub.app/"}]...
|
[{"post_id": 37595, "ts": "202 [{"post_id": 37595, "ts": "2026-07-30T13:05:14Z", "hours": 1.1175, "text": "Just fixed a little bug, the same songs kept coming back whenever you played the same artist twice. That’s because the artist track pool was too small, so every game used it up entirely. I fixed this and also added a nice thing, suggested by @stef . I improved the hints, now it’s easier to guess a song after hints 2 and 3. I hope you enjoy playing"}, {"post_id": 33430, "ts": "2026-07-23T11:23:02Z", "hours": 6.7158, "text": "Spent today hardening VinylBot for production: fixed a crash bug where an unhandled ffmpeg/stream error in the audio player could take down the entire bot for every server at once, added global uncaughtException/unhandledRejection handlers to both bots, fixed a race condition in the Slack round timer, and cleaned up leaked temp mp3 files on failed downloads. Also dockerized the Angular website (nginx + multi-stage build) and got all three services (Discord bot, Slack bot, website) live on their own subdomains behind the VPS firewall. For the problem of the streaming on server or vps I decided to add two methods for gathering audio mp3s. The first time it will try with spotify, searching for the preview_url. After that it will try deezer and Itunes, that represents a valid alternative."}, {"post_id": 31798, "ts": "2026-07-20T14:02:13Z", "hours": 1.9744, "text": "Hey guys, today I’m working on fixing the ds bot. First of all I had to review the method of streaming the song. I was first using yt-dlp for everything, but I noted that putting it on a server was making it not working anymore. I discovered that is because yt blocks certain ips and certain requests, so this was an impossible choice. The solution was spotify preview, which are basically like 20 seconds of a song. That’s perfect for me, since I don’t have to stream the whole song, but instead just a little part. The approach is this. I created a variable in the env, called DEPLOY_ENV. This specifies if we’re running the bot locally, or on a server or vps. If the variable is vps, first the bot is gonna try finding the song on spotify. If it’s not present, it’s gonna search for local files, as alternative. If the variable is local, the first alternative remains spotify, but as a second there’s also yt-dlp, since locally it works fine. I also adjusted the cards of some commands, as you can see from the screens, along with testing out the bot. I still have some more work to do, but I think soon the ds bot will be ready."}, {"post_id": 31299, "ts": "2026-07-19T16:19:19Z", "hours": 1.9647, "text": "As you can see, I’m currently working on fixing some minor details, like improving the card. This card is displayed whenever you use the commands play, nowplaying, pause, skip, previous. In this card you can see the song, the album it comes from, who requested to see the card and also the timing. Additionaly there are buttons for pausing, skipping and level up or down the button by 10 units. I also discovered something I didn’t know. Recently you can use your own emojis, so I generated this one with chatgpt and used them for the commands, as you can see in the card. Really useful"}, {"post_id": 30709, "ts": "2026-07-18T14:46:33Z", "hours": 4.5936, "text": "Hey guys, so I decided to improve this project. I created another repo, containing both the bot in slack, made in this “session”, and the bot made for discord, made in Flavortown. Along with those two projects, I added a website. So now the repo contains the two bots, and the website. I just built the website, it’s a simple landing page. For generating mockups for the design I used v0 by vercel, which is really useful for people like me, who aren’t able to produce anything graceful without a designer. So, as I was saying, the website it’s just a simple landing page, containing infos about the bots, allowing to download the bots and more. I also added two routes /status and /docs. The names explain the function. The first oen contains the status of each bots. The second one contains well-written docs, very useful for people who want to host the bot locally."}, {"post_id": 9194, "ts": "2026-06-15T13:13:08Z", "hours": 1.8275, "text": "Adapted everything to slack, now it’s quite working. The only problem is that I have still to fix the gain of the music resource, but it’s processing in my mind right now. /vinylbot-stop"}, {"post_id": 8689, "ts": "2026-06-14T13:10:00Z", "hours": 1.5108, "text": "I’m currently working on VinylBot, a Slack bot with two main features. Imagine you’re chatting with friends on Slack: with VinylBot, you can manage your music directly from Slack without having to open Spotify every time. The main feature, though, is the Vinyl Game, a music guessing game where players have to identify a song based on just a few seconds of playback. I’ve already built a Discord version of the project, which is available on my GitHub. However, bringing it to Slack is becoming a challenge, since a lot of the logic has to be reworked due to the differences between Discord and Slack and the way they handle interactions. I hope you’ll like it."}]...
|
Title: VinylBot by @F3rro_32 | Stardance
Devlogs: Title: VinylBot by @F3rro_32 | Stardance
Devlogs:
I’m currently working on VinylBot, a Slack bot with two main features. Imagine you’re chatting with friends on Slack: with VinylBot, you can manage your music directly from Slack without having to open Spotify every time. The main feature, though, is the Vinyl Game, a music guessing game where players have to identify a song based on just a few seconds of playback. I’ve already built a Discord version of the project, which is available on my GitHub. However, bringing it to Slack is becoming a challenge, since a lot of the logic has to be reworked due to the differences between Discord and Slack and the way they handle interactions. I hope you’ll like it.
Adapted everything to slack, now it’s quite working. The only problem is that I have still to fix the gain of the music resource, but it’s processing in my mind right now. /vinylbot-stop
Hey guys, so I decided to improve this project. I created another repo, containing both the bot in slack, made in this “session”, and the bot made for discord, made in Flavortown. Along with those two projects, I added a website. So now the repo contains the two bots, and the website. I just built the website, it’s a simple landing page. For generating mockups for the design I used v0 by vercel, which is really useful for people like me, who aren’t able to produce anything graceful without a designer. So, as I was saying, the website it’s just a simple landing page, containing infos about the bots, allowing to download the bots and more. I also added two routes /status and /docs. The names explain the function. The first oen contains the status of each bots. The second one contains well-written docs, very useful for people who want to host the bot locally.
As you can see, I’m currently working on fixing some minor details, like improving the card. This card is displayed whenever you use the commands play, nowplaying, pause, skip, previous. In this card you can see the song, the album it comes from, who requested to see the card and also the timing. Additionaly there are buttons for pausing, skipping and level up or down the button by 10 units. I also discovered something I didn’t know. Recently you can use your own emojis, so I generated this one with chatgpt and used them for the commands, as you can see in the card. Really useful
Hey guys, today I’m working on fixing the ds bot. First of all I had to review the method of streaming the song. I was first using yt-dlp for everything, but I noted that putting it on a server was making it not working anymore. I discovered that is because yt blocks certain ips and certain requests, so this was an impossible choice. The solution was spotify preview, which are basically like 20 seconds of a song. That’s perfect for me, since I don’t have to stream the whole song, but instead just a little part. The approach is this. I created a variable in the env, called DEPLOY_ENV. This specifies if we’re running the bot locally, or on a server or vps. If the variable is vps, first the bot is gonna try finding the song on spotify. If it’s not present, it’s gonna search for local files, as alternative. If the variable is local, the first alternative remains spotify, but as a second there’s also yt-dlp, since locally it works fine. I also adjusted the cards of some commands, as you can see from the screens, along with testing out the bot. I still have some more work to do, but I think soon the ds bot will be ready.
Spent today hardening VinylBot for production: fixed a crash bug where an unhandled ffmpeg/stream error in the audio player could take down the entire bot for every server at once, added global uncaughtException/unhandledRejection handlers to both bots, fixed a race condition in the Slack round timer, and cleaned up leaked temp mp3 files on failed downloads. Also dockerized the Angular website (nginx + multi-stage build) and got all three services (Discord bot, Slack bot, website) live on their own subdomains behind the VPS firewall. For the problem of the streaming on server or vps I decided to add two methods for gathering audio mp3s. The first time it will try with spotify, searching for the preview_url. After that it will try deezer and Itunes, that represents a valid alternative.
Just fixed a little bug, the same songs kept coming back whenever you played the same artist twice. That’s because the artist track pool was too small, so every game used it up entirely. I fixed this and also added a nice thing, suggested by @stef . I improved the hints, now it’s easier to guess a song after hints 2 and 3. I hope you enjoy playing
Ships:
This ship is just for the slack bot. For now ignore the rest, it will come later.
This project contains three microprojects, all related. There’s the slack_bot, already shipped for the mission. There’ s the ds_bot, improved from it’s first version in flavortown. And there’s a newborn, a website, containing everything necessary for the bot, with also docs, for hosting the bot locally. For making the design of the website, since I’m not that great with graphics, I used v0, which generated mockups for me. That’s why the website Ui seems so AI....
|
1792997461.287173
|
1793083861.287173
|
|
17274
|
My neovim config by @Tuxilio | Stardance
|
Tuxilio
|
2
|
17.0
|
77
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T15:41:21Z", "hours": 7.0, "multiplier": 6.51, "payout": 44, "blessing": "neutral", "text": "I built a fully customized, lightweight neovim config. It’s my first time I configured my neovim and its simple and just have some main feature of an ide. It’s NOT a full vscode config. The difference between neovim and e.g. vscode is that neovim *or vim in general) gives you the freedom to make it look a little diffrent from the others. I did it mainly because I wanted a nice editor but also for fun :) It’s my first time configuring neovim so I used the docs a lot and tried a lot of things. You can look at some screenshots in the devlog or try it out by yourself :) If you’re new to vi/vim/neovim, it is a terminal-based editor. You can press Esc and then :q to exit. If you want to see a transparent background, you need a terminal with a transparency option configured. My neovim is just configured to have a transparent background but if your terminal is just black you won’t really see an effect ;) The main difference to the first ship is that I removed some dependencies on my nixos neovim config so it is a LOT smaller but that was more difficult than I thought so it took 6 whole hours :/", "repo": "https://codeberg.org/Tuxilio/nixos", "demo": "https://codeberg.org/Tuxilio/nixos/src/branch/main/docs/nvim.md#usage"}, {"ship_num": 2, "ts": "2026-08-25T18:18:25Z", "hours": 10.0, "multiplier": 6.79, "payout": 33, "blessing": "neutral", "text": "I built a fully customized, lightweight neovim config. It’s my first time I configured my neovim and its simple and just have some main feature of an ide. It’s NOT a full vscode config. I did it mainly because I wanted a nice editor but also for fun :) It’s my first time configuring neovim so I used the docs a lot and tried a lot of things. You can look at some screenshots in the devlog or try it out by yourself :) If you’re new to vi/vim/neovim, it is a terminal-based editor. You can press Esc and then :q to exit. If you want to see a transparent background, you need a terminal with a transparency option configured. My neovim is just configured to have a transparent background but if your terminal is just black you won’t really see an effect ;)", "repo": "https://codeberg.org/Tuxilio/nixos", "demo": "https://codeberg.org/Tuxilio/nixos/src/branch/main/docs/nvim.md#usage"}]...
|
[{"post_id": 65425, "ts": "202 [{"post_id": 65425, "ts": "2026-09-10T15:37:37Z", "hours": 5.3036, "text": "I refactored my whole nixos config and removed another dependency, flake-parts , so that users need to download less dependencies! The project is now much smaller and still works exactly the same :) This was really complicated because I had to rewrite nearly everything so it took a really long time (5 hours)"}, {"post_id": 57136, "ts": "2026-08-29T07:34:33Z", "hours": 1.5314, "text": "I removed the import-tree dependency in my nixos config so users need to download less inputs 🎉 It took some time because it was a bit difficult to reimport each file but I did it :)"}, {"post_id": 54665, "ts": "2026-08-25T18:13:19Z", "hours": 1.0836, "text": "I added a lot docs so it is a lot easier to setup and understand :)"}, {"post_id": 54539, "ts": "2026-08-25T15:50:46Z", "hours": 2.3975, "text": "I added lsp (language server protocol) configs to my neovim config. Using this I can get linting and autocompletions. I also migrated from nvim-cmp to blink.cmp for completions, because I couldn’t get nvim-cmp to work… blink-cmp works well. In the picture you can see the completion and docs window. I currently got the problem that the docs window isn’t transparent but I couldn’t fix that. I already tried this: https://codeberg.org/Tuxilio/nixos/commit/d68a3de50786da3b3bc2f6aaeb9d2b88147a1a9f (commented out because it doesn’t worked; it just hides the complete completion window) so if you have ideas please tell me :) (The background image, visible because my neovim background is transparent and my shell halve-transparent, is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree . My screenshot is licensed CC-BY-SA 4.0 .)"}, {"post_id": 52912, "ts": "2026-08-23T09:10:33Z", "hours": 0.4442, "text": "I just packaged my config using nix! You can now run nix run git+https://codeberg.org/tuxilio/nixos#neovim to run my full editor! (The background image, visible because my neovim background is transparent and my shell halve-transparent, is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree . My screenshot is licensed CC-BY-SA 4.0.)"}, {"post_id": 52862, "ts": "2026-08-23T07:15:47Z", "hours": 5.6083, "text": "I started creating my own neovim config! Currently, I use lazy.nvim as the plugin manager to install the following plugins: a catpuccin colorscheme, gitsigns (as you can see in the image on the left; to display not committed / added / changed … lines on the left), wakatime, cmp for suggestions, indent-blankline to determine and set 2 or 4 spaces for one tab, an lsp, nonels for formatting, notify and fidget-nvim for notifications and status updates inside neovim, telescope for searching and treesitter for syntax hightlighting. Quite a lot, and I forgot to add a devlog before because I was tinkering a lot xD I also used Mason.nvim before for automatically installing LSP, but I now do that system wide. The background image, visible because my neovim background is transparent and my shell halve-transparent, is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl < [email protected] > and licensed CC-BY-SA 4.0 . Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0 ."}]...
|
Title: My neovim config by @Tuxilio | Stardance
D Title: My neovim config by @Tuxilio | Stardance
Devlogs:
I started creating my own neovim config! Currently, I use lazy.nvim as the plugin manager to install the following plugins: a catpuccin colorscheme, gitsigns (as you can see in the image on the left; to display not committed / added / changed … lines on the left), wakatime, cmp for suggestions, indent-blankline to determine and set 2 or 4 spaces for one tab, an lsp, nonels for formatting, notify and fidget-nvim for notifications and status updates inside neovim, telescope for searching and treesitter for syntax hightlighting. Quite a lot, and I forgot to add a devlog before because I was tinkering a lot xD I also used Mason.nvim before for automatically installing LSP, but I now do that system wide. The background image, visible because my neovim background is transparent and my shell halve-transparent, is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl < [email protected] > and licensed CC-BY-SA 4.0 . Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0 .
I just packaged my config using nix! You can now run nix run git+https://codeberg.org/tuxilio/nixos#neovim to run my full editor! (The background image, visible because my neovim background is transparent and my shell halve-transparent, is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree . My screenshot is licensed CC-BY-SA 4.0.)
I added lsp (language server protocol) configs to my neovim config. Using this I can get linting and autocompletions. I also migrated from nvim-cmp to blink.cmp for completions, because I couldn’t get nvim-cmp to work… blink-cmp works well. In the picture you can see the completion and docs window. I currently got the problem that the docs window isn’t transparent but I couldn’t fix that. I already tried this: https://codeberg.org/Tuxilio/nixos/commit/d68a3de50786da3b3bc2f6aaeb9d2b88147a1a9f (commented out because it doesn’t worked; it just hides the complete completion window) so if you have ideas please tell me :) (The background image, visible because my neovim background is transparent and my shell halve-transparent, is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree . My screenshot is licensed CC-BY-SA 4.0 .)
I added a lot docs so it is a lot easier to setup and understand :)
I removed the import-tree dependency in my nixos config so users need to download less inputs 🎉 It took some time because it was a bit difficult to reimport each file but I did it :)
I refactored my whole nixos config and removed another dependency, flake-parts , so that users need to download less dependencies! The project is now much smaller and still works exactly the same :) This was really complicated because I had to rewrite nearly everything so it took a really long time (5 hours)
Ships:
I built a fully customized, lightweight neovim config. It’s my first time I configured my neovim and its simple and just have some main feature of an ide. It’s NOT a full vscode config. I did it mainly because I wanted a nice editor but also for fun :) It’s my first time configuring neovim so I used the docs a lot and tried a lot of things. You can look at some screenshots in the devlog or try it out by yourself :) If you’re new to vi/vim/neovim, it is a terminal-based editor. You can press Esc and then :q to exit. If you want to see a transparent background, you need a terminal with a transparency option configured. My neovim is just configured to have a transparent background but if your terminal is just black you won’t really see an effect ;)
I built a fully customized, lightweight neovim config. It’s my first time I configured my neovim and its simple and just have some main feature of an ide. It’s NOT a full vscode config. The difference between neovim and e.g. vscode is that neovim *or vim in general) gives you the freedom to make it look a little diffrent from the others. I did it mainly because I wanted a nice editor but also for fun :) It’s my first time configuring neovim so I used the docs a lot and tried a lot of things. You can look at some screenshots in the devlog or try it out by yourself :) If you’re new to vi/vim/neovim, it is a terminal-based editor. You can press Esc and then :q to exit. If you want to see a transparent background, you need a terminal with a transparency option configured. My neovim is just configured to have a transparent background but if your terminal is just black you won’t really see an effect ;) The main difference to the first ship is that I removed some dependencies on my nixos neovim config so it is a LOT smaller but that was more difficult than I thought so it took 6 whole hours :/...
|
1793109265.4238858
|
1793195665.4238858
|
|
17294
|
traewelltui by @Tuxilio | Stardance
|
Tuxilio
|
2
|
15.45
|
157
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-10T09:44:26Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. New Fetures are that you can paste the token now directly from your clipboard, you can like checkins interactively using a popup select and using an index, and a bugfix that the dashboard isn’t loading! (some licensing things: The background image in my terminal which is only partially visible is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)", "repo": "https://codeberg.org/Tuxilio/traewelltui/", "demo": "https://crates.io/crates/traewelltui"}, {"ship_num": 2, "ts": "2026-06-17T19:45:08Z", "hours": 10.0, "multiplier": 15.88, "payout": 157, "blessing": "neutral", "text": "I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. Pasting the token could take some seconds, this is not because something bad implemented but instead the token is really long and each character gets inserted sepeartely by ratatui.", "repo": "https://codeberg.org/Tuxilio/traewelltui/", "demo": "https://crates.io/crates/traewelltui"}]...
|
[{"post_id": 77504, "ts": "202 [{"post_id": 77504, "ts": "2026-10-07T08:24:45Z", "hours": 0.4453, "text": "I fixed one bug where the travel mode is not added in the enum so I added a default field “Other” to show this instead of crashing the app. I also added a bit more docs where to get the token :)"}, {"post_id": 65276, "ts": "2026-09-10T08:50:49Z", "hours": 1.4053, "text": "I fixed the error reported by @pauljako that the login is not working anymore which is likely caused because of recent api changed by traewelling. The travel mode (bus, train …) and the source/license of the checkin are now not always included so I set them to optional. It was really difficult to debug because I couldn’t get serde to show the full problem … but it worked after some tries 🎉 (some licensing things: The background image in my terminal is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)"}, {"post_id": 25237, "ts": "2026-07-09T11:21:45Z", "hours": 0.8522, "text": "You can now type :like without arguments and find a popup to select which checkin you want to like!"}, {"post_id": 24735, "ts": "2026-07-08T14:43:20Z", "hours": 0.3311, "text": "The message is now shown in a popup instead the bottom line, which looks much nicer :)"}, {"post_id": 24716, "ts": "2026-07-08T14:15:47Z", "hours": 1.3469, "text": "I added a :like command! You can now like checkins using :like <index> , where you can find the index beside the username in the checkin header!"}, {"post_id": 24665, "ts": "2026-07-08T12:15:55Z", "hours": 1.3956, "text": "I added an option to get the token from your clipboard instead of only relying only on pasting, because that pasted every single character and took some time :)"}, {"post_id": 10836, "ts": "2026-06-17T19:37:51Z", "hours": 1.1611, "text": "I added a lot documentation and an asciinema video: https://asciinema.org/a/BytB6HM8kpoXtlLC"}, {"post_id": 10736, "ts": "2026-06-17T16:56:50Z", "hours": 0.7561, "text": "There is now an option to save the api token and auto-login with it! The login prompt also shows now automatically when you’re not logged in, making it easier to get a start :) The token save prompt only shows after a successful use of the token, so you can’t really save a wrong token."}, {"post_id": 10712, "ts": "2026-06-17T16:01:24Z", "hours": 1.1061, "text": "I completely redesigned the dashboard! It now looks more like “normal” Traewelling clients and in my opinion much nicer :)"}, {"post_id": 10597, "ts": "2026-06-17T12:50:29Z", "hours": 0.6261, "text": "I added symbols for the travelling mode (e.g. suburban, regional rail, tram bus) and you can now also see the status message another one has posted together with the checkin!"}, {"post_id": 10581, "ts": "2026-06-17T11:59:07Z", "hours": 4.3208, "text": "I just finished a big feature in my project! The login now works perfectly, and after successfully logging in, you’ll see your dashboard displaying check-ins from people you follow (plus your own, of course). The dashboard isn’t complete yet - I plan to add status messages and a progress bar showing if someone is currently traveling."}, {"post_id": 9336, "ts": "2026-06-15T17:42:53Z", "hours": 1.9603, "text": "I’m building a terminal user interface for Traewelling ( https://traewelling.de/ ) using Ratatui in Rust, with Vim-style keybindings (: for command mode, q to quit, :login for token-based authentication). The basic UI is working well with a header, dashboard body, and mode-specific footer, but still needs polish before the next iteration."}]...
|
Title: traewelltui by @Tuxilio | Stardance
Devlog Title: traewelltui by @Tuxilio | Stardance
Devlogs:
I’m building a terminal user interface for Traewelling ( https://traewelling.de/ ) using Ratatui in Rust, with Vim-style keybindings (: for command mode, q to quit, :login for token-based authentication). The basic UI is working well with a header, dashboard body, and mode-specific footer, but still needs polish before the next iteration.
I just finished a big feature in my project! The login now works perfectly, and after successfully logging in, you’ll see your dashboard displaying check-ins from people you follow (plus your own, of course). The dashboard isn’t complete yet - I plan to add status messages and a progress bar showing if someone is currently traveling.
I added symbols for the travelling mode (e.g. suburban, regional rail, tram bus) and you can now also see the status message another one has posted together with the checkin!
I completely redesigned the dashboard! It now looks more like “normal” Traewelling clients and in my opinion much nicer :)
There is now an option to save the api token and auto-login with it! The login prompt also shows now automatically when you’re not logged in, making it easier to get a start :) The token save prompt only shows after a successful use of the token, so you can’t really save a wrong token.
I added a lot documentation and an asciinema video: https://asciinema.org/a/BytB6HM8kpoXtlLC
I added an option to get the token from your clipboard instead of only relying only on pasting, because that pasted every single character and took some time :)
I added a :like command! You can now like checkins using :like <index> , where you can find the index beside the username in the checkin header!
The message is now shown in a popup instead the bottom line, which looks much nicer :)
You can now type :like without arguments and find a popup to select which checkin you want to like!
I fixed the error reported by @pauljako that the login is not working anymore which is likely caused because of recent api changed by traewelling. The travel mode (bus, train …) and the source/license of the checkin are now not always included so I set them to optional. It was really difficult to debug because I couldn’t get serde to show the full problem … but it worked after some tries 🎉 (some licensing things: The background image in my terminal is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)
I fixed one bug where the travel mode is not added in the enum so I added a default field “Other” to show this instead of crashing the app. I also added a bit more docs where to get the token :)
Ships:
I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. Pasting the token could take some seconds, this is not because something bad implemented but instead the token is really long and each character gets inserted sepeartely by ratatui.
I made traewelltui, which is a TUI (terminal ui) client for Traewelling, a free public transport checkin service to record your travels and share it with your friends. It was a bit difficult to get into, because I never used Ratatui before. I have rewritten the dashboard multiple times and I am now somthing happy with it :) If you test the project, you should know that it uses vim keybinds: Use :q to quit. New Fetures are that you can paste the token now directly from your clipboard, you can like checkins interactively using a popup select and using an index, and a bugfix that the dashboard isn’t loading! (some licensing things: The background image in my terminal which is only partially visible is the KDE Plasma workspace wallpaper “Scarlet tree” made by axo1otl [email protected] and licensed CC-BY-SA 4.0. Repo: https://invent.kde.org/plasma/plasma-workspace-wallpapers/-/tree/master/ScarletTree My screenshot is licensed CC-BY-SA 4.0)...
|
1793112768.423352
|
1793199168.423352
|
|
17344
|
Privournal by @Manonit | Stardance
|
Manonit
|
2
|
48.0
|
664
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-07T18:09:56Z", "hours": 14.0, "multiplier": 13.4, "payout": 184, "blessing": "neutral", "text": "I made Privournal, a retro CLI application for private journaling and custom text encryption featuring basic ciphers, advanced encryption (Swiption, Randomised, Manual Modes Hehe), and new features like Show Keys and View Account. Pheww you’re gonna love this if you’ve people trying to read your journals 😭 The hardest part was restructuring the whole flow so as to make it less repetitive and cleaner , fixing CLI table alignment glitches, and honestly, if you saw my last ship you’d know that the Swiption feature I made gave me a pretty tough time, Lol. Though I’m really proud of creating a seamless terminal workflow and getting it published live on PyPI as well as GitHub, this is one of the few things I’ve worked on and completed in my life. To test it out, run pip install –upgrade privournal, and type privournal in your terminal, and try encrypting and immediately decrypting a short sentence with or without an account!", "repo": "https://github.com/sermanoire/Privournal", "demo": "https://pypi.org/project/privournal/"}, {"ship_num": 2, "ts": "2026-06-19T01:48:24Z", "hours": 34.0, "multiplier": 17.48, "payout": 480, "blessing": "neutral", "text": "I built Privournal, a command-line journal encryptor that allows users to encrypt and decrypt journal entries locally on their own device. Because for me, someone reading my journal is a legit nightmare, and Privournal is something I can use to keep my digital journals secure. For me that’s a clear quality-of-life improvement : ) Write your journal anywhere (Notes, Notion, etc), paste it into Privournal, get back unreadable text, paste that back into your app. No journal content is ever stored - only the encryption key, and that too locally, if you make an account. To read it yourself you can again head to Privournal and decrypt it! It supports multiple encryption modes, including Basic Encryption, Advanced Encryption, Randomized Encryption, and Swiption - a dynamic encryption system that changes a letter’s cover after a particular number of occurrences, making it impossible to crack. The biggest challenge was implementing Swiption and its decryption logic. Managing occurrence tracking, rotating covers, JSON storage, database integration, and reliable decryption took multiple iterations and a lot of debugging. I also migrated the project from a MySQL-based architecture to SQLite after realizing a shared database conflicted with the goal of being fully offline and private. I’m most proud of turning an idea into a complete, usable package that can be installed through PyPI. I’ve never worked on something so religiously on something of this complexity. The project ended up being over 1400 lines of code and taught me a huge amount about python, databases, GitHub and packaging, debugging, and obviously logical thinking. I’ve never worked on something so religiously on something of this complexity. 3 Major Quality-of-Life Improvements : Zero-setup local encryption - Works completely offline with automatic SQLite database. No server or complicated config needed. Powerful & flexible encryption - Multiple modes + Swiption (dynamic rotating covers) makes it much stronger than simple substitution ciphers. Seamless workflow - Write anywhere -> encrypt -> paste back -> decrypt easily with account or manual key. Perfect for daily journaling : ) Try creating an account (or continue without an account), encrypting a journal entry, saving it, and then decrypting it again. Swiption and Randomised Modes are the most interesting and secure features to experiment with. To test it, run these on terminal : pip install privournal python import MainCode MainCode.start() Thank you so much for reading! : )", "repo": "https://github.com/sermanoire/Privournal", "demo": "https://pypi.org/project/privournal/"}]...
|
[{"post_id": 77627, "ts": "202 [{"post_id": 77627, "ts": "2026-10-07T17:55:59Z", "hours": 2.0183, "text": "Devlog 16! — Okay, NOW It’s Done. 😭 Phew. I thought Privournal was finally finished, but while making the final ASCII recording, I found a bunch of small errors (Some was huge), inconsistencies and table issues that I had to fix. What I worked on: Added two new functions: Show Keys and View Account . Show Keys lets users view all their saved encryption keys. View Account displays their account details neatly in a table. Fixed several encryption and decryption bugs , including issues with journal selection, menu choices and input validation. Fixed problems with database values and journal data being handled incorrectly. Improved table formatting, spacing and alignment throughout the program. Cleaned up various small inconsistencies and errors that appeared during full end-to-end testing. Made the new ASCII recording . There was some old test data already stored, which was causing confusing duplicate entries and messing up the tables. After clearing that out, everything worked properly. And finally… The entire thing worked perfectly. 🎉 Most of this Devlog was about fixing the small things rather than adding huge new features, but it made Privournal more consistent and reliable."}, {"post_id": 77302, "ts": "2026-10-06T14:14:50Z", "hours": 6.5342, "text": "Devlog 15! It’s done. Phew. Finally, Privournal is DONE. Complete, everything’s perfect. In this final version I’ve made so many improvements! Instead of using time.sleep() to give pauses/time to copy the details, now the users can copy and paste encrypted text and its key without a time limit, and then they can simply press Enter to move ahead. I also made HUGE changes to the code. Earlier, the code used to run and at multiple steps ask for login/signup, which was fine but it was confusing. Now the first page is for login/signup, then the rest of the code flows smoothly accordingly. This restructuring required writing many parts of the code again and breaking a lot of functions into 2 parts. I also renamed some variables. I also worked on spacing and formatting. Now the user details are printed cleanly in a table. Overall, the code outputs are much more uniform. I made a new ASCII recording. It is yet to be updated on my GitHub, though. I’ve also published this new version on PyPI. If you had already installed Privournal, you can just update it. Now the main thing. I’m going to make a Website for Privournal where users wouldn’t need to install anything and can just go straight to encrypting or decrypting their journals. This version will still exist, though. It’ll be a rather Retro CLI version for people who like it this way. Phew. I’ll work on that now."}, {"post_id": 15049, "ts": "2026-06-24T13:23:31Z", "hours": 5.1881, "text": "##Devlog #14 - The Reviewer Arc 🥲 . Well… . The reviewer found some issues 😭 . So I went back and tested basically the ENTIRE project again. . While testing, I found and fixed a bunch of errors, especially in Advanced Encryption. I also added a lot of fallback checks throughout the code so Privournal doesn’t randomly decide to crash anymore 😭 . I also improved the decryption flow. . Earlier users had to select journals using IDs, now they can simply choose them by name, which feels way cleaner. . Another addition was a user guide in menu. I was short on time and it was a no brainer, so I used Claude to help generate the guide content and then integrated it into Privournal. The goal was simply to make the different encryption modes easier to understand :) . Apart from code changes, I also polished the project page, uploaded a sample flowchart, improved formatting and timing, and recorded a completely new asciinema demo PLUS I updated the README too. . Then came final testing, packaging, uploading the latest release, and requesting review again 🤞🏻 . Hopefully Privournal passes thru this time 😭 . Thank you : )"}, {"post_id": 11681, "ts": "2026-06-19T01:11:08Z", "hours": 16.0992, "text": "Devlog #13 - IT’S DONE DONE! The Final Chapter. FINALLY. After two intense days and 16+ hours of grinding, Privournal is officially complete and ready for Stardance! 😭🎉 OH AND Yeah, it’s been two days - Long time no see 😭 . Sorry for disappearing without posting Devlog #13 🥲 . These last 16+ hours were so packed with debugging, packaging, testing, and polishing that I kept postponing the devlog. So this one covers the entire final stretch. . Btw hey I’ll upload the clean Flowchart on Git repo, and yk I was gonna write a LOT here with complete details, but damn there’s a limit. Well it’s oki i’ll add a list of all my devlogs to the repo too :) What Happened? I thought Devlog #12 was the “everything works” moment, but the final stretch turned out to be the work. Audited every function in the codebase Fixed dozens of lingering bugs Cleaned up the entire code Updated the README 10+ times Set up PyPI packaging and releases Recorded asciinema demos (Took enormous time 😭) Added prettier output/interface functions Tested every scenario I could think of Major Change: MySQL → SQLite One of the biggest changes was moving away from MySQL. . Originally, Privournal used MySQL with accounts and a shared database. Later I realized that requires a server, hosting, maintenance, and introduces privacy concerns. . So I redesigned everything around SQLite. . Benefits: Fully offline More private Easier installation Simpler deployment Probably the biggest architectural change in the entire project. Biggest Bugs Fixed Login/signup flow issues Missing database commits Foreign key linking problems JSON serialization/loading bugs The infamous “extra spaces everywhere” decryption bug Variable scope and traversal issues Randomised Mode integration By the end of Day 1, the core encryption/decryption system was finally reliable. The Swiption Demon 😭 Swiption and SwipDe took forever. . The idea sounds simple: letters rotate through multiple covers after a certain number of occurrences. . Actually implementing occurrence tracking, rotation logic, life values, multiple dictionaries, JSON storage, and decryption logic nearly broke my brain 😭 . The funniest part? . After hours of struggling I realized I had overcomplicated everything. Since every cover uniquely maps to a letter, I could simply search through the dictionaries instead of tracking a ton of extra information. LIKE DAMN. Swiption is now fully functional and ended up becoming my coolest feature in the project. Packaging & Shipping Cleaned up the repository Improved README and documentation Fixed PyPI packaging issues Tested in fresh virtual environments Published releases Recorded final demos ✨ Project Complete Privournal is now a real, usable command-line journal encryptor. Thanks to: My brother for catching early logic flaws GPT for quick syntax rescues Everyone who followed the devlogs And myself for not giving up 😭 **Privournal is shipped and ready for Stardance! ** I’d love your feedback once you try it. . This project taught me something exams never did : . Working religiously on something with all your heart to make it real. . Thank you for reading all 13 devlogs ❤️ . ✨ See you in the next project ✨ | Project Complete | Ready to Submit | 🎉"}, {"post_id": 10031, "ts": "2026-06-16T16:23:14Z", "hours": 1.6072, "text": "Devlog #12 - IT WORKS! FINALLY! After an hour of debugging, EVERYTHING WORKS! -Encryption -Decryption -Uploading to & Fetching from the Database -Sign Up -Login . The only things that aren’t fully working yet are Swiption and Random Mode, and honestly that’s on me 😭. I got way too focused on making everything else work first AND GOD I had to improvise whole sections of the decryption logic, you won’t believe it. . If you compare the code I committed before this and the code I committed today, I had to improvise so much! . I removed and added so much. My old decryption was code wrong, I mean the logic was on point but the syntax and a few other things were off that’s why it wasn’t working. . Some of the errors were genuinely silly, again 😅 . All my elifs somehow had the same condition, and people this is why you don’t copy paste conditions to save time (I still don’t know how I missed that) 🥲 . My traversal i was a string, and I kept accidentally treating it like an int iterator, I mean ugh. . A lot of bugs were literally sitting right in front of my eyes. . Some bugs were much bigger tho. One of the weirdest happened after I finally got decryption working - The decrypted text had way too many spaces between words. . After staring at it for a while, I noticed that the number of spaces was exactly the same as the number of unique letters in the text. That’s when it hit me - the loop was continuing to run even after finding a match. Few “breaks” later hehe, everything worked 😭 . After Swiption and Random Mode, those 2 really aren’t done right now, I’m sorry I type so slow 😭 . Yeah so after that I’ll focus on making the code look real pretty, like -Fixing my silly variable names -Comment notes ig? -Better spacing and formatting -Cleaning up extra files -Writing a proper README and project description . And yes… On the 13th Devlog, the project will be done done 🤞🏻 . Note : I improvised all my previous devlogs, with proper format so that it’s easier to read, you can tell me if it’s better 🙃 . See you in the next one!"}, {"post_id": 9530, "ts": "2026-06-15T22:02:49Z", "hours": 3.1286, "text": "Devlog #11 - First Successful Test! Let’s go!!! . First successful test done 😇 . The database fetching works, the encryption flow works - it wasn’t working earlier tho (And I spent an hour finding errors, like i’d run it again n again and also ended up rewriting portions, like my Advanced Encyption code was all messed up 😭) . But yes, now it’s working, i’m sure there are a couple more errors but i’m on my way to fix em! . And yk some of the errors were so silly - I had written input(“Enter cover for”,x), and damn i failed to realise what the issue was. . Then after a lot of trying I asked GPT and it said it’s cuz input() can only have one argument in the braces 😅 . A lot of other errors too were like me getting all confused btw variable names, function not being global and so on. . But yeah, one at a time i fixed em, fixed the code and now only the refining of the code and some other bugs remain. . And um I had said i’d do it in 10 devlogs, but ah now it looks like 12th would be the last one. . But hey, the more the better, ig? 😭 . See ya in the next devlog!"}, {"post_id": 9123, "ts": "2026-06-15T08:21:26Z", "hours": 4.0792, "text": "Devlog #10 - A Slight Setback This is going to be the biggest devlog. And this one’s gonna be a disappointing one 🥲 . First of all, I was talking to my brother and he asked such a good question - It pointed to a flaw which I didn’t notice at all. . Let’s say there’s a word “am” in the journal, a’s cover is 1 and m’s cover is 27 (so am = 127). Now cuz there’s not spacing the decryption code will actually traverse thru each of number at a time in the encrypted text (127), so it’ll literally convert 1 and then 2 and then 7 separately. This was such a major flaw in my logic and I’m still agonizing internally over the fact that my eyes missed it. . But ah it’s ok, I’m fixing that by simply making adding a trailing space after the cover to separate each letter’s cover. . There was so much running and errors and staring at screen and all that. . Another thing I noticed is that in Advanced Encryption when the user will choose covers for 52 letters, he might accidentally repeat a cover - which obvi will make it impossible to distinguish btw 2 letters. So I gotta add each cover to a list and then every time the user adds a cover i’ll see if it’s already there in the list or not. . Now these flaws I got to know when I was talking to my brother, and it was past midnight. So almost immediately after waking up I was onto fixing these flaws, and it’s in progress :) . Apart from that, I’ve been refining the code (Found some silly errors in functions) and fixing more logic issues. . Earlier the Encryption Key that I was using to decrypt, it was a dictionary - with the keys as letters and values as the cover. So before uploading them to the db table, I converted them into text. But then while fixing decryption code, I did tried dict(the string key) and later found out that it all doesn’t work like that, the syntax. . I checked online, asked GPT, he suggested that I use the json module, and so I did. Json made it pretty easy, now the conversion was smooth and 2 liner. . Also I fixed all the login/signup system, it works as smooth as butter now Hehe . I’d say the main issue wasn’t the code it was following where am I. . Like cuz there are so many functions and steps and paths that I was getting overwhelmed (plus the code is like 600 lines), so I basically carefully went thru each line of code and arranged each function in an order and side by side made the final flowchart (It made following the code super easy and looks cool tbh) - But yes that’s hectic work right there. . Now after all that… Does the code run? HELL NO IT DOESNT! . It’s still showing 21 errors 😭 Plus, Swiption’s still left. . So right now, I’m trying to fix the flaws and errors and get this code up and running without Swiption, once it is smooth then at the end I can code Swiption into it. . See ya in the next devlog!"}, {"post_id": 8726, "ts": "2026-06-14T14:26:44Z", "hours": 1.1836, "text": "Devlog #9 - This was unexpected… Turns out there were some issues in the decryption function. It completely ignored spaces while decrypting, which definitely wasn’t ideal 😭 . I’ve fixed that tho. . Also I remade the tables in database with much more info such as date of encryption and email (for forgot password purposes) . And this code was getting too long, like more than 400 lines long. . So, I’ve started splitting things into different files to keep everything organized. Db code has its own file, big functions like AdvEn() have their own file, and the same goes for Swiption and Random Encryption logic. . Target’s to finish the code tonight. . Thanks for reading!"}, {"post_id": 8602, "ts": "2026-06-14T09:32:39Z", "hours": 1.1364, "text": "Devlog #8 - The Eights. . So this would be Privournal’s 8th devlog, and this one feels kinda special :) . My birthday falls on an 8th too, and I just love the number 8. . Anyways, I was actually supposed to be done with the Swiption feature by now, but I just couldn’t help myself and started working on the Random Encryption feature. . Reason’s that it just came to me - . Why not make Random Encryption available for both Advanced Encryption AND Swiption too?? . This would make the whole Encryption process super fast if some user doesn’t want to manually encrypt each letter. So I’m onto that, then I’ll immediately look into Swiption. . Then finally I’ll refine the whole code and just go through all the variables, functions and rename them if needed (I’m one of those people who name the variable something silly and forget what it was for 😭) . I’ve also started mapping out the overall visual flow of Privournal cuz it was getting a bit confusing. . I’m thinking abt wrapping this project up in about 12 devlogs, and then launching it. . You can also check out the GitHub - I’ve been committing code changes on it regularly :) . Thanks for reading!"}, {"post_id": 8359, "ts": "2026-06-13T21:56:30Z", "hours": 1.7153, "text": "Devlog #7 - Almost There! Only the Swiption feature remains! . I’ve also been thinking about adding another cool feature where the covers are randomly chosen using Python’s random module. The idea is that it’ll be added in Custom Encryption. . Also, my bad 😭 . I sometimes refered to the Custom Encryption as Advanced Encrytion, that might confuse you - but i’ll be consistent with names now. It’s just that it’s the start and so many features and ideas just mush into my head 🙃 . Once Swiption is done, the Python version should basically be mostly complete, and then it’ll be time for da next step . Getting all this on a website, tho that is gonna be really difficult for me, I really don’t know how to make websites 🥲. . Not gonna lie, that part scares me a a lot cuz I don’t wanna use AI for the website 😭 . I really don’t know much about web development, but I guess that’s part of building a project. You learn whatever you need as you go. . Thank you so much for reading these devlogs tho :) . Hopefully tmrw the code will be done and I’ll be one step closer to completing Privournal!"}, {"post_id": 8152, "ts": "2026-06-13T16:24:59Z", "hours": 1.0783, "text": "Devlog #6 - Advanced Encryption! Pheww, this part took some effort! . Today I worked on the main encryption logic for Advanced Encryption, and after a lot of thinking, coding, testing, and rethinking, I finally got the foundation for it down :) . This is one of the core features of Privournal, so it feels really good seeing it slowly come together. . That said, this is only a small win . The real challenge is gonna be the “Swiption” feature. Bet Swiption is gonna take half my brain cells 😭"}, {"post_id": 8096, "ts": "2026-06-13T14:51:13Z", "hours": 0.4681, "text": "Devlog #5 - Database Established! . Now the basic outline has to be perfected, with each and every thing being functional. . After spending some time figuring out SQL, databases, connections, and all that stuff, I finally managed to get Python talking to the database successfully :) . Seeing actual records being fetched felt pretty satisfying not gonna lie. For now, the goal’s Add features and make everything functional Connect everything together Improve the overall structure On the way to do that!"}, {"post_id": 8033, "ts": "2026-06-13T12:07:47Z", "hours": 0.9758, "text": "Devlog #4 - Still on the Db thing . Hehe, my highschool Python-SQL interface notes are coming in handy! . When I was studying this stuff, I honestly didn’t think I’d ever end up using most of it cuz it seemed too basic Turns out I was wrong :) . Since Privournal is gonna need a database for account credentials and all that, I’ve started revising my old notes and figuring out how everything fits together. . Let’s see how this goes!"}, {"post_id": 7690, "ts": "2026-06-12T21:00:25Z", "hours": 0.6611, "text": "Devlog #3 - The Plan’s Shape Guys! . Errors fixed and a basic outline has been made (This time on a paper Hehe) . AND i’ve thought about how i’m gonna go about it! . I’ve also spent some time thinking about how I’m actually gonna build this thing. . I’ll have to make a sql database ig (For account credentials and encryption details) and link it to my python code. I’m still new so i’m not sure if the sql database method for keeping records is how the real companies operate, but still seems pretty nice. . And I mean these are journals that we’re talking about, - so security and privacy matter a lot. . Tho my whole idea and code is that the actual journal entry is never stored. Only the encryption sequence and logic is. . That way, even if some dummy somehow got access to the database, they wouldn’t find the journal itself (Hehe can’t outsmart me) . For now, the plan pretty clear: Finish the Python main code Get encryption working properly Add database support Convert it into a website Well, that’s it ig. . I’m gonna go and tmrw complete the whole thing in python and then yes - hopefully convert it into a website :)"}, {"post_id": 7639, "ts": "2026-06-12T19:21:01Z", "hours": 0.9731, "text": "Devlog #2 - The First Error and an Outline . Ran into the first error, phewww! . Honestly, had it coming - things were going way too smoothly for a rather newbie like me 😭 . I was working on the account system and trying to get the signup and login flow working when I hit the error. I also created a basic outline of flow (In my mind 😅) . Spent a good chunk of time staring, retracing my code, and trying to figure out what exactly I had written wrong. But yes, I’m on it!"}, {"post_id": 7568, "ts": "2026-06-12T17:29:14Z", "hours": 0.5239, "text": "Devlog #1 - The Beginning . Today wasn’t about building features but about getting everything ready. . I finished setting up the Github thing (Took me an hour lol), cleaned things up, and wrote the first version of the README. . It might not seem like much, but damn did it feel so hectic, maybe cuz it’s my first time working on a real software project :) . After the setup, I finally started writing the core code. . Right now it’s just the foundation and an outline that I’ve set out to achieve :) . The journey begins!"}]...
|
Title: Privournal by @Manonit | Stardance
Devlogs Title: Privournal by @Manonit | Stardance
Devlogs:
Devlog #1 - The Beginning . Today wasn’t about building features but about getting everything ready. . I finished setting up the Github thing (Took me an hour lol), cleaned things up, and wrote the first version of the README. . It might not seem like much, but damn did it feel so hectic, maybe cuz it’s my first time working on a real software project :) . After the setup, I finally started writing the core code. . Right now it’s just the foundation and an outline that I’ve set out to achieve :) . The journey begins!
Devlog #2 - The First Error and an Outline . Ran into the first error, phewww! . Honestly, had it coming - things were going way too smoothly for a rather newbie like me 😭 . I was working on the account system and trying to get the signup and login flow working when I hit the error. I also created a basic outline of flow (In my mind 😅) . Spent a good chunk of time staring, retracing my code, and trying to figure out what exactly I had written wrong. But yes, I’m on it!
Devlog #3 - The Plan’s Shape Guys! . Errors fixed and a basic outline has been made (This time on a paper Hehe) . AND i’ve thought about how i’m gonna go about it! . I’ve also spent some time thinking about how I’m actually gonna build this thing. . I’ll have to make a sql database ig (For account credentials and encryption details) and link it to my python code. I’m still new so i’m not sure if the sql database method for keeping records is how the real companies operate, but still seems pretty nice. . And I mean these are journals that we’re talking about, - so security and privacy matter a lot. . Tho my whole idea and code is that the actual journal entry is never stored. Only the encryption sequence and logic is. . That way, even if some dummy somehow got access to the database, they wouldn’t find the journal itself (Hehe can’t outsmart me) . For now, the plan pretty clear: Finish the Python main code Get encryption working properly Add database support Convert it into a website Well, that’s it ig. . I’m gonna go and tmrw complete the whole thing in python and then yes - hopefully convert it into a website :)
Devlog #4 - Still on the Db thing . Hehe, my highschool Python-SQL interface notes are coming in handy! . When I was studying this stuff, I honestly didn’t think I’d ever end up using most of it cuz it seemed too basic Turns out I was wrong :) . Since Privournal is gonna need a database for account credentials and all that, I’ve started revising my old notes and figuring out how everything fits together. . Let’s see how this goes!
Devlog #5 - Database Established! . Now the basic outline has to be perfected, with each and every thing being functional. . After spending some time figuring out SQL, databases, connections, and all that stuff, I finally managed to get Python talking to the database successfully :) . Seeing actual records being fetched felt pretty satisfying not gonna lie. For now, the goal’s Add features and make everything functional Connect everything together Improve the overall structure On the way to do that!
Devlog #6 - Advanced Encryption! Pheww, this part took some effort! . Today I worked on the main encryption logic for Advanced Encryption, and after a lot of thinking, coding, testing, and rethinking, I finally got the foundation for it down :) . This is one of the core features of Privournal, so it feels really good seeing it slowly come together. . That said, this is only a small win . The real challenge is gonna be the “Swiption” feature. Bet Swiption is gonna take half my brain cells 😭
Devlog #7 - Almost There! Only the Swiption feature remains! . I’ve also been thinking about adding another cool feature where the covers are randomly chosen using Python’s random module. The idea is that it’ll be added in Custom Encryption. . Also, my bad 😭 . I sometimes refered to the Custom Encryption as Advanced Encrytion, that might confuse you - but i’ll be consistent with names now. It’s just that it’s the start and so many features and ideas just mush into my head 🙃 . Once Swiption is done, the Python version should basically be mostly complete, and then it’ll be time for da next step . Getting all this on a website, tho that is gonna be really difficult for me, I really don’t know how to make websites 🥲. . Not gonna lie, that part scares me a a lot cuz I don’t wanna use AI for the website 😭 . I really don’t know much about web development, but I guess that’s part of building a project. You learn whatever you need as you go. . Thank you so much for reading these devlogs tho :) . Hopefully tmrw the code will be done and I’ll be one step closer to completing Privournal!
Devlog #8 - The Eights. . So this would be Privournal’s 8th devlog, and this one feels kinda special :) . My birthday falls on an 8th too, and I just love the number 8. . Anyways, I was actually supposed to be done with the Swiption feature by now, but I just couldn’t help myself and started working on the Random Encryption feature. . Reason’s that it just came to me - . Why not make Random Encryption available for both Advanced Encryption AND Swiption too?? . This would make the whole Encryption process super fast if some user doesn’t want to manually encrypt each letter. So I’m onto that, then I’ll immediately look into Swiption. . Then finally I’ll refine the whole code and just go through all the variables, functions and rename them if needed (I’m one of those people who name the variable something silly and forget what it was for 😭) . I’ve also started mapping out the overall visual flow of Privournal cuz it was getting a bit confusing. . I’m thinking abt wrapping this project up in about 12 devlogs, and then launching it. . You can also check out the GitHub - I’ve been committing code changes on it regularly :) . Thanks for reading!
Devlog #9 - This was unexpected… Turns out there were some issues in the decryption function. It completely ignored spaces while decrypting, which definitely wasn’t ideal 😭 . I’ve fixed that tho. . Also I remade the tables in database with much more info such as date of encryption and email (for forgot password purposes) . And this code was getting too long, like more than 400 lines long. . So, I’ve started splitting things into different files to keep everything organized. Db code has its own file, big functions like AdvEn() have their own file, and the same goes for Swiption and Random Encryption logic. . Target’s to finish the code tonight. . Thanks for reading!
Devlog #10 - A Slight Setback This is going to be the biggest devlog. And this one’s gonna be a disappointing one 🥲 . First of all, I was talking to my brother and he asked such a good question - It pointed to a flaw which I didn’t notice at all. . Let’s say there’s a word “am” in the journal, a’s cover is 1 and m’s cover is 27 (so am = 127). Now cuz there’s not spacing the decryption code will actually traverse thru each of number at a time in the encrypted text (127), so it’ll literally convert 1 and then 2 and then 7 separately. This was such a major flaw in my logic and I’m still agonizing internally over the fact that my eyes missed it. . But ah it’s ok, I’m fixing that by simply making adding a trailing space after the cover to separate each letter’s cover. . There was so much running and errors and staring at screen and all that. . Another thing I noticed is that in Advanced Encryption when the user will choose covers for 52 letters, he might accidentally repeat a cover - which obvi will make it impossible to distinguish btw 2 letters. So I gotta add each cover to a list and then every time the user adds a cover i’ll see if it’s already there in the list or not. . Now these flaws I got to know when I was talking to my brother, and it was past midnight. So almost immediately after waking up I was onto fixing these flaws, and it’s in progress :) . Apart from that, I’ve been refining the code (Found some silly errors in functions) and fixing more logic issues. . Earlier the Encryption Key that I was using to decrypt, it was a dictionary - with the keys as letters and values as the cover. So before uploading them to the db table, I converted them into text. But then while fixing decryption code, I did tried dict(the string key) and later found out that it all doesn’t work like that, the syntax. . I checked online, asked GPT, he suggested that I use the json module, and so I did. Json made it pretty easy, now the conversion was smooth and 2 liner. . Also I fixed all the login/signup system, it works as smooth as butter now Hehe . I’d say the main issue wasn’t the code it was following where am I. . Like cuz there are so many functions and steps and paths that I was getting overwhelmed (plus the code is like 600 lines), so I basically carefully went thru each line of code and arranged each function in an order and side by side made the final flowchart (It made following the code super easy and looks cool tbh) - But yes that’s hectic work right there. . Now after all that… Does the code run? HELL NO IT DOESNT! . It’s still showing 21 errors 😭 Plus, Swiption’s still left. . So right now, I’m trying to fix the flaws and errors and get this code up and running without Swiption, once it is smooth then at the end I can code Swiption into it. . See ya in the next devlog!
Devlog #11 - First Successful Test! Let’s go!!! . First successful test done 😇 . The database fetching works, the encryption flow works - it wasn’t working earlier tho (And I spent an hour finding errors, like i’d run it again n again and also ended up rewriting portions, like my Advanced Encyption code was all messed up 😭) . But yes, now it’s working, i’m sure there are a couple more errors but i’m on my way to fix em! . And yk some of the errors were so silly - I had written input(“Enter cover for”,x), and damn i failed to realise what the issue was. . Then after a lot of trying I asked GPT and it said it’s cuz input() can only have one argument in the braces 😅 . A lot of other errors too were like me getting all confused btw variable names, function not being global and so on. . But yeah, one at a time i fixed em, fixed the code and now only the refining of the code and some other bugs remain. . And um I had said i’d do it in 10 devlogs, but ah now it looks like 12th would be the last one. . But hey, the more the better, ig? 😭 . See ya in the next devlog!
Devlog #12 - IT WORKS! FINALLY! After an hour of debugging, EVERYTHING WORKS! -Encryption -Decryption -Uploading to & Fetching from the Database -Sign Up -Login . The only things that aren’t fully working yet are Swiption and Random Mode, and honestly that’s on me 😭. I got way too focused on making everything else work first AND GOD I had to improvise whole sections of the decryption logic, you won’t believe it. . If you compare the code I committed before this and the code I committed today, I had to improvise so much! . I removed and added so much. My old decryption was code wrong, I mean the logic was on point but the syntax and a few other things were off that’s why it wasn’t working. . Some of the errors were genuinely silly, again 😅 . All my elifs somehow had the same condition, and people this is why you don’t copy paste conditions to save time (I still don’t know how I missed that) 🥲 . My traversal i was a string, and I kept accidentally treating it like an int iterator, I mean ugh. . A lot of bugs were literally sitting right in front of my eyes. . Some bugs were much bigger tho. One of the weirdest happened after I finally got decryption working - The decrypted text had way too many spaces between words. . After staring at it for a while, I noticed that the number of spaces was exactly the same as the number of unique letters in the text. That’s when it hit me - the loop was continuing to run even after finding a match. Few “breaks” later hehe, everything worked 😭 . After Swiption and Random Mode, those 2 really aren’t done right now, I’m sorry I type so slow 😭 . Yeah so after that I’ll focus on making the code look real pretty, like -Fixing my silly variable names -Comment notes ig? -Better spacing and formatting -Cleaning up extra files -Writing a proper README and project description . And yes… On the 13th Devlog, the project will be done done 🤞🏻 . Note : I improvised all my previous devlogs, with proper format so that it’s easier to read, you can tell me if it’s better 🙃 . See you in the next one!
Devlog #13 - IT’S DONE DONE! The Final Chapter. FINALLY. After two intense days and 16+ hours of grinding, Privournal is officially complete and ready for Stardance! 😭🎉 OH AND Yeah, it’s been two days - Long time no see 😭 . Sorry for disappearing without posting Devlog #13 🥲 . These last 16+ hours were so packed with debugging, packaging, testing, and polishing that I kept postponing the devlog. So this one covers the entire final stretch. . Btw hey I’ll upload the clean Flowchart on Git repo, and yk I was gonna write a LOT here with complete details, but damn there’s a limit. Well it’s oki i’ll add a list of all my devlogs to the repo too :) What Happened? I thought Devlog #12 was the “everything works” moment, but the final stretch turned out to be the work. Audited every function in the codebase Fixed dozens of lingering bugs Cleaned up the entire code Updated the README 10+ times Set up PyPI packaging and releases Recorded asciinema demos (Took enormous time 😭) Added prettier output/interface functions Tested every scenario I could think of Major Change: MySQL → SQLite One of the biggest changes was moving away from MySQL. . Originally, Privournal used MySQL with accounts and a shared database. Later I realized that requires a server, hosting, maintenance, and introduces privacy concerns. . So I redesigned everything around SQLite. . Benefits: Fully offline More private Easier installation Simpler deployment Probably the biggest architectural change in the entire project. Biggest Bugs Fixed Login/signup flow issues Missing database commits Foreign key linking problems JSON serialization/loading bugs The infamous “extra spaces everywhere” decryption bug Variable scope and traversal issues Randomised Mode integration By the end of Day 1, the core encryption/decryption system was finally reliable. The Swiption Demon 😭 Swiption and SwipDe took forever. . The idea sounds simple: letters rotate through multiple covers after a certain number of occurrences. . Actually implementing occurrence tracking, rotation logic, life values, multiple dictionaries, JSON storage, and decryption logic nearly broke my brain 😭 . The funniest part? . After hours of struggling I realized I had overcomplicated everything. Since every cover uniquely maps to a letter, I could simply search through the dictionaries instead of tracking a ton of extra information. LIKE DAMN. Swiption is now fully functional and ended up becoming my coolest feature in the project. Packaging & Shipping Cleaned up the repository Improved README and documentation Fixed PyPI packaging issues Tested in fresh virtual environments Published releases Recorded final demos ✨ Project Complete Privournal is now a real, usable command-line journal encryptor. Thanks to: My brother for catching early logic flaws GPT for quick syntax rescues Everyone who followed the devlogs And myself for not giving up 😭 **Privournal is shipped and ready for Stardance! ** I’d love your feedback once you try it. . This project taught me something exams never did : . Working religiously on something with all your heart to make it real. . Thank you for reading all 13 devlogs ❤️ . ✨ See you in the next project ✨ | Project Complete | Ready to Submit | 🎉
##Devlog #14 - The Reviewer Arc 🥲 . Well… . The reviewer found some issues 😭 . So I went back and tested basically the ENTIRE project again. . While testing, I found and fixed a bunch of errors, especially in Advanced Encryption. I also added a lot of fallback checks throughout the code so Privournal doesn’t randomly decide to crash anymore 😭 . I also improved the decryption flow. . Earlier users had to select journals using IDs, now they can simply choose them by name, which feels way cleaner. . Another addition was a user guide in menu. I was short on time and it was a no brainer, so I used Claude to help generate the guide content and then integrated it into Privournal. The goal was simply to make the different encryption modes easier to understand :) . Apart from code changes, I also polished the project page, uploaded a sample flowchart, improved formatting and timing, and recorded a completely new asciinema demo PLUS I updated the README too. . Then came final testing, packaging, uploading the latest release, and requesting review again 🤞🏻 . Hopefully Privournal passes thru this time 😭 . Thank you : )
Devlog 15! It’s done. Phew. Finally, Privournal is DONE. Complete, everything’s perfect. In this final version I’ve made so many improvements! Instead of using time.sleep() to give pauses/time to copy the details, now the users can copy and paste encrypted text and its key without a time limit, and then they can simply press Enter to move ahead. I also made HUGE changes to the code. Earlier, the code used to run and at multiple steps ask for login/signup, which was fine but it was confusing. Now the first page is for login/signup, then the rest of the code flows smoothly accordingly. This restructuring required writing many parts of the code again and breaking a lot of functions into 2 parts. I also renamed some variables. I also worked on spacing and formatting. Now the user details are printed cleanly in a table. Overall, the code outputs are much more uniform. I made a new ASCII recording. It is yet to be updated on my GitHub, though. I’ve also published this new version on PyPI. If you had already installed Privournal, you can just update it. Now the main thing. I’m going to make a Website for Privournal where users wouldn’t need to install anything and can just go straight to encrypting or decrypting their journals. This version will still exist, though. It’ll be a rather Retro CLI version for people who like it this way. Phew. I’ll work on that now.
Devlog 16! — Okay, NOW It’s Done. 😭 Phew. I thought Privournal was finally finished, but while making the final ASCII recording, I found a bunch of small errors (Some was huge), inconsistencies and table issues that I had to fix. What I worked on: Added two new functions: Show Keys and View Account . Show Keys lets users view all their saved encryption keys. View Account displays their account details neatly in a table. Fixed several encryption and decryption bugs , including issues with journal selection, menu choices and input validation. Fixed problems with database values and journal data being handled incorrectly. Improved table formatting, spacing and alignment throughout the program. Cleaned up various small inconsistencies and errors that appeared during full end-to-end testing. Made the new ASCII recording . There was some old test data already stored, which was causing confusing duplicate entries and messing up the tables. After clearing that out, everything worked properly. And finally… The entire thing worked perfectly. 🎉 Most of this Devlog was about fixing the small things rather than adding huge new features, but it made Privournal more consistent and reliable.
Ships:
I built Privournal, a command-line journal encryptor that allows users to encrypt and decrypt journal entries locally on their own device. Because for me, someone reading my journal is a legit nightmare, and Privournal is something I can use to keep my digital journals secure. For me that’s a clear quality-of-life improvement : ) Write your journal anywhere (Notes, Notion, etc), paste it into Privournal, get back unreadable text, paste that back into your app. No journal content is ever stored - only the encryption key, and that too locally, if you make an account. To read it yourself you can again head to Privournal and decrypt it! It supports multiple encryption modes, including Basic Encryption, Advanced Encryption, Randomized Encryption, and Swiption - a dynamic encryption system that changes a letter’s cover after a particular number of occurrences, making it impossible to crack. The biggest challenge was implementing Swiption and its decryption logic. Managing occurrence tracking, rotating covers, JSON storage, database integration, and reliable decryption took multiple iterations and a lot of debugging. I also migrated the project from a MySQL-based architecture to SQLite after realizing a shared database conflicted with the goal of being fully offline and private. I’m most proud of turning an idea into a complete, usable package that can be installed through PyPI. I’ve never worked on something so religiously on something of this complexity. The project ended up being over 1400 lines of code and taught me a huge amount about python, databases, GitHub and packaging, debugging, and obviously logical thinking. I’ve never worked on something so religiously on something of this complexity. 3 Major Quality-of-Life Improvements : Zero-setup local encryption - Works completely offline with automatic SQLite database. No server or complicated config needed. Powerful & flexible encryption - Multiple modes + Swiption (dynamic rotating covers) makes it much stronger than simple substitution ciphers. Seamless workflow - Write anywhere -> encrypt -> paste back -> decrypt easily with account or manual key. Perfect for daily journaling : ) Try creating an account (or continue without an account), encrypting a journal entry, saving it, and then decrypting it again. Swiption and Randomised Modes are the most interesting and secure features to experiment with. To test it, run these on terminal : pip install privournal python import MainCode MainCode.start() Thank you so much for reading! : )
I made Privournal, a retro CLI application for private journaling and custom text encryption featuring basic ciphers, advanced encryption (Swiption, Randomised, Manual Modes Hehe), and new features like Show Keys and View Account. Pheww you’re gonna love this if you’ve people trying to read your journals 😭 The hardest part was restructuring the whole flow so as to make it less repetitive and cleaner , fixing CLI table alignment glitches, and honestly, if you saw my last ship you’d know that the Swiption feature I made gave me a pretty tough time, Lol. Though I’m really proud of creating a seamless terminal workflow and getting it published live on PyPI as well as GitHub, this is one of the few things I’ve worked on and completed in my life. To test it out, run pip install –upgrade privournal, and type privournal in your terminal, and try encrypting and immediately decrypting a short sentence with or without an account!...
|
1793105555.798836
|
1793191955.798836
|
|
17439
|
AeroGlass XAI by @saminsiddiqui | Stardance
|
saminsiddiqui
|
2
|
10.0
|
129
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T19:20:15Z", "hours": 1.0, "multiplier": 9.07, "payout": 8, "blessing": "neutral", "text": "AeroGlass XAI is a predictive maintenance and Explainable AI (XAI) dashboard built for the aerospace industry, analyzing turbofan engine degradation. At its core, the project utilizes a Bidirectional Long Short-Term Memory (BiLSTM) neural network trained on the NASA CMAPSS dataset to predict the Remaining Useful Life (RUL) of active engines. To ensure the model’s decisions are transparent for aviation technicians, the system integrates Temporal Attention mechanisms and Sensor-Level SHAP values to highlight exactly which telemetry sensors are driving the degradation predictions. Deployment Note for Shipwrights: The application is hosted on a dedicated Hack Club Nest Linux container to ensure instant, 24/7 uptime. While the core AI logic, data loading, and metric calculations (like the active fleet and critical engine counts) are processing perfectly, the Nest reverse proxy is currently blocking the dynamic JS imports for some of the heavier Plotly graphics. The structural AI implementation is fully functional under the hood!", "repo": "https://github.com/saminsiddiqui08-beep/AeroGlass-XAI", "demo": "https://saminsiddiqui.hackclub.app"}, {"ship_num": 2, "ts": "2026-06-18T15:26:14Z", "hours": 9.0, "multiplier": 13.41, "payout": 121, "blessing": "neutral", "text": "What I made: I made AeroGlass XAI which is an enterprise-grade predictive maintenance dashboard that forecasts aerospace engine failures using a custom Temporal Attention BiLSTM and Explainable AI (SHAP). The biggest challenge: Well, the biggest challenge to me was the streaming heavy, multi-dimensional tensor arrays in real-time without crashing Streamlit’s lightweight free-tier servers. I solved this by engineering a custom caching pipeline utilizing NumPy’s mmap_mode to read data directly from the disk which completely eliminated RAM bloat. What I’m proud of: Proving the fact that AI doesn’t have to be an uninterpretable “Black Box.” I’m proud of how the dashboard visually translates complex neural network weights into actionable, physical mechanical insights (e.g. isolating thermal stress vs. rotational wear) and calculates the exact financial ROI of those predictions. How to test it: Simply click “Try project”-no installation required! Use the sidebar to navigate to the Live Telemetry Simulator to watch the models race in real time or check out the Operational ROI Calculator. (Note: If the Streamlit server has been inactive, it may take ~30 seconds to wake up).", "repo": "https://github.com/saminsiddiqui08-beep/AeroGlass-XAI", "demo": "https://saminsiddiqui.hackclub.app"}]...
|
[{"post_id": 23027, "ts": "202 [{"post_id": 23027, "ts": "2026-07-05T19:14:46Z", "hours": 0.8769, "text": "Migrated AeroGlass XAI to a Dedicated Server (Hack Club Nest) The Nest server uses an aggressive reverse proxy that is currently rate-limiting some of the dynamic JavaScript chunks required to render the heavy Plotly/SHAP visualizations."}, {"post_id": 11331, "ts": "2026-06-18T15:22:20Z", "hours": 2.3317, "text": "I spent this session getting AeroGlass XAI completely ready. I successfully deployed the dashboard to Streamlit Community Cloud and handled some caching optimizations for the heavy SHAP tensors using mmap_mode. The project is officially live!"}, {"post_id": 10595, "ts": "2026-06-17T12:45:12Z", "hours": 3.1981, "text": "The core ML architecture is done, so my final focus was transforming AeroGlass XAI into a production-ready enterprise tool. The ‘GO / NO-GO’ Pre-Flight Briefing: I built a new operational dashboard that allows dispatchers to select the specific port and starboard engines mounted to an airframe. The app runs a real-time check against the Attention BiLSTM. If the RUL dips below the 30-cycle threshold, the UI triggers a dynamic HTML/CSS ‘NO-GO’ lockdown, pulling the top 3 thermodynamic stressors from the SHAP array to justify the grounding to the mechanics. Financial Interactivity (The ROI Sandbox): Predictive maintenance is only useful if it saves money. I upgraded the Operational ROI Calculator with a dynamic slider that simulates the ‘AI False Negative Rate.’ This stress-tests the financial model in real-time. If you push the AI’s error rate too high, the dynamic metrics instantly flip from Cyan (‘Millions Saved’) to Red (‘Millions Lost’) The finish line is near the corner. It will be ready to ship soon!!!"}, {"post_id": 10192, "ts": "2026-06-16T20:03:15Z", "hours": 2.3322, "text": "The core engine of AeroGlass XAI is now fully operational. The goal of this project wasn’t just to predict jet engine failure but to force the neural network to explain its reasoning to human engineers. Over the last couple of hours, I successfully wired the backend prediction arrays into a dynamic, cycle by cycle Explainable AI (XAI) interface using Streamlit and Matplotlib. The Breakthrough: I caught the BiLSTM doing something fascinating while I was building the visualizer. Near the end of an engine’s life, the model was aggressively penalizing the Remaining Useful Life (RUL) based on Core Speed (S9) but simultaneously extending it based on HPC Static Pressure (S11). Because speed and pressure are physically correlated (Multicollinearity), the AI was mathematically ‘balancing’ its weights. By wrapping the SHAP values in a color-coded UI (Red for Core Thermodynamic, Blue for Mechanical), the dashboard immediately exposed this AI logic flaw to the human eye. This is exactly why safety critical aerospace requires ‘Glass Box’ interpretability."}, {"post_id": 9964, "ts": "2026-06-16T14:28:36Z", "hours": 1.2103, "text": "I’m currently building AeroGlass XAI, a web-based command center for jet engine maintenance. While I have a robust backend foundation using the NASA CMAPSS FD004 dataset, my focus for this hackathon is the “Glass Box” transition. I am taking pre-computed BiLSTM predictions and SHAP arrays and wrapping them into a production-ready Streamlit architecture. I have just finalized a scalable, multi-file directory structure to ensure this isn’t just a script, but an enterprise-grade application. I’ve also implemented the native dark-mode aerospace aesthetic in the configuration. My aim is to turn static math into a “Live Telemetry” simulator and an interactive XAI audit tool where users can drill down into thermodynamic sensor impacts in real-time."}]...
|
Title: AeroGlass XAI by @saminsiddiqui | Stardance Title: AeroGlass XAI by @saminsiddiqui | Stardance
Devlogs:
I’m currently building AeroGlass XAI, a web-based command center for jet engine maintenance. While I have a robust backend foundation using the NASA CMAPSS FD004 dataset, my focus for this hackathon is the “Glass Box” transition. I am taking pre-computed BiLSTM predictions and SHAP arrays and wrapping them into a production-ready Streamlit architecture. I have just finalized a scalable, multi-file directory structure to ensure this isn’t just a script, but an enterprise-grade application. I’ve also implemented the native dark-mode aerospace aesthetic in the configuration. My aim is to turn static math into a “Live Telemetry” simulator and an interactive XAI audit tool where users can drill down into thermodynamic sensor impacts in real-time.
The core engine of AeroGlass XAI is now fully operational. The goal of this project wasn’t just to predict jet engine failure but to force the neural network to explain its reasoning to human engineers. Over the last couple of hours, I successfully wired the backend prediction arrays into a dynamic, cycle by cycle Explainable AI (XAI) interface using Streamlit and Matplotlib. The Breakthrough: I caught the BiLSTM doing something fascinating while I was building the visualizer. Near the end of an engine’s life, the model was aggressively penalizing the Remaining Useful Life (RUL) based on Core Speed (S9) but simultaneously extending it based on HPC Static Pressure (S11). Because speed and pressure are physically correlated (Multicollinearity), the AI was mathematically ‘balancing’ its weights. By wrapping the SHAP values in a color-coded UI (Red for Core Thermodynamic, Blue for Mechanical), the dashboard immediately exposed this AI logic flaw to the human eye. This is exactly why safety critical aerospace requires ‘Glass Box’ interpretability.
The core ML architecture is done, so my final focus was transforming AeroGlass XAI into a production-ready enterprise tool. The ‘GO / NO-GO’ Pre-Flight Briefing: I built a new operational dashboard that allows dispatchers to select the specific port and starboard engines mounted to an airframe. The app runs a real-time check against the Attention BiLSTM. If the RUL dips below the 30-cycle threshold, the UI triggers a dynamic HTML/CSS ‘NO-GO’ lockdown, pulling the top 3 thermodynamic stressors from the SHAP array to justify the grounding to the mechanics. Financial Interactivity (The ROI Sandbox): Predictive maintenance is only useful if it saves money. I upgraded the Operational ROI Calculator with a dynamic slider that simulates the ‘AI False Negative Rate.’ This stress-tests the financial model in real-time. If you push the AI’s error rate too high, the dynamic metrics instantly flip from Cyan (‘Millions Saved’) to Red (‘Millions Lost’) The finish line is near the corner. It will be ready to ship soon!!!
I spent this session getting AeroGlass XAI completely ready. I successfully deployed the dashboard to Streamlit Community Cloud and handled some caching optimizations for the heavy SHAP tensors using mmap_mode. The project is officially live!
Migrated AeroGlass XAI to a Dedicated Server (Hack Club Nest) The Nest server uses an aggressive reverse proxy that is currently rate-limiting some of the dynamic JavaScript chunks required to render the heavy Plotly/SHAP visualizations.
Ships:
What I made: I made AeroGlass XAI which is an enterprise-grade predictive maintenance dashboard that forecasts aerospace engine failures using a custom Temporal Attention BiLSTM and Explainable AI (SHAP). The biggest challenge: Well, the biggest challenge to me was the streaming heavy, multi-dimensional tensor arrays in real-time without crashing Streamlit’s lightweight free-tier servers. I solved this by engineering a custom caching pipeline utilizing NumPy’s mmap_mode to read data directly from the disk which completely eliminated RAM bloat. What I’m proud of: Proving the fact that AI doesn’t have to be an uninterpretable “Black Box.” I’m proud of how the dashboard visually translates complex neural network weights into actionable, physical mechanical insights (e.g. isolating thermal stress vs. rotational wear) and calculates the exact financial ROI of those predictions. How to test it: Simply click “Try project”-no installation required! Use the sidebar to navigate to the Live Telemetry Simulator to watch the models race in real time or check out the Operational ROI Calculator. (Note: If the Streamlit server has been inactive, it may take ~30 seconds to wake up).
AeroGlass XAI is a predictive maintenance and Explainable AI (XAI) dashboard built for the aerospace industry, analyzing turbofan engine degradation. At its core, the project utilizes a Bidirectional Long Short-Term Memory (BiLSTM) neural network trained on the NASA CMAPSS dataset to predict the Remaining Useful Life (RUL) of active engines. To ensure the model’s decisions are transparent for aviation technicians, the system integrates Temporal Attention mechanisms and Sensor-Level SHAP values to highlight exactly which telemetry sensors are driving the degradation predictions. Deployment Note for Shipwrights: The application is hosted on a dedicated Hack Club Nest Linux container to ensure instant, 24/7 uptime. While the core AI logic, data loading, and metric calculations (like the active fleet and critical engine counts) are processing perfectly, the Nest reverse proxy is currently blocking the dynamic JS imports for some of the heavier Plotly graphics. The structural AI implementation is fully functional under the hood!...
|
1792997444.9400043
|
1793083844.9400043
|
|
17509
|
RandOS by @hpeen | Stardance
|
hpeen
|
2
|
8.0
|
20
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-04T18:04:35Z", "hours": 1.0, "multiplier": 17.68, "payout": 20, "blessing": "neutral", "text": "I added new features to my WebOS called RandOS. The new additions are a terminal, a trophy app and a Gollum inspired critter that comes to annoy the user.", "repo": "https://github.com/Hpeen/RandOS", "demo": "https://hpeen.github.io/RandOS/"}, {"ship_num": 2, "ts": "2026-06-14T16:43:03Z", "hours": 7.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a webOS with the gimmick that everything is random, from the wallpaper to the apps themselves called RandOS (randos, get it?). There are plenty of features to convey the chaos, like quick-time events and reshuffles (chaos time as I call them). I am pretty new to using AI to help build a project, but I managed to get a handle on how to utilize it. I do enjoy the eastereggs and fun minigames that I made.", "repo": "https://github.com/Hpeen/RandOS", "demo": "https://hpeen.github.io/RandOS/"}]...
|
[{"post_id": 22290, "ts": "202 [{"post_id": 22290, "ts": "2026-07-04T18:00:20Z", "hours": 1.1492, "text": "For part two of WebOS I wanted a few more actual features, not just more ways to annoy you, so there’s three new things, one being a lil guy. First up, there’s a terminal now. It’s a proper little retro shell, and like everything else in RandOS it rerolls itself every time you open it: new prompt, new monospace font, new ink colour (sometimes that classic phosphor green, sometimes it borrows the desktop’s accent). It’s got the normal stuff, help and echo and whoami and fortune, but the fun part is it can actually drive the OS. you can type apps to see everything installed, open paint to launch it, windows to list what’s open, close all to nuke them and it keeps no secrets, everything’s right there in help. That includes the dumb stuff like matrix drops digital rain over the window, hack runs a fake “access granted” intrusion sequence, glitch shudders the whole thing, panic fakes a kernel panic with a red flash, party throws confetti. and boo . We don’t talk about boo… The second thing is trophies. There’s an achievements system wired through the whole os now, backed by localStorage so they actually stick between visits, and a little toast slides in when you unlock one. there’s a trophies app to see what you’ve got and what you’re missing. you earn them by doing the things, surviving the backrooms, winning five quick-time events, opening every app, poking the gremlin, finding the secret terminal command. it quietly ties all the scattered easter eggs together into something you can actually see you found. And then the gremlin. He started this round as a small critter that scurried in and shoved your desktop icons around. He makes little noises coming and going. and the main event: he poses a riddle. four choices, two tries and you cannot get rid of him any other way. Clicking him just gets you a hiss. No waiting him out either, he’ll stand there until you answer. Guess right and he shrieks and flees, misses both tries and he slinks off muttering. He also shows up a little more often than before, because of course he does.."}, {"post_id": 8793, "ts": "2026-06-14T16:29:18Z", "hours": 1.9461, "text": "added some more apps! there are some basic ones like paint and notepad … just a little more chaotic :D some other apps I added to be on theme are a random quote/joke generator, a sound board, a suggestion box and a wheel of names (pretty tuff). to add to the CHAOS there are now quick-time events that close all your windows if you fail to complete them :P P.S. don’t spam the shuffle button (might noclip)"}, {"post_id": 8142, "ts": "2026-06-13T16:12:29Z", "hours": 2.5156, "text": "spent some time on this, but I upped the UI. everything has random effects / themes, the wallpapers are full of movement and the cursor is a different sprite each shuffle. also I added a boot animation with a jack in the box…neat. there’s a chaos shuffle event now that happens every ~3 mins. you get a 3 sec heads up and then EVERYTHING gets randomized, so gl trying to do something lol next up: make the OS more interactive with more apps and quick-time events (kinda tuff). Also might want to add other basic apps… ;)"}, {"post_id": 7927, "ts": "2026-06-13T06:52:44Z", "hours": 2.0994, "text": "so my first stardust project is a webos, but making a normal one sounded boring so i made randos. the whole gimmick: everything is randomized. open the calculator and it looks one way, close it, open it again and it’s totally different colors, different font, different vibe. nothing looks the same twice. right now it’s got the basics. windows you can drag around, a taskbar, and a handful of apps: a calculator that actually does math, a clock that’s sometimes digital, sometimes an analog dial, sometimes just spells the time out in words, a calendar, and a randomizer that flips coins, rolls dice, or spits out a number from 1 to 100. plus a shuffle button that re-rolls the entire desktop theme whenever you feel like it. it’s pretty rough rn ngl. the ui is a little janky and the background is just a flat gradient. but it runs, it’s online, and there’s no login so anyone can poke at it at https://hpeen.github.io/RandOS/ . next up: make it look less rough, give the background some actual patterns, and add a couple things i’ve been cooking (a lot more chaotic </3)."}]...
|
Title: RandOS by @hpeen | Stardance
Devlogs:
so m Title: RandOS by @hpeen | Stardance
Devlogs:
so my first stardust project is a webos, but making a normal one sounded boring so i made randos. the whole gimmick: everything is randomized. open the calculator and it looks one way, close it, open it again and it’s totally different colors, different font, different vibe. nothing looks the same twice. right now it’s got the basics. windows you can drag around, a taskbar, and a handful of apps: a calculator that actually does math, a clock that’s sometimes digital, sometimes an analog dial, sometimes just spells the time out in words, a calendar, and a randomizer that flips coins, rolls dice, or spits out a number from 1 to 100. plus a shuffle button that re-rolls the entire desktop theme whenever you feel like it. it’s pretty rough rn ngl. the ui is a little janky and the background is just a flat gradient. but it runs, it’s online, and there’s no login so anyone can poke at it at https://hpeen.github.io/RandOS/ . next up: make it look less rough, give the background some actual patterns, and add a couple things i’ve been cooking (a lot more chaotic </3).
spent some time on this, but I upped the UI. everything has random effects / themes, the wallpapers are full of movement and the cursor is a different sprite each shuffle. also I added a boot animation with a jack in the box…neat. there’s a chaos shuffle event now that happens every ~3 mins. you get a 3 sec heads up and then EVERYTHING gets randomized, so gl trying to do something lol next up: make the OS more interactive with more apps and quick-time events (kinda tuff). Also might want to add other basic apps… ;)
added some more apps! there are some basic ones like paint and notepad … just a little more chaotic :D some other apps I added to be on theme are a random quote/joke generator, a sound board, a suggestion box and a wheel of names (pretty tuff). to add to the CHAOS there are now quick-time events that close all your windows if you fail to complete them :P P.S. don’t spam the shuffle button (might noclip)
For part two of WebOS I wanted a few more actual features, not just more ways to annoy you, so there’s three new things, one being a lil guy. First up, there’s a terminal now. It’s a proper little retro shell, and like everything else in RandOS it rerolls itself every time you open it: new prompt, new monospace font, new ink colour (sometimes that classic phosphor green, sometimes it borrows the desktop’s accent). It’s got the normal stuff, help and echo and whoami and fortune, but the fun part is it can actually drive the OS. you can type apps to see everything installed, open paint to launch it, windows to list what’s open, close all to nuke them and it keeps no secrets, everything’s right there in help. That includes the dumb stuff like matrix drops digital rain over the window, hack runs a fake “access granted” intrusion sequence, glitch shudders the whole thing, panic fakes a kernel panic with a red flash, party throws confetti. and boo . We don’t talk about boo… The second thing is trophies. There’s an achievements system wired through the whole os now, backed by localStorage so they actually stick between visits, and a little toast slides in when you unlock one. there’s a trophies app to see what you’ve got and what you’re missing. you earn them by doing the things, surviving the backrooms, winning five quick-time events, opening every app, poking the gremlin, finding the secret terminal command. it quietly ties all the scattered easter eggs together into something you can actually see you found. And then the gremlin. He started this round as a small critter that scurried in and shoved your desktop icons around. He makes little noises coming and going. and the main event: he poses a riddle. four choices, two tries and you cannot get rid of him any other way. Clicking him just gets you a hiss. No waiting him out either, he’ll stand there until you answer. Guess right and he shrieks and flees, misses both tries and he slinks off muttering. He also shows up a little more often than before, because of course he does..
Ships:
I made a webOS with the gimmick that everything is random, from the wallpaper to the apps themselves called RandOS (randos, get it?). There are plenty of features to convey the chaos, like quick-time events and reshuffles (chaos time as I call them). I am pretty new to using AI to help build a project, but I managed to get a handle on how to utilize it. I do enjoy the eastereggs and fun minigames that I made.
I added new features to my WebOS called RandOS. The new additions are a terminal, a trophy app and a Gollum inspired critter that comes to annoy the user....
|
1793083654.2785213
|
1793170054.2785213
|
|
17558
|
WinDurango by @Rodrigo_Todescatto2010 | Stardance
|
Rodrigo_Todescatto2010
|
2
|
84.0
|
1594
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T17:43:22Z", "hours": 71.0, "multiplier": 19.95, "payout": 1355, "blessing": "neutral", "text": "During the meanwhile, I’ve been working with mostly audio and support for other games.", "repo": "https://github.com/WinDurango/WinDurango", "demo": "https://github.com/WinDurango/WinDurango/actions"}, {"ship_num": 2, "ts": "2026-06-15T19:54:34Z", "hours": 13.0, "multiplier": 18.65, "payout": 239, "blessing": "neutral", "text": "Hey there! This is WinDurango, an Xbox One translation layer (you can call it a high level emulator too if you want…) for Windows 10/11. Currently, support for games such as Forza Horizon 2, Forza Motorsport 5, Halo 5 and others is being actively worked on, while some few others like Minecraft: Xbox One Edition (older versions), Sonic Mania and LIMBO are fully playable! Note that I’m not the only developer in this project (I work on rendering/audio mostly and WinRT a few times), as @dexrn (works mostly on the GitHub/Social Media management part) and @CT5 (works mostly on the WinRT part). (screenshot from Forza Motorsport 5 with WinDurango in ForzaVista mode, showing the car interior).", "repo": "https://github.com/WinDurango/WinDurango", "demo": "https://github.com/WinDurango/WinDurango/actions"}]...
|
[{"post_id": 66761, "ts": "202 [{"post_id": 66761, "ts": "2026-09-12T17:28:09Z", "hours": 9.845, "text": "Quick update: Progress on audio with Forza Horizon 2! It now stutters way less. (Broken textures because I’m still debugging some stuff!)"}, {"post_id": 54171, "ts": "2026-08-25T01:05:49Z", "hours": 2.115, "text": "Great news: Thanks to RSantila, audio is now in the works for Forza and other games that use the ACP! (games that use Wwise or FMOD for example) For example, here’s Forza Horizon 2 with music in the background (there’s no audio at all without ACP processing, it’s also kinda glitchy because it’s being processed and decoded)"}, {"post_id": 47218, "ts": "2026-08-15T00:04:26Z", "hours": 7.5353, "text": "Great news: Forza Horizon 2 finally gets to the title screen!"}, {"post_id": 44010, "ts": "2026-08-09T14:38:36Z", "hours": 2.8606, "text": "Another quick update: Forza Horizon 3 now boots! (Might require DXVK!)"}, {"post_id": 39006, "ts": "2026-08-01T17:28:34Z", "hours": 5.3114, "text": "Another quick update: Peggle 2 is now playable!"}, {"post_id": 37865, "ts": "2026-07-30T20:47:12Z", "hours": 3.3136, "text": "Hey! Small update: The Crew boots!"}, {"post_id": 35493, "ts": "2026-07-26T23:25:10Z", "hours": 1.4122, "text": "Hey there! Little update: Destiny now boots!"}, {"post_id": 35456, "ts": "2026-07-26T21:43:25Z", "hours": 9.0853, "text": "Hey! Has been quite a while since the last devlog but here are some changes and news: Halo 5: Guardians is very close to booting! It still just needs some fixes with memory allocation. FIFA 15 is another game close to booting! Occultic;Nine now boots! Overall, I’m still doing some work that I will hopefully be able to share better in the next few days :)"}, {"post_id": 27986, "ts": "2026-07-13T23:06:36Z", "hours": 6.9742, "text": "Hi! I’m back with some stuff: Happy Dungeons (an console exclusive game) now boots with WinDurango! I’m working very hard at the moment on Forza Horizon 2 and Forza Motorsport 5 (which are my goals…) and I hope to have new stuff to share about them soon! And… That’s it for today, there isn’t anything else to say 😭"}, {"post_id": 24994, "ts": "2026-07-08T21:48:51Z", "hours": 9.4822, "text": "Hey there! It has been a few days since the last devlog (again) but we are still cooking some stuff! Another Minecraft: Xbox One Edition version is now playable! The version is 1.22.904.0/CU34 or earlier? Not sure about the exact CU. Another playable one is 1.18.781.0! While this one can’t be shown yet (or heard… there’s nothing!), I’m heavily working on emulating (I think we could put it like that?) the Xbox One’s ACP (Audio Co-Processor), which is used for decoding XMA (Xbox Media Audio) and processing audio in general (heavily used by FMOD and Wwise). While some games don’t depend on it specifically (such as Minecraft, LIMBO, Sonic Mania etc), the majority of the games depend on it (Unity, Unreal Engine and Cryengine use it), and if you don’t emulate it, most of the games will basically either hang at some point waiting for audio to be processed (e.g. Forza, Happy Wars, Halo 5) and won’t have audio at all. This is the part I’m focusing the most currently and I’m very stomped on it, which is also why there isn’t much progress going on, but hopefully I get some progress with it to share with y’all! That’s it for today, I really hope to have new stuff to share with everyone soon! But for now, that’s pretty much it… 😭"}, {"post_id": 19667, "ts": "2026-07-01T01:29:49Z", "hours": 12.6392, "text": "Hello there! Has been a while since my last devlog (a few days… long ago, huh?), but that does not mean there’s no progress going on, because there is! Draw Bundles are currently being worked on, which means more geometry rendering for some games! It still needs some optimization (mainly on RAM usage) and placement update still needs a few tweaks, but welp, at least we are getting some progress overall! Minecraft: Story Mode now boots! And it looks very broken I know and I’m investigating what can be done for fix that, but as far as I’ve seen, this is happening because of the game updating buffers with UpdateSubresource1 and passing what seems like (not sure if that’s actually the case!) constant offsets in pSrcBox + passing passing unaligned constants when setting a constant buffer with SetConstantBuffers1 , which was actually allowed back in D3D11.X, Xbox’s D3D11 version. Note that Minecraft: Story Mode isn’t the only game that does that, there are some games such as Forza Horizon 2 that also do so! And believe me, there are way more trickeries that were allowed and could be done back in D3D11.X… That’s it for today! I don’t have anything else to say and this is all the progress I got, I’ve been quite busy with some school exams but they will end soon (in 2 days) and hopefully I can get some more progress to share here! See ya! :)"}, {"post_id": 9024, "ts": "2026-06-15T01:43:09Z", "hours": 6.4064, "text": "Hello again! Today I’ve made some progress with 3D rendering with Placement Resources and got some 3D stuff in Forza rendering! Most of the scenario and the track won’t really render at all because I haven’t implemented Draw Bundles yet, but I plan on working on it soon! That’s it for today, hope yall like it :)"}, {"post_id": 8501, "ts": "2026-06-14T04:12:23Z", "hours": 5.2733, "text": "Hello again! Today I’ve made some progress with tiled textures/placement resources (a Xbox One’s D3D11.X exclusive feature similar to placed resources in D3D12), I’m still working on it but results are already quite satisfactory… The first screenshot shows how the texture looks now and the second one shows how it looked like before, the third one is an extra screenshot from the game title screen! (it also looked like a mess before!) See ya! :)"}, {"post_id": 7772, "ts": "2026-06-13T00:01:01Z", "hours": 1.6606, "text": "Hello World! This is WinDurango, a Xbox One Translation Layer for Windows 10/11. Today I got Forza Motorsport 6 booting. It didn’t require much thankfully but I noticed our ID3D11DeviceX vtable might be wrong for it’s D3D11.X version. Right after the Turn 10/Microsoft Studios intro (bink video), the game hangs on a black screen due to unimplemented audio things (ACP commands). More updates to come in the next days from other games as well! :)"}]...
|
Title: WinDurango by @Rodrigo_Todescatto2010 | Sta Title: WinDurango by @Rodrigo_Todescatto2010 | Stardance
Devlogs:
Hello World! This is WinDurango, a Xbox One Translation Layer for Windows 10/11. Today I got Forza Motorsport 6 booting. It didn’t require much thankfully but I noticed our ID3D11DeviceX vtable might be wrong for it’s D3D11.X version. Right after the Turn 10/Microsoft Studios intro (bink video), the game hangs on a black screen due to unimplemented audio things (ACP commands). More updates to come in the next days from other games as well! :)
Hello again! Today I’ve made some progress with tiled textures/placement resources (a Xbox One’s D3D11.X exclusive feature similar to placed resources in D3D12), I’m still working on it but results are already quite satisfactory… The first screenshot shows how the texture looks now and the second one shows how it looked like before, the third one is an extra screenshot from the game title screen! (it also looked like a mess before!) See ya! :)
Hello again! Today I’ve made some progress with 3D rendering with Placement Resources and got some 3D stuff in Forza rendering! Most of the scenario and the track won’t really render at all because I haven’t implemented Draw Bundles yet, but I plan on working on it soon! That’s it for today, hope yall like it :)
Hello there! Has been a while since my last devlog (a few days… long ago, huh?), but that does not mean there’s no progress going on, because there is! Draw Bundles are currently being worked on, which means more geometry rendering for some games! It still needs some optimization (mainly on RAM usage) and placement update still needs a few tweaks, but welp, at least we are getting some progress overall! Minecraft: Story Mode now boots! And it looks very broken I know and I’m investigating what can be done for fix that, but as far as I’ve seen, this is happening because of the game updating buffers with UpdateSubresource1 and passing what seems like (not sure if that’s actually the case!) constant offsets in pSrcBox + passing passing unaligned constants when setting a constant buffer with SetConstantBuffers1 , which was actually allowed back in D3D11.X, Xbox’s D3D11 version. Note that Minecraft: Story Mode isn’t the only game that does that, there are some games such as Forza Horizon 2 that also do so! And believe me, there are way more trickeries that were allowed and could be done back in D3D11.X… That’s it for today! I don’t have anything else to say and this is all the progress I got, I’ve been quite busy with some school exams but they will end soon (in 2 days) and hopefully I can get some more progress to share here! See ya! :)
Hey there! It has been a few days since the last devlog (again) but we are still cooking some stuff! Another Minecraft: Xbox One Edition version is now playable! The version is 1.22.904.0/CU34 or earlier? Not sure about the exact CU. Another playable one is 1.18.781.0! While this one can’t be shown yet (or heard… there’s nothing!), I’m heavily working on emulating (I think we could put it like that?) the Xbox One’s ACP (Audio Co-Processor), which is used for decoding XMA (Xbox Media Audio) and processing audio in general (heavily used by FMOD and Wwise). While some games don’t depend on it specifically (such as Minecraft, LIMBO, Sonic Mania etc), the majority of the games depend on it (Unity, Unreal Engine and Cryengine use it), and if you don’t emulate it, most of the games will basically either hang at some point waiting for audio to be processed (e.g. Forza, Happy Wars, Halo 5) and won’t have audio at all. This is the part I’m focusing the most currently and I’m very stomped on it, which is also why there isn’t much progress going on, but hopefully I get some progress with it to share with y’all! That’s it for today, I really hope to have new stuff to share with everyone soon! But for now, that’s pretty much it… 😭
Hi! I’m back with some stuff: Happy Dungeons (an console exclusive game) now boots with WinDurango! I’m working very hard at the moment on Forza Horizon 2 and Forza Motorsport 5 (which are my goals…) and I hope to have new stuff to share about them soon! And… That’s it for today, there isn’t anything else to say 😭
Hey! Has been quite a while since the last devlog but here are some changes and news: Halo 5: Guardians is very close to booting! It still just needs some fixes with memory allocation. FIFA 15 is another game close to booting! Occultic;Nine now boots! Overall, I’m still doing some work that I will hopefully be able to share better in the next few days :)
Hey there! Little update: Destiny now boots!
Hey! Small update: The Crew boots!
Another quick update: Peggle 2 is now playable!
Another quick update: Forza Horizon 3 now boots! (Might require DXVK!)
Great news: Forza Horizon 2 finally gets to the title screen!
Great news: Thanks to RSantila, audio is now in the works for Forza and other games that use the ACP! (games that use Wwise or FMOD for example) For example, here’s Forza Horizon 2 with music in the background (there’s no audio at all without ACP processing, it’s also kinda glitchy because it’s being processed and decoded)
Quick update: Progress on audio with Forza Horizon 2! It now stutters way less. (Broken textures because I’m still debugging some stuff!)
Ships:
Hey there! This is WinDurango, an Xbox One translation layer (you can call it a high level emulator too if you want…) for Windows 10/11. Currently, support for games such as Forza Horizon 2, Forza Motorsport 5, Halo 5 and others is being actively worked on, while some few others like Minecraft: Xbox One Edition (older versions), Sonic Mania and LIMBO are fully playable! Note that I’m not the only developer in this project (I work on rendering/audio mostly and WinRT a few times), as @dexrn (works mostly on the GitHub/Social Media management part) and @CT5 (works mostly on the WinRT part). (screenshot from Forza Motorsport 5 with WinDurango in ForzaVista mode, showing the car interior).
During the meanwhile, I’ve been working with mostly audio and support for other games....
|
1793094582.882069
|
1793180982.882069
|
|
17674
|
Orion Bot by @KoushikT | Stardance
|
KoushikT
|
2
|
6.0
|
18
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T23:03:57Z", "hours": 1.0, "multiplier": 3.61, "payout": 4, "blessing": "neutral", "text": "I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and what it is like on Mars right now. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars. This is my first project in the organization, and my first ever time using slack. It runs on Nest, with code I made on VSCODE. I wish you all love it! Thanks!", "repo": "https://github.com/Koushik919-del/orionbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}, {"ship_num": 2, "ts": "2026-06-21T18:09:43Z", "hours": 5.0, "multiplier": 2.63, "payout": 14, "blessing": "neutral", "text": "I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and pictures from the Mars rover. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars.", "repo": "https://github.com/Koushik919-del/orionbot", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354"}]...
|
[{"post_id": 24423, "ts": "202 [{"post_id": 24423, "ts": "2026-07-07T23:28:45Z", "hours": 0.7861, "text": "Made it so it doesn’t have any more errors or not too much loading time with nest"}, {"post_id": 14564, "ts": "2026-06-23T18:48:06Z", "hours": 0.3, "text": "Fixed up a few problems like the README. And make sure not to use it all channels. Only use it DMs to yourself or in the bot-spam."}, {"post_id": 12710, "ts": "2026-06-20T19:11:46Z", "hours": 1.9322, "text": "Finally finished, go to Slack now to test it out. the commands are /mars, /apod, and /iss!"}, {"post_id": 11420, "ts": "2026-06-18T18:01:59Z", "hours": 1.0906, "text": "I am now adding the feature where we can see the weather on Mars."}, {"post_id": 10229, "ts": "2026-06-16T21:12:45Z", "hours": 2.25, "text": "This is like a Slack Bot that will help you know where the ISS is, and also how Mars’ weather is. It still is in progress."}]...
|
Title: Orion Bot by @KoushikT | Stardance
Devlogs Title: Orion Bot by @KoushikT | Stardance
Devlogs:
This is like a Slack Bot that will help you know where the ISS is, and also how Mars’ weather is. It still is in progress.
I am now adding the feature where we can see the weather on Mars.
Finally finished, go to Slack now to test it out. the commands are /mars, /apod, and /iss!
Fixed up a few problems like the README. And make sure not to use it all channels. Only use it DMs to yourself or in the bot-spam.
Made it so it doesn’t have any more errors or not too much loading time with nest
Ships:
I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and pictures from the Mars rover. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars.
I made a Slack Bot where we can track where the ISS is, NASA’s picture of the day, and what it is like on Mars right now. A challenging part of this project is trying to keep it live 24/7. You can test it now by going into Slack and typing these commands: /iss, /apod, /mars. This is my first project in the organization, and my first ever time using slack. It runs on Nest, with code I made on VSCODE. I wish you all love it! Thanks!...
|
1793105519.5490172
|
1793191919.5490172
|
|
17687
|
Extinction by @v81d | Stardance
|
v81d
|
2
|
16.0
|
126
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-03T18:42:16Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Extinction is now much more customizable with the newly added “Parameters” tab! The entire classification system has been reworked to be more memory-efficient and accurate in general, so Extinction should be able to block AI-generated articles much more effectively now. It was quite brain-damaging (to be honest) trying to figure out what changes I could possibly make to improve such a simple algorithm, but I ended up gaining a lot more knowledge about logistic functions (and sigmoids in general) and how useful math can be when making something like this. It was worth it. I also fixed several issues along the way while updating the options page. As I mentioned in my last devlog, there was a signal calibration logic error along with a potential division-by-zero error in calculating the fluency score of a text. Now with those pesky bugs out of the way, I can actually focus on improving the things that really matter for this project, such as keeping it fast and lightweight . Yes, the size of the package is really only around 100 KB (which is pretty lightweight), but some features still feel a little over-complicated. I enjoy looking at my code and feeling proud about all the new things I’ve learned, but, at the end of the day, the whole point of this extension is to tackle the problems most other AI detectors couldn’t: being easy on memory and all that. I do not plan on making Extinction ML-based. That defeats the whole purpose and will most certainly kill this experiment (or rather a proof-of-concept). That said, the main goal of the next ship will most likely be making some optimizations for both the UI and the detection system. As for this ship, most of the changes are related to the new options tab. To be fully transparent, the default values for these fields were NOT selected by a machine/algorithm, since that would probably hit the gray area of “machine learning.” All of the defaults were chosen by me, a real person! Since they are all based on observation rather than extreme experimentation (which I cannot carry out anyway), accuracy may vary depending on what you’re reading. If anyone happens to discover a better combination, feel free to let me know or make a pull request! Anyway, that wraps it up for my second ship. If you’d like to try out Extinction, you can install it officially from the Mozilla Add-ons store (if you’re on Firefox or a Firefox-based browser) OR build it from source using the GitHub repo. Unfortunately, Extinction will not be available on the Chrome Web Store because of the $5 registration fee (that I can’t pay right now). Things aren’t very appealing for Safari users either, since Apple places a $99/year registration fee (which is arguably a total rip-off that I’m not willing to give into at all). For now, Chrome and Safari users can stick to building and installing from source. Good news for Chrome users though: custom extensions don’t seem to be ephemeral or suddenly disappear the moment you exit the app, so once you’ve built it, you’ll be good until the next release. Thank you for checking out Extinction. I hope it’s as useful to you as it is to me! :)", "repo": "https://github.com/v81d/extinction", "demo": "https://addons.mozilla.org/en-US/firefox/addon/extinction"}, {"ship_num": 2, "ts": "2026-06-27T19:54:16Z", "hours": 10.0, "multiplier": 15.86, "payout": 126, "blessing": "neutral", "text": "Extinction is an ultra-lightweight AI content blocker browser extension powered by regex-based pattern matching and linguistic analysis. But why block AI? Well, the answer is quite simple. The World Wide Web is becoming increasingly plagued with low-quality AI-generated content. The content AI produces is often misleading or blatantly incorrect. While some may not particularly see this is an issue, many people wish to escape from or completely hide such content. What makes Extinction any different? Traditional AI content detectors rely on machine learning and heavy analysis to product a result. Besides the irony of using such a mechanism, these AI detectors are often less trustworthy when it comes to respecting user privacy. Since the content is fed into an external API, users cannot reliably confirm that the data they send is kept confidential. Extinction, on the other hand, does not send any data to an external endpoint; all analyses are done locally, meaning there is no compromise in user privacy. It does not use machine-learning to classify text, but rather simple pattern matching with regular expressions (regexes) paired with sentence variation analyses. Keep in mind that Extinction is not (and will never be) 100% foolproof, as with all AI detectors in general. There will always be false positives and false negatives, but we will try our best to improve Extinction over time and make it as accurate as possible without sacrificing user privacy or Extinction’s quality of being lightweight. The extension comes with an exclusion list to prevent trusted sites from being flagged.", "repo": "https://github.com/v81d/extinction", "demo": "https://addons.mozilla.org/en-US/firefox/addon/extinction"}]...
|
[{"post_id": 21531, "ts": "202 [{"post_id": 21531, "ts": "2026-07-03T15:31:14Z", "hours": 0.6372, "text": "Expanded the options page even further! You can now basically customize every single parameter that Extinction’s underlying system uses. Funny thing, I actually caught two bugs when adding the signal calibrator and lexical diversity / burstiness weight fields. The first bug: the signal calibration math actually didn’t allow for decimal calibrators because it was doing plain exponentiation (meaning negative signals would fail in that step). To fix this, I added a very basic change that would simply preserve the sign of the signal during calibration. That way, negative signals stay negative and positive signals stay positive. The second bug: if both the lexical diversity weight AND the burstiness weight are 0, there would be a division-by-zero error when calculating fluency score (which is the value that represents how natural-sounding the text is). Pretty simple fix. I just added a check using a ternary operation."}, {"post_id": 21139, "ts": "2026-07-02T22:57:42Z", "hours": 2.2169, "text": "Added even more fields to the parameter options! You can now edit the suspicion threshold along with some more sensitive options like the adjustment offset (basically the horizontal shift of the logistic function that is used to normalize the score). Also, while adding this, I realized I forgot to actually enforce the default value for all fields outside of just the options page. (Essentially, if you were to install the extension and never open the parameters tab, all the variables in there would default to null when it actually analyzes web pages.) Made sure to include a fix for that in these changes! I also learned a little more about sigmoid functions in general while trying to come up with a good enough caption for the new field, so that’s a nice bonus. Also had to add a little note at the top of the page because the defaults for these fields were not really chosen based on tested accuracy (they are simply based on my own observations of what seems to produce the most satisfactory results). By the way, I’d like to take some time to acknowledge the amazing feedback I got after my first ship! For Chrome users wanting justice after seeing that this extension is only published on AMO, I should mention that publishing to the Chrome Web Store requires a $5 fee, which I (unfortunately) cannot pay at this time. For now, Chrome/Safari users can stick to following the official build instructions listed in the README. In the future, I’ll also try to optimize Extinction’s detection system since I’m starting to feel like its status of being “lightweight” is slowly slipping away as I add new features. Anyway, thank you all for your wonderful comments, and I hope to fulfill as many of your suggestions as I can! :)"}, {"post_id": 19329, "ts": "2026-06-30T16:37:16Z", "hours": 0.9333, "text": "Added a “Suspicion threshold” option so anyone who uses Extinction can customize the detector’s aggressiveness. I also plan on making many of the other weights configurable as well in the near future!"}, {"post_id": 17802, "ts": "2026-06-28T18:47:17Z", "hours": 2.5872, "text": "Made a decent amount of changes today with Extinction’s classification algorithm and a few UI elements. Detections should be more accurate now with these new changes. (For those who want more detail: I added Type-Token Ratio calculations for determining lexical diversity along with better-tuned weights/constants. Also now using a sigmoid function for score normalization. A decent amount of math involved with this, but I’d say it works a lot better now.)"}, {"post_id": 17115, "ts": "2026-06-27T19:45:30Z", "hours": 10.2406, "text": "Finally reached a working version of Extinction, a lightweight AI content blocker extension that uses regex pattern matching and basic sentence analysis for detection (not LLM-based like almost every other AI detector, so it’s fully local). It’s definitely not foolproof, but it does a sufficiently decent job at detecting AI-generated articles despite its significant limitations. It also comes with a configurable exception list to exclude domains and pages from detections! (This is a project I’ve been working on for several months, but I’ve been making a lot more progress ever since Stardance began!)"}]...
|
Title: Extinction by @v81d | Stardance
Devlogs:
F Title: Extinction by @v81d | Stardance
Devlogs:
Finally reached a working version of Extinction, a lightweight AI content blocker extension that uses regex pattern matching and basic sentence analysis for detection (not LLM-based like almost every other AI detector, so it’s fully local). It’s definitely not foolproof, but it does a sufficiently decent job at detecting AI-generated articles despite its significant limitations. It also comes with a configurable exception list to exclude domains and pages from detections! (This is a project I’ve been working on for several months, but I’ve been making a lot more progress ever since Stardance began!)
Made a decent amount of changes today with Extinction’s classification algorithm and a few UI elements. Detections should be more accurate now with these new changes. (For those who want more detail: I added Type-Token Ratio calculations for determining lexical diversity along with better-tuned weights/constants. Also now using a sigmoid function for score normalization. A decent amount of math involved with this, but I’d say it works a lot better now.)
Added a “Suspicion threshold” option so anyone who uses Extinction can customize the detector’s aggressiveness. I also plan on making many of the other weights configurable as well in the near future!
Added even more fields to the parameter options! You can now edit the suspicion threshold along with some more sensitive options like the adjustment offset (basically the horizontal shift of the logistic function that is used to normalize the score). Also, while adding this, I realized I forgot to actually enforce the default value for all fields outside of just the options page. (Essentially, if you were to install the extension and never open the parameters tab, all the variables in there would default to null when it actually analyzes web pages.) Made sure to include a fix for that in these changes! I also learned a little more about sigmoid functions in general while trying to come up with a good enough caption for the new field, so that’s a nice bonus. Also had to add a little note at the top of the page because the defaults for these fields were not really chosen based on tested accuracy (they are simply based on my own observations of what seems to produce the most satisfactory results). By the way, I’d like to take some time to acknowledge the amazing feedback I got after my first ship! For Chrome users wanting justice after seeing that this extension is only published on AMO, I should mention that publishing to the Chrome Web Store requires a $5 fee, which I (unfortunately) cannot pay at this time. For now, Chrome/Safari users can stick to following the official build instructions listed in the README. In the future, I’ll also try to optimize Extinction’s detection system since I’m starting to feel like its status of being “lightweight” is slowly slipping away as I add new features. Anyway, thank you all for your wonderful comments, and I hope to fulfill as many of your suggestions as I can! :)
Expanded the options page even further! You can now basically customize every single parameter that Extinction’s underlying system uses. Funny thing, I actually caught two bugs when adding the signal calibrator and lexical diversity / burstiness weight fields. The first bug: the signal calibration math actually didn’t allow for decimal calibrators because it was doing plain exponentiation (meaning negative signals would fail in that step). To fix this, I added a very basic change that would simply preserve the sign of the signal during calibration. That way, negative signals stay negative and positive signals stay positive. The second bug: if both the lexical diversity weight AND the burstiness weight are 0, there would be a division-by-zero error when calculating fluency score (which is the value that represents how natural-sounding the text is). Pretty simple fix. I just added a check using a ternary operation.
Ships:
Extinction is an ultra-lightweight AI content blocker browser extension powered by regex-based pattern matching and linguistic analysis. But why block AI? Well, the answer is quite simple. The World Wide Web is becoming increasingly plagued with low-quality AI-generated content. The content AI produces is often misleading or blatantly incorrect. While some may not particularly see this is an issue, many people wish to escape from or completely hide such content. What makes Extinction any different? Traditional AI content detectors rely on machine learning and heavy analysis to product a result. Besides the irony of using such a mechanism, these AI detectors are often less trustworthy when it comes to respecting user privacy. Since the content is fed into an external API, users cannot reliably confirm that the data they send is kept confidential. Extinction, on the other hand, does not send any data to an external endpoint; all analyses are done locally, meaning there is no compromise in user privacy. It does not use machine-learning to classify text, but rather simple pattern matching with regular expressions (regexes) paired with sentence variation analyses. Keep in mind that Extinction is not (and will never be) 100% foolproof, as with all AI detectors in general. There will always be false positives and false negatives, but we will try our best to improve Extinction over time and make it as accurate as possible without sacrificing user privacy or Extinction’s quality of being lightweight. The extension comes with an exclusion list to prevent trusted sites from being flagged.
Extinction is now much more customizable with the newly added “Parameters” tab! The entire classification system has been reworked to be more memory-efficient and accurate in general, so Extinction should be able to block AI-generated articles much more effectively now. It was quite brain-damaging (to be honest) trying to figure out what changes I could possibly make to improve such a simple algorithm, but I ended up gaining a lot more knowledge about logistic functions (and sigmoids in general) and how useful math can be when making something like this. It was worth it. I also fixed several issues along the way while updating the options page. As I mentioned in my last devlog, there was a signal calibration logic error along with a potential division-by-zero error in calculating the fluency score of a text. Now with those pesky bugs out of the way, I can actually focus on improving the things that really matter for this project, such as keeping it fast and lightweight . Yes, the size of the package is really only around 100 KB (which is pretty lightweight), but some features still feel a little over-complicated. I enjoy looking at my code and feeling proud about all the new things I’ve learned, but, at the end of the day, the whole point of this extension is to tackle the problems most other AI detectors couldn’t: being easy on memory and all that. I do not plan on making Extinction ML-based. That defeats the whole purpose and will most certainly kill this experiment (or rather a proof-of-concept). That said, the main goal of the next ship will most likely be making some optimizations for both the UI and the detection system. As for this ship, most of the changes are related to the new options tab. To be fully transparent, the default values for these fields were NOT selected by a machine/algorithm, since that would probably hit the gray area of “machine learning.” All of the defaults were chosen by me, a real person! Since they are all based on observation rather than extreme experimentation (which I cannot carry out anyway), accuracy may vary depending on what you’re reading. If anyone happens to discover a better combination, feel free to let me know or make a pull request! Anyway, that wraps it up for my second ship. If you’d like to try out Extinction, you can install it officially from the Mozilla Add-ons store (if you’re on Firefox or a Firefox-based browser) OR build it from source using the GitHub repo. Unfortunately, Extinction will not be available on the Chrome Web Store because of the $5 registration fee (that I can’t pay right now). Things aren’t very appealing for Safari users either, since Apple places a $99/year registration fee (which is arguably a total rip-off that I’m not willing to give into at all). For now, Chrome and Safari users can stick to building and installing from source. Good news for Chrome users though: custom extensions don’t seem to be ephemeral or suddenly disappear the moment you exit the app, so once you’ve built it, you’ll be good until the next release. Thank you for checking out Extinction. I hope it’s as useful to you as it is to me! :)...
|
1793083774.6966307
|
1793170174.6966307
|
|
17692
|
My very own WebOS by @torren | Stardance
|
torren
|
2
|
32.0
|
49
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-11T01:54:12Z", "hours": 15.0, "multiplier": 4.89, "payout": 49, "blessing": "neutral", "text": "so i built serenityos, a little web-based operating system that runs right in your browser. it’s got a desktop, draggable windows, a dock, and a bunch of mini apps — all vanilla html/css/js, no frameworks, no build step. for this mission i added 3 new features: browser — a mini web browser inside the os. type a url, hit go, it loads in a window. paint — a canvas you can actually draw on. pick a color, change the brush size, and save your doodle as a png. new animated ui — gave the whole thing a fresh look with real motion: headings that reveal word-by-word as you scroll and buttons that drift toward your cursor. what was challenging: doing the animations in plain javascript was the tricky part — no framer motion or gsap, so i had to hand-roll the word-by-word reveals with intersection observers and the magnetic buttons with pointer math. getting the paint canvas to map mouse coords correctly when the window resizes also took a few tries. what i’m proud of: how cohesive it all feels now — the landing page, the docs, and the desktop all look like one product. and the fact that it’s 100% vanilla js but still feels smooth and alive. how to test it: head to serenityux.vercel.app → hit launch os → then click around the dock. open browser and load a site, open paint and draw something, or mess with the calculator, notes, and timer. everything saves locally so your notes stick around when you come back.", "repo": "", "demo": ""}, {"ship_num": 2, "ts": "2026-06-14T17:27:46Z", "hours": 17.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "SerenityOS is a fully functional web-based operating system with 9 interactive draggable windows (About, Projects, Portfolio, Contact, Notes, To-Do, Calculator, Timer, Messages) built entirely with vanilla JavaScript, zero dependencies, and achieving 90+ Lighthouse with <50KB bundle size. Building it required solving complex event propagation issues with button reliability, window positioning algorithms to prevent off-screen placement, and localStorage timing with the messages system—all demanding deep understanding of DOM lifecycle and JavaScript async behavior. I’m proud of proving you don’t need frameworks to build ambitious, polished applications while maintaining excellent performance and design. To test: visit https://serenityux.vercel.app , enter your name, launch, then try sending a message through Contact to see it appear in Messages app, add tasks to To-Do that persist on refresh, use the Calculator and Timer, drag windows around, and check your portfolio content. Everything works instantly with no installation required.", "repo": "", "demo": ""}]...
|
[{"post_id": 44953, "ts": "202 [{"post_id": 44953, "ts": "2026-08-11T01:51:51Z", "hours": 14.7233, "text": "been improving serenityos lately and honestly it’s in a way better place now. gave the whole thing a fresh look, clean type, calm colors, feels like one cohesive product from the landing all the way into the desktop. also shipped 3 new features: a browser you can actually surf in, a paint app for doodling (save as png too), and a new animated ui with word-by-word reveals and buttons that drift toward your cursor. cleaned up a bunch of old jank along the way. more soon :)"}, {"post_id": 8799, "ts": "2026-06-14T16:41:02Z", "hours": 0.6833, "text": "This session focused on polishing SerenityOS for production launch and fixing critical bugs that were blocking user-facing features. Started by diagnosing and fixing the messages system - the Contact form was saving messages to localStorage, but they weren’t displaying in the Messages app due to a DOM timing issue. Wrapped the contact handler in setTimeout to ensure proper initialization, and implemented a dynamic renderMessages() function that rebuilds the DOM on demand. Tested the full flow end-to-end: Contact form → localStorage → Messages app, confirming persistence and deletion both work. Next tackled calculator button overflow - buttons were massively oversized and breaking the window layout. Reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints. Buttons now fit perfectly within the window. Compacted the Projects app since it was taking up unnecessary vertical space - reduced font sizes, cut spacing between projects, and shortened descriptions so all five projects display without scrolling. Updated the README following professional shipping guidelines: punchy one-liner, prominent demo link, six specific features, technical depth explaining architecture, quick start in three lines, browser support, and creator info. No boilerplate or template text. Completely rewrote portfolio content across all apps (About, Projects, Portfolio) with real information: full bio, three-skill categories (technical, business, leadership), detailed project descriptions with achievements, and actual work experience. Discovered and fixed the most critical bug: window positioning logic was placing new windows off-screen or stacked too far right. Changed from 3-column to 2-column grid with viewport bounds checking, ensuring all apps stay visible. Tested all four previously-missing apps (To-Do, Calculator, Timer, Messages) - they now open and display correctly. Updated README screenshot reference, committed everything, and pushed to production. All 9 apps verified working, <50KB bundle maintained, 90+ Lighthouse score confirmed. SerenityOS is now feature-complete and deployment-ready."}, {"post_id": 8124, "ts": "2026-06-13T15:48:46Z", "hours": 1.3342, "text": "This session focused on crushing the last critical bugs that were holding back the messaging system and refining the overall UI. The main issue was that messages sent from the Contact form weren’t appearing in the Messages app - after investigation, we discovered a DOM timing issue where event listeners were being attached before elements were ready. We fixed this by wrapping the contact form handler in a setTimeout, ensuring proper initialization and allowing messages to persist reliably in localStorage and render dynamically with full delete functionality. Alongside this, we tackled the calculator button overflow problem that was making the app unusable on smaller screens. The buttons were massively oversized, so we reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints to prevent flex expansion. Finally, we compacted the Projects window since its content was taking up too much vertical space - we reduced overall font sizes, cut spacing from 16px to 10px between items, and shortened descriptions so all five projects now display without any scrolling needed. Everything is now working smoothly: the message system is bulletproof, calculator buttons fit perfectly, and all windows are properly optimized. The bundle remains under 50KB, localStorage operations are instant, and the entire OS feels polished and professional. We’ve got all eight apps functioning, draggable/resizable windows with proper layering, persistent data storage, a real-time system clock, and smooth animations throughout—SerenityOS is now feature-complete and ready for use."}, {"post_id": 7857, "ts": "2026-06-13T03:12:50Z", "hours": 1.1425, "text": "Fixed critical bugs preventing windows from displaying on the OS desktop - the issue was the container wasn’t filling the viewport properly. Updated CSS to set 100vw × 100vh with fixed positioning, which immediately resolved the problem. Also implemented smart window positioning using a grid algorithm to prevent overlap, and added auto-opening About & Projects windows on startup so the desktop doesn’t look empty. Tested all functionality and deployed. 50 minutes of focused debugging and UX improvements."}, {"post_id": 7785, "ts": "2026-06-13T00:20:03Z", "hours": 13.7236, "text": "Built the SerenityUX Web-based OS project: Part 1: Welcome screen with animations Parts 2-3: Desktop with draggable windows Currently working on Part 4: Creating apps"}]...
|
Title: My very own WebOS by @torren | Stardance
D Title: My very own WebOS by @torren | Stardance
Devlogs:
Built the SerenityUX Web-based OS project: Part 1: Welcome screen with animations Parts 2-3: Desktop with draggable windows Currently working on Part 4: Creating apps
Fixed critical bugs preventing windows from displaying on the OS desktop - the issue was the container wasn’t filling the viewport properly. Updated CSS to set 100vw × 100vh with fixed positioning, which immediately resolved the problem. Also implemented smart window positioning using a grid algorithm to prevent overlap, and added auto-opening About & Projects windows on startup so the desktop doesn’t look empty. Tested all functionality and deployed. 50 minutes of focused debugging and UX improvements.
This session focused on crushing the last critical bugs that were holding back the messaging system and refining the overall UI. The main issue was that messages sent from the Contact form weren’t appearing in the Messages app - after investigation, we discovered a DOM timing issue where event listeners were being attached before elements were ready. We fixed this by wrapping the contact form handler in a setTimeout, ensuring proper initialization and allowing messages to persist reliably in localStorage and render dynamically with full delete functionality. Alongside this, we tackled the calculator button overflow problem that was making the app unusable on smaller screens. The buttons were massively oversized, so we reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints to prevent flex expansion. Finally, we compacted the Projects window since its content was taking up too much vertical space - we reduced overall font sizes, cut spacing from 16px to 10px between items, and shortened descriptions so all five projects now display without any scrolling needed. Everything is now working smoothly: the message system is bulletproof, calculator buttons fit perfectly, and all windows are properly optimized. The bundle remains under 50KB, localStorage operations are instant, and the entire OS feels polished and professional. We’ve got all eight apps functioning, draggable/resizable windows with proper layering, persistent data storage, a real-time system clock, and smooth animations throughout—SerenityOS is now feature-complete and ready for use.
This session focused on polishing SerenityOS for production launch and fixing critical bugs that were blocking user-facing features. Started by diagnosing and fixing the messages system - the Contact form was saving messages to localStorage, but they weren’t displaying in the Messages app due to a DOM timing issue. Wrapped the contact handler in setTimeout to ensure proper initialization, and implemented a dynamic renderMessages() function that rebuilds the DOM on demand. Tested the full flow end-to-end: Contact form → localStorage → Messages app, confirming persistence and deletion both work. Next tackled calculator button overflow - buttons were massively oversized and breaking the window layout. Reduced padding from 10px to 6px, gap from 6px to 4px, and display font-size from 2em to 1.5em while adding min-width constraints. Buttons now fit perfectly within the window. Compacted the Projects app since it was taking up unnecessary vertical space - reduced font sizes, cut spacing between projects, and shortened descriptions so all five projects display without scrolling. Updated the README following professional shipping guidelines: punchy one-liner, prominent demo link, six specific features, technical depth explaining architecture, quick start in three lines, browser support, and creator info. No boilerplate or template text. Completely rewrote portfolio content across all apps (About, Projects, Portfolio) with real information: full bio, three-skill categories (technical, business, leadership), detailed project descriptions with achievements, and actual work experience. Discovered and fixed the most critical bug: window positioning logic was placing new windows off-screen or stacked too far right. Changed from 3-column to 2-column grid with viewport bounds checking, ensuring all apps stay visible. Tested all four previously-missing apps (To-Do, Calculator, Timer, Messages) - they now open and display correctly. Updated README screenshot reference, committed everything, and pushed to production. All 9 apps verified working, <50KB bundle maintained, 90+ Lighthouse score confirmed. SerenityOS is now feature-complete and deployment-ready.
been improving serenityos lately and honestly it’s in a way better place now. gave the whole thing a fresh look, clean type, calm colors, feels like one cohesive product from the landing all the way into the desktop. also shipped 3 new features: a browser you can actually surf in, a paint app for doodling (save as png too), and a new animated ui with word-by-word reveals and buttons that drift toward your cursor. cleaned up a bunch of old jank along the way. more soon :)
Ships:
SerenityOS is a fully functional web-based operating system with 9 interactive draggable windows (About, Projects, Portfolio, Contact, Notes, To-Do, Calculator, Timer, Messages) built entirely with vanilla JavaScript, zero dependencies, and achieving 90+ Lighthouse with <50KB bundle size. Building it required solving complex event propagation issues with button reliability, window positioning algorithms to prevent off-screen placement, and localStorage timing with the messages system—all demanding deep understanding of DOM lifecycle and JavaScript async behavior. I’m proud of proving you don’t need frameworks to build ambitious, polished applications while maintaining excellent performance and design. To test: visit https://serenityux.vercel.app , enter your name, launch, then try sending a message through Contact to see it appear in Messages app, add tasks to To-Do that persist on refresh, use the Calculator and Timer, drag windows around, and check your portfolio content. Everything works instantly with no installation required.
so i built serenityos, a little web-based operating system that runs right in your browser. it’s got a desktop, draggable windows, a dock, and a bunch of mini apps — all vanilla html/css/js, no frameworks, no build step. for this mission i added 3 new features: browser — a mini web browser inside the os. type a url, hit go, it loads in a window. paint — a canvas you can actually draw on. pick a color, change the brush size, and save your doodle as a png. new animated ui — gave the whole thing a fresh look with real motion: headings that reveal word-by-word as you scroll and buttons that drift toward your cursor. what was challenging: doing the animations in plain javascript was the tricky part — no framer motion or gsap, so i had to hand-roll the word-by-word reveals with intersection observers and the magnetic buttons with pointer math. getting the paint canvas to map mouse coords correctly when the window resizes also took a few tries. what i’m proud of: how cohesive it all feels now — the landing page, the docs, and the desktop all look like one product. and the fact that it’s 100% vanilla js but still feels smooth and alive. how to test it: head to serenityux.vercel.app → hit launch os → then click around the dock. open browser and load a site, open paint and draw something, or mess with the calculator, notes, and timer. everything saves locally so your notes stick around when you come back....
|
1792990475.5103753
|
1793076875.5103753
|
|
17706
|
NobleOS by @vrplays | Stardance
|
vrplays
|
2
|
8.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-25T13:56:50Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I’ve added a lot more to NobleOS than before. So much in fact it doesn’t even look like the original anymore! It now features a terminal, a file system, and a wallpaper picker! Check the screenshot for yourself (or devlog 4 if it doesn’t load). Doesn’t it look much more different now?", "repo": "https://github.com/VR2011/NobleOS", "demo": "https://noble-os-omega.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-15T23:03:28Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "NobleOS is a simple web-based operating system with multiple features built into it. There’s a couple apps you can tinker around with, and a cool theming menu where you can try different themes and see how they look!", "repo": "https://github.com/VR2011/NobleOS", "demo": "https://noble-os-omega.vercel.app/"}]...
|
[{"post_id": 15663, "ts": "202 [{"post_id": 15663, "ts": "2026-06-25T13:55:11Z", "hours": 2.0344, "text": "NobleOS - Devlop 4 It’s been quite a while, but now that WebOS 2 is out, I’ve decided to come back and add new features. There is now a terminal, a simple file system, and a wallpaper picker in the theming app! Those are the three new features I’ve added that weren’t in WebOS 1. Check it out here !"}, {"post_id": 9537, "ts": "2026-06-15T22:16:07Z", "hours": 3.0931, "text": "NobleOS - Devlog 3 This is a big jump from before. I have now added a start menu that lets you launch apps from there as well. It also shows the time. Also, there is now a browser (which unfortunately doesn’t work for most websites…)! It’s pretty simple. You can press enter/return to go to the site, and use the back and forward arrow keys to well, go back and forward. Finally, theming! You probably already saw this from glancing at the screenshot provided, but now there are 5 different themes to choose from while using the OS - Classic, Blue, Pink, Dark, and Light. Enjoy!"}, {"post_id": 8765, "ts": "2026-06-14T16:02:08Z", "hours": 1.2656, "text": "NobleOS - Devlog 2 Added the calculator app. In addition, there are a few window tweaks that got fixed/added. I never linked the website here, so here’s the site if you want to check it out! https://noble-os-omega.vercel.app/"}, {"post_id": 8455, "ts": "2026-06-14T01:54:28Z", "hours": 1.6056, "text": "NobleOS - Devlog 1 First devlog. Nothing much on the actual project, besides a simple about button. I’ll probably add a calculator next."}]...
|
Title: NobleOS by @vrplays | Stardance
Devlogs:
N Title: NobleOS by @vrplays | Stardance
Devlogs:
NobleOS - Devlog 1 First devlog. Nothing much on the actual project, besides a simple about button. I’ll probably add a calculator next.
NobleOS - Devlog 2 Added the calculator app. In addition, there are a few window tweaks that got fixed/added. I never linked the website here, so here’s the site if you want to check it out! https://noble-os-omega.vercel.app/
NobleOS - Devlog 3 This is a big jump from before. I have now added a start menu that lets you launch apps from there as well. It also shows the time. Also, there is now a browser (which unfortunately doesn’t work for most websites…)! It’s pretty simple. You can press enter/return to go to the site, and use the back and forward arrow keys to well, go back and forward. Finally, theming! You probably already saw this from glancing at the screenshot provided, but now there are 5 different themes to choose from while using the OS - Classic, Blue, Pink, Dark, and Light. Enjoy!
NobleOS - Devlop 4 It’s been quite a while, but now that WebOS 2 is out, I’ve decided to come back and add new features. There is now a terminal, a simple file system, and a wallpaper picker in the theming app! Those are the three new features I’ve added that weren’t in WebOS 1. Check it out here !
Ships:
NobleOS is a simple web-based operating system with multiple features built into it. There’s a couple apps you can tinker around with, and a cool theming menu where you can try different themes and see how they look!
I’ve added a lot more to NobleOS than before. So much in fact it doesn’t even look like the original anymore! It now features a terminal, a file system, and a wallpaper picker! Check the screenshot for yourself (or devlog 4 if it doesn’t load). Doesn’t it look much more different now?...
|
1792994219.7288318
|
1793080619.7288318
|
|
17725
|
FishOS by @mikhailnotfish | Stardance
|
mikhailnotfish
|
2
|
5.0
|
20
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-01T04:13:52Z", "hours": 2.0, "multiplier": 12.04, "payout": 20, "blessing": "neutral", "text": "webos2 FishOS is out now for you to try! the 3 new things i have added are the fish translator, from english to fish, the fish explorer, whe all the apps live now, and the wallpaper changer! now you can change the wallpaper to your liking!", "repo": "https://github.com/mikhailnotfish/webos-2", "demo": "https://webos2.netlify.app/"}, {"ship_num": 2, "ts": "2026-06-15T22:29:39Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "i have finished webos1! you guys can try it out right now!", "repo": "https://github.com/mikhailnotfish/webos-2", "demo": "https://webos2.netlify.app/"}]...
|
[{"post_id": 19748, "ts": "202 [{"post_id": 19748, "ts": "2026-07-01T04:11:46Z", "hours": 0.4253, "text": "webos2 fishOS is complete! i have fixed the issue with the fish translator.exe being on top of fish explorer and now i am gonna ship webos2 so i can et me stardust"}, {"post_id": 18939, "ts": "2026-06-30T03:46:48Z", "hours": 1.2006, "text": "webos2 devlog!!!! allright guys so here is what i have been working on for webos2: i have, removed all the apps as files, and made “fish explorer” its like file explorer but fish because this is fishos. 2: i made a wallpaper changer! i though some people might not like the clownfish, so i made an app that can change the wallpapers. 3: i (am currently making) fish translator! essentially you input some text and on the other side there will be some randomly generated blubs and blobs and glooobs so you can speak fish. i expect to be shipping soon, but im having trouble with the fish transator app not going where i want it to. stay tuned!"}, {"post_id": 9546, "ts": "2026-06-15T22:28:22Z", "hours": 0.5869, "text": "this is my final devlog before i go onto webos2! what was added: so, i removed fishgames, and added fishclicker. with 2 buttons and a fish you can click, youll be sitting there all day!"}, {"post_id": 8613, "ts": "2026-06-14T09:55:10Z", "hours": 0.2878, "text": "i added the last app, unless i move onto webos 2 challenge. this is the final devlog to complete webos1 mission! in this devlog, i added: a new app, exe fishtunes. you can now play music!"}, {"post_id": 8597, "ts": "2026-06-14T09:25:24Z", "hours": 0.6728, "text": "had a bit of a setback, i was using codespaces and hackatime didnt track my time. i actualy worked for maybe 1 and a half hours. during that time, i made a new wallpaper, made some new apps, ui, and finished the webos tutorial! im gonna make some more things, and ship tommorow for rating. good luck!"}, {"post_id": 7910, "ts": "2026-06-13T06:02:05Z", "hours": 1.7506, "text": "its coming together!"}]...
|
Title: FishOS by @mikhailnotfish | Stardance
Devl Title: FishOS by @mikhailnotfish | Stardance
Devlogs:
its coming together!
had a bit of a setback, i was using codespaces and hackatime didnt track my time. i actualy worked for maybe 1 and a half hours. during that time, i made a new wallpaper, made some new apps, ui, and finished the webos tutorial! im gonna make some more things, and ship tommorow for rating. good luck!
i added the last app, unless i move onto webos 2 challenge. this is the final devlog to complete webos1 mission! in this devlog, i added: a new app, exe fishtunes. you can now play music!
this is my final devlog before i go onto webos2! what was added: so, i removed fishgames, and added fishclicker. with 2 buttons and a fish you can click, youll be sitting there all day!
webos2 devlog!!!! allright guys so here is what i have been working on for webos2: i have, removed all the apps as files, and made “fish explorer” its like file explorer but fish because this is fishos. 2: i made a wallpaper changer! i though some people might not like the clownfish, so i made an app that can change the wallpapers. 3: i (am currently making) fish translator! essentially you input some text and on the other side there will be some randomly generated blubs and blobs and glooobs so you can speak fish. i expect to be shipping soon, but im having trouble with the fish transator app not going where i want it to. stay tuned!
webos2 fishOS is complete! i have fixed the issue with the fish translator.exe being on top of fish explorer and now i am gonna ship webos2 so i can et me stardust
Ships:
i have finished webos1! you guys can try it out right now!
webos2 FishOS is out now for you to try! the 3 new things i have added are the fish translator, from english to fish, the fish explorer, whe all the apps live now, and the wallpaper changer! now you can change the wallpaper to your liking!...
|
1793112429.6806278
|
1793198829.6806278
|
|
17744
|
My first WebOs by @Zo | Stardance
|
Zo
|
2
|
4.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-12T23:50:04Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I just changed the PersonalOS to a CricketOS. It was fun making the live score board", "repo": "https://github.com/Zohair-M/Web-Os_1", "demo": "https://zohair-m.github.io/Web-Os_1/"}, {"ship_num": 2, "ts": "2026-06-25T17:12:55Z", "hours": 4.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created ZohairOS , a personal web-based operating system built with HTML, CSS, and JavaScript. It features a desktop environment with draggable windows, a start menu, a live clock, desktop icons, and a terminal application with custom commands. I also added custom apps including About Me, School, Soccer, Projects, and Terminal windows. The most challenging part was managing multiple draggable windows while making sure they appeared on top of each other correctly using z-indexes. I also had to debug issues with opening and closing windows, connecting desktop icons to applications, and organizing the JavaScript code as the project grew. (I used a tiny bit of AI here :[ sorry.) To test the project, click the desktop icons or use the Start Menu to open applications. Try dragging windows around the screen, opening multiple apps at once, and using the Terminal app with commands such as: help about projects alwayshyderabadi clear A unique feature I added beyond the guide is the custom Soccer and School applications, which showcase my personal goals and school information inside the OS.", "repo": "https://github.com/Zohair-M/Web-Os_1", "demo": "https://zohair-m.github.io/Web-Os_1/"}]...
|
[{"post_id": 27417, "ts": "202 [{"post_id": 27417, "ts": "2026-07-12T23:38:54Z", "hours": 0.3767, "text": "Brand new OS I changed from my own personal OS to CricketOS It’s a simple one that tells you how cricket is played and a few of its rules"}, {"post_id": 15759, "ts": "2026-06-25T17:09:05Z", "hours": 0.4256, "text": "Added the background and commented some of the code and finally finished WebOS 1"}, {"post_id": 15425, "ts": "2026-06-25T02:13:37Z", "hours": 1.6192, "text": "Finish Part 5 of the First Web OS tutorial. Will continue and add more customization later on (●’◡’●)(●’◡’●)"}, {"post_id": 14828, "ts": "2026-06-24T02:47:09Z", "hours": 1.5972, "text": "Finally started something after creating an account on this a couple weeks ago and finishing exams, started working on this. My own personal WebOs or website. What ever this is. Seems fun nonetheless. :)"}]...
|
Title: My first WebOs by @Zo | Stardance
Devlogs: Title: My first WebOs by @Zo | Stardance
Devlogs:
Finally started something after creating an account on this a couple weeks ago and finishing exams, started working on this. My own personal WebOs or website. What ever this is. Seems fun nonetheless. :)
Finish Part 5 of the First Web OS tutorial. Will continue and add more customization later on (●’◡’●)(●’◡’●)
Added the background and commented some of the code and finally finished WebOS 1
Brand new OS I changed from my own personal OS to CricketOS It’s a simple one that tells you how cricket is played and a few of its rules
Ships:
I created ZohairOS , a personal web-based operating system built with HTML, CSS, and JavaScript. It features a desktop environment with draggable windows, a start menu, a live clock, desktop icons, and a terminal application with custom commands. I also added custom apps including About Me, School, Soccer, Projects, and Terminal windows. The most challenging part was managing multiple draggable windows while making sure they appeared on top of each other correctly using z-indexes. I also had to debug issues with opening and closing windows, connecting desktop icons to applications, and organizing the JavaScript code as the project grew. (I used a tiny bit of AI here :[ sorry.) To test the project, click the desktop icons or use the Start Menu to open applications. Try dragging windows around the screen, opening multiple apps at once, and using the Terminal app with commands such as: help about projects alwayshyderabadi clear A unique feature I added beyond the guide is the custom Soccer and School applications, which showcase my personal goals and school information inside the OS.
I just changed the PersonalOS to a CricketOS. It was fun making the live score board...
|
1792993694.2799802
|
1793080094.2799802
|
|
17855
|
Resource-Screening by @shashi93 | Stardance
|
shashi93
|
2
|
73.0
|
706
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T02:47:30Z", "hours": 20.0, "multiplier": 14.66, "payout": 287, "blessing": "neutral", "text": "I have a whole bunch of resource packs installed, and managing all of them was a pain. So I decided, why not make a mod to help me do that? To test my mod: Ensure you have some resourcepacks installed, and they should contain custom textures for leaves (I recommend Faithful, Barebones and Motschen’s better leaves). After which, get into a minecraft world, and possibly place some leaves in front of you. Then go into the resourcepacks settings and change the textures. Each dropdown controls a specific leaf texture, as you can see via the texture renderer on top. If you have more than two resourcepacks, the last one may be hidden by the texture renderer, so you can just click through the texture renderer to activate it. Have fun customising textures, I plan to add more functionality soon! :) ✌️", "repo": "https://github.com/shushi93/Resource-Screening", "demo": "https://modrinth.com/mod/resource-screening"}, {"ship_num": 2, "ts": "2026-08-23T05:26:47Z", "hours": 53.0, "multiplier": 8.74, "payout": 419, "blessing": "neutral", "text": "Does some simple texture swapping. I’m getting into individual textures now. Learning Java definitely took a lot of the time, but I’m happy I got something working.", "repo": "https://github.com/shushi93/Resource-Screening", "demo": "https://modrinth.com/mod/resource-screening"}]...
|
[{"post_id": 70382, "ts": "202 [{"post_id": 70382, "ts": "2026-09-19T02:41:48Z", "hours": 3.9581, "text": "Almost ready for second ship! The UI is terrible, but I think for now it works. There are still a few bugs with the UI I plan to fix later. The main part of this devlog is that, i changed the layout of the dropdowns, and I created a menu to show the currently selected texture, so it’s easier to see what you’re changing from and to. I fixed some minor bugs with the dropdownlist, and overall, I’m quite happy with how it turned out. Some reviewers didn’t fully understand my mod, so I’ll put some actually better usage instructions in the ship message. Some guy also said my project was completely AI :/ (it’s not), but i accidentally clicked accept payout instead of flagging the review, while going to the bad review. Oh well. I do wan’t to mention that I did use AI for guidance, but it did not code my mod for me. That’s about it After my second ship, I doubt I can continue developing my mod, because my finals are in like 2 days (and i’m doing anything but studying for it, so hope you enjoy my mod, as it is now! ✌️"}, {"post_id": 67183, "ts": "2026-09-13T07:44:50Z", "hours": 2.8153, "text": "More file shenanigans! I managed to persist the saved options to the config file, and changed the buttons to dropdowns Some ui stuff still needs fixing but it’s gone relatively alright My ship is still in the process of getting verified, but my project shld be shipped soon!"}, {"post_id": 65304, "ts": "2026-09-10T11:12:17Z", "hours": 2.3964, "text": "dropdown list works >< last time i did this, it took me 30h also what do you think of my highlight, instead of just making the blue border brighter and whiter, i decided to make it redder, to stand out, does it look good? as you can see, there is an error with the dropdown list, as when i pressed the last option, it didnt register (closer to the end of the video) because the button behind it, b9 was getting clicked instead I doub’t this will be a problem (at least for current me), since i dont think the dropdown lists should be ontop of smth else, hopefully but oh well, when it comes to that ill figure it out edit: argh i just realised i haven’t finished scrolling behaviour i’ll get to work on that now my previous ship is still not verified bcos modrinth still havent reviewed my mod (it’s been 3 weeks) ( ˘︹˘ ) so i submitted it to curseforge I’ll update my mod with the newest features and then reship"}, {"post_id": 63331, "ts": "2026-09-07T03:00:09Z", "hours": 4.9131, "text": "basic texture swapping After actl not too much pain, I got basic texture swapping done. I created a helper class to handle all my texture swapping logic, and it works quite neatly. I do hate File I/O in any programming language, but my mod kind of revolves around FIle I/O, and honestly, even though I got some super unhelpful error messages (I got empty error messages), I somehow managed to pull through Some things I have yet to work on: fix ui to allow all installed packs (currently for testing I just use Motchsens better leaves, since it’s a small pack) allow not just textures but also block models to be hotswapped pray modrinth reviews my project so i can ship it ✌️"}, {"post_id": 57025, "ts": "2026-08-29T03:09:48Z", "hours": 5.4767, "text": "I spent a while learning Java nio and managed to get the names of all the texture packs and the textures inside of them i also created doogile.zip (as requested by my friend), that will serve as the main way to select individual textures just a simple devlog to catch you guys up to what i’ve been doing"}, {"post_id": 52817, "ts": "2026-08-23T05:14:18Z", "hours": 5.5578, "text": "Swapping textures i finally, after like 5h managed to swap between bare bones & faithful x64 yipee I think imma ship the project now you can download from the releases page B1 switches to bare bones B2 switches to faithful there are some minor bugs i need to iron out but for now, i think a first ship is due took way too long to get here but oh well now i gotta figure out that individual texture thing"}, {"post_id": 47428, "ts": "2026-08-15T11:07:54Z", "hours": 9.4294, "text": "Part 14 The first Part of Part 14 was an extension of JavaFX, where I learnt how to draw charts using JavaFX. Overall, not a too hard topic. One small funny error I spent a bit of time on was on the second exercise, where after an egregious amount of time writing code, my chart showed up. However, since I used an absolute path for the tsv data file, when I submitted that code to the server, it showed an error. Then after a lot of debugging, I remembered a previous exercise, where I had to remove the absolute path before it worked, and when I did that, it worked perfectly. Then, I spent a good bit of time cleaning up my jdk installation, before resuming pain Java. On the next exercise, I needed to create a line chart that shows the amount of savings over time, and this was more pain than I’ve ever experienced. Creating the components was easy, but the formula for plotting the points, yea that was pure torture. 2h of trying, and I finally caved. I thought I was good at math but oh well, asked AI what I was doing wrong, and apparently, I was off-by-one in my data plotting & my formula was adding the savings too many times. Absolute headache going through that, but at least I was finally able to overcome it. And then another problem sprang up. There was an index out of bounds error when running the tests, and I asked the discord server why this was happening, and basically, I was missing 4 lines of code, that is essentially just styling the program, which caused that. yea true pain. I also went on a journey of remaking Aseprite (well not really), and I copied Andy Warhol and remade the Mona Lisa. I almost got it first try, except for one thing. See, humans cant see minute pixel colour differences, but computers can. Not so long story short, due to pixel overwrites from integer truncation, the pixel colour values were just ever so slightly off, that the tests were failing. After previous traumatic events, I caved and asked AI what was wrong, and basically the loop incrementer supplied by the base program was wrong, and it fixed it. It’s fun to leave the boring stuff to AI, and the fun stuff for me. I then followed the step-by-step guideline on remaking Asteroids by Atari, and I think it went ok. I’m most excited right now because finally I complete the Java MOOC course, and I can start work on my mod. But I’m also quite scared/anxious, because I don’t even know where to start now, after so long of not working on my mod. but i’ll figure it out, hopefully. and im also gonna take this time to ask for any name reccomendations, or do you think i should just go with resource-screening ^____^ ✌️"}, {"post_id": 38605, "ts": "2026-08-01T02:43:31Z", "hours": 6.0253, "text": "JavaFX JavaFX was interesting, and I’m not too sure how I want to feel about it. I’ve not much to say about this part. Minecraft doesn’t actually use JavaFX, so this part was just slightly useless, but there are some similarities to Minecraft’s rendering system (Lightweight Java Game Library) that I can use to make my mod. I’m most exited for Part 14, where I learn about Maven, since it’s a Java topic I know not much about. Most importantly, after Part 14, I get to finally work on my mod. One interesting thing about this part is that I switched to IntelliJ since it was easier to work with JavaFX on it than on VSCode. Setting up JavaFX just to start working on this part was painful, but I’m happy that I got it working For now, enjoy the TicTacToe Application, and the horrendous if-condition that ends the game :) and sorry this devlog is lowk kinda mid, im tired and don’t feel like writing rn but oh well ✌️"}, {"post_id": 28054, "ts": "2026-07-14T02:22:28Z", "hours": 3.9286, "text": "2 more parts to go >”< Finally learnt type parameters (those things inside the <> ) Learnt to make my own implementation of ArrayList and HashMap and 2d arrays (which are and have always been painful) I also decided to try something new this time, I turned on Copilot Code Completion. (cus it’s cool to see the ghost text) . it was genuinely painful at first, and i want to like it but i also rlly hate it sometimes. i got somewhat used to it, then i turned it off, cus it felt like cheating for some of the exercises. I turned it off on the last exercise (deciding the pain was not worth it) and went into even bigger pain, cus 2d arrays. When doing the last exercise (Magic Square), i lowk blanked out and did not feel like doing Java, but i persevered thru anyways. Specifically, when it came to calculating diagonals of the square, cus i didnt know how to do that. I did some brainstorming, found out it’s actually super simple and somehow managed to get it right. (actl i just realized my program is broken for all values above 5, but uh im not fixing it _ ) ooh and uh, anyone got suggestions for my mod name, since im 2 parts away from working on it? (current name is resource-screening btw, but i think its cringy) ✌️"}, {"post_id": 25039, "ts": "2026-07-08T23:48:50Z", "hours": 3.4086, "text": "pain in part 11/14, i learnt about class diagrams (among other things), and in all the time I’ve ever done programming, ive never used it. i still thinks its super useless (unless someone reading this strongly disagrees). i can see a niche use case where class diagrams could be useful, but imo, it isn’t useful for me. i also did packages, which i already know about, and they are quite easy, so it wasn’t much of a problem for me. I also learnt about Exceptions, and how to throw them. learnt to write to a file and finished this part. and i also learnt one thing more. I absolutely HATE unit tests. The exercises had tests I needed to pass, and omw they were so annoying. I miss ONE space and the entire thing fails. genuinely pmo. My friend said unit tests are useful in some scenarios but are also a pain and ig, having an automated checker is useful but still, I’ll hate them with every fiber in my body. yea that’s it. I hated that one exercise which took me an hour because I missed one line of output. ✌️"}, {"post_id": 21892, "ts": "2026-07-04T02:12:00Z", "hours": 3.6606, "text": "Part 10 DevLog Part 10 finished, wheeeeee (I’m (slowly) losing my mind)} In Part 10, I learnt about Java .stream(). Initially, i thought streams were useless since it was easier to use a for-each loop (still my goat), but recently, i began using streams since its more compact and easier to read. I also learnt to make a custom comparator, brushed up on regex again, learnt of enums and Iterator. i do still think iterator class is mostly useful, unless you need to go thru a list and delete elements from them. streams were genuinely painful when i first started doing them. i for the life of me cld not figure out how to use them properly. now i’m semi-confident in using them (i think), and they are useful in some scenarios. (wish i cld show better screenshots but this is all i got sry) ✌️"}, {"post_id": 18149, "ts": "2026-06-29T05:14:06Z", "hours": 0.5469, "text": "Just redid my README, i still think its not that good so if anyone has any suggestions, please leave a comment. tks ✌️"}, {"post_id": 18105, "ts": "2026-06-29T03:19:35Z", "hours": 3.9225, "text": "Finished Part 9/14 of the Java MOOC. I learnt about Interfaces and Abstract methods, how to extend classes and implement methods etc. I learnt how there can be used with Polymorphism to make the program more versatile too. yea i got nothing much else to add. quite hyped to almost be done with this course and start on my mod. it shld be less painful than before right? ✌️ ts so gay PS: quick edit, after this im gna spend some time making my README better cus it sucks rn. ill devlog that after im done"}, {"post_id": 14297, "ts": "2026-06-23T11:22:30Z", "hours": 1.5067, "text": "Completed Part 8 in record time wth. I have no idea how I just completed Part 8 in just 2 days. Actually wait, I do. I skipped the first 5 exercises since they are just a recap of Java Programming I (might do them after if I want to get the certificate). Just learnt HashMaps in Part 8. I’ve got no interesting output to show, so enjoy these 2 pictures. I also learnt that VSCode allows you to generate Getters & Setters, or Contructors for field variables, equals() & hashMap() overrides etc. which is like just so cool. cld’ve saved me so much time. I’ll now move on to Part 9, which makes me one step closer to making my mod. cya ✌️✌️"}, {"post_id": 13626, "ts": "2026-06-22T11:02:12Z", "hours": 14.7986, "text": "I just finished Java Programming I of the Java MOOC course by University of Helsinki. I was allowed to log hours spent learning for my project (the Minecraft Mod), so I did :) Initially, I decided to be stupid and make a Minecraft Mod without learning Java (biggest mistake) and that caused me eternal pain. I’m not sure why I did that, so I then decided to actually learn Java. I’ll probably DevLog every time I finish 1 part of the course, or whenever I feel like it lol, but yea here’s 14h logged then. It’s just a screenshot cus I was too lazy to record a video. The screenshot shows one of the exercises I did for the course, the second last exercise of the Java Programming I course. After this, I move to Java Programming II course. After I finish that, I’ll work on my mod, I guess it’s long time due by now. Hopefully it goes better than before (wish me luck). I think that’s it (holy yap) ✌️"}]...
|
Title: Resource-Screening by @shashi93 | Stardance Title: Resource-Screening by @shashi93 | Stardance
Devlogs:
I just finished Java Programming I of the Java MOOC course by University of Helsinki. I was allowed to log hours spent learning for my project (the Minecraft Mod), so I did :) Initially, I decided to be stupid and make a Minecraft Mod without learning Java (biggest mistake) and that caused me eternal pain. I’m not sure why I did that, so I then decided to actually learn Java. I’ll probably DevLog every time I finish 1 part of the course, or whenever I feel like it lol, but yea here’s 14h logged then. It’s just a screenshot cus I was too lazy to record a video. The screenshot shows one of the exercises I did for the course, the second last exercise of the Java Programming I course. After this, I move to Java Programming II course. After I finish that, I’ll work on my mod, I guess it’s long time due by now. Hopefully it goes better than before (wish me luck). I think that’s it (holy yap) ✌️
Completed Part 8 in record time wth. I have no idea how I just completed Part 8 in just 2 days. Actually wait, I do. I skipped the first 5 exercises since they are just a recap of Java Programming I (might do them after if I want to get the certificate). Just learnt HashMaps in Part 8. I’ve got no interesting output to show, so enjoy these 2 pictures. I also learnt that VSCode allows you to generate Getters & Setters, or Contructors for field variables, equals() & hashMap() overrides etc. which is like just so cool. cld’ve saved me so much time. I’ll now move on to Part 9, which makes me one step closer to making my mod. cya ✌️✌️
Finished Part 9/14 of the Java MOOC. I learnt about Interfaces and Abstract methods, how to extend classes and implement methods etc. I learnt how there can be used with Polymorphism to make the program more versatile too. yea i got nothing much else to add. quite hyped to almost be done with this course and start on my mod. it shld be less painful than before right? ✌️ ts so gay PS: quick edit, after this im gna spend some time making my README better cus it sucks rn. ill devlog that after im done
Just redid my README, i still think its not that good so if anyone has any suggestions, please leave a comment. tks ✌️
Part 10 DevLog Part 10 finished, wheeeeee (I’m (slowly) losing my mind)} In Part 10, I learnt about Java .stream(). Initially, i thought streams were useless since it was easier to use a for-each loop (still my goat), but recently, i began using streams since its more compact and easier to read. I also learnt to make a custom comparator, brushed up on regex again, learnt of enums and Iterator. i do still think iterator class is mostly useful, unless you need to go thru a list and delete elements from them. streams were genuinely painful when i first started doing them. i for the life of me cld not figure out how to use them properly. now i’m semi-confident in using them (i think), and they are useful in some scenarios. (wish i cld show better screenshots but this is all i got sry) ✌️
pain in part 11/14, i learnt about class diagrams (among other things), and in all the time I’ve ever done programming, ive never used it. i still thinks its super useless (unless someone reading this strongly disagrees). i can see a niche use case where class diagrams could be useful, but imo, it isn’t useful for me. i also did packages, which i already know about, and they are quite easy, so it wasn’t much of a problem for me. I also learnt about Exceptions, and how to throw them. learnt to write to a file and finished this part. and i also learnt one thing more. I absolutely HATE unit tests. The exercises had tests I needed to pass, and omw they were so annoying. I miss ONE space and the entire thing fails. genuinely pmo. My friend said unit tests are useful in some scenarios but are also a pain and ig, having an automated checker is useful but still, I’ll hate them with every fiber in my body. yea that’s it. I hated that one exercise which took me an hour because I missed one line of output. ✌️
2 more parts to go >”< Finally learnt type parameters (those things inside the <> ) Learnt to make my own implementation of ArrayList and HashMap and 2d arrays (which are and have always been painful) I also decided to try something new this time, I turned on Copilot Code Completion. (cus it’s cool to see the ghost text) . it was genuinely painful at first, and i want to like it but i also rlly hate it sometimes. i got somewhat used to it, then i turned it off, cus it felt like cheating for some of the exercises. I turned it off on the last exercise (deciding the pain was not worth it) and went into even bigger pain, cus 2d arrays. When doing the last exercise (Magic Square), i lowk blanked out and did not feel like doing Java, but i persevered thru anyways. Specifically, when it came to calculating diagonals of the square, cus i didnt know how to do that. I did some brainstorming, found out it’s actually super simple and somehow managed to get it right. (actl i just realized my program is broken for all values above 5, but uh im not fixing it _ ) ooh and uh, anyone got suggestions for my mod name, since im 2 parts away from working on it? (current name is resource-screening btw, but i think its cringy) ✌️
JavaFX JavaFX was interesting, and I’m not too sure how I want to feel about it. I’ve not much to say about this part. Minecraft doesn’t actually use JavaFX, so this part was just slightly useless, but there are some similarities to Minecraft’s rendering system (Lightweight Java Game Library) that I can use to make my mod. I’m most exited for Part 14, where I learn about Maven, since it’s a Java topic I know not much about. Most importantly, after Part 14, I get to finally work on my mod. One interesting thing about this part is that I switched to IntelliJ since it was easier to work with JavaFX on it than on VSCode. Setting up JavaFX just to start working on this part was painful, but I’m happy that I got it working For now, enjoy the TicTacToe Application, and the horrendous if-condition that ends the game :) and sorry this devlog is lowk kinda mid, im tired and don’t feel like writing rn but oh well ✌️
Part 14 The first Part of Part 14 was an extension of JavaFX, where I learnt how to draw charts using JavaFX. Overall, not a too hard topic. One small funny error I spent a bit of time on was on the second exercise, where after an egregious amount of time writing code, my chart showed up. However, since I used an absolute path for the tsv data file, when I submitted that code to the server, it showed an error. Then after a lot of debugging, I remembered a previous exercise, where I had to remove the absolute path before it worked, and when I did that, it worked perfectly. Then, I spent a good bit of time cleaning up my jdk installation, before resuming pain Java. On the next exercise, I needed to create a line chart that shows the amount of savings over time, and this was more pain than I’ve ever experienced. Creating the components was easy, but the formula for plotting the points, yea that was pure torture. 2h of trying, and I finally caved. I thought I was good at math but oh well, asked AI what I was doing wrong, and apparently, I was off-by-one in my data plotting & my formula was adding the savings too many times. Absolute headache going through that, but at least I was finally able to overcome it. And then another problem sprang up. There was an index out of bounds error when running the tests, and I asked the discord server why this was happening, and basically, I was missing 4 lines of code, that is essentially just styling the program, which caused that. yea true pain. I also went on a journey of remaking Aseprite (well not really), and I copied Andy Warhol and remade the Mona Lisa. I almost got it first try, except for one thing. See, humans cant see minute pixel colour differences, but computers can. Not so long story short, due to pixel overwrites from integer truncation, the pixel colour values were just ever so slightly off, that the tests were failing. After previous traumatic events, I caved and asked AI what was wrong, and basically the loop incrementer supplied by the base program was wrong, and it fixed it. It’s fun to leave the boring stuff to AI, and the fun stuff for me. I then followed the step-by-step guideline on remaking Asteroids by Atari, and I think it went ok. I’m most excited right now because finally I complete the Java MOOC course, and I can start work on my mod. But I’m also quite scared/anxious, because I don’t even know where to start now, after so long of not working on my mod. but i’ll figure it out, hopefully. and im also gonna take this time to ask for any name reccomendations, or do you think i should just go with resource-screening ^____^ ✌️
Swapping textures i finally, after like 5h managed to swap between bare bones & faithful x64 yipee I think imma ship the project now you can download from the releases page B1 switches to bare bones B2 switches to faithful there are some minor bugs i need to iron out but for now, i think a first ship is due took way too long to get here but oh well now i gotta figure out that individual texture thing
I spent a while learning Java nio and managed to get the names of all the texture packs and the textures inside of them i also created doogile.zip (as requested by my friend), that will serve as the main way to select individual textures just a simple devlog to catch you guys up to what i’ve been doing
basic texture swapping After actl not too much pain, I got basic texture swapping done. I created a helper class to handle all my texture swapping logic, and it works quite neatly. I do hate File I/O in any programming language, but my mod kind of revolves around FIle I/O, and honestly, even though I got some super unhelpful error messages (I got empty error messages), I somehow managed to pull through Some things I have yet to work on: fix ui to allow all installed packs (currently for testing I just use Motchsens better leaves, since it’s a small pack) allow not just textures but also block models to be hotswapped pray modrinth reviews my project so i can ship it ✌️
dropdown list works >< last time i did this, it took me 30h also what do you think of my highlight, instead of just making the blue border brighter and whiter, i decided to make it redder, to stand out, does it look good? as you can see, there is an error with the dropdown list, as when i pressed the last option, it didnt register (closer to the end of the video) because the button behind it, b9 was getting clicked instead I doub’t this will be a problem (at least for current me), since i dont think the dropdown lists should be ontop of smth else, hopefully but oh well, when it comes to that ill figure it out edit: argh i just realised i haven’t finished scrolling behaviour i’ll get to work on that now my previous ship is still not verified bcos modrinth still havent reviewed my mod (it’s been 3 weeks) ( ˘︹˘ ) so i submitted it to curseforge I’ll update my mod with the newest features and then reship
More file shenanigans! I managed to persist the saved options to the config file, and changed the buttons to dropdowns Some ui stuff still needs fixing but it’s gone relatively alright My ship is still in the process of getting verified, but my project shld be shipped soon!
Almost ready for second ship! The UI is terrible, but I think for now it works. There are still a few bugs with the UI I plan to fix later. The main part of this devlog is that, i changed the layout of the dropdowns, and I created a menu to show the currently selected texture, so it’s easier to see what you’re changing from and to. I fixed some minor bugs with the dropdownlist, and overall, I’m quite happy with how it turned out. Some reviewers didn’t fully understand my mod, so I’ll put some actually better usage instructions in the ship message. Some guy also said my project was completely AI :/ (it’s not), but i accidentally clicked accept payout instead of flagging the review, while going to the bad review. Oh well. I do wan’t to mention that I did use AI for guidance, but it did not code my mod for me. That’s about it After my second ship, I doubt I can continue developing my mod, because my finals are in like 2 days (and i’m doing anything but studying for it, so hope you enjoy my mod, as it is now! ✌️
Ships:
Does some simple texture swapping. I’m getting into individual textures now. Learning Java definitely took a lot of the time, but I’m happy I got something working.
I have a whole bunch of resource packs installed, and managing all of them was a pain. So I decided, why not make a mod to help me do that? To test my mod: Ensure you have some resourcepacks installed, and they should contain custom textures for leaves (I recommend Faithful, Barebones and Motschen’s better leaves). After which, get into a minecraft world, and possibly place some leaves in front of you. Then go into the resourcepacks settings and change the textures. Each dropdown controls a specific leaf texture, as you can see via the texture renderer on top. If you have more than two resourcepacks, the last one may be hidden by the texture renderer, so you can just click through the texture renderer to activate it. Have fun customising textures, I plan to add more functionality soon! :) ✌️...
|
1793000959.7805867
|
1793087359.7805867
|
|
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!...
|
1792990575.4397113
|
1793076975.4397113
|
|
18004
|
MeowOS by @ajmaleee__ | Stardance
|
ajmaleee__
|
2
|
13.37
|
30
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-05T10:20:48Z", "hours": 2.0, "multiplier": 12.64, "payout": 30, "blessing": "neutral", "text": "MEOW :3 I can confidently say MeowOS is one of the most unhinged yet beautiful things I’ve created on this floating space rock the idea was born while I was reading about webOS meanwhile my cat was standing beside me screaming for treats like a tiny unpaid project manager. that was the exact moment science peaked For the past several days I have sacrificed,sleep, sanity, my hard disk,and possibly several years of lifespan to create this masterpiece This second ship was also way less AI carried compared to before. Most of the time it was just me, caffeine, broken CSS, and staring at the screen like a medieval scholar trying to decode ancient prophecies somehow… against all odds… MeowOS survived And honestly? every 13+ hour coding session was worth it No matter what happens, MeowOS will probably remain one of my favorite projects ever made So here I am proudly presenting… MEOW OS <3 try ittt!! : https://ajmaleee.github.io/MeowOS-v2/ you can get a tour of the project by clicking “u are a shipright” and selecting either tour or checklist :3", "repo": "https://github.com/Ajmaleee/MeowOS", "demo": "https://ajmaleee.github.io/MeowOS/"}, {"ship_num": 2, "ts": "2026-06-28T12:39:14Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "MEOW :3 I must say… MeowOS is probably the finest thing I’ve created during my stay on this spinning rock i got the idea while I was reading about webOS… meanwhile my cat was aggressively screaming at me for extra treats. Truly a revolutionary moment in computer science >_< Over the past several days, I sacrificed sleep, sanity, and unfortunately one hard disk to bring this project to life. Despite all the chaos, bugs, and moments where I questioned my existence, I somehow managed to build what you see here today And honestly… Every single sleepless night and 10+ hour coding session was worth it No matter what happens, MeowOS will always stay close to my heart So here I am, proudly presenting… MEOW OS try ittt!! : https://ajmaleee.github.io/MeowOS-v2/ you can get a tour of this project by clicking u are a shipright, and selecting either tour or checklist", "repo": "https://github.com/Ajmaleee/MeowOS", "demo": "https://ajmaleee.github.io/MeowOS/"}]...
|
[{"post_id": 44080, "ts": "202 [{"post_id": 44080, "ts": "2026-08-09T16:32:52Z", "hours": 1.0019, "text": "FINAL DEVLOG ____________________________________________________________________________________________here are the changes:- -re wrote the entire source code,its now simple,yet cat theme focusesd. -added a spidey cat(inspired from the new spiderman moovie -added devlog app,the path is more better there ive come up with the most finest animation i could pull off this marks the end of my journy, ____________________________________________________________________________________________TELL YO CAT I SAID PSPSPS…"}, {"post_id": 26642, "ts": "2026-07-11T15:59:40Z", "hours": 0.3675, "text": "FINAL DEVLOG : before dat,i forgot to configuere hackatime in my new pc and a lot of working time aint recorded T_T, im srry yallllll with that said,here are the changes: -reduced AI usage to less than strictly 30%, yes the interface is same but the code was rewritten with a slightly better logic and smoother flow ive kept the guided tour as is as i dont want new users to struggle using my OS -im learning to use git,SO AS A TRIBUTE ive added git to catshell !!~ ,all the git commands work and i was able to manage a small memmory allocation for the files being used! -i wanted to add smoother animations for my project,here it is,with the most finest animation i could pull off this marks the end of my journy, TELL YO CAT I SAID PSPSPS…"}, {"post_id": 22739, "ts": "2026-07-05T10:01:42Z", "hours": 1.9667, "text": "MROWWW!~ soooooooooooooo, i re wrote almost all parts of css, i tried to maintain the original look tho re wrote the css,enhanced the ui"}, {"post_id": 19323, "ts": "2026-06-30T16:31:40Z", "hours": 0.4039, "text": "MROWW~ my ship requires changes…the reason said is heavy use of AI honestly..i think its true..i utilised LLMs lil too much to add features quickly.. i too have contributed an unavoidable part in programing,proved by the 10+ hour hackatime.However,i respect the desecion made by the shipwrites and acknowledge my mistake well….a wise man once said, nothing but hardwork can bring you success,..yes its true i realise i deviatd from my path and over used somthing which i shuldnt have to resolve the issue,ive decided to rewrite the entire css,but also to not to use any help of any kind of LLMs ,exept in extreme cases of errors ,which i will mention explicitly in the coming devlogs hence I .. wholeheartedly appologise for deviating from my path and the mission"}, {"post_id": 17368, "ts": "2026-06-28T04:00:00Z", "hours": 3.6172, "text": "MEOWW~, a lot of things happened T_Tfirstly,my hard disk randomly decided to d*e 4 days ago by currupting lot of my files,thankfully i was able to recover most part of it,i ordered a new ssd …MY POTATO WORKS AGAINNNN the past 4 days ive been devoloping the project imma brothers laptop,he said no to install hackatime,so i ended up jus doing it without it,prolly took a lot more time than what it shows here Thanks to @tongyu for showing intrest imma project,and as a note of thanks,ive added @tongyu s favorite pet cieling,read more abt it below i added hella lot of cool things,wnna try it out? https://ajmaleee.github.io/MeowOS-v2/ ——————————————————— changes:-added customise my cat feature,now u can add sunglasses,hats and cool stuff with yo cattttt(and ofcc cieling, and cielingssss !! :3 -added INSTAGRAM,u can doomscroll now (cat reels ofc >_<) -minor bug fixes here and there and in the entire ui flow(cats are good at hunting bugs ) only thing now left is to add an icon for pawgram(instagram),and im done for shipping, hopefully this is the last devlog before shippingi have put the best of my effort in this, and i must say ,the journy was amazing and i learned a lot of new things TELL YO CAT I SAID PSPSPSPSP……"}, {"post_id": 10744, "ts": "2026-06-17T17:10:24Z", "hours": 1.8333, "text": "soooo…i made a dumb decetion of using codex after seeing an ad,no hate,but it basicly filled my code with bugs T_T i wanted to make the icons squircle,but couldnt,ill do it soon https://ajmaleee.github.io/MeowOS-v2/ changes: -fixed bug in app icon size edit,fixed it,now it actually increases icon image size -gave the calender and the calculator UI more buetiful ^_^ -added meow sound ,looking forward to add pur -fixed a bug in the purr planner,loading error bug fixed -made the fur explorer much more easy to manage,minor bug fix TEL YO CAT I SAID PSPSPSPSPPSPS…."}, {"post_id": 10042, "ts": "2026-06-16T16:39:58Z", "hours": 1.6236, "text": "quick devlog,its past my bedtime,i might get caught any time! try MeowOS : https://ajmaleee.github.io/MeowOS-v2/ changes: -fixed some bugs -added space cat wallpapper (yeaa i stole it from google~) -the most tough part…designed most of the icons,..some more left(ts took 1 hour btw,i didnt know how to connect canva to hackatime,that time aint added T_T) tday was a busy day,couldnt do much ,be back tmrww MEOWWW~!"}, {"post_id": 9321, "ts": "2026-06-15T17:15:26Z", "hours": 1.7069, "text": "MEOW!!,new update dropped try the current version v2.2: https://ajmaleee.github.io/MeowOS-v2/ changes made ^_^ : -added more backgrounds and wallpapper -fixed mouse not visible bug -added proper memes in to the memes app! (yeaa i cant live without cat memes T_T ) -added meow sound,idk why…its ADDICTING! -implimented memmory in pawpad! -whishkers the cat is now online 24/7 :3 -last but not least,now u can upload gifs as bg <3 beforee goingg…. TELL YOUR CAT I SAID PSPSPSPSPS ^_^"}, {"post_id": 8665, "ts": "2026-06-14T12:06:08Z", "hours": 0.8944, "text": "behold the ⭐catOS v2.1⭐ u dont need to read ts and all,jus try it yourself😁 v2.1 : https://ajmaleee.github.io/MeowOS-v2/ v1.0: https://ajmaleee.github.io/MeowOS/ changes made :3 -Re-designed the old cyberpunk theme with actual cat theme -added mac os style dock for better window managment -added option to upload custom wallpaper -made the flow smoother ,added more details to the apps -added devoloper details-yeaa i wanna glaze ngl😆 -fixed the big ahh bug in the calculator -added new commands to catshell, more meow meow now😇 buttttt, im feeling lazy tday and therefore u cant basicaly see the icons ,mouse pointer, moosics and images rn, imma add em pretty soon lmk if u find any bugs ,ill hunt em down😼🐾"}, {"post_id": 8134, "ts": "2026-06-13T16:05:07Z", "hours": 0.4097, "text": "meowOS v.1 is readyy!!,looking forward to meow more in the coming days wanna try it out? ,clicke here -> https://ajmaleee.github.io/MeowOS/ included apps: -meme gallary -purrfox (browser) -pawpad (hehhee creativity level 📈) -meowtunes -cat paint (now u can export the files!!) -catshell -fur explorer -cal cat -catch yarns -settings -paw planner (calender 😆) -and more! and guess what,u can message other cats!~ ^_^"}]...
|
Title: MeowOS by @ajmaleee__ | Stardance
Devlogs: Title: MeowOS by @ajmaleee__ | Stardance
Devlogs:
meowOS v.1 is readyy!!,looking forward to meow more in the coming days wanna try it out? ,clicke here -> https://ajmaleee.github.io/MeowOS/ included apps: -meme gallary -purrfox (browser) -pawpad (hehhee creativity level 📈) -meowtunes -cat paint (now u can export the files!!) -catshell -fur explorer -cal cat -catch yarns -settings -paw planner (calender 😆) -and more! and guess what,u can message other cats!~ ^_^
behold the ⭐catOS v2.1⭐ u dont need to read ts and all,jus try it yourself😁 v2.1 : https://ajmaleee.github.io/MeowOS-v2/ v1.0: https://ajmaleee.github.io/MeowOS/ changes made :3 -Re-designed the old cyberpunk theme with actual cat theme -added mac os style dock for better window managment -added option to upload custom wallpaper -made the flow smoother ,added more details to the apps -added devoloper details-yeaa i wanna glaze ngl😆 -fixed the big ahh bug in the calculator -added new commands to catshell, more meow meow now😇 buttttt, im feeling lazy tday and therefore u cant basicaly see the icons ,mouse pointer, moosics and images rn, imma add em pretty soon lmk if u find any bugs ,ill hunt em down😼🐾
MEOW!!,new update dropped try the current version v2.2: https://ajmaleee.github.io/MeowOS-v2/ changes made ^_^ : -added more backgrounds and wallpapper -fixed mouse not visible bug -added proper memes in to the memes app! (yeaa i cant live without cat memes T_T ) -added meow sound,idk why…its ADDICTING! -implimented memmory in pawpad! -whishkers the cat is now online 24/7 :3 -last but not least,now u can upload gifs as bg <3 beforee goingg…. TELL YOUR CAT I SAID PSPSPSPSPS ^_^
quick devlog,its past my bedtime,i might get caught any time! try MeowOS : https://ajmaleee.github.io/MeowOS-v2/ changes: -fixed some bugs -added space cat wallpapper (yeaa i stole it from google~) -the most tough part…designed most of the icons,..some more left(ts took 1 hour btw,i didnt know how to connect canva to hackatime,that time aint added T_T) tday was a busy day,couldnt do much ,be back tmrww MEOWWW~!
soooo…i made a dumb decetion of using codex after seeing an ad,no hate,but it basicly filled my code with bugs T_T i wanted to make the icons squircle,but couldnt,ill do it soon https://ajmaleee.github.io/MeowOS-v2/ changes: -fixed bug in app icon size edit,fixed it,now it actually increases icon image size -gave the calender and the calculator UI more buetiful ^_^ -added meow sound ,looking forward to add pur -fixed a bug in the purr planner,loading error bug fixed -made the fur explorer much more easy to manage,minor bug fix TEL YO CAT I SAID PSPSPSPSPPSPS….
MEOWW~, a lot of things happened T_Tfirstly,my hard disk randomly decided to d*e 4 days ago by currupting lot of my files,thankfully i was able to recover most part of it,i ordered a new ssd …MY POTATO WORKS AGAINNNN the past 4 days ive been devoloping the project imma brothers laptop,he said no to install hackatime,so i ended up jus doing it without it,prolly took a lot more time than what it shows here Thanks to @tongyu for showing intrest imma project,and as a note of thanks,ive added @tongyu s favorite pet cieling,read more abt it below i added hella lot of cool things,wnna try it out? https://ajmaleee.github.io/MeowOS-v2/ ——————————————————— changes:-added customise my cat feature,now u can add sunglasses,hats and cool stuff with yo cattttt(and ofcc cieling, and cielingssss !! :3 -added INSTAGRAM,u can doomscroll now (cat reels ofc >_<) -minor bug fixes here and there and in the entire ui flow(cats are good at hunting bugs ) only thing now left is to add an icon for pawgram(instagram),and im done for shipping, hopefully this is the last devlog before shippingi have put the best of my effort in this, and i must say ,the journy was amazing and i learned a lot of new things TELL YO CAT I SAID PSPSPSPSP……
MROWW~ my ship requires changes…the reason said is heavy use of AI honestly..i think its true..i utilised LLMs lil too much to add features quickly.. i too have contributed an unavoidable part in programing,proved by the 10+ hour hackatime.However,i respect the desecion made by the shipwrites and acknowledge my mistake well….a wise man once said, nothing but hardwork can bring you success,..yes its true i realise i deviatd from my path and over used somthing which i shuldnt have to resolve the issue,ive decided to rewrite the entire css,but also to not to use any help of any kind of LLMs ,exept in extreme cases of errors ,which i will mention explicitly in the coming devlogs hence I .. wholeheartedly appologise for deviating from my path and the mission
MROWWW!~ soooooooooooooo, i re wrote almost all parts of css, i tried to maintain the original look tho re wrote the css,enhanced the ui
FINAL DEVLOG : before dat,i forgot to configuere hackatime in my new pc and a lot of working time aint recorded T_T, im srry yallllll with that said,here are the changes: -reduced AI usage to less than strictly 30%, yes the interface is same but the code was rewritten with a slightly better logic and smoother flow ive kept the guided tour as is as i dont want new users to struggle using my OS -im learning to use git,SO AS A TRIBUTE ive added git to catshell !!~ ,all the git commands work and i was able to manage a small memmory allocation for the files being used! -i wanted to add smoother animations for my project,here it is,with the most finest animation i could pull off this marks the end of my journy, TELL YO CAT I SAID PSPSPS…
FINAL DEVLOG ____________________________________________________________________________________________here are the changes:- -re wrote the entire source code,its now simple,yet cat theme focusesd. -added a spidey cat(inspired from the new spiderman moovie -added devlog app,the path is more better there ive come up with the most finest animation i could pull off this marks the end of my journy, ____________________________________________________________________________________________TELL YO CAT I SAID PSPSPS…
Ships:
MEOW :3 I must say… MeowOS is probably the finest thing I’ve created during my stay on this spinning rock i got the idea while I was reading about webOS… meanwhile my cat was aggressively screaming at me for extra treats. Truly a revolutionary moment in computer science >_< Over the past several days, I sacrificed sleep, sanity, and unfortunately one hard disk to bring this project to life. Despite all the chaos, bugs, and moments where I questioned my existence, I somehow managed to build what you see here today And honestly… Every single sleepless night and 10+ hour coding session was worth it No matter what happens, MeowOS will always stay close to my heart So here I am, proudly presenting… MEOW OS try ittt!! : https://ajmaleee.github.io/MeowOS-v2/ you can get a tour of this project by clicking u are a shipright, and selecting either tour or checklist
MEOW :3 I can confidently say MeowOS is one of the most unhinged yet beautiful things I’ve created on this floating space rock the idea was born while I was reading about webOS meanwhile my cat was standing beside me screaming for treats like a tiny unpaid project manager. that was the exact moment science peaked For the past several days I have sacrificed,sleep, sanity, my hard disk,and possibly several years of lifespan to create this masterpiece This second ship was also way less AI carried compared to before. Most of the time it was just me, caffeine, broken CSS, and staring at the screen like a medieval scholar trying to decode ancient prophecies somehow… against all odds… MeowOS survived And honestly? every 13+ hour coding session was worth it No matter what happens, MeowOS will probably remain one of my favorite projects ever made So here I am proudly presenting… MEOW OS <3 try ittt!! : https://ajmaleee.github.io/MeowOS-v2/ you can get a tour of the project by clicking “u are a shipright” and selecting either tour or checklist :3...
|
1792882134.6530385
|
1793746134.6530385
|
|
18007
|
MorbidVisuals by @naver | Stardance
|
naver
|
2
|
15.0
|
239
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-23T13:50:26Z", "hours": 5.0, "multiplier": 13.87, "payout": 68, "blessing": "neutral", "text": "Updated the project to include a touch designer like blur mask using convex hull’s and gaussian blur also added a new drawing system that is a heck of a lot better than the old one", "repo": "https://github.com/20Cuneyt10/MorbidVisuals", "demo": "https://20cuneyt10.github.io/MorbidVisuals/"}, {"ship_num": 2, "ts": "2026-06-17T17:07:09Z", "hours": 10.0, "multiplier": 16.63, "payout": 171, "blessing": "neutral", "text": "I made a MediaPipe guide that gets the newly used tasks function instead of what nearly all other tutorials do (get the old function which isn’t supported anymore) wrote some scripts to use the 21 Hand Landmarks that we get through MediaPipe’s hand_landmark.task to write 4 scripts (from basic to complex)meddled with some math used a formula that i actually learned in school, turned the whole python scripts into one Web Assembly(with AI) html so i can offload the work onto the users pc then published it using githup pages in the making of this i ventured countless websites but main ones were googles original documents about the new .task function", "repo": "https://github.com/20Cuneyt10/MorbidVisuals", "demo": "https://20cuneyt10.github.io/MorbidVisuals/"}]...
|
[{"post_id": 53061, "ts": "202 [{"post_id": 53061, "ts": "2026-08-23T13:49:19Z", "hours": 1.135, "text": "Added the readme for the blur stuff and had AI help me on the WASM for the blur stuff all on the website with a flip camera keybind"}, {"post_id": 21154, "ts": "2026-07-02T23:18:22Z", "hours": 2.1069, "text": "Added a new drawing system took a bit to work it out but finally after switching to the normal python lists it was like a breeze. There are still some gimmicks i would like to fix in the near future, but as i just stated “in the near future”. Go to my GitHub to check this script or my other scripts about MediaPipe.👋"}, {"post_id": 20802, "ts": "2026-07-02T14:36:16Z", "hours": 1.6783, "text": "Working on new versions that utilize both hands. Also looking into other OpenCV functions like .GaussianBlur and .Canny. It took quite a bit to do the hand thing on the new .tasks() but after figuring that out it all went smoothly. Go check out my other code pieces about MediaPipe on my Github. 👋"}, {"post_id": 10636, "ts": "2026-06-17T14:23:48Z", "hours": 0.8308, "text": "Nearly finished with pushing the demo to the web .Not gonna lie I used AI to turn my code to WebAssembly for the demo since im not that good at html"}, {"post_id": 10591, "ts": "2026-06-17T12:34:29Z", "hours": 0.8283, "text": "Finished up the README looking up how to deploy this right now might use webassembly but ı dont know"}, {"post_id": 10565, "ts": "2026-06-17T11:19:03Z", "hours": 1.2558, "text": "Finishing up another script this one was a tad harder than the others because i decided to also rotate the square whilst making it bigger then added a square within the square using a formula that ı actually learned in school. Looking into how to actually deploy these (even tough this project and its repo has become a study more than a project)"}, {"post_id": 8682, "ts": "2026-06-14T12:49:44Z", "hours": 3.0156, "text": "Continuing the work on the new drawing system using visual input whilst also working on a sound level control script having some issues with it but nearly finished will push the full version to my github."}, {"post_id": 8349, "ts": "2026-06-13T21:32:08Z", "hours": 0.9811, "text": "Actively working on a new and improved drawing system that will use outside variables to draw on other places got it half working but still has some polishing to do and is nowhere near what i wanted to do may ask AI where i went wrong but im trying to use it as little as possible on this project didn’t add to README.md yet ,will try to add drawing polygons and arcs the next time."}, {"post_id": 8261, "ts": "2026-06-13T19:05:19Z", "hours": 1.66, "text": "Finished another script utilizing the results function even more and using it to draw lines and circles when pinched. Added to the repo and the README.md go check it out at my Github.👋"}, {"post_id": 8090, "ts": "2026-06-13T14:42:29Z", "hours": 1.73, "text": "Just finished the first python script and the README. about it. It’s a basic script for displaying hand landmarks in webcam footage. It is rather a simple script because I simply want to learn and test the waters before I sink too deep that I can’t swim back up .👋"}]...
|
Title: MorbidVisuals by @naver | Stardance
Devlog Title: MorbidVisuals by @naver | Stardance
Devlogs:
Just finished the first python script and the README. about it. It’s a basic script for displaying hand landmarks in webcam footage. It is rather a simple script because I simply want to learn and test the waters before I sink too deep that I can’t swim back up .👋
Finished another script utilizing the results function even more and using it to draw lines and circles when pinched. Added to the repo and the README.md go check it out at my Github.👋
Actively working on a new and improved drawing system that will use outside variables to draw on other places got it half working but still has some polishing to do and is nowhere near what i wanted to do may ask AI where i went wrong but im trying to use it as little as possible on this project didn’t add to README.md yet ,will try to add drawing polygons and arcs the next time.
Continuing the work on the new drawing system using visual input whilst also working on a sound level control script having some issues with it but nearly finished will push the full version to my github.
Finishing up another script this one was a tad harder than the others because i decided to also rotate the square whilst making it bigger then added a square within the square using a formula that ı actually learned in school. Looking into how to actually deploy these (even tough this project and its repo has become a study more than a project)
Finished up the README looking up how to deploy this right now might use webassembly but ı dont know
Nearly finished with pushing the demo to the web .Not gonna lie I used AI to turn my code to WebAssembly for the demo since im not that good at html
Working on new versions that utilize both hands. Also looking into other OpenCV functions like .GaussianBlur and .Canny. It took quite a bit to do the hand thing on the new .tasks() but after figuring that out it all went smoothly. Go check out my other code pieces about MediaPipe on my Github. 👋
Added a new drawing system took a bit to work it out but finally after switching to the normal python lists it was like a breeze. There are still some gimmicks i would like to fix in the near future, but as i just stated “in the near future”. Go to my GitHub to check this script or my other scripts about MediaPipe.👋
Added the readme for the blur stuff and had AI help me on the WASM for the blur stuff all on the website with a flip camera keybind
Ships:
I made a MediaPipe guide that gets the newly used tasks function instead of what nearly all other tutorials do (get the old function which isn’t supported anymore) wrote some scripts to use the 21 Hand Landmarks that we get through MediaPipe’s hand_landmark.task to write 4 scripts (from basic to complex)meddled with some math used a formula that i actually learned in school, turned the whole python scripts into one Web Assembly(with AI) html so i can offload the work onto the users pc then published it using githup pages in the making of this i ventured countless websites but main ones were googles original documents about the new .task function
Updated the project to include a touch designer like blur mask using convex hull’s and gaussian blur also added a new drawing system that is a heck of a lot better than the old one...
|
1793105244.9850144
|
1793191644.9850144
|
|
18362
|
NovaOS by @RishitEncrypt | Stardance
|
RishitEncrypt
|
2
|
15.0
|
46
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-17T13:37:41Z", "hours": 3.0, "multiplier": 14.33, "payout": 46, "blessing": "neutral", "text": "NovaOS started as a small experiment. I wanted to see if I could recreate the feeling of using a desktop operating system entirely inside the browser. What I expected to be a quick side project ended up becoming something much bigger over the course of a few days. The goal was never to copy Windows or macOS. I wanted NovaOS to have its own identity while still feeling familiar enough that anyone could jump in and immediately understand how to use it. The result is a browser-based desktop environment complete with its own applications, taskbar, launcher, notifications, settings system, wallpapers, and window management. Since the first version, the project has grown quite a bit. NovaOS now includes Nova AI, Nova Command, Nova Music, Notes, Calculator, Explorer, Stellar Navigation, live wallpapers, onboarding screens, desktop widgets, custom application icons, system monitoring tools, and a number of smaller quality-of-life features. Version 1.0.2 focused heavily on improving the overall experience, redesigning parts of the interface, adding new applications, and making the desktop feel more cohesive. I used Claude throughout development as a tool to help generate parts of the CSS, experiment with interface ideas, and build some larger components. Nova Command was largely built with Claude’s assistance, along with several widgets and UI systems. Everything still required a lot of manual integration, debugging, redesigning, and refinement to fit together inside the project. The hardest part was never building individual features. A calculator, notes app, or music player can be built on their own. The real challenge was getting everything to work together without breaking something else. Wallpapers needed to communicate with settings, windows needed to interact correctly with the taskbar, notifications needed to work across applications, and every new feature introduced another opportunity for bugs. A large portion of development ended up being spent connecting systems together and solving unexpected problems. What I’m most proud of isn’t any individual feature. It’s the fact that the project actually reached a point where it feels complete and usable. Starting a project is exciting. Finishing one is much harder. There were plenty of moments where fixing one issue created two new ones, but seeing everything finally come together into something that genuinely feels like a desktop environment made the effort worthwhile. If you decide to try NovaOS, the best way to experience it is to explore. Open applications, customize the desktop, launch Stellar Navigation, experiment with Nova Command, play music, change wallpapers, and see what you can find. There are still features I want to add and areas I want to improve, but this version finally feels like the vision I had when I started. For now, NovaOS v1.0.2 marks the end of the first chapter of the project.", "repo": "https://github.com/rishitencrypt/Nova-Os", "demo": "https://nova-os-encrypt.netlify.app"}, {"ship_num": 2, "ts": "2026-06-16T09:29:31Z", "hours": 12.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "So this is NovaOS, my browser based desktop environment. I started this about 3 days ago as a small side project, and somehow it turned into something much bigger than I anticipated. My primary goal for this project was to create a desktop environment which was reminiscent of an actual desktop operating system, and still remained completely within the browser. Here are some of the features I ended up including: desktop, taskbar, launcher, windowing system, live wallpapers, notifications, settings, music player, notes app, file explorer, calculator, Nova AI, Nova Command. Although I could have tried to rebuild Windows or macOS, my true intention was to create something original and built entirely by me and help of Claude AI. i used claude to create me some css for the project, nova command app was entirely made using Claude , and the widget . I believe the largest obstacle I faced was getting all the features to interact with each other. Actually implementing a single feature is one aspect; getting all your apps, windows, settings, wallpapers and notifications working together smoothly is where almost all of my time went. There were definitely quite a few bugs, and plenty of issues with deployment, and fixing one bug would cause two more. This was pretty much a project in problem solving. The thing that I am the most proud of is the fact that I actually finished it. It is quite easy to start something because of the excitement of a new idea, however actually taking that idea all the way through to completion is much more difficult. Getting all the different pieces to work together in harmony, and to create something which actually felt like a desktop was a tremendous joy that made all the debugging worthwhile. If you decide to try out NovaOS, the best way to do it is to simply mess around with it. Open the apps, try the Nova Command, use Nova Music, change a wallpaper and check the settings. Although there are still quite a few areas that may seem a bit rough around the edges, given that it was built relatively quickly, I think it pretty much captures what I was looking to achieve. And after three days I think that NovaOS v1.0 is officially done.", "repo": "https://github.com/rishitencrypt/Nova-Os", "demo": "https://nova-os-encrypt.netlify.app"}]...
|
[{"post_id": 10610, "ts": "202 [{"post_id": 10610, "ts": "2026-06-17T13:33:43Z", "hours": 3.2414, "text": "NovaOS v1.0.2 With this release, the goal was to make NovaOS feel like an actual desktop environment instead of just browser windows piled up. This includes a redesign of the layout of the Explorer. The addition of the Stellar Navigation simulator gives users the ability to navigate a space ship using a simple, yet engaging simulation game. Icons for use on the desktop were redesigned and unified using a consistent design approach, instead of relying on placeholder art for each application. There have been several updates under the hood to further refine various aspects of NovaOS including window behavior, desktop arrangement, and application layout."}, {"post_id": 9839, "ts": "2026-06-16T09:16:44Z", "hours": 1.1064, "text": "That’s all for now. NovaOS v1.0 is done after 3 days of developing, breaking, fixing stuff, redesigning some half of the interface, and wasting a lot of time trying to find those weird bugs. It grew from being an experiment to a full-fledged desktop environment working inside the browser, equipped with its own applications, launcher, wallpaper options, notifications, music player, artificial intelligence, settings, and many other features. I especially liked implementing Nova Command, Nova Music, and making the whole desktop feel like an actual operating system. Working on this project definitely brought many insights and overall I’m quite satisfied with the result achieved in such little time. For everyone interested to see the result yourself: 🔗 Live Demo: https://nova-os-encrypt.netlify.app/ 🔗 GitHub: https://github.com/rishitencrypt/Nova-Os Thanks for following me during this journey. Next project incoming."}, {"post_id": 9748, "ts": "2026-06-16T05:23:38Z", "hours": 0.5169, "text": "Hi!! NovaOS is becoming very close to that point where I can say that it’s “usable” and not just “project”. The development of most of the key features is completed now, which means that I can finally start working on improving existing code rather than implementing new stuff. Right now, I’m working on cleaning up the user interface, making the windows behave better, redesigning Settings app, working on the taskbar and Nova Hub. Also, now novaOS supports multiple live wallpapers and I have started adding some improvements to the stock apps to make them more functional. Now, it’s almost all about bug fixing, UI adjustments and quality of life improvements."}, {"post_id": 9426, "ts": "2026-06-15T19:46:15Z", "hours": 0.7653, "text": "hi! Been working on NovaOS, a desktop environment I’m building in React. It’s not a real operating system, but more of a futuristic desktop experience with its own apps, live wallpapers, glassmorphism UI, and custom window system. So far I’ve built a taskbar, start menu (Nova Hub), Notes, Explorer, Calculator, Nova AI, Nova Command, Settings, boot animations, and support for live video wallpapers. Lately I’ve been focusing on making everything feel more polished and less like a prototype. Still plenty to improve, but it’s finally starting to feel like an actual desktop instead of a bunch of components thrown together."}, {"post_id": 9375, "ts": "2026-06-15T18:29:22Z", "hours": 3.5267, "text": "now that looks like an os that you would expect in a spaceship"}, {"post_id": 9135, "ts": "2026-06-15T09:07:41Z", "hours": 0.6517, "text": "looking wayyy better than befour still lot of stuff to do"}, {"post_id": 9095, "ts": "2026-06-15T06:10:19Z", "hours": 3.9794, "text": "a big jump"}, {"post_id": 8562, "ts": "2026-06-14T07:11:57Z", "hours": 0.3853, "text": "basic structure almost done"}, {"post_id": 8538, "ts": "2026-06-14T06:17:01Z", "hours": 1.3136, "text": "making the basic structure of OS"}]...
|
Title: NovaOS by @RishitEncrypt | Stardance
Devlo Title: NovaOS by @RishitEncrypt | Stardance
Devlogs:
making the basic structure of OS
basic structure almost done
a big jump
looking wayyy better than befour still lot of stuff to do
now that looks like an os that you would expect in a spaceship
hi! Been working on NovaOS, a desktop environment I’m building in React. It’s not a real operating system, but more of a futuristic desktop experience with its own apps, live wallpapers, glassmorphism UI, and custom window system. So far I’ve built a taskbar, start menu (Nova Hub), Notes, Explorer, Calculator, Nova AI, Nova Command, Settings, boot animations, and support for live video wallpapers. Lately I’ve been focusing on making everything feel more polished and less like a prototype. Still plenty to improve, but it’s finally starting to feel like an actual desktop instead of a bunch of components thrown together.
Hi!! NovaOS is becoming very close to that point where I can say that it’s “usable” and not just “project”. The development of most of the key features is completed now, which means that I can finally start working on improving existing code rather than implementing new stuff. Right now, I’m working on cleaning up the user interface, making the windows behave better, redesigning Settings app, working on the taskbar and Nova Hub. Also, now novaOS supports multiple live wallpapers and I have started adding some improvements to the stock apps to make them more functional. Now, it’s almost all about bug fixing, UI adjustments and quality of life improvements.
That’s all for now. NovaOS v1.0 is done after 3 days of developing, breaking, fixing stuff, redesigning some half of the interface, and wasting a lot of time trying to find those weird bugs. It grew from being an experiment to a full-fledged desktop environment working inside the browser, equipped with its own applications, launcher, wallpaper options, notifications, music player, artificial intelligence, settings, and many other features. I especially liked implementing Nova Command, Nova Music, and making the whole desktop feel like an actual operating system. Working on this project definitely brought many insights and overall I’m quite satisfied with the result achieved in such little time. For everyone interested to see the result yourself: 🔗 Live Demo: https://nova-os-encrypt.netlify.app/ 🔗 GitHub: https://github.com/rishitencrypt/Nova-Os Thanks for following me during this journey. Next project incoming.
NovaOS v1.0.2 With this release, the goal was to make NovaOS feel like an actual desktop environment instead of just browser windows piled up. This includes a redesign of the layout of the Explorer. The addition of the Stellar Navigation simulator gives users the ability to navigate a space ship using a simple, yet engaging simulation game. Icons for use on the desktop were redesigned and unified using a consistent design approach, instead of relying on placeholder art for each application. There have been several updates under the hood to further refine various aspects of NovaOS including window behavior, desktop arrangement, and application layout.
Ships:
So this is NovaOS, my browser based desktop environment. I started this about 3 days ago as a small side project, and somehow it turned into something much bigger than I anticipated. My primary goal for this project was to create a desktop environment which was reminiscent of an actual desktop operating system, and still remained completely within the browser. Here are some of the features I ended up including: desktop, taskbar, launcher, windowing system, live wallpapers, notifications, settings, music player, notes app, file explorer, calculator, Nova AI, Nova Command. Although I could have tried to rebuild Windows or macOS, my true intention was to create something original and built entirely by me and help of Claude AI. i used claude to create me some css for the project, nova command app was entirely made using Claude , and the widget . I believe the largest obstacle I faced was getting all the features to interact with each other. Actually implementing a single feature is one aspect; getting all your apps, windows, settings, wallpapers and notifications working together smoothly is where almost all of my time went. There were definitely quite a few bugs, and plenty of issues with deployment, and fixing one bug would cause two more. This was pretty much a project in problem solving. The thing that I am the most proud of is the fact that I actually finished it. It is quite easy to start something because of the excitement of a new idea, however actually taking that idea all the way through to completion is much more difficult. Getting all the different pieces to work together in harmony, and to create something which actually felt like a desktop was a tremendous joy that made all the debugging worthwhile. If you decide to try out NovaOS, the best way to do it is to simply mess around with it. Open the apps, try the Nova Command, use Nova Music, change a wallpaper and check the settings. Although there are still quite a few areas that may seem a bit rough around the edges, given that it was built relatively quickly, I think it pretty much captures what I was looking to achieve. And after three days I think that NovaOS v1.0 is officially done.
NovaOS started as a small experiment. I wanted to see if I could recreate the feeling of using a desktop operating system entirely inside the browser. What I expected to be a quick side project ended up becoming something much bigger over the course of a few days. The goal was never to copy Windows or macOS. I wanted NovaOS to have its own identity while still feeling familiar enough that anyone could jump in and immediately understand how to use it. The result is a browser-based desktop environment complete with its own applications, taskbar, launcher, notifications, settings system, wallpapers, and window management. Since the first version, the project has grown quite a bit. NovaOS now includes Nova AI, Nova Command, Nova Music, Notes, Calculator, Explorer, Stellar Navigation, live wallpapers, onboarding screens, desktop widgets, custom application icons, system monitoring tools, and a number of smaller quality-of-life features. Version 1.0.2 focused heavily on improving the overall experience, redesigning parts of the interface, adding new applications, and making the desktop feel more cohesive. I used Claude throughout development as a tool to help generate parts of the CSS, experiment with interface ideas, and build some larger components. Nova Command was largely built with Claude’s assistance, along with several widgets and UI systems. Everything still required a lot of manual integration, debugging, redesigning, and refinement to fit together inside the project. The hardest part was never building individual features. A calculator, notes app, or music player can be built on their own. The real challenge was getting everything to work together without breaking something else. Wallpapers needed to communicate with settings, windows needed to interact correctly with the taskbar, notifications needed to work across applications, and every new feature introduced another opportunity for bugs. A large portion of development ended up being spent connecting systems together and solving unexpected problems. What I’m most proud of isn’t any individual feature. It’s the fact that the project actually reached a point where it feels complete and usable. Starting a project is exciting. Finishing one is much harder. There were plenty of moments where fixing one issue created two new ones, but seeing everything finally come together into something that genuinely feels like a desktop environment made the effort worthwhile. If you decide to try NovaOS, the best way to experience it is to explore. Open applications, customize the desktop, launch Stellar Navigation, experiment with Nova Command, play music, change wallpapers, and see what you can find. There are still features I want to add and areas I want to improve, but this version finally feels like the vision I had when I started. For now, NovaOS v1.0.2 marks the end of the first chapter of the project....
|
1793105602.6875987
|
1793192002.6875987
|
|
18433
|
ZENOS2.O by @yashasvib | Stardance
|
yashasvib
|
2
|
5.0
|
17
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-20T15:13:18Z", "hours": 2.0, "multiplier": 7.24, "payout": 17, "blessing": "neutral", "text": "███████╗███████╗███╗ ██╗██████╗ ███████╗ ╚══███╔╝██╔════╝████╗ ██║██╔═██╗██╔════╝ ███╔╝ █████╗ ██╔██╗ ██║██║ ██║███████╗ ███╔╝ ██╔══╝ ██║╚██╗██║██║ ██║╚════██║ ███████╗███████╗██║ ╚████║ ██████ ███████║ ╚══════╝╚══════╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝ HEY !!! this is my project ZENOS 2.0 a improved version of my old zenos and it is again inspired by my idol jennnieeeee. so this basically have two pages - the first page is landing page where there is a header with date day and time and body contain a draggable window with thing .... bout me and the second page is my main OS where there is again a header with weather date day time and the body contain the main OS system with apps and options to change the theme and even Background . so at first i thought to add apps like stellaros (my own project where you can explore space ), calculator , captains log, notepad , calender, wether app and calculator , browser , paint app , etc but the TWIST IS THE GOOGLE WAS SHOWING DANGER BECAUSE OF A AI CHATBOT I ADDED AND SADLY I HAD TO REMOVE IT!!! so i used some ai to filter my code because non of any of my projects ever had a danger sign by google !!! so that is all i hope y'all give feedback and even rate it higher !!", "repo": "https://github.com/yashasvi-2012-star/ZENOS-2.0", "demo": "https://zenost.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-16T14:50:44Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "HEY EVERYONE !!!! This is my project ZENOS 2.0 it is a better version of ZENOS . this Webs.. is inspired by my idol JENNIEEE and have a lot of new features like ai chatbot , calender , weather , paint ,mission control window , ZENOS app list ,captain’s log , notes ,music , search engine , clock and this project is still ongoing and i have to add setting bar . connect STELLAROS , AI CHATBOT , WEATHER (idk it is not working properly), calender . so that is all BYEEE!!!(i don’t know when i open this site in the browser it is labelling as dangerous nut it not guys !!! trust me !!! select continue anyways ).", "repo": "https://github.com/yashasvi-2012-star/ZENOS-2.0", "demo": "https://zenost.vercel.app/"}]...
|
[{"post_id": 12064, "ts": "202 [{"post_id": 12064, "ts": "2026-06-19T17:51:24Z", "hours": 0.9128, "text": "Hiiiii!!!! i just connected everything and sadly i had to remove ai chatbot !!(google was showing it as danger ) each and everything is working just as i imagenied it . so i guess now is the time to sign off !!!BYEEEE!!!!"}, {"post_id": 10759, "ts": "2026-06-17T17:32:41Z", "hours": 1.4197, "text": "HEY!!!!! this is my second last update on ZENOS 2.0 i have added a option to change background and the theme and i have not yet connected the stellar and ai chatbot (a lot of summer holiday hw yk !!) and maybeee ill add something more to it !!!!!"}, {"post_id": 9967, "ts": "2026-06-16T14:32:11Z", "hours": 0.3972, "text": "HEYY EVERYONE!! welcome to the third update of my ZENOS 2.0 and i have added all the function of the basic app and added a apps list (called ZENOS Apps) and mission control which shows the name of the windows currently open AS YOU CAN SEE I HAVE OPEND PAINT AND CALCULATOR AND AI ASSISTANT (YES I HAVE ADDED THAT TOO ) AND EACH NAME ARE SHOWN IN the mission control window (i am thinking to simplify it more !!) so that’s all for now BUT THERE IS SOMETHING I WANNA TELL YOU AND CANT WAIT TO POST ANOTHER DEVLOG TO TELL YOU (HINT: its something related to STELLAROS)"}, {"post_id": 9934, "ts": "2026-06-16T13:34:43Z", "hours": 1.3667, "text": "HEYY GUYSSS !!! this is the second update on ZENOS 2.0 so i have added the second page (tell me how it looks ?) and i have added icons as well as some header and a star shaped clock (tho i have got to improve it ) and more things . this is all that i have done and i have to add their functionality next (i have for some apps but not for all ). BYE !!!"}, {"post_id": 9774, "ts": "2026-06-16T06:53:33Z", "hours": 0.7503, "text": "HII!!!!! guyss i made my own OS page . to update you all let me tell you this is my first page i have added a jennie inspired background and added a header . i have made a draggable intro page for myself . and i have added a special feature in the header ….drum roll plz …….. it is a weather panel . when you open my webs.. you will have a message asking for access of your location and according to your location it will display the temp. (as of now in the following screenshot i have not given access to location as default in my webs.. but you absolutely can !) so , this is all for the first update BYE !!!"}]...
|
Title: ZENOS2.O by @yashasvib | Stardance
Devlogs Title: ZENOS2.O by @yashasvib | Stardance
Devlogs:
HII!!!!! guyss i made my own OS page . to update you all let me tell you this is my first page i have added a jennie inspired background and added a header . i have made a draggable intro page for myself . and i have added a special feature in the header ….drum roll plz …….. it is a weather panel . when you open my webs.. you will have a message asking for access of your location and according to your location it will display the temp. (as of now in the following screenshot i have not given access to location as default in my webs.. but you absolutely can !) so , this is all for the first update BYE !!!
HEYY GUYSSS !!! this is the second update on ZENOS 2.0 so i have added the second page (tell me how it looks ?) and i have added icons as well as some header and a star shaped clock (tho i have got to improve it ) and more things . this is all that i have done and i have to add their functionality next (i have for some apps but not for all ). BYE !!!
HEYY EVERYONE!! welcome to the third update of my ZENOS 2.0 and i have added all the function of the basic app and added a apps list (called ZENOS Apps) and mission control which shows the name of the windows currently open AS YOU CAN SEE I HAVE OPEND PAINT AND CALCULATOR AND AI ASSISTANT (YES I HAVE ADDED THAT TOO ) AND EACH NAME ARE SHOWN IN the mission control window (i am thinking to simplify it more !!) so that’s all for now BUT THERE IS SOMETHING I WANNA TELL YOU AND CANT WAIT TO POST ANOTHER DEVLOG TO TELL YOU (HINT: its something related to STELLAROS)
HEY!!!!! this is my second last update on ZENOS 2.0 i have added a option to change background and the theme and i have not yet connected the stellar and ai chatbot (a lot of summer holiday hw yk !!) and maybeee ill add something more to it !!!!!
Hiiiii!!!! i just connected everything and sadly i had to remove ai chatbot !!(google was showing it as danger ) each and everything is working just as i imagenied it . so i guess now is the time to sign off !!!BYEEEE!!!!
Ships:
HEY EVERYONE !!!! This is my project ZENOS 2.0 it is a better version of ZENOS . this Webs.. is inspired by my idol JENNIEEE and have a lot of new features like ai chatbot , calender , weather , paint ,mission control window , ZENOS app list ,captain’s log , notes ,music , search engine , clock and this project is still ongoing and i have to add setting bar . connect STELLAROS , AI CHATBOT , WEATHER (idk it is not working properly), calender . so that is all BYEEE!!!(i don’t know when i open this site in the browser it is labelling as dangerous nut it not guys !!! trust me !!! select continue anyways ).
███████╗███████╗███╗ ██╗██████╗ ███████╗ ╚══███╔╝██╔════╝████╗ ██║██╔═██╗██╔════╝ ███╔╝ █████╗ ██╔██╗ ██║██║ ██║███████╗ ███╔╝ ██╔══╝ ██║╚██╗██║██║ ██║╚════██║ ███████╗███████╗██║ ╚████║ ██████ ███████║ ╚══════╝╚══════╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝ HEY !!! this is my project ZENOS 2.0 a improved version of my old zenos and it is again inspired by my idol jennnieeeee. so this basically have two pages - the first page is landing page where there is a header with date day and time and body contain a draggable window with thing .... bout me and the second page is my main OS where there is again a header with weather date day time and the body contain the main OS system with apps and options to change the theme and even Background . so at first i thought to add apps like stellaros (my own project where you can explore space ), calculator , captains log, notepad , calender, wether app and calculator , browser , paint app , etc but the TWIST IS THE GOOGLE WAS SHOWING DANGER BECAUSE OF A AI CHATBOT I ADDED AND SADLY I HAD TO REMOVE IT!!! so i used some ai to filter my code because non of any of my projects ever had a danger sign by google !!! so that is all i hope y'all give feedback and even rate it higher !!...
|
1792990363.9197538
|
1793076763.9197538
|
|
18454
|
astrOS by @urged-st | Stardance
|
urged-st
|
2
|
32.0
|
302
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-16T18:06:53Z", "hours": 27.0, "multiplier": 11.44, "payout": 302, "blessing": "neutral", "text": "astrOS is a fullscreen web OS with nine astronomy apps built in vanilla JS: Sky Map uses real star positions calculated from your location, ISS Tracker polls live satellite data with haversine distance, Stargazing Conditions combines weather and moon phase into a seeing score, Solar System renders Keplerian orbits with clickable planets, Meteor Shower Tracker handles year-boundary showers correctly with proper countdown logic, plus NGC Catalogue, APOD, Mission Log, and Wallpaper Changer. I’m most proud of the Sky Map actually calculating real positions rather than faking it, and the ISS Tracker being genuinely useful for knowing whether the station is overhead. To test: open on desktop in fullscreen (geolocation needs permission and fullscreen mode to work), try dragging windows to screen edges to see snapping, check the meteor tracker during an active shower, click planets in Solar System to see their stats, and the Mission Log text persists across refreshes via localStorage. yes, i know it said 3 new features from webos1, but I got a bit too excited. have fun!", "repo": "https://github.com/urged-st/astrOS", "demo": "https://astr-os.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-18T09:59:21Z", "hours": 5.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I have made a functional astronomy focused WebOS called astrOS. It currently features a custom programmed sky map which takes your location and shows you what is currently in the sky near you, and a simple in-session notepad. It also has a right-click context menu featuring my socials and projects (project links will be added when they are done lol) You can minimise windows as well. Please put any suggestions for new features you have in comments, I’d appreciate it a lot.", "repo": "https://github.com/urged-st/astrOS", "demo": "https://astr-os.vercel.app/"}]...
|
[{"post_id": 29628, "ts": "202 [{"post_id": 29628, "ts": "2026-07-16T18:02:48Z", "hours": 3.6972, "text": "Meteor Shower Tracker finished the last feature, a year-round meteor shower schedule with active/upcoming status so you actually know when to set an alarm. 11 major showers baked in (Quadrantids through Ursids), and everything’s calculated client-side, no API needed. stores absolute peak dates for each shower and works out the active window locally, correctly handles the year-boundary ones (Quadrantids starts Dec 28, Ursids ends Dec 26) without breaking on Jan 1st sorts active showers first, then whoever’s next peak is soonest countdown properly distinguishes “peak in Xd” from “peaked Xd ago” for showers you’re still inside the window for but already past peak on, caught that bug and fixed it before shipping by testing across multiple dates including exact-peak day (Aug 12 for Perseids) renders as a compact list with radiant constellation, ZHR (~Zenith Hourly Rate), and the peak countdown, all colour-coded so active showers pop no polling, just recomputes fresh every time you open it Bug Fixes & Polish went through all three files line-by-line before shipping. found and fixed two bugs plus some cleanup: window snapping corners were broken — getSnapZone() detected top-left/top-right when you dragged to a corner, but showSnapPreview() and applySnap() never had rect definitions for those zones, so the preview showed nothing and the drop silently failed. added proper quarter-tile rects for both corners so you can now snap to all four quadrants APOD toggle IDs — getElementById() calls for apod explanation/toggle buttons were working but the elements weren’t explicitly in the HTML, they were created at render-time by innerHTML, so the id references were technically fine but fragile. left them as-is since they work, but flagged it as something to refactor if we add more dynamic content later also ik its been shown in an earlier devlog, but the taskbar on the bottom isn’t exactly empty lol, you can minimise apps to it (third pic). maybe i’ll add a pin to taskbar feature? what’s left SHIPPPPPPPPPPPPPPPPPPPPPPPPP"}, {"post_id": 28122, "ts": "2026-07-14T06:30:28Z", "hours": 0.7539, "text": "Tiny fix lol I stopped good ol’ neptune being cut off on the solar system map, and also made it so that the contents of the notepad/mission log are saved in localStorage"}, {"post_id": 27936, "ts": "2026-07-13T21:28:34Z", "hours": 3.2881, "text": "Solar System Viewer Thought it’d be cool to have something you could just leave open on the desktop, so I added a little live Solar System app. Every planet sits where it actually should be today rather than looping around on some fake animation. Planet positions come from simplified J2000 Keplerian elements (semi-major axis, eccentricity, orbital period, etc.) and get advanced from the current date, so they’re calculated fresh instead of being hardcoded. Conveniently I’d already written a Newton-Raphson solver for Kepler’s equation while making Umbra, so I shamelessly reused it here to solve the eccentric anomaly before converting that into the planet’s true anomaly and distance from the Sun. Nice when old suffering becomes reusable code lol. Biggest headache honestly wasn’t the orbital maths, it was the scale. If you draw everything linearly then Neptune disappears off the edge of the canvas, but if you squash everything too much then the inner planets all merge together. Ended up scaling the orbital radius by √r instead, which keeps the angular positions correct while compressing the distances enough that the whole Solar System fits on one screen. Made every planet clickable as well because a static diagram felt a bit dead. Clicking one gives its current distance from the Sun and orbital period, with Earth getting a little highlight ring so it’s easy to spot where we are. It redraws once a minute since the planets barely move on human timescales anyway, and it’s definitely not accurate enough to navigate a spacecraft with, but it’s surprisingly close considering it’s just running a handful of orbital equations in the browser lol. deffo gonna play around with the window sizing cause its kinda weird right now… also neptune is STILL SQUASHED (genuine annoyance btw) so will do this TOMORROW."}, {"post_id": 27585, "ts": "2026-07-13T09:25:48Z", "hours": 3.4686, "text": "Stargazing Conditions New app, tells you whether tonight’s actually worth setting up a telescope for. pulls cloud cover, humidity and wind from Open-Meteo using the location I already grab on boot, no key needed which is nice the moon phase bit doesn’t touch an API at all, did it properly with the synodic month (29.53 days) against a known reference new moon, so it’s just maths running locally combined cloud cover and moon brightness into a rough seeing score out of 10, heavier cloud and a brighter moon both drag it down, then a one-line verdict underneath so you don’t have to interpret the number yourself was gonna render an actual crescent/gibbous moon on canvas for this but after the ISS ground track thing broke last time I didn’t wanna ship more clipping/arc geometry I couldn’t properly test, so it’s just the phase emoji + name + illumination % instead. honestly looks fine, might revisit the canvas version later if I’m bored"}, {"post_id": 26790, "ts": "2026-07-11T19:46:07Z", "hours": 3.5022, "text": "ISS Tracker New app, tracks the ISS live using wheretheiss.at (no key needed, CORS-open, genuinely such a nice API to work with). Polls every 5 seconds for lat/lon/altitude/velocity Keeping the last 20 fixes so there’s a fading trail behind the current position instead of just a dot that teleports every update Drew my own little world map for this since I didn’t want to deal with map tile assets, just lat/lon gridlines every 30°, equator and prime meridian slightly brighter. I reused the geolocation I already grab on boot for the sky map, so this app also shows your distance from the ISS via a haversineKm() calc, and flags when it’s within ~2000km with a little “nearby!” tag. Not a proper overhead check (that’d need elevation angle above your horizon) but good enough for now Added a stopIssTracker() call on window close so the polling interval actually dies instead of running forever in the background, learnt that lesson the hard way after leaving a tab open for way too long testing this At the time of writing this I had just the idea to implement a trail that shows the future path, will do this now lol."}, {"post_id": 26626, "ts": "2026-07-11T15:37:59Z", "hours": 2.4692, "text": "APOD Viewer Added the Astronomy Picture of the Day app, pulls straight from NASA’s API and shows today’s pic with the write-up tucked behind a toggle so the image gets to be the main object first. Cached in localStorage per calendar day, so reopening the window doesn’t burn another call for the same picture Nearly got got by this one: NASA sometimes serves a video instead of an image for the day, and my first pass just shoved the url into an <img> tag, broken image icon staring back at me lol Added a media_type check so videos link out instead of trying to embed Also handled the fetch failing outright, just shows a “try again later” message instead of leaving a blank window, DEMO_KEY ’s rate limit is gonna trip this eventually so it needed to fail gracefully lol what’s next? either stargazing conditions or the ISS tracker, we’ll see which one I go for"}, {"post_id": 22333, "ts": "2026-07-04T19:10:32Z", "hours": 9.3625, "text": "Okay, yes I forgot to devlog… or commit This was an absolute lock-in but I don’t wanna rank low on storytelling, so I’ll make this one detailed lol. Wallpaper Switcher Six presets, default plus five gradients: nebula, deep blue, solar flare, aurora, mono Clicking a swatch fades the desktop background over 0.6s instead of snapping Choice persists via localStorage so it survives a refresh markActiveWallpaperSwatch re-reads storage and re-marks the active swatch every time the window reopens NGC Catalogue Browser Started as a hardcoded Messier list, which I scrapped once I found Datastro’s public deep sky objects dataset (~220k NGC/IC/Messier entries, CORS-open, no key) Search input debounces 350ms before hitting the API, results sort by magnitude Clicking a result fills the detail panel: type, constellation, magnitude, coordinates Dataset uses the Historically Corrected NGC scheme ( GPair , OCl , SNR , Cl+N ), so I wrote a bucket function that checks substrings to map raw types into galaxy, nebula, cluster, or other for the filter dropdown Built an 8-object offline fallback (Andromeda, Orion Nebula, Ring Nebula, Pleiades, etc) that kicks in silently if the fetch fails, with a small offline warning shown in the list Did You Know Notifications Toast-style pings slide in from the right with a random space fact First one fires after 4 seconds, then every 60-120 seconds at random 18 facts in the pool right now, the neutron star teaspoon one still gets me Caught a bug where fast in/out window clicks could call scheduleNotifications twice and stack two loops, doubling the ping rate Fixed it with a notifStarted flag so the loop only ever starts once Window Resizing And Snapping Built right before the wallpaper stuff, resize first then snap Every window gets a drag handle in the bottom right corner, clamped to a minimum width and height Handle calls stopPropagation on mousedown so resizing doesn’t also trigger the window drag Snap shows a dashed preview box near screen edges, locks into that rect on release Found a bug writing this up: a top-right zone gets detected but has no rect defined for it, so it falls back to snapping full width across the top instead of a proper quadrant."}, {"post_id": 11193, "ts": "2026-06-18T09:52:09Z", "hours": 1.0806, "text": "WebOS 1 - Finished! Sure it took longer than it should’ve, but at least the sky map is quality Today I finished off the final parts for the first mission. I added a coords toggle so you don’t doxx yourself while taking screenshots of the map. I also fixed up the minimising animation and changed the taskbar to host the app icons instead of the usual app name (this had an ugly white bg lol so I had to change it no matter what) I also added a custom background (yes this is reused from my g-lens project sue me) I’m gonna ship this now for WebOS 1, the finished, polished product will be shipped for WebOS 2 (so if anything can be improved, dm me or comment and I’ll fix it then!)"}, {"post_id": 10856, "ts": "2026-06-17T20:07:29Z", "hours": 0.5308, "text": "Small update added a basic notepad app, it does not save between sessions though. added an animation to minimising windows [FIX] made star names not rotate with the star map (this was annoying me lol) what’s next? add icons to taskbar and not just names for minimised apps hide the coords on sky map lol dont doxx yourself a review of the guidelines so I can get webOS 2!"}, {"post_id": 9505, "ts": "2026-06-15T21:22:49Z", "hours": 2.37, "text": "MAJORRR Update First app, context menu, and a LOT of stars 😭 Today I wanted to add an app. Not a standard one like notepad, music, file explorer… something that is different. So, naturally, I spent two hours coding my own star map using a ton of stars from the yale bright star catalogue (okay maybe not a ton but you get the idea). It takes the users location, calculates the chunk of sky above them (yes, you can do this) and shows the major stars visible to the naked eye on a turntable style minimap. What the heck am I gonna do next for one, the text on the map rotates with everything so i gotta fix that THEN i’ll add a normal app like notepad lol a background needs to be added too, also I might add a bg switcher. ohhhh yeah and i added stuff from the guide like the topbar and time, that’s not the star of the show for this log though lol."}, {"post_id": 8666, "ts": "2026-06-14T12:13:02Z", "hours": 0.7083, "text": "astrOS day 1: I want to finish this project really efficiently, so I have mapped out what features I want (you will see as they come). Today, I finished the boot screen and styling for it, and made the file structure. Not much, only 40 mins, but since its a roughly 2hr 30m project, 30m a day means I finish in 5 days. Next devlog should hopefully be finishing the desktop design, probably ~1hr."}]...
|
Title: astrOS by @urged-st | Stardance
Devlogs:
a Title: astrOS by @urged-st | Stardance
Devlogs:
astrOS day 1: I want to finish this project really efficiently, so I have mapped out what features I want (you will see as they come). Today, I finished the boot screen and styling for it, and made the file structure. Not much, only 40 mins, but since its a roughly 2hr 30m project, 30m a day means I finish in 5 days. Next devlog should hopefully be finishing the desktop design, probably ~1hr.
MAJORRR Update First app, context menu, and a LOT of stars 😭 Today I wanted to add an app. Not a standard one like notepad, music, file explorer… something that is different. So, naturally, I spent two hours coding my own star map using a ton of stars from the yale bright star catalogue (okay maybe not a ton but you get the idea). It takes the users location, calculates the chunk of sky above them (yes, you can do this) and shows the major stars visible to the naked eye on a turntable style minimap. What the heck am I gonna do next for one, the text on the map rotates with everything so i gotta fix that THEN i’ll add a normal app like notepad lol a background needs to be added too, also I might add a bg switcher. ohhhh yeah and i added stuff from the guide like the topbar and time, that’s not the star of the show for this log though lol.
Small update added a basic notepad app, it does not save between sessions though. added an animation to minimising windows [FIX] made star names not rotate with the star map (this was annoying me lol) what’s next? add icons to taskbar and not just names for minimised apps hide the coords on sky map lol dont doxx yourself a review of the guidelines so I can get webOS 2!
WebOS 1 - Finished! Sure it took longer than it should’ve, but at least the sky map is quality Today I finished off the final parts for the first mission. I added a coords toggle so you don’t doxx yourself while taking screenshots of the map. I also fixed up the minimising animation and changed the taskbar to host the app icons instead of the usual app name (this had an ugly white bg lol so I had to change it no matter what) I also added a custom background (yes this is reused from my g-lens project sue me) I’m gonna ship this now for WebOS 1, the finished, polished product will be shipped for WebOS 2 (so if anything can be improved, dm me or comment and I’ll fix it then!)
Okay, yes I forgot to devlog… or commit This was an absolute lock-in but I don’t wanna rank low on storytelling, so I’ll make this one detailed lol. Wallpaper Switcher Six presets, default plus five gradients: nebula, deep blue, solar flare, aurora, mono Clicking a swatch fades the desktop background over 0.6s instead of snapping Choice persists via localStorage so it survives a refresh markActiveWallpaperSwatch re-reads storage and re-marks the active swatch every time the window reopens NGC Catalogue Browser Started as a hardcoded Messier list, which I scrapped once I found Datastro’s public deep sky objects dataset (~220k NGC/IC/Messier entries, CORS-open, no key) Search input debounces 350ms before hitting the API, results sort by magnitude Clicking a result fills the detail panel: type, constellation, magnitude, coordinates Dataset uses the Historically Corrected NGC scheme ( GPair , OCl , SNR , Cl+N ), so I wrote a bucket function that checks substrings to map raw types into galaxy, nebula, cluster, or other for the filter dropdown Built an 8-object offline fallback (Andromeda, Orion Nebula, Ring Nebula, Pleiades, etc) that kicks in silently if the fetch fails, with a small offline warning shown in the list Did You Know Notifications Toast-style pings slide in from the right with a random space fact First one fires after 4 seconds, then every 60-120 seconds at random 18 facts in the pool right now, the neutron star teaspoon one still gets me Caught a bug where fast in/out window clicks could call scheduleNotifications twice and stack two loops, doubling the ping rate Fixed it with a notifStarted flag so the loop only ever starts once Window Resizing And Snapping Built right before the wallpaper stuff, resize first then snap Every window gets a drag handle in the bottom right corner, clamped to a minimum width and height Handle calls stopPropagation on mousedown so resizing doesn’t also trigger the window drag Snap shows a dashed preview box near screen edges, locks into that rect on release Found a bug writing this up: a top-right zone gets detected but has no rect defined for it, so it falls back to snapping full width across the top instead of a proper quadrant.
APOD Viewer Added the Astronomy Picture of the Day app, pulls straight from NASA’s API and shows today’s pic with the write-up tucked behind a toggle so the image gets to be the main object first. Cached in localStorage per calendar day, so reopening the window doesn’t burn another call for the same picture Nearly got got by this one: NASA sometimes serves a video instead of an image for the day, and my first pass just shoved the url into an <img> tag, broken image icon staring back at me lol Added a media_type check so videos link out instead of trying to embed Also handled the fetch failing outright, just shows a “try again later” message instead of leaving a blank window, DEMO_KEY ’s rate limit is gonna trip this eventually so it needed to fail gracefully lol what’s next? either stargazing conditions or the ISS tracker, we’ll see which one I go for
ISS Tracker New app, tracks the ISS live using wheretheiss.at (no key needed, CORS-open, genuinely such a nice API to work with). Polls every 5 seconds for lat/lon/altitude/velocity Keeping the last 20 fixes so there’s a fading trail behind the current position instead of just a dot that teleports every update Drew my own little world map for this since I didn’t want to deal with map tile assets, just lat/lon gridlines every 30°, equator and prime meridian slightly brighter. I reused the geolocation I already grab on boot for the sky map, so this app also shows your distance from the ISS via a haversineKm() calc, and flags when it’s within ~2000km with a little “nearby!” tag. Not a proper overhead check (that’d need elevation angle above your horizon) but good enough for now Added a stopIssTracker() call on window close so the polling interval actually dies instead of running forever in the background, learnt that lesson the hard way after leaving a tab open for way too long testing this At the time of writing this I had just the idea to implement a trail that shows the future path, will do this now lol.
Stargazing Conditions New app, tells you whether tonight’s actually worth setting up a telescope for. pulls cloud cover, humidity and wind from Open-Meteo using the location I already grab on boot, no key needed which is nice the moon phase bit doesn’t touch an API at all, did it properly with the synodic month (29.53 days) against a known reference new moon, so it’s just maths running locally combined cloud cover and moon brightness into a rough seeing score out of 10, heavier cloud and a brighter moon both drag it down, then a one-line verdict underneath so you don’t have to interpret the number yourself was gonna render an actual crescent/gibbous moon on canvas for this but after the ISS ground track thing broke last time I didn’t wanna ship more clipping/arc geometry I couldn’t properly test, so it’s just the phase emoji + name + illumination % instead. honestly looks fine, might revisit the canvas version later if I’m bored
Solar System Viewer Thought it’d be cool to have something you could just leave open on the desktop, so I added a little live Solar System app. Every planet sits where it actually should be today rather than looping around on some fake animation. Planet positions come from simplified J2000 Keplerian elements (semi-major axis, eccentricity, orbital period, etc.) and get advanced from the current date, so they’re calculated fresh instead of being hardcoded. Conveniently I’d already written a Newton-Raphson solver for Kepler’s equation while making Umbra, so I shamelessly reused it here to solve the eccentric anomaly before converting that into the planet’s true anomaly and distance from the Sun. Nice when old suffering becomes reusable code lol. Biggest headache honestly wasn’t the orbital maths, it was the scale. If you draw everything linearly then Neptune disappears off the edge of the canvas, but if you squash everything too much then the inner planets all merge together. Ended up scaling the orbital radius by √r instead, which keeps the angular positions correct while compressing the distances enough that the whole Solar System fits on one screen. Made every planet clickable as well because a static diagram felt a bit dead. Clicking one gives its current distance from the Sun and orbital period, with Earth getting a little highlight ring so it’s easy to spot where we are. It redraws once a minute since the planets barely move on human timescales anyway, and it’s definitely not accurate enough to navigate a spacecraft with, but it’s surprisingly close considering it’s just running a handful of orbital equations in the browser lol. deffo gonna play around with the window sizing cause its kinda weird right now… also neptune is STILL SQUASHED (genuine annoyance btw) so will do this TOMORROW.
Tiny fix lol I stopped good ol’ neptune being cut off on the solar system map, and also made it so that the contents of the notepad/mission log are saved in localStorage
Meteor Shower Tracker finished the last feature, a year-round meteor shower schedule with active/upcoming status so you actually know when to set an alarm. 11 major showers baked in (Quadrantids through Ursids), and everything’s calculated client-side, no API needed. stores absolute peak dates for each shower and works out the active window locally, correctly handles the year-boundary ones (Quadrantids starts Dec 28, Ursids ends Dec 26) without breaking on Jan 1st sorts active showers first, then whoever’s next peak is soonest countdown properly distinguishes “peak in Xd” from “peaked Xd ago” for showers you’re still inside the window for but already past peak on, caught that bug and fixed it before shipping by testing across multiple dates including exact-peak day (Aug 12 for Perseids) renders as a compact list with radiant constellation, ZHR (~Zenith Hourly Rate), and the peak countdown, all colour-coded so active showers pop no polling, just recomputes fresh every time you open it Bug Fixes & Polish went through all three files line-by-line before shipping. found and fixed two bugs plus some cleanup: window snapping corners were broken — getSnapZone() detected top-left/top-right when you dragged to a corner, but showSnapPreview() and applySnap() never had rect definitions for those zones, so the preview showed nothing and the drop silently failed. added proper quarter-tile rects for both corners so you can now snap to all four quadrants APOD toggle IDs — getElementById() calls for apod explanation/toggle buttons were working but the elements weren’t explicitly in the HTML, they were created at render-time by innerHTML, so the id references were technically fine but fragile. left them as-is since they work, but flagged it as something to refactor if we add more dynamic content later also ik its been shown in an earlier devlog, but the taskbar on the bottom isn’t exactly empty lol, you can minimise apps to it (third pic). maybe i’ll add a pin to taskbar feature? what’s left SHIPPPPPPPPPPPPPPPPPPPPPPPPP
Ships:
I have made a functional astronomy focused WebOS called astrOS. It currently features a custom programmed sky map which takes your location and shows you what is currently in the sky near you, and a simple in-session notepad. It also has a right-click context menu featuring my socials and projects (project links will be added when they are done lol) You can minimise windows as well. Please put any suggestions for new features you have in comments, I’d appreciate it a lot.
astrOS is a fullscreen web OS with nine astronomy apps built in vanilla JS: Sky Map uses real star positions calculated from your location, ISS Tracker polls live satellite data with haversine distance, Stargazing Conditions combines weather and moon phase into a seeing score, Solar System renders Keplerian orbits with clickable planets, Meteor Shower Tracker handles year-boundary showers correctly with proper countdown logic, plus NGC Catalogue, APOD, Mission Log, and Wallpaper Changer. I’m most proud of the Sky Map actually calculating real positions rather than faking it, and the ISS Tracker being genuinely useful for knowing whether the station is overhead. To test: open on desktop in fullscreen (geolocation needs permission and fullscreen mode to work), try dragging windows to screen edges to see snapping, check the meteor tracker during an active shower, click planets in Solar System to see their stats, and the Mission Log text persists across refreshes via localStorage. yes, i know it said 3 new features from webos1, but I got a bit too excited. have fun!...
|
1792878752.5116427
|
1793742752.5116427
|
|
18493
|
TypeForum by @Cosmicw | Stardance
|
Cosmicw
|
2
|
16.0
|
131
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T11:03:32Z", "hours": 8.0, "multiplier": 8.66, "payout": 73, "blessing": "neutral", "text": "one devlog wasn’t included in prevoius ship so im shipping it again. also addressed few bugs from feedback and i have fixed it.", "repo": "https://github.com/zcosmicw/TypeForum", "demo": "https://type-forum.vercel.app/"}, {"ship_num": 2, "ts": "2026-06-26T15:53:03Z", "hours": 8.0, "multiplier": 7.64, "payout": 58, "blessing": "neutral", "text": "TypeForum - A Forum web app for niche communities! It was a good experience making this project, I’ve faced issues with updating info real time but i have managed to over come it. If you are testing this, make sure to run all the SQL commands in supabase/migrations.", "repo": "https://github.com/zcosmicw/TypeForum", "demo": "https://type-forum.vercel.app/"}]...
|
[{"post_id": 30742, "ts": "202 [{"post_id": 30742, "ts": "2026-07-18T15:57:25Z", "hours": 8.4469, "text": "FINAL UPDATE (i hope) hi gng, apparently there was lots of bugs and the css looked not so sigma in my past attempt to ship it. but here i am wit ts again fully reworked. i hope its good this time and that it finally get shipped. a quick summary of what ts is: its a platform for communities that needs a forum thats not in reddit. i originally made it for a friend of mine but my guy got slimed before i finish this and now i dont have contact of him anymore 🥀. https://type-forum.vercel.app/ toodles✌️"}, {"post_id": 15070, "ts": "2026-06-24T14:12:50Z", "hours": 5.0453, "text": "Devlog #5: The Final Update — TypeForum is Shipping TypeForum is finally finished. TypeForum is a modern discussion platform built with Next.js 16, TypeScript, and Supabase. The goal was to create something that feels premium, customizable, and actually enjoyable to use instead of another generic forum. Here’s everything added in the final release. Trending Threads I built a ranking algorithm that determines which threads should appear on the front page. It takes into account upvotes, downvotes, replies, views, and time decay, so active discussions rise while older posts naturally lose momentum. Profile Pictures and Banners Users can now personalize their profiles with custom avatars and profile banners. Media is handled through Supabase Storage, and changes are previewed instantly before saving. Added stats that show the number of upvotes, comments and thread s. Cleaning Up the App I removed features that felt unnecessary, including the supplement store and separate ranking pages. The focus is now entirely on what matters most: forums, profiles, and discussions. Billboard Ads Added support for 970×90 billboard ads. Administrators can enable or disable ads globally and upload custom image or GIF banners directly from the dashboard. New Admin Dashboard Probably one of my favorite additions. Admins can now: -Change the site name globally, with logo initials generated automatically. -Edit homepage headings and footer text without touching code. -Highlight words using [brackets], which automatically render with a purple gradient. -Rename categories and subforums on the fly. -Customize rank names for levels 1 through 5. Smart Notifications Added PostgreSQL triggers for notifications: -Replies to threads and comments. -New followers. -Upvote milestones (5, 10, 15, and so on). I also added duplicate protection to prevent users from getting spammed when vote counts fluctuate. Who is TypeForum for? -Gaming and tech communities. -Fitness and self-improvement groups. -Creator communities and fanbases. -Anyone looking for something they fully own instead of relying on Discord or Reddit. And that’s it. Building TypeForum has taught me a lot, from UI design and database architecture to spending far too much time fighting CSS. It’s been an incredible experience, and I’m excited to finally ship it."}, {"post_id": 12633, "ts": "2026-06-20T17:08:57Z", "hours": 0.4947, "text": "Devlog #3: Followers & Following I was pretty busy IRL, but when I got back to the project, I noticed that the followers/following counter wasn’t working properly. Users could even follow themselves, which definitely wasn’t intended. I wanted to fix it as quickly as possible, so I got straight to work. I replaced the old insert-only followUser action with a new system that correctly tracks and updates both follower and following counts.I also improved the UI by hiding the Follow and Message buttons when users view their own profile, preventing unnecessary actions and making the experience feel more polished. Overall, this update fixes follower tracking, prevents self-following, and improves profile usability. Hopefully, I’ll be finishing the project in the next devlog!"}, {"post_id": 10675, "ts": "2026-06-17T15:12:02Z", "hours": 1.1564, "text": "TypeForum Devlog #2 Had a crazy idea while trying to fall asleep — what if users had a global chat where they could talk freely without any limits ? So I got to work right away.(yes i couldn’t sleep) I added the necessary rows and columns in Supabase, and just when I thought I had it working… it wasn’t updating in real time. Turns out I hadn’t enabled Supabase’s real-time replication. Flipped that on and it worked like a charm. After that, I noticed the Voting and Tiers system was completely broken. My fix? Removed the entire VoteTier system. Tiers (or ranks) are now admin-assigned only — admins have a dedicated option for this in the admin panel. Much cleaner. Up next: Profile pages (follows & following) Direct Messages Profile pictures and banners Let me know what else I should add! ❤️ https://type-forum.vercel.app/"}, {"post_id": 9813, "ts": "2026-06-16T07:59:36Z", "hours": 1.1558, "text": "TypeForum: A forum I’ve been working on for my friend’s community. thought it would be a good idea to open source it. Stuff that was added/fixed in this devlog : Added inline comments to threads Fixed upvote/downvote counter bugs Added post deletion/share functions to thread owner and admins feel free to comment any more changes that can make it better :) https://type-forum.vercel.app/ https://github.com/zcosmicw/TypeForum"}]...
|
Title: TypeForum by @Cosmicw | Stardance
Devlogs: Title: TypeForum by @Cosmicw | Stardance
Devlogs:
TypeForum: A forum I’ve been working on for my friend’s community. thought it would be a good idea to open source it. Stuff that was added/fixed in this devlog : Added inline comments to threads Fixed upvote/downvote counter bugs Added post deletion/share functions to thread owner and admins feel free to comment any more changes that can make it better :) https://type-forum.vercel.app/ https://github.com/zcosmicw/TypeForum
TypeForum Devlog #2 Had a crazy idea while trying to fall asleep — what if users had a global chat where they could talk freely without any limits ? So I got to work right away.(yes i couldn’t sleep) I added the necessary rows and columns in Supabase, and just when I thought I had it working… it wasn’t updating in real time. Turns out I hadn’t enabled Supabase’s real-time replication. Flipped that on and it worked like a charm. After that, I noticed the Voting and Tiers system was completely broken. My fix? Removed the entire VoteTier system. Tiers (or ranks) are now admin-assigned only — admins have a dedicated option for this in the admin panel. Much cleaner. Up next: Profile pages (follows & following) Direct Messages Profile pictures and banners Let me know what else I should add! ❤️ https://type-forum.vercel.app/
Devlog #3: Followers & Following I was pretty busy IRL, but when I got back to the project, I noticed that the followers/following counter wasn’t working properly. Users could even follow themselves, which definitely wasn’t intended. I wanted to fix it as quickly as possible, so I got straight to work. I replaced the old insert-only followUser action with a new system that correctly tracks and updates both follower and following counts.I also improved the UI by hiding the Follow and Message buttons when users view their own profile, preventing unnecessary actions and making the experience feel more polished. Overall, this update fixes follower tracking, prevents self-following, and improves profile usability. Hopefully, I’ll be finishing the project in the next devlog!
Devlog #5: The Final Update — TypeForum is Shipping TypeForum is finally finished. TypeForum is a modern discussion platform built with Next.js 16, TypeScript, and Supabase. The goal was to create something that feels premium, customizable, and actually enjoyable to use instead of another generic forum. Here’s everything added in the final release. Trending Threads I built a ranking algorithm that determines which threads should appear on the front page. It takes into account upvotes, downvotes, replies, views, and time decay, so active discussions rise while older posts naturally lose momentum. Profile Pictures and Banners Users can now personalize their profiles with custom avatars and profile banners. Media is handled through Supabase Storage, and changes are previewed instantly before saving. Added stats that show the number of upvotes, comments and thread s. Cleaning Up the App I removed features that felt unnecessary, including the supplement store and separate ranking pages. The focus is now entirely on what matters most: forums, profiles, and discussions. Billboard Ads Added support for 970×90 billboard ads. Administrators can enable or disable ads globally and upload custom image or GIF banners directly from the dashboard. New Admin Dashboard Probably one of my favorite additions. Admins can now: -Change the site name globally, with logo initials generated automatically. -Edit homepage headings and footer text without touching code. -Highlight words using [brackets], which automatically render with a purple gradient. -Rename categories and subforums on the fly. -Customize rank names for levels 1 through 5. Smart Notifications Added PostgreSQL triggers for notifications: -Replies to threads and comments. -New followers. -Upvote milestones (5, 10, 15, and so on). I also added duplicate protection to prevent users from getting spammed when vote counts fluctuate. Who is TypeForum for? -Gaming and tech communities. -Fitness and self-improvement groups. -Creator communities and fanbases. -Anyone looking for something they fully own instead of relying on Discord or Reddit. And that’s it. Building TypeForum has taught me a lot, from UI design and database architecture to spending far too much time fighting CSS. It’s been an incredible experience, and I’m excited to finally ship it.
FINAL UPDATE (i hope) hi gng, apparently there was lots of bugs and the css looked not so sigma in my past attempt to ship it. but here i am wit ts again fully reworked. i hope its good this time and that it finally get shipped. a quick summary of what ts is: its a platform for communities that needs a forum thats not in reddit. i originally made it for a friend of mine but my guy got slimed before i finish this and now i dont have contact of him anymore 🥀. https://type-forum.vercel.app/ toodles✌️
Ships:
TypeForum - A Forum web app for niche communities! It was a good experience making this project, I’ve faced issues with updating info real time but i have managed to over come it. If you are testing this, make sure to run all the SQL commands in supabase/migrations.
one devlog wasn’t included in prevoius ship so im shipping it again. also addressed few bugs from feedback and i have fixed it....
|
1792878517.8331976
|
1793742517.8331976
|
|
18497
|
Helyx by @lix | Stardance
|
lix
|
2
|
325.0
|
5556
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-24T19:15:11Z", "hours": 16.0, "multiplier": 19.92, "payout": 379, "blessing": "neutral", "text": "NEW THINGS: Hackatime integration Fixed bugs Edited README.md Added GitHub Issues/PRs events rendering more What I made Helyx is a terminal app for Windows that keeps every local Git repository you own in one place and lets you commit, branch, resolve conflicts, repair broken repositories and answer GitHub Issues and Pull Requests without opening anything else. I spent a lot of time thinking about what kind of project I wanted to build. I wanted something that would be genuinely useful to developers in many different ways, and that is how I came up with Helyx, a TUI application that brings many Git and GitHub tasks into one place. What was challenging Learning new libraries, keeping the code organized as it grew, and designing every screen so it looks and feels as polished as I could get it. Deciding what to build next was harder than it sounds, because there was always more that could go in. What I am proud of It has everything I originally planned to include. The diagnostics screen finds what is wrong with a repository and offers the fix instead of just reporting it, the conflict resolver opens the conflicted block in its own editor, and the whole app speaks 8 languages. Now it even has new things that were mentioned at the top of this shipping message! How to try it Download the latest release from Helyx’s GitHub and run it. It installs into your user folder and adds Helyx to your PATH , so you can start it by typing helyx in any terminal (Windows Terminal recommended). Then pick Add project and choose any folder that contains your project. Helyx is open source, so you can also read the code or build it yourself. Just click See source code below.", "repo": "https://github.com/lixtheyt/Helyx", "demo": "https://github.com/lixtheyt/Helyx/releases/latest"}, {"ship_num": 2, "ts": "2026-08-22T22:08:55Z", "hours": 309.0, "multiplier": 19.45, "payout": 5177, "blessing": "neutral", "text": "What I made Helyx is a terminal app for Windows that keeps every local Git repository you own in one place and lets you commit, branch, resolve conflicts, repair broken repositories and answer GitHub Issues and Pull Requests without opening anything else. I spent a lot of time thinking about what kind of project I wanted to build. I wanted something that would be genuinely useful to developers in many different ways, and that is how I came up with Helyx, a TUI application that brings many Git and GitHub tasks into one place. What was challenging Learning new libraries, keeping the code organized as it grew, and designing every screen so it looks and feels as polished as I could get it. Deciding what to build next was harder than it sounds, because there was always more that could go in. What I am proud of It has everything I originally planned to include. The diagnostics screen finds what is wrong with a repository and offers the fix instead of just reporting it, the conflict resolver opens the conflicted block in its own editor, and the whole app speaks 8 languages. How to try it Download the latest release from Helyx’s GitHub and run it. It installs into your user folder and adds Helyx to your PATH , so you can start it by typing helyx in any terminal. No administrator rights are needed, and the .NET runtime is bundled inside. Then pick Add project and choose any folder that contains your project. Helyx is open source, so you can also read the code or build it yourself. Just click See source code below.", "repo": "https://github.com/lixtheyt/Helyx", "demo": "https://github.com/lixtheyt/Helyx/releases/latest"}]...
|
[{"post_id": 82417, "ts": "202 [{"post_id": 82417, "ts": "2026-10-24T19:10:02Z", "hours": 0.3264, "text": "Mysterious bug I solving some bug with UpdateHandler that my friend has been experiencing. It was that you could only check for updates for Helyx if you authorized your GitHub. Otherwise, you couldn’t! I was taking the update checking through a function that sent a HTTP request with a key that Helyx receives by authorization, in this situation it isn’t needed, but when not given in that function, it returns an error. So now you can freely check for updates for Helyx even without authorizing with GitHub!"}, {"post_id": 68799, "ts": "2026-09-15T19:30:38Z", "hours": 4.4892, "text": "Hackatime integration Hello there! A guy made a feature suggestion on Helyx’s GitHub, that I should add a Hackatime integration into it. So I was thinking… and thinking… and thinking and woah… I ADDED IT! It is not 1:1 like the web interface, that one is better & shows you more things but sadly this was everything that I could request from API (at least I think): Total Seconds Languages Repo URL Total Heartbeats First Heartbeat (DateTime) Last Heartbeat (DateTime) and when combining all of these information, I created a screen where you can see all of this specifically for your project. It works on the principe of authorization. You put in your Hackatime token which authorizes you and then when you go to your project and go on Hackatime Info, it prompts you to select the project from a list of projects that are assigned to your Hackatime account/token."}, {"post_id": 62263, "ts": "2026-09-05T15:31:03Z", "hours": 1.14, "text": "Fixed User Scripts bug So, every path block used Path.GetFullPath(path) instead of Path.GetFullPath(path, script.ProjectPath) . That means it was resolving relative paths against Helyx’s own directory, not your project’s. This is now fixed."}, {"post_id": 60348, "ts": "2026-09-02T17:13:41Z", "hours": 2.7431, "text": "Reviewing my codebase and fixing bugs Since all of the features that Helyx was supposed to be finished with are almost all done (maybe even all are done), I will now change my view to another projects for Stardance such as ThetaNexus . But that does not mean that now I will just forget about Helyx. I will be reviewing the codebase sometimes to find some bugs and fix them. You can help me with this, by making an Issue request on Helyx’s GitHub. So what bugs did I fix since the last devlog? I fixed line breaking in badge/status README editor. When you were inserting your badge/status into your README via Helyx’s README editor, it done… messy stuff to the README, not something like really bad what couldn’t be fixed by manually doing it, but it should now insert the badge/status exactly as you see it in the editor. I also introduced a new ‘Found state’ text instead of ‘Found’ text in IDE settings to avoid confusion. To avoid confusion because if an editor was found and you clicked on it… it wrote this: Found Found Found Not Found Found Set by user Now it writes this: Found state Found Found state Not Found Found state Set by user Most of the time, I was reviewing the codebase via Claude Code to actually check everything precisely."}, {"post_id": 56815, "ts": "2026-08-28T18:55:16Z", "hours": 1.7133, "text": "Replaced hardcoded string colors with Color members for code safety, fixed line breaking while assigning a status/badge Okay so Markup texts (those are the texts with color) were formatted in this format: \"[red]Hello World![/]\" So it was string-based. And if you accidentally added some character to it for instance: \"[redd]Hello World![/]\" <- Exception Helyx would crash. I mainly added this, because it is an open-source project. So if someone tried to edit it, they would only have to edit the string and they might have misspelled it. But now, when he goes into the codebase, he will see Color members and he just can’t misspell that, and if he would, compiler would alert him. Basically, now it is like this: $\"[{Color.Red}]Hello World![/]\" Okay so next I fixed line breaking. What does that mean? Well… In Helyx native README editor, so when you try to assign a status/badge, you’ll get that editor, when you try to add a status/badge to that line, you might have thought that it would be on the same line as the tags above it. But it didn’t… This was happening due to the comment markers for Helyx so Helyx knows where this status/badge is located and which status/badge it is. Now Helyx will put those comment markers in a way that prevents the line from breaking."}, {"post_id": 56645, "ts": "2026-08-28T14:17:12Z", "hours": 2.1092, "text": "Added GitHub Issues/PRs events rendering Originally, when you selected Manage GitHub Issues or PRs and opened some issues/PR. You could have only seen messages posted by users, but not when a label was assigned or when the issue/PR was closed. Well… Now you can! Now it displays the exact action that happened and when it happened! Of course, it is also translated to all languages that Helyx supports. Just making sure you didn’t think it wasn’t! I also cleaned up the code a little bit. Removed some useless usings and some files were in the wrong namespace, so that is fixed too."}, {"post_id": 54407, "ts": "2026-08-25T12:34:33Z", "hours": 1.2639, "text": "Edited README.md, again I was again editing the whole README.md, because reviewers weren’t happy with the current one. Well after spending another hour of editing the whole README.md file, I hope they won’t ask me to rewrite the whole README.md file again, because I don’t even know what else to add/remove/edit."}, {"post_id": 53900, "ts": "2026-08-24T16:30:00Z", "hours": 2.0894, "text": "Edited README.md I rewrote the README.md because of the ship review. I also added a couple of recommendations that are worth knowing when you use Helyx. I also removed the <summary> comments that Claude Code wrote for the documentation, I don’t think that anyone would have used them anyway."}, {"post_id": 52656, "ts": "2026-08-22T22:04:08Z", "hours": 0.4681, "text": "README.md update I replaced the title in README.md with a banner that contains the text Helyx. I tried a few versions I made and, well, I landed on the one you can see in Helyx’s README.md, or below!"}, {"post_id": 52636, "ts": "2026-08-22T21:23:40Z", "hours": 1.4575, "text": "Experimenting with the conflict solver I was thinking about adding a simpler conflict solver, where you wouldn’t have to delete the <<<<<<< , ======= and >>>>>>> markers yourself but would just pick either the first or the second version. But I realized it would be messier than I thought, so in the end I kept it as a basic editor where you remove the version you don’t want by hand."}, {"post_id": 52516, "ts": "2026-08-22T17:40:41Z", "hours": 4.2228, "text": "GitHub done, shipping Helyx today! Today I was messing with the GitHub page for Helyx, fixing the last bugs we found and working on the installer. For the installer I used Inno Setup, because it is the most recognized and the most used one. The point of using an installer is simple: it adds Helyx to PATH. Of course there were other options, but this one seemed like the best fit. We were fighting with the script for a while, because it was doing really weird things, like staying in the background after the installation finished. But those bugs are fixed now! README.md is done, all of those GIFs and screenshots are in it too, and I have to say it looks really good! I was also setting up the GitHub side of things, so the description, the tags, a GitHub Action and so on. With the help of Claude Code, we created the logo and the banner for the installer as well. The installer uses the same logo as Helyx. It’s just a basic H, because nothing else came to mind haha. I also asked Claude Code to review the codebase one last time, and yep, it looks fine! I told it to add the basic documentation comments as well, the <summary> kind. Let’s be real here, nobody does this, and if they do, something else writes it for them, usually an AI, because it understands the function better than the person who wrote it (I know that from my own experience hahaha)."}, {"post_id": 51969, "ts": "2026-08-21T23:29:24Z", "hours": 9.8508, "text": "New features, new languages, new problems. A new feature that I added is GitHub Actions! It is on the same principle as Manage Issues and Manage PRs, so you have a list of GitHub Actions, you pick one and you can control it, check its log, observe information about it. You can even run an action! I also added a refresh keybind to Manage Issues, Manage PRs and GitHub Actions. Before, you had to go back from the details of an issue/PR/action to the list and then return to the details. Now you don’t have to. You just have to press the keybind displayed in the footer that belongs to refresh. Yes! The Helyx Language System is finally complete! Italian & Portuguese are now available in Helyx! Lately I’ve been working on the README.md file. I was mainly making more GIFs & designing screenshots for it so it will look pretty and futuristic (in my opinion)! As I have mentioned in the title, NEW… PROBLEMS! People… you won’t believe what happened to me today… I use Helyx’s Git & GitHub for testing, so there is no official one yet, and I rarely commit changes or push them. Only when I test something. And it looks like it got back at me. Well… I told Claude Code to remove comments all over my codebase, because they were mainly scrapped code and some temporary information that I had there, that wasn’t used anymore. Okay, so I told it to remove them, and for some reason instead of removing comments, it deleted Helyx’s whole codebase. Thank god README.md was untouched haha. We had to decompile the .dll that was left over from testing Helyx’s latest version, and actually check the diff and rewrite it. We still don’t know if everything was brought back since for some reason Claude Code’s memory got wiped instantly when it realized that it deleted my whole codebase. There were no backups, no restore, no nothing. The only possible thing was to use the forgotten stash that I created and use the .dll as a map to restore Helyx’s outdated codebase and rewrite it again. So that’s what we did. Yeah, so I hope everything was brought back. Claude says it was, but after what it has done I don’t know if I trust it. Just kidding, everything should be back, because it compared the .dll with the rewritten code 1:1 and everything matched."}, {"post_id": 51403, "ts": "2026-08-21T02:37:22Z", "hours": 10.1656, "text": "More bugs fixed, new functions, README & Language System updates! Hello guys, once again at 4 AM! Bugs: As the title says, there are more fixed bugs. Diagnostics crashed Helyx if you ran a rebase in a terminal and hit a conflict. Now it doesn’t! Another fixed bug is that when you opened an issue in Helyx, the footer vanished. At first I was shocked, but it was a simple fix so now your footer doesn’t vanish. Another vanishing bug! The Languages row from the header vanished when you entered a tab where Layout class was being used. Now you will see your sweet programming languages used in your selected project. Guess what! Another vanishing bug! This time the whole header vanished when you exited .Live()! Now it is okay! New behaviour: I unified some color codes with some type of info. E.g. SHA is Dark Orange everywhere, Stash is Yellow, Date is Cadet Blue and Issue Number is Aqua. The README.md editor, when inserting badges/status now has a new keybind: backspace! It is different from DEL! DEL deletes the badges/status but backspace deletes the whole line, including the badge/status that was on that line. README The README is almost done! At least I hope! Claude was a big help here, because I wanted to create an insane README and we really did. Guys, you should be excited about the README file haha! Language System Translations for these languages are already done: English French German Russian Slovak Spanish So basically every language translation is already done. BUT I decided to add even more languages! The new languages that Helyx will support are: Italian Portuguese"}, {"post_id": 50335, "ts": "2026-08-19T14:33:20Z", "hours": 8.0847, "text": "Languages almost done, moving onto GitHub & README.md Well guys, Language System is almost done. It is powered by a Resources file that stores all of the translated strings. More bugs were found! But now, all of the bugs should be fixed with also many failsafes! Now, I want to complete the Language System because I am really close to finishing it. I also want to make the README.md for Helyx’s GitHub Repository. Originally I wanted to make it via Obsidian app, but it doesn’t have direct support for Wakatime, so I have to use VS 2026 native Markdown editor with the support of Markdown Editor v2 extension from Mads Kristensen. (not sponsored lol) I also heard that Obsidian app doesn’t use the same Markdown as GitHub does so there would be some things mistyped or not even rendered, but VS 2026 should be fully compatible with GitHub’s Markdown renderer, so we will see!"}, {"post_id": 49506, "ts": "2026-08-18T11:50:08Z", "hours": 6.5236, "text": "Fixing more bugs I fix bugs mainly with use of Claude Code, because hunting for bugs is not easy and this project is not a small one haha. I had to run MANY code review tools for this, because every time it kept finding new bugs. No idea how but it did. So what we fixed? If a GitHub comment had bold text split across two lines, opening that issue crashed Helyx before it drew anything. A file with a square bracket in its name (e.g. data[1].json) crashed Status, Diff, Commit, Stashes and Log. If anything held config.json open for even a moment, Helyx assumed it was corrupt, reset it, then crashed everywhere that looked for a project. If config.json was missing its Badges section, the startup migration quietly deleted every badge from every project. Committing saved a copy of the project taken before the confirmation prompts, so anything changed in between was silently thrown away. If you linked a GitHub repo during Push, the remote was created with an empty name. Syncing a status that had since been deleted crashed in the middle of a push. A commit message containing a square bracket crashed “View Full Message” (those are just bugs that were missing Markup.Escape() function). Applying a stash said “applied successfully” even when it conflicted. One bad path stored in config.json crashed “Add Project”. This is just a snippet of the amount of fixed bugs. I won’t write all of them here since it would take a lot of text and I am pretty sure that this is enough for you to understand that we fixed a lot of bugs haha. Right now I am going to do the Language System. I am not sure if I mentioned in some devlog, the list of languages that Helyx will support. If not… there it is: English Slovak Spanish French German Russian"}, {"post_id": 48471, "ts": "2026-08-16T20:37:52Z", "hours": 9.3269, "text": "Adding new features & fixing bugs I finished making “Analyze Project” which analyzes your whole project and prints stuff such as: Number of files Number of folders Size of the project on disk Number of lines Also you can now see what amount of what programming language makes your project. It also shows you the biggest files in your project directory. And also you can see Git information such as: Branch Number of commits First commit (date) Last commit Working tree .git size So it displays some maybe important and basic information that you may check sometimes or might be interested in. There were like 6 revisions of this because I was testing different styles & designs. I also found a lot of hidden bugs with help of Claude! Before talking about bugs, I will tell you something about new features that I added. Now, when you assign a badge or change a status and you don’t have markers in README.md yet in it, then it will ask you if you want to add them manually or via Helyx. What does that mean? Well, it opens a “text editor” in Helyx which displays README.md and you can insert the badges/statuses where you want instead of opening the file in notepad and inserting the markers manually. Overall it is way quicker to do it now via Helyx. Helyx’s Generic Text Editor is now even better! You can now use all of the arrows, before you could just use Left/Right Arrow to move cursor left or right. Now you can move between lines. Now you can also open your project’s wiki via Helyx. Be aware that it doesn’t check anything, if you have wiki or not. It directly opens the website for the wiki where it should have been for the current linked GitHub Repository. Let’s talk about bugs now! Open an issue called the Markdown handler function and it was accidentally calling GitHub 101 times, when it needed some info. Now it doesn’t. 🆒 Notes have an encryption system, so if you put some sensitive info into it, it couldn’t be directly taken from the file. Only via Helyx. There was a bug, where when you enabled encryption and edit notes of 2 projects, then you turn off encryption globally and open the first project’s notes, it decrypts… but after that you open second project’s notes, it won’t. This was due to having a global bool instead of per project bool when saving if it was encrypted. Fixeddd! Another bug! Sync Status & Sync Badges was deleting staging index. Funny that I was thinking about to restore the staging index whenever using it, but at the end… the logic was wrong 😭 Now it isn’t. Then there was a bug that when you unassigned a badge, it unassigned ALL badges. Fixed! Another bug linked to badges… Unassigning a badge didn’t remove it from GitHub. Yeah… fixed!!"}, {"post_id": 47110, "ts": "2026-08-14T19:16:58Z", "hours": 10.0108, "text": "Manage PRs done! Added few new things… I finally finished making Manage PRs. So now you can: Delete Comment Merge Review Close PR Reopen PR I also had to fix some design flaws and function flaws but now it should be all good. Before doing all of this, there was a bunch of GET requests… now? Now it is also a bunch of PATCH & PUT requests. Also, now when you’ll try to link your GitHub Repository with the local one, you will just select the one that is on your GitHub account. Another thing! When you have conflicts between the local repository and the remote one (GitHub) and you try to sync them, a lot of the time Notepad pops us and tells you to remove the version of the text that you don’t want. Well now Helyx does it too and doesn’t open notepad, but lets you do it directly in TUI interface in my very own notepad. Conflict solver also uses alternate screen for this. (there’s sadly no showoff image for this, because currently I don’t have anything to create a conflict on) I am not sure what to do next in a next devlog, since everything I really wanted to do is already done… well… not everything but everything around the main things is. Maybe I’ll move on another refactoring? Or finishing the language settings? Well, we will see!"}, {"post_id": 46111, "ts": "2026-08-13T03:18:59Z", "hours": 9.2472, "text": "Manage PRs displaying and some logic done After pulling another all-nighter I finished making the Pull Request display functions. List and details about each Pull Request is done and paging also works too (took it from manage issues ;] ). Pull Requests also contain filters such as: Open Drafts Assigned Reviewed and we can’t forget their counterparts either: Closed Ready Unassigned No reviewers Pull Requests now have comment selection and Markdown formatting, but functions to manage Pull Requests are not done yet. The only ones I managed to finish are: Comment Open Browser The biggest problem with PRs is going to be, that their functions and methods for executing those functions are more complex than the ones for Issues. I plan to add these functions for PRs: Delete Comment Merge Review Close PR Reopen PR I am pretty sure that all of this will be done in next devlog, so stay updated! This is going to be very cool, I think. Well, now I am going to sleep so good night everyone!"}, {"post_id": 45830, "ts": "2026-08-12T15:39:18Z", "hours": 8.5531, "text": "Manage Issues, completed! PRs, incoming… Manage Issues is now fully completed. I still had a few issues with paging and rendering but now they are fixed. Now you can select a message and delete it & edit it. But also now you can create a comment, lock an issue, unlock an issue and create an issue. I also added a thing that I hope will be appreciated, Helyx renders Markdown from GitHub Issue comment and when you comment via Helyx, Helyx gives you Markdown options such as: Bold Text Italic Text Code Text List Quote Also, when you don’t provide a text to a comment in GitHub, Helyx will say that “No description was provided.” So the same thing as GitHub already does, but in Helyx you must provide text. Why? Because why would you create a comment with no text? So I banned adding a comment with no text. Okay, that would be everything! It was fun to create this because everything was working so well, except the paging system… that was painful to make even with Claude’s help. As I said in past devlogs, after Issues I am going to move to PRs. So yeah, let’s work on PR. I hope it won’t be harder to make, because a PR is a type of Issue in GitHub, so I hope I will use the same function logic and functions and callbacks to make it."}, {"post_id": 45232, "ts": "2026-08-11T15:56:35Z", "hours": 9.2425, "text": "Paging done, functions almost! I finished making the logic for rendering issues. In the last devlog it was just displaying all of the issues at the same time. No paging system so if there was a lot of issues or long issues, they would simply… not appear. It took me a really long time to work this out. I was mainly switching back and forth the rendering logic all the time and it went so far, that I had to use Claude to help me with it. At the end, I ended up with a rendering logic that I am not really keen on, but it is the best one that can be used in Helyx and TUI environment. Main obstacles were the Spectre.Console rendering functions and classes that were under IRenderable interface. And also the limitations of Panels, Grids… Layout had everything I needed . I wanted to cut the part which couldn’t be rendered and it should have looked like, like an unfinished Panel. Well, this was impossible. Without changing the core code of Spectre.Console or creating own system for making Panels it was impossible. Also, I haven’t seen it as something that WOULD NEED an own system that would render comments. So I just made it when a comment cuts, it creates whole Panel with part of the comment that can be rendered and at the bottom is text saying that it continues on the next page… and on the other page at the top there’s text that, hey, it continues here! Let’s finally talk about the Issue functions! I finished some simple one like: Close Reopen and create an issue… But I still have to create a system that can let you: Comment Edit comments Delete comments Lock issue Unlock issue Those are currently in WIP, but in the next devlog they’ll be most probably finished and after everything is done with issues, I will move to Pull Requests!"}, {"post_id": 44672, "ts": "2026-08-10T16:18:14Z", "hours": 9.8836, "text": "Manage Issues, at your service. After a painful development period I am again here, writing devlog! What changed? Good question! Manage Issues is partly done! I still have to finish making the actual actions but displaying is somewhat finished. When you go to ‘Manage Issues’, you will firstly see a list of issues that are on your GitHub repository. From there you can already see some details about the issues such as: Number State Title Labels Comments (number) Updated (time) Above them are filters, currently those are the available filters: All -> All Commented -> Issues has some comments Assigned -> Issues that have some assignees Labels -> Issues that have some labels But that is not all! There are also their counterparts: No comments Unassigned Unlabeled (there’s no inversion of All because why would you need filter None) Yeah, so you can invert your filters… When you select an issue at the very top you will see its number, then you will have a panel with details about the issue with its title and: State Author Opened (time) Labels Assignees Right under these details are all of the comments in chronological order. When it is done, it will also show the whole timeline of each issue. So when this and this label was added/removed… when was this assignee assigned/unassigned… when was this issue closed/opened…. Of course I am going to add actions so you can add a comment, close issue, open issue, etc… When I’ll finish Manage Issues, I will go to work on Manage Pull Requests. It shouldn’t be that different because Pull Requests are by GitHub a kind of Issue but they are also not the same, so different classes, types, etc… Well, wish me luck people… or should I say… Stardancers?? P.S.: Sorry for the grammar in images in comments. I did it very quick for the preview."}, {"post_id": 44020, "ts": "2026-08-09T14:52:22Z", "hours": 9.7869, "text": "Diagnostics done, other stuff too and some changes! Diagnostics are now fully done! When something messes up, it will give you options to fix it! Some time ago I created GitHub Synchronization settings for managing what to sync with GitHub, so what to retrieve and send with those options: Sync status with GitHub repository Sync badges with GitHub repository Fetch GitHub repository topics Fetch GitHub repository stats Use GitHub’s language detection instead of Helyx’s I created a brand new tab called ‘GitHub Actions’ where this setting is. GitHub Actions is meant to contain all of the actions that are mainly linked with GitHub endpoints. I kept few such as Push, Pull, Sync in Git Actions due to how the layout is already created. Also I added when you are rebasing and it fails, it automatically gives you a prompt to cancel it. So repair it… GitHub Actions will contain a new stuff that will come to Helyx! Managing Issues and Pull Requests!! Maybe also workspaces/actions but I will see how difficult that is and how it is needed/useful in Helyx. Another new function is, that when there’s an update for Helyx and I change the GitHub OAuth scope because of new features… Helyx will warn you and tell you to reauthorize to make sure every function will work correctly. Before this change, Helyx was using its folder name as a name of the project and as a repository name for GitHub. Now, when you add a project to Helyx, Helyx will ask you what’s its name and when you will try to use some GitHub function for the first time on your newly added project on Helyx, it will request a GitHub Repository name from you. ;) There’s still a lot of things to add. Honestly I thought that Helyx was at the very end like 50 hours ago and look! There are many more functions to add haha!"}, {"post_id": 43404, "ts": "2026-08-08T17:00:23Z", "hours": 8.0208, "text": "Doctor Git As you may know, right now I am working on Diagnostics. I am almost done with fully displaying all of the health checks about your Git repository. But I still have to finish all of the fixing actions that it will have. Diagnostics will mainly be for a case where something happens in Helyx and it will need to be fixed. The main idea of it is not aimed at resolving issues with your Git repository outside Helyx. But it may resolve some because you may run into the same issue as you had in Helyx of course. In the last devlog I said that I put GitHub Topics off. Well, that did not happen! I finished displaying GitHub Topics!! I think in some devlogs I said that it was for managing GitHub Topics. Managing meant like adding, removing, editing. Well, that wasn’t actually my main point. I just wanted it to show you your currently assigned topics in GitHub. I also didn’t see a big reason in adding Add, Remove, Edit functions for topics. Topics rarely changed, honestly and the most intuitive way would be doing it via GitHub web interface."}, {"post_id": 42869, "ts": "2026-08-07T20:34:12Z", "hours": 3.6694, "text": "More bugs are appearing, and being fixed!! So since Helyx is already far and has many advanced functions, it also has some bugs. Today when I was experimenting with assigning a project and syncing it with GitHub, I found out, that if you try to sync the projects in a wrong way… it will not work. For that reason I added more fail-safes to make sure that this will be eliminated. I can’t confirm yet if those fail-safes work, because I am also working on a new Diagnostics action in Git Actions so if something goes wrong, you can fix it by the error Helyx gives you. Right now my testing project is in a state of “Git corrupted” (no idea what I should call it) where rebase was aborted. Because of this, I had to put the “GitHub Sync Topics” synchronization off until later, so I can focus on fixing these major bugs. Also another bug came to my mind that I fixed… Helyx works on a principle of directory paths. Each project is saved in config file under its own unique GUID and its path. The bug is that when you try to rename the directory, the project won’t be found and it will be removed from Helyx. Now, you can either let Helyx find it automatically (sadly can easily fail) or you can select project manually in explorer (recommended!!!)."}, {"post_id": 42404, "ts": "2026-08-07T02:57:49Z", "hours": 4.2367, "text": "Sync finally done!! It’s 5 AM and I finished “Sync badges with GitHub Repository” and “Sync the status with GitHub repository” (this was already done, but with the enum version of status). I added also a few fail-safes so when you assign some badge or status and then delete it, it will also delete it from GitHub and project. Now it won’t be a ghost that you cannot get rid of haha. This was a little more difficult than I expected to do, the fail-safes because the local changing mechanism and syncing mechanism were written inline in the same function. The only thing that was dividing them was an if statement. It was interesting to make this. To make sure everything will work fine. Even though it didn’t MANY TIMES. Now I will focus on syncing GitHub topics. Wish me luck! P.S.: Forgot to mention, that I have to add this “On Status/Badge Edit, ASAP sync with GitHub” with Edit. I almost forgot lol, just came into my mind. I hope that COPY+PASTE will be enough and I won’t have to create another syncing system specifically for edits…"}, {"post_id": 42259, "ts": "2026-08-06T21:43:48Z", "hours": 8.6897, "text": "Never expected it to be this hard So the last days I was again changing the structure of my solution and trying to get on with it. It took me a while to create one that Claude agrees with and is good for such open-source projects. Anyways, this was the easy part. In my last devlog I said that I completed Custom Statuses & Custom Badges. Well… I did! But then I found out, that my system was bad… and when I say bad I mean it wasn’t thought out. I found out about all of this when I finished the edit action for both. Originally I used Dictionary<string, TagDefinition>. Key was name of the Status/Badge and TagDefinition was the class of one of them which also has name property. But Helyx was not prepared for this, so for the last days I redid the whole system eight times. Once I used Dictionary, once I used List, then HashSet, then Dictionary, then Dictionary with other types and so on. I just couldn’t settle on the correct type for it. Until now, it took so long even though it is so primitive because it simply didn’t come to my mind and when I was asking Claude for suggestions of how could it be made, it didn’t think of using this type. The final type is simply… Dictionary<Guid, TagDefinition> AND A LOT OF CHANGES. Yeah… don’t worry guys! I am totally devastated by doing this over and over even though it was so simple & primitive to do. Well… maybe not really primitive because the changes were also difficult to do. I mainly didn’t want to use the GUID system because I have Custom Statuses but also Built-in Statuses and I was really worried about Built-in statuses having GUID assigned to them. Those sync options with GitHub are still in work, but I finished the GitHub Repository Stats viewer after a lot of experimenting with layouts and designs/effects/colors. I’m looking forward to the next devlog guys! I hope Helyx will be your good coworker that will actually count for something hah! P.S.: I also made that text of colors is grammatically formatted. At least it should be…"}, {"post_id": 40755, "ts": "2026-08-04T14:24:15Z", "hours": 6.5064, "text": "Adding Custom Statuses, Custom Badges and even more! Here we are again! Today I added: Custom Statuses Custom Badges WIP: Sync badges with GitHub repository Sync topics with GitHub repository My original status system for projects was a hardcoded enum with statuses “Active”, “Inactive”, “Paused” and “Archived”. Then I had a lot of switches which determined color of markup based on which enum it is hah. As you may already know, enums cannot be changed in runtime :) What does that mean? That users cannot add their own statuses in Helyx directly… They would have to hardcode into Helyx their own statuses and that’s just impractical, no? That’s why I spent below mentioned amount of hours redoing so many things to make it actually work and I even learned something from this! That JSON Parsers and Colors are NOT huge friends! (genuinely, I HAD NO IDEA why it wasn’t working until AI told me that JSON parsers cannot translate Color structs). Custom Statuses/Badges currently have Add/Delete functions and right now I am going to add also Edit function, so when you accidentally create a status/badge with wrong color, you don’t have to delete it and create it again :) (just saved 10seconds of your life). I also recategorized my whole codebase with help of Claude Code. I told him to review my whole codebase and suggest what classes, enums, interfaces should be in which files and those files in which folders. It was fun, finally something where I did not have to concentrate much and chill and watch something when doing it. Well, now it is not much fun when functions that I was using are in different files and some classes have different names. But at least my codebase looks more professional! (before this I had like 10 files with a bunch of lines where classes were stacked…) Also, about the WIP stuff above… Sync badges with GitHub repository is going to be something like the Sync status with GitHub repository. It will just pop up in your README.md based on where you put the headers which Helyx will give you for that specific badge. Sync topics on the other hand are classic topics of the repository which you can see in top right corner of your repository page. It will mostly show you which topics are assigned to your repository in Helyx but I’ll make it also so you can assign/unassign topics from your repository. I’m thinking of adding more GitHub Synchronization options, but none are currently coming to my mind. Maybe something with actions, no idea yet, or local AI that will explain to you errors given by Helyx when you will be trying to do something. We will see!"}, {"post_id": 40227, "ts": "2026-08-03T17:05:06Z", "hours": 5.3314, "text": "Settings and Git pages are receiving more stuff! I added for Settings page: Notes Settings Updates and for Git page: Undo Commit Redo Commit as the name says, Notes Settings are for changing properties of global Notes on every project. There is only one setting that came to my mind and that is encryption. Some of you might paste into it something personal or confidential. Well, this makes sure that these info CANNOT be taken from raw file, but from Helyx directly. (thinking about adding password mechanism lol) Updates, yeah, it looks for updates for Helyx . Undo Commit is a special one, when you commit something and for some reason you want to go back you just undo it. On the other hand, if you somehow accidentaly clicked on Undo Commit or now you want to redo the undo, you can with Redo Commit. My plan now is to add again more functions, such as Custom Badges, option to sync the Custom Badges with your GitHub repo (it will pop up in README.md) and also add Tags sync, so you can edit your repository’s Tags via Helyx. Oh yeah, also going to add custom project status because some people may say that having statuses such as “Active”, “Inactive”, “Paused”, “Archived” is limiting (custom ones will yes, also be synced with GitHub). :) I also mustn’t forget to add the translations for other languages. I am going to do this at the end due to new text appearing every time I add something new."}, {"post_id": 39660, "ts": "2026-08-02T19:45:40Z", "hours": 6.2036, "text": "Slowly, but surely We are almost at the end (if no other function to add will come to my mind) and I was messing with access modifiers, accessors, refactoring names of variables, Tasks, voids, properties. I was adding exception handling keywords and many ifs to make sure there will be no bugs and that almost every exception will be caught. I was doing this manually so I might have missed some places where the exception handler is needed but yeah we shall see! I also enabled a search bar, so when you will be looking for your project in Helyx and you have many projects added, you can search for yours! I was also changing styles of my old menus and theirs logic because they weren’t done very well in comparison with style that I am using now… Funny story: while I was messing with the access modifiers and accessors I actually bricked the whole Helyx, because functions that were supposed to resolve configuration file and read/write into it couldn’t. I thought I accidentally removed something important but at the end it was just that, that I was changing the access modifiers and accessors."}, {"post_id": 39059, "ts": "2026-08-01T18:54:21Z", "hours": 9.4842, "text": "Added new setting, finished overwrite languages and still working on show stats I have finished the overwrite languages function which uses GitHub’s programming languages detection system over Helyx’s one. I added a setting where you can choose your identity (Git -> local, GitHub -> remote). Local is based on Git’s settings and remote one is accessible after authorization with GitHub. I am currently working on retrieving and displaying the GitHub repository statistics. I am using charts to display it nicely and simply. Currently it is showing only Stars, Watchers, Forks and chart of used languages. I also added a few informative labels that tell you that something is actually happening and the program did not freeze. If I didn’t add this you would be looking at an empty black screen. One of the last things I added is active GitHub Authorization Token checker and resolver. Before this if you revoked your OAuth with Helyx on GitHub page, Helyx would think that it is still authorized to your GitHub account, now it checks it and if you revoke it online, Helyx will disable functions that are only accessible when you are authorized via GitHub."}, {"post_id": 37815, "ts": "2026-07-30T19:23:03Z", "hours": 4.9556, "text": "User Scripts done? What next?? As written above, I have finished User Scripts. Yeah, they don’t have that many functions as before, but I am going to add some, that will actually be useful and will stay in Helyx. Right after that I’d want to move to add more things to GitHub Synchronization settings that are per project. This is mainly to make the Helyx project dashboard look better with more interesting info about your current repository. Be aware that you have to be authorized in Helyx via GitHub to access those settings. This may sound funny, but I was thinking about adding Add-on manager to Helyx. No idea how I would make it yet or what packages would even Helyx have, but I hope that after some brainstorming I will have an answer. Before that, I will again think for a while if it is a good idea and if it is even needed. But surely it sounds cool to me, to someone who has never made an add-on manager for his program. At the end I want to transfer my view to hardening the code. Many checkings, many dialog boxes what’s wrong, and such things, so your Helyx window just doesn’t close after you mess up with configuration file or you do something that no one would ever do in his lifetime. ;)"}, {"post_id": 37545, "ts": "2026-07-30T10:56:21Z", "hours": 10.0053, "text": "Changing my mind over User Scripts So I have finished all of these User Scripts functions and I found out something interesting, that made me remove some of them after I finished them. In the devlog before, I wrote a list of actions that are in Helyx such as… Wait Until, If, Loop, Set/Get Variable, etc… . Well, I found out that making some that I have mentioned would be useless, because I imagined User Scripts mainly as an automatic actions for testing your project, but how could your program get script’s variable from Helyx or set/change it. The same applies for If, If would be also complex to set. With each If Action there would be x^2 (if my calculations are correct) more node pathways and without making some really good UX in TUI environment, it would be difficult to find your way around."}, {"post_id": 36457, "ts": "2026-07-28T16:14:12Z", "hours": 9.1958, "text": "Making User Scripts I am currently working on the User Scripts as I have mentioned in older devlogs. I must say that this is one of my first interactions with interfaces in C# because there was not a huge reason to use it in my code… until now. I must say that User Scripts is the most difficult thing in all Helyx to make because you have to think on everything… how this will work, how shall we display it, how to make it versatile so other actions work with it too, etc… I made the system for adding Blocks (Actions = Blocks) to Scripts and right now I am implementing dialogs to insert properties for each action, such as Duration for Wait Action. These are current actions that are in Helyx (you can suggest new ones in comments) : Wait Wait Until If Loop (should be something like while(), might change the idea of it) End (ends script, so like return/break) Set Variable Get Variable Compare Random Log (logs text) Execute (executes command) Open (opens directory) Create File Create Folder Delete File Delete Folder Right after that I would want to move to make the UI look overall better and function better. Welp, we will see in my next devlog the progress I will make."}, {"post_id": 35822, "ts": "2026-07-27T14:40:58Z", "hours": 5.6561, "text": "Backup system, done!! I finished the Backup system and also had to fix some major issues I had in helper functions due to the “project looking up system” migration… yeah… awkward name, I know. Now that the Backup system is done, let me continue and begin to work on User Scripts. Just realized that I have to come up with how it will work…"}, {"post_id": 34093, "ts": "2026-07-24T15:52:43Z", "hours": 8.3447, "text": "Losing sanity is not fun I honestly think I’ll go insane soon. I have changed the whole system of how Helyx saves Projects to its config file and how every function… EVERY FUNCTION works with it. I just have to say that I’ll try my best to make the code better than the one I am currently editing because 18h spent on redoing the whole codebase (revamping included from devlog before) is 1. crazy and 2. even more crazy. It’s wild how a tiny thing can ruin your whole codebase, I hope I will finish it quickly, because I want to continue working on the Backup system and after that on the User Scripts."}, {"post_id": 31940, "ts": "2026-07-20T19:06:16Z", "hours": 9.93, "text": "Cleanup time! I have completely revamped my code… I removed a lot of unused code that was either used for experimenting or was scrapped and I forgot to remove it. Before removing some of the code, I actually tried something with it… but then I realized that they were commented for some reason. I refactored parts of my code to look overall simpler with lambda expressions and LINQ. Not sure if it is more readable now, but it works so it’s fine. If anything, I’ll just add a comment so I know what it does instead of looking at it and brainstorming what it could be. I decided to mainly work on the Backup system because I think that User Scripts will be more complicated to make."}, {"post_id": 31333, "ts": "2026-07-19T17:11:07Z", "hours": 6.3575, "text": "Local & Remote Repository status I just finished making the status manager, so now you can change your status locally… but also remotely! Remotely means on GitHub, not like via some controller. Because of this, I created a tab called GitHub Synchronization, where you can enable/disable settings that are linked with GitHub and retrieve/push from/to GitHub. Now, I am planning to work on Backup system and User Scripts."}, {"post_id": 29735, "ts": "2026-07-16T20:33:20Z", "hours": 9.7861, "text": "Git Actions family is getting EVEN bigger! I have finally finished a lot of major stuff and also tried to make some additional things that MAY be added in the future. I finally added Stashes, Pull, Push and Sync to the Git Actions, so now they work! Also, all of Git functions have some automatic repair, so if you do something you shouldn’t, it should be alright… but it is not 100% so don’t try your luck! I still have to finish and a bunch of stuff with it so you can do whatever you want with it without editing the code itself! I was thinking of adding some label for your GitHub repository which you can control via Helyx. Like status… yeah… let’s add a badge that will act as a status info of your project!"}, {"post_id": 26717, "ts": "2026-07-11T17:47:55Z", "hours": 12.8578, "text": "Git Actions family is getting bigger! We’ve made a lot of progress! More of the Git Actions are done such as… Status Stage Commit Diff Create Branch Switch Branch Delete Branch Right now I am working on another: Pull Push Sync Stashes I hope they will be done soon! Stay updated!"}, {"post_id": 21798, "ts": "2026-07-03T22:31:34Z", "hours": 45.9456, "text": "Huge updates!! Since it is my first time working with Spectre.Console library, I was trying a lot of stuff with it. When I was somewhat happy with what I learned, I cleaned up the code due to the amount of useless lines and duplicated/not used variables . 1, Updated UI/UX I have updated the UI/UX so it looks more modern-ish. This new UI/UX design is for now only on the main pages of Helyx… but I plan to add it to every page very soon! 2, More actions! (even more will be available in the future) I have added more Git Actions that are still in WIP. I also created templates in code of what actions I’d want to add later. I’ll tell you more about them when they will be finished (SOON). 3, More stuff in Settings! I have added more settings into Settings :D Now you can select Default IDE, see if your IDE was found in your system, if not you can manually select the .exe of it. You can also manage the configuration file, well, reset it. 4, Projects sorting Projects are now sorted based on its status. 5, You can manage the projects for Helyx You can now delete the projects and change the status. 6, Future bugs & lots of if statements My code was completely unsafe up to this point, so I had to add many of try/catch and if statements to make it safe. I was experimenting with Spectre.Console, because I have never worked with it. I made some cool stuff that I will add in the future to Helyx! I understand it now better! All of this was quite difficult for me to do, since as I said, on such project where I am using C# with its basic types… I was mostly a Unity C# Developer, where Unity had its own classes and functions and callers that were standard."}, {"post_id": 10796, "ts": "2026-06-17T18:25:25Z", "hours": 14.0269, "text": "Helyx, the IDE detective I’ve been working on the IDE detection system. This took me a long time because I was testing many different ways of how to detect it and then sort them from most probable to least. At the end I have selected the one that uses points based on what the Project includes in its path… so files, extensions and directories. I was experimenting with the Language system that I will make in the future. I just want to be sure what I am doing so later, I won’t be in panic what now and what was my original plan. I have also refactored the code to some point but it is still not great after all of these things I have done above … so still need to do this. I redesigned the menus and made it more universal and made the menu easier to navigate in. I think my progress is going kinda good so far and it looks promising for me. I also added some basic Git function like “git status” but I am about to add more. I’d appreciate if you would write into comments some functions that I should add to Helyx. Not sure if I already mentioned this but I am also planning to add a feature so you can create your own shortcuts for your projects like… some testing shortcut. For instance, you have some project you want to test and you need to build it, then tweak some settings and at the end you actually test. With this, you can do all of this just by one click… Well, that’s at least my imagination and I am not sure if it will get to such point where you can do such tasks but we’ll see Wish me luck!"}, {"post_id": 9561, "ts": "2026-06-15T22:44:15Z", "hours": 4.0336, "text": "Project handler, done for now I was thinking of adding a translation system for Helyx. I was experimenting with a lot of systems how to do it… well, I might keep this for the end of Helyx so at the end I translate all of the strings. I added the “Add Project” system and some basic detection systems for it such as… Project Name Path Languages (used programming language in project) Used IDE for the project then it will ask you if you really, but REALLY want to add the project and if you proceed it will be added to your Projects menu. After that you can open your Project and see such basic info as… Status Last modified Languages Used IDE Is a GIT Repo I am thinking about adding more, removing some and making it overall more versatile because versatile applications are just the best ones. For now, I created some basic functions for your Projects such as… Open in VS Code Git Status Remove Project (from Helyx) but these are the ones already working, but I am still trying to make them more versatile :p … but there’s more functions that I am currently working on, that I hope won’t be scrapped and I will mention them in next devlog!"}, {"post_id": 9329, "ts": "2026-06-15T17:24:04Z", "hours": 7.76, "text": "Lots of new ideas, lots of scrapped ideas Lately I’ve been working on a way to search for projects automatically but I had to scrap the idea because I didn’t like it at the end… so now I am making it so you can add your own projects and some IDE integrations. I was also trying multiple libraries for TUI interface integration and GUI support with other libraries and input devices. These hours were full of scrapping & making new ideas, but that’s what programming is about!"}, {"post_id": 8639, "ts": "2026-06-14T11:15:51Z", "hours": 1.3039, "text": "The beginning… So I have finally begun to work on this! I was thinking a lot what to create for Stardance and it looks like this might be something I want to create! Originally I wanted to create this in Python but then I really quickly found out that my Python skills wouldn’t be enough to create something like this and I didn’t want this to be a vibe-coding project… SO HERE WE ARE… using C#! So far so good, I guess… Currently I am working on the configuration handler which will have functions for implementing and retrieving info from the configuration file. After that, I am planning to make the interface somewhat versatile, so it is possible to adjust it for yourself or add some new options and such."}]...
|
Title: Helyx by @lix | Stardance
Devlogs:
The beg Title: Helyx by @lix | Stardance
Devlogs:
The beginning… So I have finally begun to work on this! I was thinking a lot what to create for Stardance and it looks like this might be something I want to create! Originally I wanted to create this in Python but then I really quickly found out that my Python skills wouldn’t be enough to create something like this and I didn’t want this to be a vibe-coding project… SO HERE WE ARE… using C#! So far so good, I guess… Currently I am working on the configuration handler which will have functions for implementing and retrieving info from the configuration file. After that, I am planning to make the interface somewhat versatile, so it is possible to adjust it for yourself or add some new options and such.
Lots of new ideas, lots of scrapped ideas Lately I’ve been working on a way to search for projects automatically but I had to scrap the idea because I didn’t like it at the end… so now I am making it so you can add your own projects and some IDE integrations. I was also trying multiple libraries for TUI interface integration and GUI support with other libraries and input devices. These hours were full of scrapping & making new ideas, but that’s what programming is about!
Project handler, done for now I was thinking of adding a translation system for Helyx. I was experimenting with a lot of systems how to do it… well, I might keep this for the end of Helyx so at the end I translate all of the strings. I added the “Add Project” system and some basic detection systems for it such as… Project Name Path Languages (used programming language in project) Used IDE for the project then it will ask you if you really, but REALLY want to add the project and if you proceed it will be added to your Projects menu. After that you can open your Project and see such basic info as… Status Last modified Languages Used IDE Is a GIT Repo I am thinking about adding more, removing some and making it overall more versatile because versatile applications are just the best ones. For now, I created some basic functions for your Projects such as… Open in VS Code Git Status Remove Project (from Helyx) but these are the ones already working, but I am still trying to make them more versatile :p … but there’s more functions that I am currently working on, that I hope won’t be scrapped and I will mention them in next devlog!
Helyx, the IDE detective I’ve been working on the IDE detection system. This took me a long time because I was testing many different ways of how to detect it and then sort them from most probable to least. At the end I have selected the one that uses points based on what the Project includes in its path… so files, extensions and directories. I was experimenting with the Language system that I will make in the future. I just want to be sure what I am doing so later, I won’t be in panic what now and what was my original plan. I have also refactored the code to some point but it is still not great after all of these things I have done above … so still need to do this. I redesigned the menus and made it more universal and made the menu easier to navigate in. I think my progress is going kinda good so far and it looks promising for me. I also added some basic Git function like “git status” but I am about to add more. I’d appreciate if you would write into comments some functions that I should add to Helyx. Not sure if I already mentioned this but I am also planning to add a feature so you can create your own shortcuts for your projects like… some testing shortcut. For instance, you have some project you want to test and you need to build it, then tweak some settings and at the end you actually test. With this, you can do all of this just by one click… Well, that’s at least my imagination and I am not sure if it will get to such point where you can do such tasks but we’ll see Wish me luck!
Huge updates!! Since it is my first time working with Spectre.Console library, I was trying a lot of stuff with it. When I was somewhat happy with what I learned, I cleaned up the code due to the amount of useless lines and duplicated/not used variables . 1, Updated UI/UX I have updated the UI/UX so it looks more modern-ish. This new UI/UX design is for now only on the main pages of Helyx… but I plan to add it to every page very soon! 2, More actions! (even more will be available in the future) I have added more Git Actions that are still in WIP. I also created templates in code of what actions I’d want to add later. I’ll tell you more about them when they will be finished (SOON). 3, More stuff in Settings! I have added more settings into Settings :D Now you can select Default IDE, see if your IDE was found in your system, if not you can manually select the .exe of it. You can also manage the configuration file, well, reset it. 4, Projects sorting Projects are now sorted based on its status. 5, You can manage the projects for Helyx You can now delete the projects and change the status. 6, Future bugs & lots of if statements My code was completely unsafe up to this point, so I had to add many of try/catch and if statements to make it safe. I was experimenting with Spectre.Console, because I have never worked with it. I made some cool stuff that I will add in the future to Helyx! I understand it now better! All of this was quite difficult for me to do, since as I said, on such project where I am using C# with its basic types… I was mostly a Unity C# Developer, where Unity had its own classes and functions and callers that were standard.
Git Actions family is getting bigger! We’ve made a lot of progress! More of the Git Actions are done such as… Status Stage Commit Diff Create Branch Switch Branch Delete Branch Right now I am working on another: Pull Push Sync Stashes I hope they will be done soon! Stay updated!
Git Actions family is getting EVEN bigger! I have finally finished a lot of major stuff and also tried to make some additional things that MAY be added in the future. I finally added Stashes, Pull, Push and Sync to the Git Actions, so now they work! Also, all of Git functions have some automatic repair, so if you do something you shouldn’t, it should be alright… but it is not 100% so don’t try your luck! I still have to finish and a bunch of stuff with it so you can do whatever you want with it without editing the code itself! I was thinking of adding some label for your GitHub repository which you can control via Helyx. Like status… yeah… let’s add a badge that will act as a status info of your project!
Local & Remote Repository status I just finished making the status manager, so now you can change your status locally… but also remotely! Remotely means on GitHub, not like via some controller. Because of this, I created a tab called GitHub Synchronization, where you can enable/disable settings that are linked with GitHub and retrieve/push from/to GitHub. Now, I am planning to work on Backup system and User Scripts.
Cleanup time! I have completely revamped my code… I removed a lot of unused code that was either used for experimenting or was scrapped and I forgot to remove it. Before removing some of the code, I actually tried something with it… but then I realized that they were commented for some reason. I refactored parts of my code to look overall simpler with lambda expressions and LINQ. Not sure if it is more readable now, but it works so it’s fine. If anything, I’ll just add a comment so I know what it does instead of looking at it and brainstorming what it could be. I decided to mainly work on the Backup system because I think that User Scripts will be more complicated to make.
Losing sanity is not fun I honestly think I’ll go insane soon. I have changed the whole system of how Helyx saves Projects to its config file and how every function… EVERY FUNCTION works with it. I just have to say that I’ll try my best to make the code better than the one I am currently editing because 18h spent on redoing the whole codebase (revamping included from devlog before) is 1. crazy and 2. even more crazy. It’s wild how a tiny thing can ruin your whole codebase, I hope I will finish it quickly, because I want to continue working on the Backup system and after that on the User Scripts.
Backup system, done!! I finished the Backup system and also had to fix some major issues I had in helper functions due to the “project looking up system” migration… yeah… awkward name, I know. Now that the Backup system is done, let me continue and begin to work on User Scripts. Just realized that I have to come up with how it will work…
Making User Scripts I am currently working on the User Scripts as I have mentioned in older devlogs. I must say that this is one of my first interactions with interfaces in C# because there was not a huge reason to use it in my code… until now. I must say that User Scripts is the most difficult thing in all Helyx to make because you have to think on everything… how this will work, how shall we display it, how to make it versatile so other actions work with it too, etc… I made the system for adding Blocks (Actions = Blocks) to Scripts and right now I am implementing dialogs to insert properties for each action, such as Duration for Wait Action. These are current actions that are in Helyx (you can suggest new ones in comments) : Wait Wait Until If Loop (should be something like while(), might change the idea of it) End (ends script, so like return/break) Set Variable Get Variable Compare Random Log (logs text) Execute (executes command) Open (opens directory) Create File Create Folder Delete File Delete Folder Right after that I would want to move to make the UI look overall better and function better. Welp, we will see in my next devlog the progress I will make.
Changing my mind over User Scripts So I have finished all of these User Scripts functions and I found out something interesting, that made me remove some of them after I finished them. In the devlog before, I wrote a list of actions that are in Helyx such as… Wait Until, If, Loop, Set/Get Variable, etc… . Well, I found out that making some that I have mentioned would be useless, because I imagined User Scripts mainly as an automatic actions for testing your project, but how could your program get script’s variable from Helyx or set/change it. The same applies for If, If would be also complex to set. With each If Action there would be x^2 (if my calculations are correct) more node pathways and without making some really good UX in TUI environment, it would be difficult to find your way around.
User Scripts done? What next?? As written above, I have finished User Scripts. Yeah, they don’t have that many functions as before, but I am going to add some, that will actually be useful and will stay in Helyx. Right after that I’d want to move to add more things to GitHub Synchronization settings that are per project. This is mainly to make the Helyx project dashboard look better with more interesting info about your current repository. Be aware that you have to be authorized in Helyx via GitHub to access those settings. This may sound funny, but I was thinking about adding Add-on manager to Helyx. No idea how I would make it yet or what packages would even Helyx have, but I hope that after some brainstorming I will have an answer. Before that, I will again think for a while if it is a good idea and if it is even needed. But surely it sounds cool to me, to someone who has never made an add-on manager for his program. At the end I want to transfer my view to hardening the code. Many checkings, many dialog boxes what’s wrong, and such things, so your Helyx window just doesn’t close after you mess up with configuration file or you do something that no one would ever do in his lifetime. ;)
Added new setting, finished overwrite languages and still working on show stats I have finished the overwrite languages function which uses GitHub’s programming languages detection system over Helyx’s one. I added a setting where you can choose your identity (Git -> local, GitHub -> remote). Local is based on Git’s settings and remote one is accessible after authorization with GitHub. I am currently working on retrieving and displaying the GitHub repository statistics. I am using charts to display it nicely and simply. Currently it is showing only Stars, Watchers, Forks and chart of used languages. I also added a few informative labels that tell you that something is actually happening and the program did not freeze. If I didn’t add this you would be looking at an empty black screen. One of the last things I added is active GitHub Authorization Token checker and resolver. Before this if you revoked your OAuth with Helyx on GitHub page, Helyx would think that it is still authorized to your GitHub account, now it checks it and if you revoke it online, Helyx will disable functions that are only accessible when you are authorized via GitHub.
Slowly, but surely We are almost at the end (if no other function to add will come to my mind) and I was messing with access modifiers, accessors, refactoring names of variables, Tasks, voids, properties. I was adding exception handling keywords and many ifs to make sure there will be no bugs and that almost every exception will be caught. I was doing this manually so I might have missed some places where the exception handler is needed but yeah we shall see! I also enabled a search bar, so when you will be looking for your project in Helyx and you have many projects added, you can search for yours! I was also changing styles of my old menus and theirs logic because they weren’t done very well in comparison with style that I am using now… Funny story: while I was messing with the access modifiers and accessors I actually bricked the whole Helyx, because functions that were supposed to resolve configuration file and read/write into it couldn’t. I thought I accidentally removed something important but at the end it was just that, that I was changing the access modifiers and accessors.
Settings and Git pages are receiving more stuff! I added for Settings page: Notes Settings Updates and for Git page: Undo Commit Redo Commit as the name says, Notes Settings are for changing properties of global Notes on every project. There is only one setting that came to my mind and that is encryption. Some of you might paste into it something personal or confidential. Well, this makes sure that these info CANNOT be taken from raw file, but from Helyx directly. (thinking about adding password mechanism lol) Updates, yeah, it looks for updates for Helyx . Undo Commit is a special one, when you commit something and for some reason you want to go back you just undo it. On the other hand, if you somehow accidentaly clicked on Undo Commit or now you want to redo the undo, you can with Redo Commit. My plan now is to add again more functions, such as Custom Badges, option to sync the Custom Badges with your GitHub repo (it will pop up in README.md) and also add Tags sync, so you can edit your repository’s Tags via Helyx. Oh yeah, also going to add custom project status because some people may say that having statuses such as “Active”, “Inactive”, “Paused”, “Archived” is limiting (custom ones will yes, also be synced with GitHub). :) I also mustn’t forget to add the translations for other languages. I am going to do this at the end due to new text appearing every time I add something new.
Adding Custom Statuses, Custom Badges and even more! Here we are again! Today I added: Custom Statuses Custom Badges WIP: Sync badges with GitHub repository Sync topics with GitHub repository My original status system for projects was a hardcoded enum with statuses “Active”, “Inactive”, “Paused” and “Archived”. Then I had a lot of switches which determined color of markup based on which enum it is hah. As you may already know, enums cannot be changed in runtime :) What does that mean? That users cannot add their own statuses in Helyx directly… They would have to hardcode into Helyx their own statuses and that’s just impractical, no? That’s why I spent below mentioned amount of hours redoing so many things to make it actually work and I even learned something from this! That JSON Parsers and Colors are NOT huge friends! (genuinely, I HAD NO IDEA why it wasn’t working until AI told me that JSON parsers cannot translate Color structs). Custom Statuses/Badges currently have Add/Delete functions and right now I am going to add also Edit function, so when you accidentally create a status/badge with wrong color, you don’t have to delete it and create it again :) (just saved 10seconds of your life). I also recategorized my whole codebase with help of Claude Code. I told him to review my whole codebase and suggest what classes, enums, interfaces should be in which files and those files in which folders. It was fun, finally something where I did not have to concentrate much and chill and watch something when doing it. Well, now it is not much fun when functions that I was using are in different files and some classes have different names. But at least my codebase looks more professional! (before this I had like 10 files with a bunch of lines where classes were stacked…) Also, about the WIP stuff above… Sync badges with GitHub repository is going to be something like the Sync status with GitHub repository. It will just pop up in your README.md based on where you put the headers which Helyx will give you for that specific badge. Sync topics on the other hand are classic topics of the repository which you can see in top right corner of your repository page. It will mostly show you which topics are assigned to your repository in Helyx but I’ll make it also so you can assign/unassign topics from your repository. I’m thinking of adding more GitHub Synchronization options, but none are currently coming to my mind. Maybe something with actions, no idea yet, or local AI that will explain to you errors given by Helyx when you will be trying to do something. We will see!
Never expected it to be this hard So the last days I was again changing the structure of my solution and trying to get on with it. It took me a while to create one that Claude agrees with and is good for such open-source projects. Anyways, this was the easy part. In my last devlog I said that I completed Custom Statuses & Custom Badges. Well… I did! But then I found out, that my system was bad… and when I say bad I mean it wasn’t thought out. I found out about all of this when I finished the edit action for both. Originally I used Dictionary<string, TagDefinition>. Key was name of the Status/Badge and TagDefinition was the class of one of them which also has name property. But Helyx was not prepared for this, so for the last days I redid the whole system eight times. Once I used Dictionary, once I used List, then HashSet, then Dictionary, then Dictionary with other types and so on. I just couldn’t settle on the correct type for it. Until now, it took so long even though it is so primitive because it simply didn’t come to my mind and when I was asking Claude for suggestions of how could it be made, it didn’t think of using this type. The final type is simply… Dictionary<Guid, TagDefinition> AND A LOT OF CHANGES. Yeah… don’t worry guys! I am totally devastated by doing this over and over even though it was so simple & primitive to do. Well… maybe not really primitive because the changes were also difficult to do. I mainly didn’t want to use the GUID system because I have Custom Statuses but also Built-in Statuses and I was really worried about Built-in statuses having GUID assigned to them. Those sync options with GitHub are still in work, but I finished the GitHub Repository Stats viewer after a lot of experimenting with layouts and designs/effects/colors. I’m looking forward to the next devlog guys! I hope Helyx will be your good coworker that will actually count for something hah! P.S.: I also made that text of colors is grammatically formatted. At least it should be…
Sync finally done!! It’s 5 AM and I finished “Sync badges with GitHub Repository” and “Sync the status with GitHub repository” (this was already done, but with the enum version of status). I added also a few fail-safes so when you assign some badge or status and then delete it, it will also delete it from GitHub and project. Now it won’t be a ghost that you cannot get rid of haha. This was a little more difficult than I expected to do, the fail-safes because the local changing mechanism and syncing mechanism were written inline in the same function. The only thing that was dividing them was an if statement. It was interesting to make this. To make sure everything will work fine. Even though it didn’t MANY TIMES. Now I will focus on syncing GitHub topics. Wish me luck! P.S.: Forgot to mention, that I have to add this “On Status/Badge Edit, ASAP sync with GitHub” with Edit. I almost forgot lol, just came into my mind. I hope that COPY+PASTE will be enough and I won’t have to create another syncing system specifically for edits…
More bugs are appearing, and being fixed!! So since Helyx is already far and has many advanced functions, it also has some bugs. Today when I was experimenting with assigning a project and syncing it with GitHub, I found out, that if you try to sync the projects in a wrong way… it will not work. For that reason I added more fail-safes to make sure that this will be eliminated. I can’t confirm yet if those fail-safes work, because I am also working on a new Diagnostics action in Git Actions so if something goes wrong, you can fix it by the error Helyx gives you. Right now my testing project is in a state of “Git corrupted” (no idea what I should call it) where rebase was aborted. Because of this, I had to put the “GitHub Sync Topics” synchronization off until later, so I can focus on fixing these major bugs. Also another bug came to my mind that I fixed… Helyx works on a principle of directory paths. Each project is saved in config file under its own unique GUID and its path. The bug is that when you try to rename the directory, the project won’t be found and it will be removed from Helyx. Now, you can either let Helyx find it automatically (sadly can easily fail) or you can select project manually in explorer (recommended!!!).
Doctor Git As you may know, right now I am working on Diagnostics. I am almost done with fully displaying all of the health checks about your Git repository. But I still have to finish all of the fixing actions that it will have. Diagnostics will mainly be for a case where something happens in Helyx and it will need to be fixed. The main idea of it is not aimed at resolving issues with your Git repository outside Helyx. But it may resolve some because you may run into the same issue as you had in Helyx of course. In the last devlog I said that I put GitHub Topics off. Well, that did not happen! I finished displaying GitHub Topics!! I think in some devlogs I said that it was for managing GitHub Topics. Managing meant like adding, removing, editing. Well, that wasn’t actually my main point. I just wanted it to show you your currently assigned topics in GitHub. I also didn’t see a big reason in adding Add, Remove, Edit functions for topics. Topics rarely changed, honestly and the most intuitive way would be doing it via GitHub web interface.
Diagnostics done, other stuff too and some changes! Diagnostics are now fully done! When something messes up, it will give you options to fix it! Some time ago I created GitHub Synchronization settings for managing what to sync with GitHub, so what to retrieve and send with those options: Sync status with GitHub repository Sync badges with GitHub repository Fetch GitHub repository topics Fetch GitHub repository stats Use GitHub’s language detection instead of Helyx’s I created a brand new tab called ‘GitHub Actions’ where this setting is. GitHub Actions is meant to contain all of the actions that are mainly linked with GitHub endpoints. I kept few such as Push, Pull, Sync in Git Actions due to how the layout is already created. Also I added when you are rebasing and it fails, it automatically gives you a prompt to cancel it. So repair it… GitHub Actions will contain a new stuff that will come to Helyx! Managing Issues and Pull Requests!! Maybe also workspaces/actions but I will see how difficult that is and how it is needed/useful in Helyx. Another new function is, that when there’s an update for Helyx and I change the GitHub OAuth scope because of new features… Helyx will warn you and tell you to reauthorize to make sure every function will work correctly. Before this change, Helyx was using its folder name as a name of the project and as a repository name for GitHub. Now, when you add a project to Helyx, Helyx will ask you what’s its name and when you will try to use some GitHub function for the first time on your newly added project on Helyx, it will request a GitHub Repository name from you. ;) There’s still a lot of things to add. Honestly I thought that Helyx was at the very end like 50 hours ago and look! There are many more functions to add haha!
Manage Issues, at your service. After a painful development period I am again here, writing devlog! What changed? Good question! Manage Issues is partly done! I still have to finish making the actual actions but displaying is somewhat finished. When you go to ‘Manage Issues’, you will firstly see a list of issues that are on your GitHub repository. From there you can already see some details about the issues such as: Number State Title Labels Comments (number) Updated (time) Above them are filters, currently those are the available filters: All -> All Commented -> Issues has some comments Assigned -> Issues that have some assignees Labels -> Issues that have some labels But that is not all! There are also their counterparts: No comments Unassigned Unlabeled (there’s no inversion of All because why would you need filter None) Yeah, so you can invert your filters… When you select an issue at the very top you will see its number, then you will have a panel with details about the issue with its title and: State Author Opened (time) Labels Assignees Right under these details are all of the comments in chronological order. When it is done, it will also show the whole timeline of each issue. So when this and this label was added/removed… when was this assignee assigned/unassigned… when was this issue closed/opened…. Of course I am going to add actions so you can add a comment, close issue, open issue, etc… When I’ll finish Manage Issues, I will go to work on Manage Pull Requests. It shouldn’t be that different because Pull Requests are by GitHub a kind of Issue but they are also not the same, so different classes, types, etc… Well, wish me luck people… or should I say… Stardancers?? P.S.: Sorry for the grammar in images in comments. I did it very quick for the preview.
Paging done, functions almost! I finished making the logic for rendering issues. In the last devlog it was just displaying all of the issues at the same time. No paging system so if there was a lot of issues or long issues, they would simply… not appear. It took me a really long time to work this out. I was mainly switching back and forth the rendering logic all the time and it went so far, that I had to use Claude to help me with it. At the end, I ended up with a rendering logic that I am not really keen on, but it is the best one that can be used in Helyx and TUI environment. Main obstacles were the Spectre.Console rendering functions and classes that were under IRenderable interface. And also the limitations of Panels, Grids… Layout had everything I needed . I wanted to cut the part which couldn’t be rendered and it should have looked like, like an unfinished Panel. Well, this was impossible. Without changing the core code of Spectre.Console or creating own system for making Panels it was impossible. Also, I haven’t seen it as something that WOULD NEED an own system that would render comments. So I just made it when a comment cuts, it creates whole Panel with part of the comment that can be rendered and at the bottom is text saying that it continues on the next page… and on the other page at the top there’s text that, hey, it continues here! Let’s finally talk about the Issue functions! I finished some simple one like: Close Reopen and create an issue… But I still have to create a system that can let you: Comment Edit comments Delete comments Lock issue Unlock issue Those are currently in WIP, but in the next devlog they’ll be most probably finished and after everything is done with issues, I will move to Pull Requests!
Manage Issues, completed! PRs, incoming… Manage Issues is now fully completed. I still had a few issues with paging and rendering but now they are fixed. Now you can select a message and delete it & edit it. But also now you can create a comment, lock an issue, unlock an issue and create an issue. I also added a thing that I hope will be appreciated, Helyx renders Markdown from GitHub Issue comment and when you comment via Helyx, Helyx gives you Markdown options such as: Bold Text Italic Text Code Text List Quote Also, when you don’t provide a text to a comment in GitHub, Helyx will say that “No description was provided.” So the same thing as GitHub already does, but in Helyx you must provide text. Why? Because why would you create a comment with no text? So I banned adding a comment with no text. Okay, that would be everything! It was fun to create this because everything was working so well, except the paging system… that was painful to make even with Claude’s help. As I said in past devlogs, after Issues I am going to move to PRs. So yeah, let’s work on PR. I hope it won’t be harder to make, because a PR is a type of Issue in GitHub, so I hope I will use the same function logic and functions and callbacks to make it.
Manage PRs displaying and some logic done After pulling another all-nighter I finished making the Pull Request display functions. List and details about each Pull Request is done and paging also works too (took it from manage issues ;] ). Pull Requests also contain filters such as: Open Drafts Assigned Reviewed and we can’t forget their counterparts either: Closed Ready Unassigned No reviewers Pull Requests now have comment selection and Markdown formatting, but functions to manage Pull Requests are not done yet. The only ones I managed to finish are: Comment Open Browser The biggest problem with PRs is going to be, that their functions and methods for executing those functions are more complex than the ones for Issues. I plan to add these functions for PRs: Delete Comment Merge Review Close PR Reopen PR I am pretty sure that all of this will be done in next devlog, so stay updated! This is going to be very cool, I think. Well, now I am going to sleep so good night everyone!
Manage PRs done! Added few new things… I finally finished making Manage PRs. So now you can: Delete Comment Merge Review Close PR Reopen PR I also had to fix some design flaws and function flaws but now it should be all good. Before doing all of this, there was a bunch of GET requests… now? Now it is also a bunch of PATCH & PUT requests. Also, now when you’ll try to link your GitHub Repository with the local one, you will just select the one that is on your GitHub account. Another thing! When you have conflicts between the local repository and the remote one (GitHub) and you try to sync them, a lot of the time Notepad pops us and tells you to remove the version of the text that you don’t want. Well now Helyx does it too and doesn’t open notepad, but lets you do it directly in TUI interface in my very own notepad. Conflict solver also uses alternate screen for this. (there’s sadly no showoff image for this, because currently I don’t have anything to create a conflict on) I am not sure what to do next in a next devlog, since everything I really wanted to do is already done… well… not everything but everything around the main things is. Maybe I’ll move on another refactoring? Or finishing the language settings? Well, we will see!
Adding new features & fixing bugs I finished making “Analyze Project” which analyzes your whole project and prints stuff such as: Number of files Number of folders Size of the project on disk Number of lines Also you can now see what amount of what programming language makes your project. It also shows you the biggest files in your project directory. And also you can see Git information such as: Branch Number of commits First commit (date) Last commit Working tree .git size So it displays some maybe important and basic information that you may check sometimes or might be interested in. There were like 6 revisions of this because I was testing different styles & designs. I also found a lot of hidden bugs with help of Claude! Before talking about bugs, I will tell you something about new features that I added. Now, when you assign a badge or change a status and you don’t have markers in README.md yet in it, then it will ask you if you want to add them manually or via Helyx. What does that mean? Well, it opens a “text editor” in Helyx which displays README.md and you can insert the badges/statuses where you want instead of opening the file in notepad and inserting the markers manually. Overall it is way quicker to do it now via Helyx. Helyx’s Generic Text Editor is now even better! You can now use all of the arrows, before you could just use Left/Right Arrow to move cursor left or right. Now you can move between lines. Now you can also open your project’s wiki via Helyx. Be aware that it doesn’t check anything, if you have wiki or not. It directly opens the website for the wiki where it should have been for the current linked GitHub Repository. Let’s talk about bugs now! Open an issue called the Markdown handler function and it was accidentally calling GitHub 101 times, when it needed some info. Now it doesn’t. 🆒 Notes have an encryption system, so if you put some sensitive info into it, it couldn’t be directly taken from the file. Only via Helyx. There was a bug, where when you enabled encryption and edit notes of 2 projects, then you turn off encryption globally and open the first project’s notes, it decrypts… but after that you open second project’s notes, it won’t. This was due to having a global bool instead of per project bool when saving if it was encrypted. Fixeddd! Another bug! Sync Status & Sync Badges was deleting staging index. Funny that I was thinking about to restore the staging index whenever using it, but at the end… the logic was wrong 😭 Now it isn’t. Then there was a bug that when you unassigned a badge, it unassigned ALL badges. Fixed! Another bug linked to badges… Unassigning a badge didn’t remove it from GitHub. Yeah… fixed!!
Fixing more bugs I fix bugs mainly with use of Claude Code, because hunting for bugs is not easy and this project is not a small one haha. I had to run MANY code review tools for this, because every time it kept finding new bugs. No idea how but it did. So what we fixed? If a GitHub comment had bold text split across two lines, opening that issue crashed Helyx before it drew anything. A file with a square bracket in its name (e.g. data[1].json) crashed Status, Diff, Commit, Stashes and Log. If anything held config.json open for even a moment, Helyx assumed it was corrupt, reset it, then crashed everywhere that looked for a project. If config.json was missing its Badges section, the startup migration quietly deleted every badge from every project. Committing saved a copy of the project taken before the confirmation prompts, so anything changed in between was silently thrown away. If you linked a GitHub repo during Push, the remote was created with an empty name. Syncing a status that had since been deleted crashed in the middle of a push. A commit message containing a square bracket crashed “View Full Message” (those are just bugs that were missing Markup.Escape() function). Applying a stash said “applied successfully” even when it conflicted. One bad path stored in config.json crashed “Add Project”. This is just a snippet of the amount of fixed bugs. I won’t write all of them here since it would take a lot of text and I am pretty sure that this is enough for you to understand that we fixed a lot of bugs haha. Right now I am going to do the Language System. I am not sure if I mentioned in some devlog, the list of languages that Helyx will support. If not… there it is: English Slovak Spanish French German Russian
Languages almost done, moving onto GitHub & README.md Well guys, Language System is almost done. It is powered by a Resources file that stores all of the translated strings. More bugs were found! But now, all of the bugs should be fixed with also many failsafes! Now, I want to complete the Language System because I am really close to finishing it. I also want to make the README.md for Helyx’s GitHub Repository. Originally I wanted to make it via Obsidian app, but it doesn’t have direct support for Wakatime, so I have to use VS 2026 native Markdown editor with the support of Markdown Editor v2 extension from Mads Kristensen. (not sponsored lol) I also heard that Obsidian app doesn’t use the same Markdown as GitHub does so there would be some things mistyped or not even rendered, but VS 2026 should be fully compatible with GitHub’s Markdown renderer, so we will see!
More bugs fixed, new functions, README & Language System updates! Hello guys, once again at 4 AM! Bugs: As the title says, there are more fixed bugs. Diagnostics crashed Helyx if you ran a rebase in a terminal and hit a conflict. Now it doesn’t! Another fixed bug is that when you opened an issue in Helyx, the footer vanished. At first I was shocked, but it was a simple fix so now your footer doesn’t vanish. Another vanishing bug! The Languages row from the header vanished when you entered a tab where Layout class was being used. Now you will see your sweet programming languages used in your selected project. Guess what! Another vanishing bug! This time the whole header vanished when you exited .Live()! Now it is okay! New behaviour: I unified some color codes with some type of info. E.g. SHA is Dark Orange everywhere, Stash is Yellow, Date is Cadet Blue and Issue Number is Aqua. The README.md editor, when inserting badges/status now has a new keybind: backspace! It is different from DEL! DEL deletes the badges/status but backspace deletes the whole line, including the badge/status that was on that line. README The README is almost done! At least I hope! Claude was a big help here, because I wanted to create an insane README and we really did. Guys, you should be excited about the README file haha! Language System Translations for these languages are already done: English French German Russian Slovak Spanish So basically every language translation is already done. BUT I decided to add even more languages! The new languages that Helyx will support are: Italian Portuguese
New features, new languages, new problems. A new feature that I added is GitHub Actions! It is on the same principle as Manage Issues and Manage PRs, so you have a list of GitHub Actions, you pick one and you can control it, check its log, observe information about it. You can even run an action! I also added a refresh keybind to Manage Issues, Manage PRs and GitHub Actions. Before, you had to go back from the details of an issue/PR/action to the list and then return to the details. Now you don’t have to. You just have to press the keybind displayed in the footer that belongs to refresh. Yes! The Helyx Language System is finally complete! Italian & Portuguese are now available in Helyx! Lately I’ve been working on the README.md file. I was mainly making more GIFs & designing screenshots for it so it will look pretty and futuristic (in my opinion)! As I have mentioned in the title, NEW… PROBLEMS! People… you won’t believe what happened to me today… I use Helyx’s Git & GitHub for testing, so there is no official one yet, and I rarely commit changes or push them. Only when I test something. And it looks like it got back at me. Well… I told Claude Code to remove comments all over my codebase, because they were mainly scrapped code and some temporary information that I had there, that wasn’t used anymore. Okay, so I told it to remove them, and for some reason instead of removing comments, it deleted Helyx’s whole codebase. Thank god README.md was untouched haha. We had to decompile the .dll that was left over from testing Helyx’s latest version, and actually check the diff and rewrite it. We still don’t know if everything was brought back since for some reason Claude Code’s memory got wiped instantly when it realized that it deleted my whole codebase. There were no backups, no restore, no nothing. The only possible thing was to use the forgotten stash that I created and use the .dll as a map to restore Helyx’s outdated codebase and rewrite it again. So that’s what we did. Yeah, so I hope everything was brought back. Claude says it was, but after what it has done I don’t know if I trust it. Just kidding, everything should be back, because it compared the .dll with the rewritten code 1:1 and everything matched.
GitHub done, shipping Helyx today! Today I was messing with the GitHub page for Helyx, fixing the last bugs we found and working on the installer. For the installer I used Inno Setup, because it is the most recognized and the most used one. The point of using an installer is simple: it adds Helyx to PATH. Of course there were other options, but this one seemed like the best fit. We were fighting with the script for a while, because it was doing really weird things, like staying in the background after the installation finished. But those bugs are fixed now! README.md is done, all of those GIFs and screenshots are in it too, and I have to say it looks really good! I was also setting up the GitHub side of things, so the description, the tags, a GitHub Action and so on. With the help of Claude Code, we created the logo and the banner for the installer as well. The installer uses the same logo as Helyx. It’s just a basic H, because nothing else came to mind haha. I also asked Claude Code to review the codebase one last time, and yep, it looks fine! I told it to add the basic documentation comments as well, the <summary> kind. Let’s be real here, nobody does this, and if they do, something else writes it for them, usually an AI, because it understands the function better than the person who wrote it (I know that from my own experience hahaha).
Experimenting with the conflict solver I was thinking about adding a simpler conflict solver, where you wouldn’t have to delete the <<<<<<< , ======= and >>>>>>> markers yourself but would just pick either the first or the second version. But I realized it would be messier than I thought, so in the end I kept it as a basic editor where you remove the version you don’t want by hand.
README.md update I replaced the title in README.md with a banner that contains the text Helyx. I tried a few versions I made and, well, I landed on the one you can see in Helyx’s README.md, or below!
Edited README.md I rewrote the README.md because of the ship review. I also added a couple of recommendations that are worth knowing when you use Helyx. I also removed the <summary> comments that Claude Code wrote for the documentation, I don’t think that anyone would have used them anyway.
Edited README.md, again I was again editing the whole README.md, because reviewers weren’t happy with the current one. Well after spending another hour of editing the whole README.md file, I hope they won’t ask me to rewrite the whole README.md file again, because I don’t even know what else to add/remove/edit.
Added GitHub Issues/PRs events rendering Originally, when you selected Manage GitHub Issues or PRs and opened some issues/PR. You could have only seen messages posted by users, but not when a label was assigned or when the issue/PR was closed. Well… Now you can! Now it displays the exact action that happened and when it happened! Of course, it is also translated to all languages that Helyx supports. Just making sure you didn’t think it wasn’t! I also cleaned up the code a little bit. Removed some useless usings and some files were in the wrong namespace, so that is fixed too.
Replaced hardcoded string colors with Color members for code safety, fixed line breaking while assigning a status/badge Okay so Markup texts (those are the texts with color) were formatted in this format: "[red]Hello World![/]" So it was string-based. And if you accidentally added some character to it for instance: "[redd]Hello World![/]" <- Exception Helyx would crash. I mainly added this, because it is an open-source project. So if someone tried to edit it, they would only have to edit the string and they might have misspelled it. But now, when he goes into the codebase, he will see Color members and he just can’t misspell that, and if he would, compiler would alert him. Basically, now it is like this: $"[{Color.Red}]Hello World![/]" Okay so next I fixed line breaking. What does that mean? Well… In Helyx native README editor, so when you try to assign a status/badge, you’ll get that editor, when you try to add a status/badge to that line, you might have thought that it would be on the same line as the tags above it. But it didn’t… This was happening due to the comment markers for Helyx so Helyx knows where this status/badge is located and which status/badge it is. Now Helyx will put those comment markers in a way that prevents the line from breaking.
Reviewing my codebase and fixing bugs Since all of the features that Helyx was supposed to be finished with are almost all done (maybe even all are done), I will now change my view to another projects for Stardance such as ThetaNexus . But that does not mean that now I will just forget about Helyx. I will be reviewing the codebase sometimes to find some bugs and fix them. You can help me with this, by making an Issue request on Helyx’s GitHub. So what bugs did I fix since the last devlog? I fixed line breaking in badge/status README editor. When you were inserting your badge/status into your README via Helyx’s README editor, it done… messy stuff to the README, not something like really bad what couldn’t be fixed by manually doing it, but it should now insert the badge/status exactly as you see it in the editor. I also introduced a new ‘Found state’ text instead of ‘Found’ text in IDE settings to avoid confusion. To avoid confusion because if an editor was found and you clicked on it… it wrote this: Found Found Found Not Found Found Set by user Now it writes this: Found state Found Found state Not Found Found state Set by user Most of the time, I was reviewing the codebase via Claude Code to actually check everything precisely.
Fixed User Scripts bug So, every path block used Path.GetFullPath(path) instead of Path.GetFullPath(path, script.ProjectPath) . That means it was resolving relative paths against Helyx’s own directory, not your project’s. This is now fixed.
Hackatime integration Hello there! A guy made a feature suggestion on Helyx’s GitHub, that I should add a Hackatime integration into it. So I was thinking… and thinking… and thinking and woah… I ADDED IT! It is not 1:1 like the web interface, that one is better & shows you more things but sadly this was everything that I could request from API (at least I think): Total Seconds Languages Repo URL Total Heartbeats First Heartbeat (DateTime) Last Heartbeat (DateTime) and when combining all of these information, I created a screen where you can see all of this specifically for your project. It works on the principe of authorization. You put in your Hackatime token which authorizes you and then when you go to your project and go on Hackatime Info, it prompts you to select the project from a list of projects that are assigned to your Hackatime account/token.
Mysterious bug I solving some bug with UpdateHandler that my friend has been experiencing. It was that you could only check for updates for Helyx if you authorized your GitHub. Otherwise, you couldn’t! I was taking the update checking through a function that sent a HTTP request with a key that Helyx receives by authorization, in this situation it isn’t needed, but when not given in that function, it returns an error. So now you can freely check for updates for Helyx even without authorizing with GitHub!
Ships:
What I made Helyx is a terminal app for Windows that keeps every local Git repository you own in one place and lets you commit, branch, resolve conflicts, repair broken repositories and answer GitHub Issues and Pull Requests without opening anything else. I spent a lot of time thinking about what kind of project I wanted to build. I wanted something that would be genuinely useful to developers in many different ways, and that is how I came up with Helyx, a TUI application that brings many Git and GitHub tasks into one place. What was challenging Learning new libraries, keeping the code organized as it grew, and designing every screen so it looks and feels as polished as I could get it. Deciding what to build next was harder than it sounds, because there was always more that could go in. What I am proud of It has everything I originally planned to include. The diagnostics screen finds what is wrong with a repository and offers the fix instead of just reporting it, the conflict resolver opens the conflicted block in its own editor, and the whole app speaks 8 languages. How to try it Download the latest release from Helyx’s GitHub and run it. It installs into your user folder and adds Helyx to your PATH , so you can start it by typing helyx in any terminal. No administrator rights are needed, and the .NET runtime is bundled inside. Then pick Add project and choose any folder that contains your project. Helyx is open source, so you can also read the code or build it yourself. Just click See source code below.
NEW THINGS: Hackatime integration Fixed bugs Edited README.md Added GitHub Issues/PRs events rendering more What I made Helyx is a terminal app for Windows that keeps every local Git repository you own in one place and lets you commit, branch, resolve conflicts, repair broken repositories and answer GitHub Issues and Pull Requests without opening anything else. I spent a lot of time thinking about what kind of project I wanted to build. I wanted something that would be genuinely useful to developers in many different ways, and that is how I came up with Helyx, a TUI application that brings many Git and GitHub tasks into one place. What was challenging Learning new libraries, keeping the code organized as it grew, and designing every screen so it looks and feels as polished as I could get it. Deciding what to build next was harder than it sounds, because there was always more that could go in. What I am proud of It has everything I originally planned to include. The diagnostics screen finds what is wrong with a repository and offers the fix instead of just reporting it, the conflict resolver opens the conflicted block in its own editor, and the whole app speaks 8 languages. Now it even has new things that were mentioned at the top of this shipping message! How to try it Download the latest release from Helyx’s GitHub and run it. It installs into your user folder and adds Helyx to your PATH , so you can start it by typing helyx in any terminal (Windows Terminal recommended). Then pick Add project and choose any folder that contains your project. Helyx is open source, so you can also read the code or build it yourself. Just click See source code below....
|
1793054968.4493594
|
1793141368.4493594
|
|
18550
|
Slack Bot Icekeem by @Ankush | Stardance
|
Ankush
|
2
|
8.0
|
41
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-13T11:30:32Z", "hours": 3.0, "multiplier": 7.78, "payout": 26, "blessing": "neutral", "text": "IceKeem is a slack bot that helps me out with my channel! This is the 2nd ship for my bot, and is on the smaller side. This update, I added the home page for my bot, added @mention replies. There are some fun pre-determined replies for @mentions , but when none match, the input is passed down to an AI to answer. I learnt a lot while making this bot, had a lot of fun. I got to know a lot about slack bots and how slack works. I am really proud of the banner image I made! Apart from that, I am so happy to be able to bring back the chonky button that a user gets to press when they join my channel! Trying out my bot Most of the bot commands like /icekeem-ping , /icekeem-blog and /icekeem-help work from anywhere, but if you want to use @mention you have to join my channel. #ankush-loves-icecream You should defo join my channel :3 I hope you have fun with my bot! Features in a glimpse 3 commands /icekeem-ping , /icekeem-blog and /icekeem-help Personal channel join and leave triggers Button interactions Home page @mention replies", "repo": "https://github.com/aroyx/IceKeem-Slack-bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C09CT01115K"}, {"ship_num": 2, "ts": "2026-06-17T08:42:24Z", "hours": 5.0, "multiplier": 2.98, "payout": 15, "blessing": "neutral", "text": "IceKeem silly little helper for my channel in slack. It is stupidly simple and pretty (super tasty too!). After Hackclub nuked “workflows” in our slack, my beloved bot IceKeem was shot dead in the carnage. After months I got time to work on this and I had a great time reviving my friend! I am very happy with how things are and I believe the /icekeem-blog command output is very cool! Though I definitely have to polish up my blogs and remove the dummy ones. Even though slack docs are great I think I had a hard time navigating through them. Github issues and other forum posts were a life saver. Currently the three commands /icekeem-ping , /icekeem-help and /icekeem-blog work from everywhere in slack, but a there are other functionalities like “Welcome” message when people join. and a huge satisfying button to top it off. (You should definitely join my channel) There are other features that I plan on working later this week, some of them are: App page or whatever they are called @mention replies Make the bot more flexible, so others can easily use this bot for themselves. Any other suggestions I might get", "repo": "https://github.com/aroyx/IceKeem-Slack-bot", "demo": "https://app.slack.com/client/E09V59WQY1E/C09CT01115K"}]...
|
[{"post_id": 27616, "ts": "202 [{"post_id": 27616, "ts": "2026-07-13T11:12:58Z", "hours": 3.3211, "text": "Slack bot home page done! Along with that I also added tags of my blogs to my carousal . Most of the hard part was debugging why my Home page wasn’t showing up properly. It was because I forgot to add error reporting I also spent a long time trying to add images to my hope page. The images didn’t just work! After a lot of time googling, I think it is because the image block can’t render svg files Lastly, I also added @mention replies to my bot. There are a few fun pre-determined replies and when the input matches none, it passes the input to a free tier model of Gemini called Gemini Lite Flash 3.1 Some BTS I had a lot of love and passion for this bot, and such also had high expectations with the payout. But unfortunately I only got 3x multiplier . I was sad, but I was ready to improve on the mistakes I made, I wanted to know what went wrong. After I read the reviews, I was a little bit happier. They all said my bot was really good made! But unfortunately it didn’t work. I spent the next couple of hours trying to find out what I did wrong! … … … I couldn’t. I lastly resorted to asking AI, I gave it full details. And it gave me my answer… the reason my bot shut down was because I was using the --user tag while starting my bot using systemd I was devastated. I will never emotionally recover from this. But the all good reviews kept motivated to keep on working. So i kept working on my other projects with full motivation! And yesterday I took some time off to complete the final few features I planned on adding to the bot. Currently the bot is “completed” as per my book, but I will still add new features, updates when I see a interesting one! Currently this is probably the last devlog of IceKeem in Stardance."}, {"post_id": 10513, "ts": "2026-06-17T08:17:45Z", "hours": 1.2408, "text": "Made a carousal for my blogs! This was surprisingly simple due to slack block builder ! I just used the default carousal they provide and put in my data in-place of the dummy texts :) But there was a problem! If someone invocated the /icekeem-blog command from #channel123 it the msg will be sent to my personal channel! That was bad and I was having a hard time figuring out how to get the channel id where the command was invocated. The function I was using: await client . chat . postEphemeral ({ user : presser , channel : ChannelID , text : \" text \" , blocks : [...], }) I don’t know why but I was under a illusion that respond function can’t do the blocks that my carousal uses… When I tried, it worked! await respond ({ text : `text` , blocks : [...] })"}, {"post_id": 9177, "ts": "2026-06-15T12:16:33Z", "hours": 0.7717, "text": "Just as I had planned I improved the welcome thing. When ppl join my channel the bot sends a welcome msg with a big fat squishy asmr satisfying button. This time I worked on to make the button a one-time-button and only allowing the joinee to press the button… Ah yes! I also spent some time finishing up the banner image. Looks cool imo. But there are overall 3 different views I encountered in stardance.hackclub.com. And it looks bad in 2 of them due to the image being cropped…idk what I should do… the natural thing to do would be to bring everything to the center…but that’d look ugly…idk what to do. I think I’ll finish this project with this devlog. I still have to make the README, but that shouldn’t take much time, i’ll do that in github’s online editor"}, {"post_id": 9154, "ts": "2026-06-15T10:19:49Z", "hours": 1.7514, "text": "It’s been a smooth and calm day for me. So smooth that something feels off…idk but everything I had in mind worked super easily… something definitely is off… Anyway, first thing I did was make the /icekeem-help command. It was easy - just like a print statement. Also added link to the blog in /icekeem-blog command. I also made the event triggers for people joining/leaving my channel. There probably are bugs rn… but we’ll fix them when we encounter them. The slack docs is amazing! I google stuff and almost always the first thing in the slack docs has my answer, I don’t want to admit but the google ai in the search also is useful… The last thing I did before sleeping was make the sleep function work… I couldn’t, lastly had to resort to ai making the code for me. I didn’t try to partition my code in different files like I’d like to. I will, if the codebase becomes more than 500+ lines. Today morning I tried the blog command and found that the link is not working. Easy fix, I path was defined in the top layer insead of inside meta . I also added buttons for the people who join my channel. It is great you should check it out!! Making this frustrated me a little, but it worked by the end. I had to ask AI for help with making the button green like my previous workflow bot had. Fortunately a single option did the trick. After done with coding, I made the “banner”(?) for this project. It is still a wip, but it is something. I think I’ll change the bg for the screenshots of the bot working. But that is a task for future me. My next steps will be to make the button one time use and the “ping me” message be sent in thread."}, {"post_id": 8754, "ts": "2026-06-14T15:46:09Z", "hours": 1.23, "text": "The bot setup and a basic Ping/fetch function to my own blogs! There is not much to say about my progress since things aren’t going very complex rn. I made a ping command that takes a int for timeout/sleeping (which doesn’t work rn…sob) While following the tutorial I saw them using the Cat Facts API, and I remembered that I also made an API for my blogs! So I used that to fetch the latest BLOG that I have updated. Currently the site of blogs and the blogs aren’t really finished either…so we’ll just have to work with what crap had the last time I worked on it The one thing that took some time was figuring out how the arguments work. Another thing that took some time is FIGURING OUT HOW TO USE A FUNCTION DEFINED IN ANOTHER FILE 😭 I couldn’t figure that out…probably will ask my friends for help. I plan on adding triggers for when ppl join my channel…also is buttons available now? Those chonky buttons were great, I hope they are available to use in a bot"}]...
|
Title: Slack Bot Icekeem by @Ankush | Stardance
D Title: Slack Bot Icekeem by @Ankush | Stardance
Devlogs:
The bot setup and a basic Ping/fetch function to my own blogs! There is not much to say about my progress since things aren’t going very complex rn. I made a ping command that takes a int for timeout/sleeping (which doesn’t work rn…sob) While following the tutorial I saw them using the Cat Facts API, and I remembered that I also made an API for my blogs! So I used that to fetch the latest BLOG that I have updated. Currently the site of blogs and the blogs aren’t really finished either…so we’ll just have to work with what crap had the last time I worked on it The one thing that took some time was figuring out how the arguments work. Another thing that took some time is FIGURING OUT HOW TO USE A FUNCTION DEFINED IN ANOTHER FILE 😭 I couldn’t figure that out…probably will ask my friends for help. I plan on adding triggers for when ppl join my channel…also is buttons available now? Those chonky buttons were great, I hope they are available to use in a bot
It’s been a smooth and calm day for me. So smooth that something feels off…idk but everything I had in mind worked super easily… something definitely is off… Anyway, first thing I did was make the /icekeem-help command. It was easy - just like a print statement. Also added link to the blog in /icekeem-blog command. I also made the event triggers for people joining/leaving my channel. There probably are bugs rn… but we’ll fix them when we encounter them. The slack docs is amazing! I google stuff and almost always the first thing in the slack docs has my answer, I don’t want to admit but the google ai in the search also is useful… The last thing I did before sleeping was make the sleep function work… I couldn’t, lastly had to resort to ai making the code for me. I didn’t try to partition my code in different files like I’d like to. I will, if the codebase becomes more than 500+ lines. Today morning I tried the blog command and found that the link is not working. Easy fix, I path was defined in the top layer insead of inside meta . I also added buttons for the people who join my channel. It is great you should check it out!! Making this frustrated me a little, but it worked by the end. I had to ask AI for help with making the button green like my previous workflow bot had. Fortunately a single option did the trick. After done with coding, I made the “banner”(?) for this project. It is still a wip, but it is something. I think I’ll change the bg for the screenshots of the bot working. But that is a task for future me. My next steps will be to make the button one time use and the “ping me” message be sent in thread.
Just as I had planned I improved the welcome thing. When ppl join my channel the bot sends a welcome msg with a big fat squishy asmr satisfying button. This time I worked on to make the button a one-time-button and only allowing the joinee to press the button… Ah yes! I also spent some time finishing up the banner image. Looks cool imo. But there are overall 3 different views I encountered in stardance.hackclub.com. And it looks bad in 2 of them due to the image being cropped…idk what I should do… the natural thing to do would be to bring everything to the center…but that’d look ugly…idk what to do. I think I’ll finish this project with this devlog. I still have to make the README, but that shouldn’t take much time, i’ll do that in github’s online editor
Made a carousal for my blogs! This was surprisingly simple due to slack block builder ! I just used the default carousal they provide and put in my data in-place of the dummy texts :) But there was a problem! If someone invocated the /icekeem-blog command from #channel123 it the msg will be sent to my personal channel! That was bad and I was having a hard time figuring out how to get the channel id where the command was invocated. The function I was using: await client . chat . postEphemeral ({ user : presser , channel : ChannelID , text : " text " , blocks : [...], }) I don’t know why but I was under a illusion that respond function can’t do the blocks that my carousal uses… When I tried, it worked! await respond ({ text : `text` , blocks : [...] })
Slack bot home page done! Along with that I also added tags of my blogs to my carousal . Most of the hard part was debugging why my Home page wasn’t showing up properly. It was because I forgot to add error reporting I also spent a long time trying to add images to my hope page. The images didn’t just work! After a lot of time googling, I think it is because the image block can’t render svg files Lastly, I also added @mention replies to my bot. There are a few fun pre-determined replies and when the input matches none, it passes the input to a free tier model of Gemini called Gemini Lite Flash 3.1 Some BTS I had a lot of love and passion for this bot, and such also had high expectations with the payout. But unfortunately I only got 3x multiplier . I was sad, but I was ready to improve on the mistakes I made, I wanted to know what went wrong. After I read the reviews, I was a little bit happier. They all said my bot was really good made! But unfortunately it didn’t work. I spent the next couple of hours trying to find out what I did wrong! … … … I couldn’t. I lastly resorted to asking AI, I gave it full details. And it gave me my answer… the reason my bot shut down was because I was using the --user tag while starting my bot using systemd I was devastated. I will never emotionally recover from this. But the all good reviews kept motivated to keep on working. So i kept working on my other projects with full motivation! And yesterday I took some time off to complete the final few features I planned on adding to the bot. Currently the bot is “completed” as per my book, but I will still add new features, updates when I see a interesting one! Currently this is probably the last devlog of IceKeem in Stardance.
Ships:
IceKeem silly little helper for my channel in slack. It is stupidly simple and pretty (super tasty too!). After Hackclub nuked “workflows” in our slack, my beloved bot IceKeem was shot dead in the carnage. After months I got time to work on this and I had a great time reviving my friend! I am very happy with how things are and I believe the /icekeem-blog command output is very cool! Though I definitely have to polish up my blogs and remove the dummy ones. Even though slack docs are great I think I had a hard time navigating through them. Github issues and other forum posts were a life saver. Currently the three commands /icekeem-ping , /icekeem-help and /icekeem-blog work from everywhere in slack, but a there are other functionalities like “Welcome” message when people join. and a huge satisfying button to top it off. (You should definitely join my channel) There are other features that I plan on working later this week, some of them are: App page or whatever they are called @mention replies Make the bot more flexible, so others can easily use this bot for themselves. Any other suggestions I might get
IceKeem is a slack bot that helps me out with my channel! This is the 2nd ship for my bot, and is on the smaller side. This update, I added the home page for my bot, added @mention replies. There are some fun pre-determined replies for @mentions , but when none match, the input is passed down to an AI to answer. I learnt a lot while making this bot, had a lot of fun. I got to know a lot about slack bots and how slack works. I am really proud of the banner image I made! Apart from that, I am so happy to be able to bring back the chonky button that a user gets to press when they join my channel! Trying out my bot Most of the bot commands like /icekeem-ping , /icekeem-blog and /icekeem-help work from anywhere, but if you want to use @mention you have to join my channel. #ankush-loves-icecream You should defo join my channel :3 I hope you have fun with my bot! Features in a glimpse 3 commands /icekeem-ping , /icekeem-blog and /icekeem-help Personal channel join and leave triggers Button interactions Home page @mention replies...
|
1793000974.4047267
|
1793087374.4047267
|
|
18567
|
SecureVault by @F3rro_32 | Stardance
|
F3rro_32
|
2
|
39.0
|
367
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-19T18:11:39Z", "hours": 4.0, "multiplier": 12.33, "payout": 49, "blessing": "neutral", "text": "Just improved some things, mostly advices from other users.", "repo": "https://github.com/eLandoAD/Rila", "demo": "https://securevault.alessio.hackclub.app/"}, {"ship_num": 2, "ts": "2026-07-15T09:49:13Z", "hours": 35.0, "multiplier": 9.05, "payout": 318, "blessing": "neutral", "text": "SecureVault, zero knowledge, end-to-end encrypted cloud storage. Your files and their names are encrypted in the browser before they ever reach the server, which only ever stores ciphertext it can’t read.", "repo": "https://github.com/eLandoAD/Rila", "demo": "https://securevault.alessio.hackclub.app/"}]...
|
[{"post_id": 70745, "ts": "202 [{"post_id": 70745, "ts": "2026-09-19T18:11:08Z", "hours": 3.2156, "text": "devlog Hey guys, how’s going? I’m pretty well, I have loads of things to do, but there’s always time for my biggest passion, coding. Yesterday I turned on a strinct CSP (content security policy) for this project, so today the pricing section looked like the one in the first screen. The Popular badge had no pill behind it, it was just the word, with the card’s border running straight through it. The higlighted card’s border was white, instead of indigo. Also the Get Pro was the same flat grey as the two buttons next to it. It looked like a CSS mistake, but actually it wasn’t. “It worked on my machine” ng serve rendered it correctly. Same commit, same browser. That is the part that cost me the most time: I kept hunting for a rule that only existed in production. So I stopped reading CSS and read the live page instead: --color-primary → \"\" (empty) badge background → rgba(0, 0, 0, 0) (transparent) card border → rgb(255, 255, 255) --color-primary wasn’t defined at all. And when a custom property is undefined, background-color: var(--color-primary) computes to transparent , while border-color: var(--color-primary) falls back to currentColor , which on that section is white. One missing variable, and every symptom follows from it, including the ones that look unrelated. Where the variable went Angular’s production build enables inlineCritical . It inlines the critical CSS and defers the rest of the stylesheet like this: <link rel= \"stylesheet\" href= \"styles-XXXX.css\" media= \"print\" onload= \"this.media='all'\" > That onload is an inline event handler , and script-src 'self' blocks inline handlers. So the handler never ran, the stylesheet stayed at media=\"print\" , and it was never applied. For a whole day the site had been running on nothing but the inlined critical CSS, and the theme tokens live in the file that never loaded. ng serve doesn’t run inlineCritical . That’s the entire reason it only happened in production. The fix is one flag in angular.json : \"optimization\" : { \"styles\" : { \"minify\" : true , \"inlineCritical\" : false } } The stylesheet now ships as a plain blocking <link> . One render-blocking request, ~20 KB gzipped, and the CSP stays exactly as strict as it was."}, {"post_id": 32224, "ts": "2026-07-21T08:07:59Z", "hours": 0.7983, "text": "I don’t know why, but the db crashed, so the backend wasn’t working and many of you couldn’t test out the app. I just fixed this problem, and added in docker compose the restart clause, so things like this won’t happen again. Sorry for the problem"}, {"post_id": 28809, "ts": "2026-07-15T09:41:17Z", "hours": 1.2811, "text": "Finished the project. I used a seo checker to improve the seo, at least, what I can actually improve. I then focused on writing the md files. The readme and the security.md, that displays all infos about how crypto works and in general terms, security. I hope you like the project."}, {"post_id": 28422, "ts": "2026-07-14T17:36:22Z", "hours": 6.4156, "text": "Hey guys, here I am again. Lately I focused a lot on improving both the website and the overall user experience. The first thing I did was completely redesign the landing page. I switched everything to a dark theme, added a new hero section with a background image and gradient overlay, and converted every section into dark cards to make the design feel much more consistent. I also reworked the pricing section Finally, I added smooth navigation between sections using anchor links. I also redesigned the navigation bar. On desktop and tablets it stays at the top as expected, while on mobile it moves to the bottom of the screen for easier access. During this process I removed the old hamburger menu. The file manager received one of the biggest UI updates. On mobile there’s now a bottom navigation bar with a floating upload button in the center. The Files page no longer uses a traditional table; instead, files are displayed as modern cards with encryption badges and a cleaner action menu that groups all available operations together. I also fixed some spacing issues on the login page caused by the fixed navbar. Besides the UI, I spent some time improving the website from a technical perspective. I configured gzip compression, hid unnecessary server information, fixed some SEO issues like duplicated headings, and added both a robots.txt file and a sitemap. Another important feature I implemented is the new Settings page. It now includes profile information, security settings, storage usage, and account management. I decided to keep the interface honest: only features that are actually supported by the backend are available, while future ones are clearly disabled. I also implemented permanent account deletion, both on the backend and frontend, making sure all related data is safely removed before the user is deleted. I added a lot, I hope everything works as I expect. See ya"}, {"post_id": 25831, "ts": "2026-07-10T09:45:28Z", "hours": 3.4414, "text": "Okay guys, big news: I was finally able to get an SMTP server from a friend of mine, so now email verification and password recovery are working. I’m pretty satisfied; I really wanted this app to work as well as possible, and with email support, it feels even more complete. Stay tuned, because it won’t be long before it’s ready."}, {"post_id": 24603, "ts": "2026-07-08T09:57:29Z", "hours": 0.7383, "text": "Hey guys, I know this isn’t a proper devlog, but I wanted to show you this new tool I used yesterday, called graphify. Basically you take an AI, and you install graphify on it. It will create this graph, that represents the project. I find it really useful for my actual process, reviewing. As you can see, I just need to start from the biggest Node, which is the “center” of the project, and then link every other Node. The nice thing is that you can also ask questions, and the AI will respond also taking in consideration the graph, so the response will be more accurate. I strongly advice this tool for reviewing the code and improving the “style” of the code. I hope you like it"}, {"post_id": 24026, "ts": "2026-07-07T09:39:58Z", "hours": 4.4797, "text": "Hi guys Lately I did much work. First of all, security audit fixes. I bound internal ports to localhost; moved JWT secret to a real random value in .env; hardened rate limiting (to avoid spoofing); set file uploading limit to 40MB and switched uploads/downloads to streaming so files aren’t loaded whole into RAM. Sharing rework (the main piece). Before, each user had one master DEK that encrypted all their files, and sharing sent that master DEK to the server in cleartext, so the server could decrypt shared files, and sharing one file handed over the key to every file. Now the master DEK only wraps other keys. Each file has its own random DEK (encrypting its content and name), stored wrapped by the master DEK. Each user has an RSA keypair: the public key is stored in cleartext, the private key is wrapped by the master DEK (so password reset and recovery keep working without extra code). To share, the sender fetches the recipient’s public key and RSA-encrypts only that file’s DEK; the recipient decrypts it with their private key. The server never sees a key in cleartext, and the recipient gets access to only that one file. Public links work the same way, carrying the DEK for each file in the URL fragment (never sent to the server), with a revoke action. To clean the code I also made an interfaces refactor. Moved all TypeScript interfaces into core/interfaces/, one per file (I), updated imports, removed the old model files. I’m quite done, I still have to review some graphical aspects and improve some things in the code, but I think I’ll be done this week."}, {"post_id": 21523, "ts": "2026-07-03T15:14:16Z", "hours": 0.6814, "text": "Okay guys, big problem. I realized I haven’t solved my problem with sharing files. I actually made things worse. Now each user has one DEK that is used for encryption of all their files. Two issues: the server is able to read the key (it decrypts shared files, thus E2EE is not provided), and when you give a person access to one file, you give the person access to all files. The solution I need to implement: the master DEK will not be used for encrypting the files anymore, but will become a wrapping key, each file will have its own DEK which encrypts data in this particular file, and this DEK will be wrapped by the master DEK. Each user should also have a key pair for RSA encryption: the public part of the key will be in cleartext, while the private part will be wrapped by the master DEK. When a user shares a file, they encrypt only the DEK of this file with the recipient’s public RSA key, the recipient decrypts it with the private RSA key, and the server does not see any key in cleartext. Wrapping the private key with the master DEK (not the password) means it’s recovered for free via the recovery key and survives password resets, so the existing login/recovery code stays untouched. I hope to be able to fix this problem in reasonable time. I’ll stay in touch for further clarification and devlogs P.S. in the screen you can see the DEK, proof for my thesis."}, {"post_id": 21487, "ts": "2026-07-03T13:52:44Z", "hours": 1.5675, "text": "Still improving the application. I want everything to be the best as possible. I fixed some minor bugs in fronted, mostly with the crypto service. I had some problems with the sharing of files, I realized I was also sharing the DEK of the user, which is really a problem since the receiver could, from that moment, decrypt every sender file. After fixing it I improved some things in the backend, like the process of uploading and downloading files. Another important thing I fixed is the preview. The problem is that before I was opening the file directly in RAM, which, as I explained in some prev devlog, is a problem, since I have only 2 gb of ram. The important thing is that I was able to fix it, by opening it on disk."}, {"post_id": 20927, "ts": "2026-07-02T17:28:01Z", "hours": 3.2586, "text": "Still working for improving the app. I’m slowly changing simple details, and fixing bugs, like rate limiting for api, uploading dimensions and so on. As you can see from the screens, I also added the “fake” email inbox, that allows to verify the email. This was a solution I came up yesterday, to avoid using an SMTP server. I hope you find it reasonable."}, {"post_id": 19956, "ts": "2026-07-01T12:38:11Z", "hours": 3.2114, "text": "Still improving the website and checking security. I hope everything works well and is secure. I’m now focusing on fixing small bugs, and improving UI. Something I still have to figure out, is how to manage SMTP. I don’t know if I’ll just skip this part and open a link in the browser, that works like the mail. Idk In the meanwhile I’m also addressing some memory issues, since the container given by Nest is just 2 GB in ram, so I have to optimize everything, to make the app work correctly. A thing I found really useful in this project is committing with claude. Many times I don’t know what to write, and many commits are too vague, so Claude is really helpful for this task."}, {"post_id": 18321, "ts": "2026-06-29T12:57:25Z", "hours": 5.4161, "text": "I’m slowly compelting this project. I uploaded everything on #Nest, very useful. I still have to find a solution for the SMTP service, but I’m sure I’ll find something. I’m currently fixing some graphical isseus, for example I fixed the responsivety of the application, mostly the lateral navbar. Before the release, I want to fix some other problems and things I don’t like. Additionaly I want to test everything and be sure that the encryption is secure and working correctly."}, {"post_id": 9105, "ts": "2026-06-15T07:01:04Z", "hours": 4.8314, "text": "I’m currently working on secureVault, a E2E platform which allows people to store securely files and organize them in folder. Additionaly there’s the possibility to share files. It follows a lot of directives to mantain everything crypted. I had already started this project, so it isn’t fully logged. Stay tuned."}]...
|
Title: SecureVault by @F3rro_32 | Stardance
Devlo Title: SecureVault by @F3rro_32 | Stardance
Devlogs:
I’m currently working on secureVault, a E2E platform which allows people to store securely files and organize them in folder. Additionaly there’s the possibility to share files. It follows a lot of directives to mantain everything crypted. I had already started this project, so it isn’t fully logged. Stay tuned.
I’m slowly compelting this project. I uploaded everything on #Nest, very useful. I still have to find a solution for the SMTP service, but I’m sure I’ll find something. I’m currently fixing some graphical isseus, for example I fixed the responsivety of the application, mostly the lateral navbar. Before the release, I want to fix some other problems and things I don’t like. Additionaly I want to test everything and be sure that the encryption is secure and working correctly.
Still improving the website and checking security. I hope everything works well and is secure. I’m now focusing on fixing small bugs, and improving UI. Something I still have to figure out, is how to manage SMTP. I don’t know if I’ll just skip this part and open a link in the browser, that works like the mail. Idk In the meanwhile I’m also addressing some memory issues, since the container given by Nest is just 2 GB in ram, so I have to optimize everything, to make the app work correctly. A thing I found really useful in this project is committing with claude. Many times I don’t know what to write, and many commits are too vague, so Claude is really helpful for this task.
Still working for improving the app. I’m slowly changing simple details, and fixing bugs, like rate limiting for api, uploading dimensions and so on. As you can see from the screens, I also added the “fake” email inbox, that allows to verify the email. This was a solution I came up yesterday, to avoid using an SMTP server. I hope you find it reasonable.
Still improving the application. I want everything to be the best as possible. I fixed some minor bugs in fronted, mostly with the crypto service. I had some problems with the sharing of files, I realized I was also sharing the DEK of the user, which is really a problem since the receiver could, from that moment, decrypt every sender file. After fixing it I improved some things in the backend, like the process of uploading and downloading files. Another important thing I fixed is the preview. The problem is that before I was opening the file directly in RAM, which, as I explained in some prev devlog, is a problem, since I have only 2 gb of ram. The important thing is that I was able to fix it, by opening it on disk.
Okay guys, big problem. I realized I haven’t solved my problem with sharing files. I actually made things worse. Now each user has one DEK that is used for encryption of all their files. Two issues: the server is able to read the key (it decrypts shared files, thus E2EE is not provided), and when you give a person access to one file, you give the person access to all files. The solution I need to implement: the master DEK will not be used for encrypting the files anymore, but will become a wrapping key, each file will have its own DEK which encrypts data in this particular file, and this DEK will be wrapped by the master DEK. Each user should also have a key pair for RSA encryption: the public part of the key will be in cleartext, while the private part will be wrapped by the master DEK. When a user shares a file, they encrypt only the DEK of this file with the recipient’s public RSA key, the recipient decrypts it with the private RSA key, and the server does not see any key in cleartext. Wrapping the private key with the master DEK (not the password) means it’s recovered for free via the recovery key and survives password resets, so the existing login/recovery code stays untouched. I hope to be able to fix this problem in reasonable time. I’ll stay in touch for further clarification and devlogs P.S. in the screen you can see the DEK, proof for my thesis.
Hi guys Lately I did much work. First of all, security audit fixes. I bound internal ports to localhost; moved JWT secret to a real random value in .env; hardened rate limiting (to avoid spoofing); set file uploading limit to 40MB and switched uploads/downloads to streaming so files aren’t loaded whole into RAM. Sharing rework (the main piece). Before, each user had one master DEK that encrypted all their files, and sharing sent that master DEK to the server in cleartext, so the server could decrypt shared files, and sharing one file handed over the key to every file. Now the master DEK only wraps other keys. Each file has its own random DEK (encrypting its content and name), stored wrapped by the master DEK. Each user has an RSA keypair: the public key is stored in cleartext, the private key is wrapped by the master DEK (so password reset and recovery keep working without extra code). To share, the sender fetches the recipient’s public key and RSA-encrypts only that file’s DEK; the recipient decrypts it with their private key. The server never sees a key in cleartext, and the recipient gets access to only that one file. Public links work the same way, carrying the DEK for each file in the URL fragment (never sent to the server), with a revoke action. To clean the code I also made an interfaces refactor. Moved all TypeScript interfaces into core/interfaces/, one per file (I), updated imports, removed the old model files. I’m quite done, I still have to review some graphical aspects and improve some things in the code, but I think I’ll be done this week.
Hey guys, I know this isn’t a proper devlog, but I wanted to show you this new tool I used yesterday, called graphify. Basically you take an AI, and you install graphify on it. It will create this graph, that represents the project. I find it really useful for my actual process, reviewing. As you can see, I just need to start from the biggest Node, which is the “center” of the project, and then link every other Node. The nice thing is that you can also ask questions, and the AI will respond also taking in consideration the graph, so the response will be more accurate. I strongly advice this tool for reviewing the code and improving the “style” of the code. I hope you like it
Okay guys, big news: I was finally able to get an SMTP server from a friend of mine, so now email verification and password recovery are working. I’m pretty satisfied; I really wanted this app to work as well as possible, and with email support, it feels even more complete. Stay tuned, because it won’t be long before it’s ready.
Hey guys, here I am again. Lately I focused a lot on improving both the website and the overall user experience. The first thing I did was completely redesign the landing page. I switched everything to a dark theme, added a new hero section with a background image and gradient overlay, and converted every section into dark cards to make the design feel much more consistent. I also reworked the pricing section Finally, I added smooth navigation between sections using anchor links. I also redesigned the navigation bar. On desktop and tablets it stays at the top as expected, while on mobile it moves to the bottom of the screen for easier access. During this process I removed the old hamburger menu. The file manager received one of the biggest UI updates. On mobile there’s now a bottom navigation bar with a floating upload button in the center. The Files page no longer uses a traditional table; instead, files are displayed as modern cards with encryption badges and a cleaner action menu that groups all available operations together. I also fixed some spacing issues on the login page caused by the fixed navbar. Besides the UI, I spent some time improving the website from a technical perspective. I configured gzip compression, hid unnecessary server information, fixed some SEO issues like duplicated headings, and added both a robots.txt file and a sitemap. Another important feature I implemented is the new Settings page. It now includes profile information, security settings, storage usage, and account management. I decided to keep the interface honest: only features that are actually supported by the backend are available, while future ones are clearly disabled. I also implemented permanent account deletion, both on the backend and frontend, making sure all related data is safely removed before the user is deleted. I added a lot, I hope everything works as I expect. See ya
Finished the project. I used a seo checker to improve the seo, at least, what I can actually improve. I then focused on writing the md files. The readme and the security.md, that displays all infos about how crypto works and in general terms, security. I hope you like the project.
I don’t know why, but the db crashed, so the backend wasn’t working and many of you couldn’t test out the app. I just fixed this problem, and added in docker compose the restart clause, so things like this won’t happen again. Sorry for the problem
devlog Hey guys, how’s going? I’m pretty well, I have loads of things to do, but there’s always time for my biggest passion, coding. Yesterday I turned on a strinct CSP (content security policy) for this project, so today the pricing section looked like the one in the first screen. The Popular badge had no pill behind it, it was just the word, with the card’s border running straight through it. The higlighted card’s border was white, instead of indigo. Also the Get Pro was the same flat grey as the two buttons next to it. It looked like a CSS mistake, but actually it wasn’t. “It worked on my machine” ng serve rendered it correctly. Same commit, same browser. That is the part that cost me the most time: I kept hunting for a rule that only existed in production. So I stopped reading CSS and read the live page instead: --color-primary → "" (empty) badge background → rgba(0, 0, 0, 0) (transparent) card border → rgb(255, 255, 255) --color-primary wasn’t defined at all. And when a custom property is undefined, background-color: var(--color-primary) computes to transparent , while border-color: var(--color-primary) falls back to currentColor , which on that section is white. One missing variable, and every symptom follows from it, including the ones that look unrelated. Where the variable went Angular’s production build enables inlineCritical . It inlines the critical CSS and defers the rest of the stylesheet like this: <link rel= "stylesheet" href= "styles-XXXX.css" media= "print" onload= "this.media='all'" > That onload is an inline event handler , and script-src 'self' blocks inline handlers. So the handler never ran, the stylesheet stayed at media="print" , and it was never applied. For a whole day the site had been running on nothing but the inlined critical CSS, and the theme tokens live in the file that never loaded. ng serve doesn’t run inlineCritical . That’s the entire reason it only happened in production. The fix is one flag in angular.json : "optimization" : { "styles" : { "minify" : true , "inlineCritical" : false } } The stylesheet now ships as a plain blocking <link> . One render-blocking request, ~20 KB gzipped, and the CSP stays exactly as strict as it was.
Ships:
SecureVault, zero knowledge, end-to-end encrypted cloud storage. Your files and their names are encrypted in the browser before they ever reach the server, which only ever stores ciphertext it can’t read.
Just improved some things, mostly advices from other users....
|
1793116102.3308027
|
1793202502.3308027
|
|
18631
|
My very own WebOS by @chahatesh | Stardance
|
chahatesh
|
2
|
3.0
|
4
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-21T16:48:44Z", "hours": 1.0, "multiplier": 2.83, "payout": 4, "blessing": "neutral", "text": "I added a Notes app, Music app, Settings app, and Weather app to my WebOS and i think it is very cool", "repo": "https://github.com/chahatesh/Web-OS", "demo": "https://robo-os.netlify.app/"}, {"ship_num": 2, "ts": "2026-07-20T03:05:34Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "What did you make I made WebOS, a browser-based operating system with a Projects app, a Calculator, and a Browser. What was challenging Getting all the apps to work together smoothly and making the interface feel like a real operating system and the deployment was hard What are you proud of I’m proud that robo OS feels polished and includes multiple working apps and a hidden Easter egg.", "repo": "https://github.com/chahatesh/Web-OS", "demo": "https://robo-os.netlify.app/"}]...
|
[{"post_id": 32431, "ts": "202 [{"post_id": 32431, "ts": "2026-07-21T16:39:42Z", "hours": 1.2361, "text": "Dev Log 4 I added a Notes app, Music app, Settings app, and Weather app to my WebOS. They were all simple to build, and I chose “Life Goes On” by Oliver Tree for the music app because I like the song."}, {"post_id": 31573, "ts": "2026-07-20T02:26:27Z", "hours": 1.1989, "text": "Dev Log 3 - Done (Yay) Added two new apps to WebOS: a simple calculator and a browser (powered by an iframe cool:) I also hid a Easter egg and polished the overall UI and i made github read me and also I have it ready to ship"}, {"post_id": 30893, "ts": "2026-07-18T21:18:33Z", "hours": 0.3786, "text": "Dev Log 2 Made a app to show all of my most recent projects i only addes 2 becouse it took a bit to add and overall it looks good and it works good"}, {"post_id": 30842, "ts": "2026-07-18T19:48:12Z", "hours": 0.6008, "text": "Dev-Log 1 So I locked in for like 40 min and made a cool landing page and also it has time in the side and also a cool starting pop up and also the best part is that it has free promotion by having a link in the pop up for my TY - https://www.youtube.com/@CKInnovates - So that is that it was fun and I used tony stark workshop as the BG"}]...
|
Title: My very own WebOS by @chahatesh | Stardance Title: My very own WebOS by @chahatesh | Stardance
Devlogs:
Dev-Log 1 So I locked in for like 40 min and made a cool landing page and also it has time in the side and also a cool starting pop up and also the best part is that it has free promotion by having a link in the pop up for my TY - https://www.youtube.com/@CKInnovates - So that is that it was fun and I used tony stark workshop as the BG
Dev Log 2 Made a app to show all of my most recent projects i only addes 2 becouse it took a bit to add and overall it looks good and it works good
Dev Log 3 - Done (Yay) Added two new apps to WebOS: a simple calculator and a browser (powered by an iframe cool:) I also hid a Easter egg and polished the overall UI and i made github read me and also I have it ready to ship
Dev Log 4 I added a Notes app, Music app, Settings app, and Weather app to my WebOS. They were all simple to build, and I chose “Life Goes On” by Oliver Tree for the music app because I like the song.
Ships:
What did you make I made WebOS, a browser-based operating system with a Projects app, a Calculator, and a Browser. What was challenging Getting all the apps to work together smoothly and making the interface feel like a real operating system and the deployment was hard What are you proud of I’m proud that robo OS feels polished and includes multiple working apps and a hidden Easter egg.
I added a Notes app, Music app, Settings app, and Weather app to my WebOS and i think it is very cool...
|
1792997530.3952813
|
1793083930.3952813
|
|
18641
|
LumiOS by @AfterWorld | Stardance
|
AfterWorld
|
2
|
20.17
|
141
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-26T02:51:44Z", "hours": 8.0, "multiplier": 16.73, "payout": 141, "blessing": "neutral", "text": "Through the last few days, I kept on working on my project — a webOS. I focused on creating a cool, joyful, and especially user‑friendly experience. I improved old apps such as Clock, Terminal, Files, and so on by adding real OS functions to increase their practicality. Moreover, I added a new app — “Paint,” which allows the user to draw freely on a canvas with various tools. In addition, I added a system tray on the taskbar that lets the user change more settings. One of the challenges is the theme. It’s hard to combine multiple settings (dark/light mode, accent color, etc.) using CSS custom properties without conflicts. I’m not good at CSS, so I failed here many times, especially with z‑index. Also, ensuring the accent color propagates to all UI components is difficult as well. I needed to use some AI here to make sure I didn’t forget anything. Another challenging part is cross‑app communication. Opening .txt files with the Notes app requires some tough work, as well as opening other apps from the Widgets app. To test it, visit: https://lxtimer.github.io/LumiOS/ , or clone the repo to run locally.", "repo": "https://github.com/LXTimer/LumiOS", "demo": "https://lxtimer.github.io/LumiOS/"}, {"ship_num": 2, "ts": "2026-06-20T05:04:31Z", "hours": 6.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I created a web‑based operating system that focuses on being light-weight, functional, and visually appealing. One of the biggest challenges I faced was building the window management system. I had to spend some time watching YouTube tutorials, reading different websites, and studying other webOS projects before finally getting it to work. I am proud of the UI I made, which includes transparent and gradient windows, widgets, and taskbars. I did use some AI for this part since I ran out of ideas and didn’t know what to do. Overall, my goal is to create an OS that people genuinely enjoy using, and I’ll try my best to keep this project up!", "repo": "https://github.com/LXTimer/LumiOS", "demo": "https://lxtimer.github.io/LumiOS/"}]...
|
[{"post_id": 17835, "ts": "202 [{"post_id": 17835, "ts": "2026-06-28T19:35:52Z", "hours": 6.1742, "text": "Dev Log # 4 After approximately 6 hours, I finished another session of improving the OS. This session focused on refining LumiOS’s look and feel. I also added two new apps - Browser and Weather. Overall, this update took me lots of time to fix small details. New Apps: Browser: A searching tool that allows you to search on the web (incomplete) Weather app: Real-time weather tracker using OpenWeather API, showing current and future temperature, visibility, wind, and so on. (Currently only showing New York Weather) Updates on Existing Apps: Widget: Added a weather widget; link the widget to the Weather app. New Features: Visual & Design: Unified color system with accent glow effects. New glass morphism layers. Standardized spacing scale and border radius system. Defined consistent typography sizes, weights, and letter spacing. Added maximizing and minimizing animations. Components: Desktop icons now have a different lift and glow on hover. Buttons and menus use smooth transform feedback. Context menus show accent bars and slide‑in animations. Window controls have larger hit areas and ring hover effects. Start menu and quick settings redesigned with better padding and hover states. Lock Screen: New layout with large time display and username. Added unlock animation. Complete CSS and JS restructure for smoother motion. Taskbar: Added a search bar that lets you quickly find and open specific apps. Taskbar buttons have scale and glow animations. Challenges solved: When I tried adding new ideas to enhance the overall visual appeal, I encountered a serious issue: the overlay system and window management stopped working again. The wallpaper no longer aligned with the desktop, and the window dragging function broke as well. I started looking for the problem but couldn’t find the cause, so I decided to restore everything and proceed more carefully. Bugs: The browser app is not working. It loaded external websites directly inside an iframe. Many sites block being embedded through CSP or X-Frame-Options, so the page often stayed blank, or the navigation controls stopped working. I tried loading external sites directly in an iframe, which does not work. I also tried routing page loads through the local proxy, but the app still depends on websites that often block embedding. Future Plan: Fixing the browser app will be the first thing I do in the future. I will also try to add micro-interactions such as window snapping."}, {"post_id": 16045, "ts": "2026-06-26T02:15:58Z", "hours": 2.2678, "text": "Lock Screen Update I just realized that my OS doesn’t have a lock screen yet, so I decided to make a simple one. But then, I had some problems. The blur effect on the background somehow doesn’t work at all. I had to test each part of my code to find an answer. Thankfully, I found the solution at the end. Anyways, I spent some time on the start screen; I hope you enjoy it!"}, {"post_id": 15859, "ts": "2026-06-25T19:46:21Z", "hours": 1.2275, "text": "Small update on Notes App I improved some basic functions and also added some new features to the Notes app. Download as .txt: Replaced the old Save-to-filesystem button with a direct browser download that saves notes as plain .txt files. Status bar: Added a status bar at the bottom of the app that indicates current cursor position (Ln/Col) and live word count. GUI cleanup: Removed placeholder text, increased the default window size, and cleaned up the toolbar."}, {"post_id": 15464, "ts": "2026-06-25T04:35:04Z", "hours": 4.95, "text": "Dev Log # 3 A brand new Dev Log! Over the past few days, I added a bunch of exciting new features, mainly focusing on user experience. I also fixed some tiny bugs that struggled me a lot. New Apps Paint: A drawing canvas that allows the user to freely decorate things they want using tools, different colors, and shapes. Updates on Existing Apps Notes: Notes now support markdown format and can be downloaded Calculator: Calculator now has an advanced mode that allows users to use a scientific calculator. Terminal: Terminal now supports more commands (even though they are still not fully functional) Clock: Clock now has a timer section that can be used to set a countdown timer. New Features Draggable desktop icons Taskbar now has an entire tray allowing the user to change volume, brightness, Wi-Fi, and many other settings all in one place. Taskbar now shows battery status. New wallpapers are added to the settings. Change the UI of some apps. Challenges The right-click context menu somehow didn’t show up again. I tried different solutions, but none of them worked. Solutions I asked some AI agents and browsed for a long time, and finally found the solution. The “contextmenu” handler in main.js crashed from undefined “closeVolumePopup()” and “closeBatteryPopup()” calls; adding both to “taskbar.js” with the usual “.visible”‑toggle pattern fixed the crash and the related desktop‑click bug that blocked “showContextMenu()” and overlay dismissal. In the next update, I will try to implement the Weather App, the animated wallpapers, also building a browser App. In the next update, I will try to implement the Weather App, the animated wallpapers, also building a browser App."}, {"post_id": 12352, "ts": "2026-06-20T04:46:45Z", "hours": 1.2583, "text": "Finally! After a long time of testing, I found where the bug is. I forgot that there is a layer on top of everything, so I added “pointer-events: none;” in #wlayer and “pointer-events: auto;” in .win. Also, I added a right click context menu."}, {"post_id": 12189, "ts": "2026-06-19T22:04:50Z", "hours": 3.6264, "text": "Dev Log # 2 Another update! After hours spent fixing tiny bugs, the OS has received a lot of new features and apps, as well as a massive update to the GUI and the overall system! The OS is more complete and practical now. New Apps Clock app: An app where you can check the current time, use a stopwatch, or set an alarm clock Calendar app: Built a new Calendar app from scratch, a month grid with event dots, a day-detail panel for adding and deleting color-tagged events, and an Agenda tab listing everything chronologically Widget app: You can add widgets to the desktop right now. Widgets, such as a small clock or calendar, can be added to the desktop New Features Settings became more functional: transparency, dark mode, animations, accent color, and brightness are now available. Added a pinned app dock to the taskbar for quick launching. The volume tray icon now opens a real pop-up with a slider. Files app can now be used. It’s still incomplete, but some basic functions like opening folders and going back are implemented Taskbar opacity: You can change the taskbar’s opacity from 0% to 100%, which makes the OS look better Windows have been rebuilt. Now they are not only transparent, but also include a gradient color as background and a change in border line. The flowing particles effect has been added to the OS in the background. Bugs The desktop icons are still not working, as they are not responding to clicks. Two likely causes are that ES module scoping hides “openApp()” from inline onclick handlers, or a full-screen overlay (like the widget layer) is missing “pointer-events: none” and silently blocking clicks before they reach the icons. My next plan is to fix the bugs, add animated wallpapers, add a weather and AI app, and possibly add some online features (e.g., cloud sync)."}, {"post_id": 10987, "ts": "2026-06-18T00:33:54Z", "hours": 0.9919, "text": "Dev Log # 1 This is my first webOS. The reason I wanted to start something like this is that I have dreamed of creating an operating system of my own. I once created an OS based on Windows, but sadly failed. That’s why I found webOS is somewhere else for me to go. Even though I’m not good at frontend, with the help of YouTube and AI, I still managed to get a start. Currently, the OS features: Calculator APP: where you can do some simple calculations. Notes APP: where you can write some simple notes Settings APP: Basic settings (still in progress) One of the biggest challenges should be window management. It’s pretty hard to make sure the windows work independently… In the future, I will focus on aesthetics and add more effects and more apps to make the webOS both useful and visually appealing."}]...
|
Title: LumiOS by @AfterWorld | Stardance
Devlogs: Title: LumiOS by @AfterWorld | Stardance
Devlogs:
Dev Log # 1 This is my first webOS. The reason I wanted to start something like this is that I have dreamed of creating an operating system of my own. I once created an OS based on Windows, but sadly failed. That’s why I found webOS is somewhere else for me to go. Even though I’m not good at frontend, with the help of YouTube and AI, I still managed to get a start. Currently, the OS features: Calculator APP: where you can do some simple calculations. Notes APP: where you can write some simple notes Settings APP: Basic settings (still in progress) One of the biggest challenges should be window management. It’s pretty hard to make sure the windows work independently… In the future, I will focus on aesthetics and add more effects and more apps to make the webOS both useful and visually appealing.
Dev Log # 2 Another update! After hours spent fixing tiny bugs, the OS has received a lot of new features and apps, as well as a massive update to the GUI and the overall system! The OS is more complete and practical now. New Apps Clock app: An app where you can check the current time, use a stopwatch, or set an alarm clock Calendar app: Built a new Calendar app from scratch, a month grid with event dots, a day-detail panel for adding and deleting color-tagged events, and an Agenda tab listing everything chronologically Widget app: You can add widgets to the desktop right now. Widgets, such as a small clock or calendar, can be added to the desktop New Features Settings became more functional: transparency, dark mode, animations, accent color, and brightness are now available. Added a pinned app dock to the taskbar for quick launching. The volume tray icon now opens a real pop-up with a slider. Files app can now be used. It’s still incomplete, but some basic functions like opening folders and going back are implemented Taskbar opacity: You can change the taskbar’s opacity from 0% to 100%, which makes the OS look better Windows have been rebuilt. Now they are not only transparent, but also include a gradient color as background and a change in border line. The flowing particles effect has been added to the OS in the background. Bugs The desktop icons are still not working, as they are not responding to clicks. Two likely causes are that ES module scoping hides “openApp()” from inline onclick handlers, or a full-screen overlay (like the widget layer) is missing “pointer-events: none” and silently blocking clicks before they reach the icons. My next plan is to fix the bugs, add animated wallpapers, add a weather and AI app, and possibly add some online features (e.g., cloud sync).
Finally! After a long time of testing, I found where the bug is. I forgot that there is a layer on top of everything, so I added “pointer-events: none;” in #wlayer and “pointer-events: auto;” in .win. Also, I added a right click context menu.
Dev Log # 3 A brand new Dev Log! Over the past few days, I added a bunch of exciting new features, mainly focusing on user experience. I also fixed some tiny bugs that struggled me a lot. New Apps Paint: A drawing canvas that allows the user to freely decorate things they want using tools, different colors, and shapes. Updates on Existing Apps Notes: Notes now support markdown format and can be downloaded Calculator: Calculator now has an advanced mode that allows users to use a scientific calculator. Terminal: Terminal now supports more commands (even though they are still not fully functional) Clock: Clock now has a timer section that can be used to set a countdown timer. New Features Draggable desktop icons Taskbar now has an entire tray allowing the user to change volume, brightness, Wi-Fi, and many other settings all in one place. Taskbar now shows battery status. New wallpapers are added to the settings. Change the UI of some apps. Challenges The right-click context menu somehow didn’t show up again. I tried different solutions, but none of them worked. Solutions I asked some AI agents and browsed for a long time, and finally found the solution. The “contextmenu” handler in main.js crashed from undefined “closeVolumePopup()” and “closeBatteryPopup()” calls; adding both to “taskbar.js” with the usual “.visible”‑toggle pattern fixed the crash and the related desktop‑click bug that blocked “showContextMenu()” and overlay dismissal. In the next update, I will try to implement the Weather App, the animated wallpapers, also building a browser App. In the next update, I will try to implement the Weather App, the animated wallpapers, also building a browser App.
Small update on Notes App I improved some basic functions and also added some new features to the Notes app. Download as .txt: Replaced the old Save-to-filesystem button with a direct browser download that saves notes as plain .txt files. Status bar: Added a status bar at the bottom of the app that indicates current cursor position (Ln/Col) and live word count. GUI cleanup: Removed placeholder text, increased the default window size, and cleaned up the toolbar.
Lock Screen Update I just realized that my OS doesn’t have a lock screen yet, so I decided to make a simple one. But then, I had some problems. The blur effect on the background somehow doesn’t work at all. I had to test each part of my code to find an answer. Thankfully, I found the solution at the end. Anyways, I spent some time on the start screen; I hope you enjoy it!
Dev Log # 4 After approximately 6 hours, I finished another session of improving the OS. This session focused on refining LumiOS’s look and feel. I also added two new apps - Browser and Weather. Overall, this update took me lots of time to fix small details. New Apps: Browser: A searching tool that allows you to search on the web (incomplete) Weather app: Real-time weather tracker using OpenWeather API, showing current and future temperature, visibility, wind, and so on. (Currently only showing New York Weather) Updates on Existing Apps: Widget: Added a weather widget; link the widget to the Weather app. New Features: Visual & Design: Unified color system with accent glow effects. New glass morphism layers. Standardized spacing scale and border radius system. Defined consistent typography sizes, weights, and letter spacing. Added maximizing and minimizing animations. Components: Desktop icons now have a different lift and glow on hover. Buttons and menus use smooth transform feedback. Context menus show accent bars and slide‑in animations. Window controls have larger hit areas and ring hover effects. Start menu and quick settings redesigned with better padding and hover states. Lock Screen: New layout with large time display and username. Added unlock animation. Complete CSS and JS restructure for smoother motion. Taskbar: Added a search bar that lets you quickly find and open specific apps. Taskbar buttons have scale and glow animations. Challenges solved: When I tried adding new ideas to enhance the overall visual appeal, I encountered a serious issue: the overlay system and window management stopped working again. The wallpaper no longer aligned with the desktop, and the window dragging function broke as well. I started looking for the problem but couldn’t find the cause, so I decided to restore everything and proceed more carefully. Bugs: The browser app is not working. It loaded external websites directly inside an iframe. Many sites block being embedded through CSP or X-Frame-Options, so the page often stayed blank, or the navigation controls stopped working. I tried loading external sites directly in an iframe, which does not work. I also tried routing page loads through the local proxy, but the app still depends on websites that often block embedding. Future Plan: Fixing the browser app will be the first thing I do in the future. I will also try to add micro-interactions such as window snapping.
Ships:
I created a web‑based operating system that focuses on being light-weight, functional, and visually appealing. One of the biggest challenges I faced was building the window management system. I had to spend some time watching YouTube tutorials, reading different websites, and studying other webOS projects before finally getting it to work. I am proud of the UI I made, which includes transparent and gradient windows, widgets, and taskbars. I did use some AI for this part since I ran out of ideas and didn’t know what to do. Overall, my goal is to create an OS that people genuinely enjoy using, and I’ll try my best to keep this project up!
Through the last few days, I kept on working on my project — a webOS. I focused on creating a cool, joyful, and especially user‑friendly experience. I improved old apps such as Clock, Terminal, Files, and so on by adding real OS functions to increase their practicality. Moreover, I added a new app — “Paint,” which allows the user to draw freely on a canvas with various tools. In addition, I added a system tray on the taskbar that lets the user change more settings. One of the challenges is the theme. It’s hard to combine multiple settings (dark/light mode, accent color, etc.) using CSS custom properties without conflicts. I’m not good at CSS, so I failed here many times, especially with z‑index. Also, ensuring the accent color propagates to all UI components is difficult as well. I needed to use some AI here to make sure I didn’t forget anything. Another challenging part is cross‑app communication. Opening .txt files with the Notes app requires some tough work, as well as opening other apps from the Widgets app. To test it, visit: https://lxtimer.github.io/LumiOS/ , or clone the repo to run locally....
|
1792997774.9983108
|
1793084174.9983108
|
|
18700
|
OneShot by @torren | Stardance
|
torren
|
2
|
11.0
|
97
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T19:56:58Z", "hours": 2.0, "multiplier": 8.68, "payout": 41, "blessing": "neutral", "text": "What did you make? OneShot is an app that kills prompt engineering. You describe what you want in plain English, hit execute, and get a professional result. No tweaking. No retries. No “let me regenerate that.” Just describe what you need and it handles everything behind the scenes. What was challenging? Getting the Gemini API integration working took some debugging—had to switch from gemini-1.5-flash (wasn’t available on my API tier) to gemini-2.5-flash. Then figuring out Next.js client-side navigation for the execution flow. Also building a template system that actually feels useful instead of gimmicky took thought. Database persistence with graceful degradation was the final piece—making it optional but still seamless. What are you proud of? The entire thing is under 10kb of production JavaScript. No bloat. Every feature exists because it solves a real problem: templates save time, keyboard shortcuts (Cmd+K) reward power users, the result modal lets you actually read long outputs, settings persist so you’re not starting from scratch each time. It’s an honest product that does what it says. What should people know so they can test your project? Go to https://oneshot-chi-nine.vercel.app—no login, no credit card, no setup. Click “Create New Task” (or press Cmd+K), describe what you want, pick a category, hit Execute. Try the templates if you want quick wins. Everything’s real: you’ll get actual results, copy/download buttons work, tasks show up on your home page.", "repo": "https://github.com/nadellasripad11/oneshot", "demo": "https://oneshot-chi-nine.vercel.app"}, {"ship_num": 2, "ts": "2026-06-28T19:38:12Z", "hours": 9.0, "multiplier": 5.33, "payout": 56, "blessing": "neutral", "text": "What did you make? OneShot is an app that kills prompt engineering. You describe what you want in plain English, hit execute, and get a professional result. No tweaking. No retries. No “let me regenerate that.” Just describe what you need and it handles everything behind the scenes. What was challenging? Getting the Gemini API integration working took some debugging—had to switch from gemini-1.5-flash (wasn’t available on my API tier) to gemini-2.5-flash. Then figuring out Next.js client-side navigation for the execution flow. Also building a template system that actually feels useful instead of gimmicky took thought. Database persistence with graceful degradation was the final piece—making it optional but still seamless. What are you proud of? The entire thing is under 10kb of production JavaScript. No bloat. Every feature exists because it solves a real problem: templates save time, keyboard shortcuts (Cmd+K) reward power users, the result modal lets you actually read long outputs, settings persist so you’re not starting from scratch each time. It’s an honest product that does what it says. What should people know so they can test your project? Go to https://oneshot-chi-nine.vercel.app—no login, no credit card, no setup. Click “Create New Task” (or press Cmd+K), describe what you want, pick a category, hit Execute. Try the templates if you want quick wins. Everything’s real: you’ll get actual results, copy/download buttons work, tasks show up on your home page.", "repo": "https://github.com/nadellasripad11/oneshot", "demo": "https://oneshot-chi-nine.vercel.app"}]...
|
[{"post_id": 24150, "ts": "202 [{"post_id": 24150, "ts": "2026-07-07T15:07:51Z", "hours": 1.0222, "text": "got feedback that the readme sounded too AI-generated. stripped it down, rewrote it in first person, added a screenshot, trimmed features to 6 bullets. removed the corporate FAQ, the exhaustive tech stack list, everything that felt like a template. readme now sounds like i actually wrote it instead of a marketing team approving it. added a “how it works” section that tells the real build story instead of listing libraries. shipped it."}, {"post_id": 22478, "ts": "2026-07-04T23:16:47Z", "hours": 0.0, "text": "Devlog — Killed the Grok API Dependency clarification questions were broken. Grok API wasn’t recognizing any model names (grok-2, grok-beta, grok — all failed). spent 15 minutes debugging dead ends. gave up on the api. switched to hardcoded template questions instead. built question templates for each category: research gets different questions than business, different from writing, etc. now when user hits execute → instant questions pop up → no api calls, no latency, no failures. just works. same feature. actually reliable. 🚀"}, {"post_id": 22407, "ts": "2026-07-04T21:26:43Z", "hours": 0.2061, "text": "OneShot Dashboard Redesign Spent the week tearing down the OneShot dashboard and rebuilding it with a clean black/white aesthetic. Text was disappearing, colors were fighting each other, and the whole thing felt half-baked. Went through five pages and standardized the color system: solid white for primary text, opacity variants for secondary, and proper contrast everywhere. Same features, completely different vibe. The real win? Design isn’t decoration. When a page is polished, users assume the engineering is solid. Now it actually looks like I care about the details. Ship first, perfect later."}, {"post_id": 20964, "ts": "2026-07-02T18:12:12Z", "hours": 1.0236, "text": "I improved the UI to make the project look more polished and intentional, with cleaner spacing, better visual hierarchy, and a smoother overall experience. I also rewrote the README so it felt more human and easier to understand, instead of sounding like a wall of technical notes. On top of that, I added a few new features that make the app feel more complete, more useful, and closer to something people would actually want to keep using."}, {"post_id": 17927, "ts": "2026-06-28T21:21:22Z", "hours": 0.0, "text": "built an AI execution engine. you describe what you need, it gives you professional results in seconds. rewrote the README to sound human (last one looked AI-generated). fixed UI readability, added progress bars, implemented retry logic for API stability. it’s live at oneshot-chi-nine.vercel.app and actually works. and my vercel kept deploying my old deployments so fixing that took me a long time i also added a progress bar feature so users dont get stuck on the screen showing nothing and yea some of the previous buttons weren’t working or were glitched so i fixed those too."}, {"post_id": 17834, "ts": "2026-06-28T19:34:33Z", "hours": 0.0, "text": "added supabase integration so tasks actually persist. implemented rate limiting (5 req/min per IP) to prevent abuse. built out an 8-template system with optimized prompts for common workflows (business plans, landing pages, marketing strategies, etc). added keyboard shortcuts (Cmd+K to open quick task search) because power users deserve fast access. implemented result modal for viewing full results without scrolling. settings now persist to localStorage so user preferences stick around. updated all dashboard pages to pull real data from the database instead of hardcoded samples. everything still works without a database configured, it just gracefully degrades.the app went from “works but doesn’t persist anything” to “production-grade SaaS with templates, shortcuts, and data persistence.” still under 10kb of production bundle js. no bloat. everything has a reason for existing."}, {"post_id": 17761, "ts": "2026-06-28T18:03:06Z", "hours": 0.0, "text": "spent the session debugging task execution flow - users were getting stuck on the “executing” page. turned out to be a routing issue after the api call completed. fixed the navigation and now tasks flow through smoothly from submission to results. also deployed the whole thing to vercel so it’s actually live and working with real results. copy and download buttons are fully functional. ready for people to start using it."}, {"post_id": 17679, "ts": "2026-06-28T16:04:37Z", "hours": 0.0, "text": "okay so we shipped the whole dashboard. like actually shipped it. all 7 pages, interactive examples modal, task execution timeline, templates, the whole thing. UI is clean and professional, no jank.built it on next.js 15, deployed on vercel, live right now at oneshot-chi-nine.vercel.app. github repo is up too: github.com/nadellasripad11/oneshot honestly the UI part was pretty smooth. typescript caught bugs, tailwind made styling easy. but the REAL challenge is gonna be the LLM integration. we’re thinking either open source models or building something lightweight since API costs would kill us.that’s basically it!!! everything works, it looks good, and we’re ready for the next phase. hope people actually use this lmao. thanks!!!!"}, {"post_id": 17340, "ts": "2026-06-28T02:43:02Z", "hours": 9.4394, "text": "I basically worked making the whole roadmap of the whole project. main components were the UI, systems and appealing to the customers. I also figured using API keys to make our prompts better would take too much money, so im gonna make my own LLM or use a free one. and that’s it thanks!!!!!! hope i got a lot of engagements on this"}]...
|
Title: OneShot by @torren | Stardance
Devlogs:
I Title: OneShot by @torren | Stardance
Devlogs:
I basically worked making the whole roadmap of the whole project. main components were the UI, systems and appealing to the customers. I also figured using API keys to make our prompts better would take too much money, so im gonna make my own LLM or use a free one. and that’s it thanks!!!!!! hope i got a lot of engagements on this
okay so we shipped the whole dashboard. like actually shipped it. all 7 pages, interactive examples modal, task execution timeline, templates, the whole thing. UI is clean and professional, no jank.built it on next.js 15, deployed on vercel, live right now at oneshot-chi-nine.vercel.app. github repo is up too: github.com/nadellasripad11/oneshot honestly the UI part was pretty smooth. typescript caught bugs, tailwind made styling easy. but the REAL challenge is gonna be the LLM integration. we’re thinking either open source models or building something lightweight since API costs would kill us.that’s basically it!!! everything works, it looks good, and we’re ready for the next phase. hope people actually use this lmao. thanks!!!!
spent the session debugging task execution flow - users were getting stuck on the “executing” page. turned out to be a routing issue after the api call completed. fixed the navigation and now tasks flow through smoothly from submission to results. also deployed the whole thing to vercel so it’s actually live and working with real results. copy and download buttons are fully functional. ready for people to start using it.
added supabase integration so tasks actually persist. implemented rate limiting (5 req/min per IP) to prevent abuse. built out an 8-template system with optimized prompts for common workflows (business plans, landing pages, marketing strategies, etc). added keyboard shortcuts (Cmd+K to open quick task search) because power users deserve fast access. implemented result modal for viewing full results without scrolling. settings now persist to localStorage so user preferences stick around. updated all dashboard pages to pull real data from the database instead of hardcoded samples. everything still works without a database configured, it just gracefully degrades.the app went from “works but doesn’t persist anything” to “production-grade SaaS with templates, shortcuts, and data persistence.” still under 10kb of production bundle js. no bloat. everything has a reason for existing.
built an AI execution engine. you describe what you need, it gives you professional results in seconds. rewrote the README to sound human (last one looked AI-generated). fixed UI readability, added progress bars, implemented retry logic for API stability. it’s live at oneshot-chi-nine.vercel.app and actually works. and my vercel kept deploying my old deployments so fixing that took me a long time i also added a progress bar feature so users dont get stuck on the screen showing nothing and yea some of the previous buttons weren’t working or were glitched so i fixed those too.
I improved the UI to make the project look more polished and intentional, with cleaner spacing, better visual hierarchy, and a smoother overall experience. I also rewrote the README so it felt more human and easier to understand, instead of sounding like a wall of technical notes. On top of that, I added a few new features that make the app feel more complete, more useful, and closer to something people would actually want to keep using.
OneShot Dashboard Redesign Spent the week tearing down the OneShot dashboard and rebuilding it with a clean black/white aesthetic. Text was disappearing, colors were fighting each other, and the whole thing felt half-baked. Went through five pages and standardized the color system: solid white for primary text, opacity variants for secondary, and proper contrast everywhere. Same features, completely different vibe. The real win? Design isn’t decoration. When a page is polished, users assume the engineering is solid. Now it actually looks like I care about the details. Ship first, perfect later.
Devlog — Killed the Grok API Dependency clarification questions were broken. Grok API wasn’t recognizing any model names (grok-2, grok-beta, grok — all failed). spent 15 minutes debugging dead ends. gave up on the api. switched to hardcoded template questions instead. built question templates for each category: research gets different questions than business, different from writing, etc. now when user hits execute → instant questions pop up → no api calls, no latency, no failures. just works. same feature. actually reliable. 🚀
got feedback that the readme sounded too AI-generated. stripped it down, rewrote it in first person, added a screenshot, trimmed features to 6 bullets. removed the corporate FAQ, the exhaustive tech stack list, everything that felt like a template. readme now sounds like i actually wrote it instead of a marketing team approving it. added a “how it works” section that tells the real build story instead of listing libraries. shipped it.
Ships:
What did you make? OneShot is an app that kills prompt engineering. You describe what you want in plain English, hit execute, and get a professional result. No tweaking. No retries. No “let me regenerate that.” Just describe what you need and it handles everything behind the scenes. What was challenging? Getting the Gemini API integration working took some debugging—had to switch from gemini-1.5-flash (wasn’t available on my API tier) to gemini-2.5-flash. Then figuring out Next.js client-side navigation for the execution flow. Also building a template system that actually feels useful instead of gimmicky took thought. Database persistence with graceful degradation was the final piece—making it optional but still seamless. What are you proud of? The entire thing is under 10kb of production JavaScript. No bloat. Every feature exists because it solves a real problem: templates save time, keyboard shortcuts (Cmd+K) reward power users, the result modal lets you actually read long outputs, settings persist so you’re not starting from scratch each time. It’s an honest product that does what it says. What should people know so they can test your project? Go to https://oneshot-chi-nine.vercel.app—no login, no credit card, no setup. Click “Create New Task” (or press Cmd+K), describe what you want, pick a category, hit Execute. Try the templates if you want quick wins. Everything’s real: you’ll get actual results, copy/download buttons work, tasks show up on your home page.
What did you make? OneShot is an app that kills prompt engineering. You describe what you want in plain English, hit execute, and get a professional result. No tweaking. No retries. No “let me regenerate that.” Just describe what you need and it handles everything behind the scenes. What was challenging? Getting the Gemini API integration working took some debugging—had to switch from gemini-1.5-flash (wasn’t available on my API tier) to gemini-2.5-flash. Then figuring out Next.js client-side navigation for the execution flow. Also building a template system that actually feels useful instead of gimmicky took thought. Database persistence with graceful degradation was the final piece—making it optional but still seamless. What are you proud of? The entire thing is under 10kb of production JavaScript. No bloat. Every feature exists because it solves a real problem: templates save time, keyboard shortcuts (Cmd+K) reward power users, the result modal lets you actually read long outputs, settings persist so you’re not starting from scratch each time. It’s an honest product that does what it says. What should people know so they can test your project? Go to https://oneshot-chi-nine.vercel.app—no login, no credit card, no setup. Click “Create New Task” (or press Cmd+K), describe what you want, pick a category, hit Execute. Try the templates if you want quick wins. Everything’s real: you’ll get actual results, copy/download buttons work, tasks show up on your home page....
|
1792994195.8103735
|
1793080595.8103735
|
|
18811
|
Frutiger OS by @ondy | Stardance
|
ondy
|
2
|
33.0
|
256
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T19:00:33Z", "hours": 23.0, "multiplier": 11.03, "payout": 256, "blessing": "neutral", "text": "A web-based operating system based on the infamous Frutiger Aero aesthetic of the mid 00s to early 10s. The reason i made this is that im big fan of this era and skeuomorphism, which i feel got killed by minimalism. some of the cool features: -working desktop environment(dragging apps, selection box, time, taskbar, window management…) -nostalgic boot animation and login -old stylized browser with nostalgic websites -og paint and notes programs -the nostalgic frutiger music player skins we all liked(i wasnt alive back then lol) -parody xbox app where you can play some of the popular games from back then I dont know what else to write here if you are interested check out the github readme.", "repo": "https://github.com/0ndyy/frutiger-os", "demo": "https://0ndyy.github.io/frutiger-os/"}, {"ship_num": 2, "ts": "2026-07-08T21:33:08Z", "hours": 10.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Web based OS inspired by the Frutiger Aero aesthetic during 10s. I really enjoyed tweaking the CSS values to get the aesthetic just right, it was really fun and i implemented modular system for easy creation of new apps/elements, so i am planning on expanding this inti WebOS 2. If you want you can try it out here - https://0ndyy.github.io/frutiger-os/", "repo": "https://github.com/0ndyy/frutiger-os", "demo": "https://0ndyy.github.io/frutiger-os/"}]...
|
[{"post_id": 75315, "ts": "202 [{"post_id": 75315, "ts": "2026-09-29T18:52:06Z", "hours": 2.4547, "text": "Frutiger OS(Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 8(final) This is going to be the final devlog before finally shipping this thing, its been great and i learnt a lot especially how to actually get div where i want it😭 Since ast devlog i added some cool new desktop behaviour, web browser and boot animation, you can check it out all in the final video…"}, {"post_id": 75001, "ts": "2026-09-28T20:19:43Z", "hours": 3.3958, "text": "Frutiger OS(Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 7 I finally made the most fun part, games yall. Its basically a parody of xbox, i know some of the games are newer and not from the frutiger era but it still fun to mess around with. The games are saved as .swf files and run through ruffle."}, {"post_id": 73315, "ts": "2026-09-24T20:51:13Z", "hours": 4.4122, "text": "Frutiger OS (Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 6 For the past couple weeks i havent made much progress since i have been busy with life n stuff, but atleast i managed to make another music player skin. I feel like this one really fits with the whole aquatic/frutiger aero style - what do you think? Some of the time was also spent on making a new games app - stay tuned, hopefully i can finish this in time😭😭 As always, you can try the live demo on the github linked under the project or here - https://github.com/0ndyy/frutiger-os/tree/main"}, {"post_id": 45429, "ts": "2026-08-11T21:19:13Z", "hours": 4.8044, "text": "Frutiger OS (Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 5 For the past week i have been working on bringing the og windows media player skins into my os. It was quite a hassle, but eventually i managed to get a modular system working where i can add more skins in the future(stay tuned). For those who want to know how i pulled this off: there is a website - https://wmpskinsarchive.neocities.org/ with all the og skins in their original .wmz format. As it turns out the .wmz is basically just renamed .zip containing all the assets, although the assets are a mess - there is like 30+ images in .bmp format, some scripts, and magenta masks so you have to manually assemble it in photoshop remove the masks and get it to look good. Then you have to play for a while with your css file to correctly position and scale all of the buttons n stuff and thats it. I dont recommend anyone trying this shi😭 note: the reason some of the songs sound weird is because i used bitmap version not to mess with copyright scanning bots"}, {"post_id": 42582, "ts": "2026-08-07T12:24:29Z", "hours": 4.4, "text": "Frutiger OS (Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 4 I kinda forgot that im supposted to posts devlogs here, but long story short a lot new things happen since last devlog. I created a new logo, you can actually see it in the background, its a knock off of the old windows logo but HEXAGON, because hexagons are the bestagons. I made(found) a paint app, i actually didnt code the whole thing it uses a cool project called JSPaint, check it out - https://jspaint.app/ Which fits the aesthetic i was going for really well."}, {"post_id": 26894, "ts": "2026-07-11T22:57:53Z", "hours": 3.4314, "text": "Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 3 Today i created a windows 7 inspired working Control Panel app, you can currently -change wallpaper -disable some elements(menubar, taskbar, icons) I really enjoyed tuning some of the CSS components especially buttons and switches(since i implemented the modular system for the main windows in the last devlog) Im stil trying to submit my ship for WebOS 1 but they still wont accept it😭🙏. Appparently it looks like every othe AI slop and has no personality, i really dont understand how could they say something like this, anyway wish me luck."}, {"post_id": 25996, "ts": "2026-07-10T15:28:36Z", "hours": 0.2947, "text": "After first failed ship i realised i completelt forgot about me README.md. Im not too sure why its needed since this project cant be voted yet but its good to start earlt righ? You can check it out here - https://github.com/0ndyy/frutiger-os/blob/main/README.md"}, {"post_id": 24983, "ts": "2026-07-08T21:28:27Z", "hours": 2.0272, "text": "Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 2 My most recent addition was the taskbar, its heavily inspired by windows 7 era and i find it kind of sleek, it was actually way easier to implement than i originally thought. I also created a new settings/control panel app which was pretty quick using the css classes made in last devlog. If you wanna try it out, its avalible at - https://0ndyy.github.io/frutiger-os/"}, {"post_id": 21062, "ts": "2026-07-02T20:50:37Z", "hours": 3.1067, "text": "Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 1 In this devlog i developen my first proper app, its basically a simple notepad, i developed my own system for app creation in css so i can easily add different sizes of windows, sidebars, topbars, buttons exct. and reuse them all. Its still a little rought around the edges and i might need to start handling the performance issue, since the css blur is pretty resource intensive, but we will see what happens."}, {"post_id": 16585, "ts": "2026-06-26T23:36:04Z", "hours": 4.7756, "text": "Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 0 I implemented the basic steps from the tutorial, though since i didnt like some of the solutions i designed a lot of things to be more modular and future proof, let the video speak for itself. Its been quite fun so far, especially playing with the different css elements of the frutiger aesthetic."}]...
|
Title: Frutiger OS by @ondy | Stardance
Devlogs:
Title: Frutiger OS by @ondy | Stardance
Devlogs:
Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 0 I implemented the basic steps from the tutorial, though since i didnt like some of the solutions i designed a lot of things to be more modular and future proof, let the video speak for itself. Its been quite fun so far, especially playing with the different css elements of the frutiger aesthetic.
Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 1 In this devlog i developen my first proper app, its basically a simple notepad, i developed my own system for app creation in css so i can easily add different sizes of windows, sidebars, topbars, buttons exct. and reuse them all. Its still a little rought around the edges and i might need to start handling the performance issue, since the css blur is pretty resource intensive, but we will see what happens.
Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 2 My most recent addition was the taskbar, its heavily inspired by windows 7 era and i find it kind of sleek, it was actually way easier to implement than i originally thought. I also created a new settings/control panel app which was pretty quick using the css classes made in last devlog. If you wanna try it out, its avalible at - https://0ndyy.github.io/frutiger-os/
After first failed ship i realised i completelt forgot about me README.md. Im not too sure why its needed since this project cant be voted yet but its good to start earlt righ? You can check it out here - https://github.com/0ndyy/frutiger-os/blob/main/README.md
Frutiger OS Frutiger Aero/y2k aesthetic inspired OS devlog 3 Today i created a windows 7 inspired working Control Panel app, you can currently -change wallpaper -disable some elements(menubar, taskbar, icons) I really enjoyed tuning some of the CSS components especially buttons and switches(since i implemented the modular system for the main windows in the last devlog) Im stil trying to submit my ship for WebOS 1 but they still wont accept it😭🙏. Appparently it looks like every othe AI slop and has no personality, i really dont understand how could they say something like this, anyway wish me luck.
Frutiger OS (Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 4 I kinda forgot that im supposted to posts devlogs here, but long story short a lot new things happen since last devlog. I created a new logo, you can actually see it in the background, its a knock off of the old windows logo but HEXAGON, because hexagons are the bestagons. I made(found) a paint app, i actually didnt code the whole thing it uses a cool project called JSPaint, check it out - https://jspaint.app/ Which fits the aesthetic i was going for really well.
Frutiger OS (Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 5 For the past week i have been working on bringing the og windows media player skins into my os. It was quite a hassle, but eventually i managed to get a modular system working where i can add more skins in the future(stay tuned). For those who want to know how i pulled this off: there is a website - https://wmpskinsarchive.neocities.org/ with all the og skins in their original .wmz format. As it turns out the .wmz is basically just renamed .zip containing all the assets, although the assets are a mess - there is like 30+ images in .bmp format, some scripts, and magenta masks so you have to manually assemble it in photoshop remove the masks and get it to look good. Then you have to play for a while with your css file to correctly position and scale all of the buttons n stuff and thats it. I dont recommend anyone trying this shi😭 note: the reason some of the songs sound weird is because i used bitmap version not to mess with copyright scanning bots
Frutiger OS (Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 6 For the past couple weeks i havent made much progress since i have been busy with life n stuff, but atleast i managed to make another music player skin. I feel like this one really fits with the whole aquatic/frutiger aero style - what do you think? Some of the time was also spent on making a new games app - stay tuned, hopefully i can finish this in time😭😭 As always, you can try the live demo on the github linked under the project or here - https://github.com/0ndyy/frutiger-os/tree/main
Frutiger OS(Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 7 I finally made the most fun part, games yall. Its basically a parody of xbox, i know some of the games are newer and not from the frutiger era but it still fun to mess around with. The games are saved as .swf files and run through ruffle.
Frutiger OS(Hexagons) Frutiger Aero/y2k aesthetic inspired OS devlog 8(final) This is going to be the final devlog before finally shipping this thing, its been great and i learnt a lot especially how to actually get div where i want it😭 Since ast devlog i added some cool new desktop behaviour, web browser and boot animation, you can check it out all in the final video…
Ships:
Web based OS inspired by the Frutiger Aero aesthetic during 10s. I really enjoyed tweaking the CSS values to get the aesthetic just right, it was really fun and i implemented modular system for easy creation of new apps/elements, so i am planning on expanding this inti WebOS 2. If you want you can try it out here - https://0ndyy.github.io/frutiger-os/
A web-based operating system based on the infamous Frutiger Aero aesthetic of the mid 00s to early 10s. The reason i made this is that im big fan of this era and skeuomorphism, which i feel got killed by minimalism. some of the cool features: -working desktop environment(dragging apps, selection box, time, taskbar, window management…) -nostalgic boot animation and login -old stylized browser with nostalgic websites -og paint and notes programs -the nostalgic frutiger music player skins we all liked(i wasnt alive back then lol) -parody xbox app where you can play some of the popular games from back then I dont know what else to write here if you are interested check out the github readme....
|
1792990450.0550685
|
1793076850.0550685
|
|
18821
|
Timed. by @Mehmet | Stardance
|
Mehmet
|
2
|
25.0
|
58
|
[{"ship_num": 1, "ts": "2026-1 [{"ship_num": 1, "ts": "2026-10-25T10:47:13Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made Timed, a productivity website that you can use to keep timers and get access to the real-life clock. It has a minimalist and satisfying UI that you can keep running in the background for when you need to complete temporal tasks.", "repo": "https://github.com/SameRainbows/Timed.", "demo": "https://timed-focused.vercel.app/"}, {"ship_num": 2, "ts": "2026-07-19T20:15:13Z", "hours": 12.0, "multiplier": 4.88, "payout": 58, "blessing": "neutral", "text": "It started as a basic Python script and has now evolved into a premium, focused, and hyper-minimalist single-page web app. Check out the live clock (with toggleable milliseconds), stopwatch with laps, and countdown timer complete with customized E-flat Major arpeggio bell chimes synthesized on the fly via Web Audio API. Also cleaned up the Python CLI tool to refresh inline and support hardware chimes.", "repo": "https://github.com/SameRainbows/Timed.", "demo": "https://timed-focused.vercel.app/"}]...
|
[{"post_id": 82594, "ts": "202 [{"post_id": 82594, "ts": "2026-10-25T10:45:34Z", "hours": 3.105, "text": "Did some final cleanups on the code."}, {"post_id": 46875, "ts": "2026-08-14T12:43:15Z", "hours": 9.1136, "text": "Updated README and added a few more features ;)"}, {"post_id": 35438, "ts": "2026-07-26T20:55:53Z", "hours": 0.3211, "text": "Cleaned up the repo a"}, {"post_id": 31438, "ts": "2026-07-19T20:12:02Z", "hours": 6.5822, "text": "Hey everyone, I’m back with a massive update for Timed. ! After focusing on other projects for a bit, I decided to return and give this project the thorough cleanup, visual redesign, and feature set it deserves. It has been transformed from an extremely basic prototype into a premium, focused, and hyper-minimalist time hub. Here is what is new in the latest version:### 1. Aesthetic Clean-up & Hyper-Minimalism- Clean Slate Background : Removed the distracting background gradient glow for a clean, uniform deep slate environment.- Logo Refinement : Removed the bullet dot next to the logo for a cleaner top-left header.- Hidden Footer : Removed the copyright text and footer entirely, leaving zero visual clutter.- Tabular Digit Spacing : Styled the clock displays to use tabular monospaced digits, preventing annoying layout shifting when the seconds change. 2. Live Clock & Mode Segregation- ** Hidden Minute Ring on Clock**: The spinning progress ring is now hidden on the Live Clock mode page (to avoid confusion), but it still displays smoothly in Timer and Stopwatch modes.- Interactive Toggles : Tapping the clock display now toggles millisecond view on/off, and there are custom buttons to swap between 12-hour and 24-hour display modes. 3. All-New Stopwatch Mode- Added a full Stopwatch Mode to the web application, featuring millisecond accuracy, controls to pause and resume, and a scrolling lap recording panel. 4. Upgrade Countdown Timer & Presets- Added preset buttons for quick intervals (5m Break, 15m Break, 25m Pomodoro, 50m Focus).- Added an input picker for custom hours, minutes, and seconds. 5. Synthesized Acoustic Bell Chimes- Got rid of the basic, harsh beep sounds.- Coded a custom Web Audio API synthesizer that dynamically triggers a warm, premium E-flat Major arpeggio chime ( Eb4 -> Bb4 -> D5 -> F5 ) using physical acoustic decay curves when the timer completes. 6. Polished Terminal Application ( timerr.py )- Upgraded the CLI python app to refresh in-place ( \\r ) so it doesn’t flood the console output.- Added input validation to prevent user typos from crashing the script.- Built a terminal-based stopwatch with lap tracking.- Upgraded the CLI buzzer to play a beautiful arpeggiated chime using Windows system hardware chimes.### 7. Deployment & GitHub- Deployed the entire static application to Vercel at a clean production URL: timed-focused.vercel.app - Staged, committed, and pushed the updated codebase to the remote GitHub repository at SameRainbows/Timed ."}, {"post_id": 19120, "ts": "2026-06-30T11:11:05Z", "hours": 0.8578, "text": "Some code cleanup. I got little bit of this time internalizing the logic to build on top once the dust settles. Im working on a few other projects rn so cya when I come back."}, {"post_id": 13046, "ts": "2026-06-21T10:25:51Z", "hours": 2.3322, "text": "I finally turned it into a web app. It’s extremely basic, just a live clock and a timer. I honestly didn’t know any JavaScript, so I had some help on that part from Claude. I looked at my old timer.py code, converted it to HTML, and handled the CSS myself for basic styling. It still doesn’t have a live demo yet, but the latest changes are on GitHub."}, {"post_id": 12468, "ts": "2026-06-20T11:12:33Z", "hours": 1.7311, "text": "Welcome to my second log for Timed. Timed is a hub for all your temporal needs. It has the basic features like a clock and timers, and I intend to add all sorts of different things like moon phases, solar events, and way more. Right now, it is a Python file with an audio file so it can run an alert sound, but I intend to make this a Python Flask web app. In this log, I added the following: The code currently uses four libraries: The existing time module inside of Python The datetime library The playsound library msvcrt We have two functions: Timer function: It takes two parameters: the time length in seconds and the direction the timer is going (up or down). Infinite loop function: It checks if any keys are pressed using the msvcrt library. If so, it breaks out of the loop. If not, it uses the datetime library to get the current time, prints it, waits one second, and prints it again. This entire while loop is inside a try-except block. If a KeyboardInterrupt error is seen, it prints “Clock stopped.” We have a variable set to an input to see if the user is going to use the timer or the live clock. If they choose the timer, we ask them for the direction (up or down) and if they will be using minutes. The following code then calls for those parameters."}, {"post_id": 8936, "ts": "2026-06-14T21:06:07Z", "hours": 0.4431, "text": "Making a tool for ALL your time-related needs."}]...
|
Title: Timed. by @Mehmet | Stardance
Devlogs:
Mak Title: Timed. by @Mehmet | Stardance
Devlogs:
Making a tool for ALL your time-related needs.
Welcome to my second log for Timed. Timed is a hub for all your temporal needs. It has the basic features like a clock and timers, and I intend to add all sorts of different things like moon phases, solar events, and way more. Right now, it is a Python file with an audio file so it can run an alert sound, but I intend to make this a Python Flask web app. In this log, I added the following: The code currently uses four libraries: The existing time module inside of Python The datetime library The playsound library msvcrt We have two functions: Timer function: It takes two parameters: the time length in seconds and the direction the timer is going (up or down). Infinite loop function: It checks if any keys are pressed using the msvcrt library. If so, it breaks out of the loop. If not, it uses the datetime library to get the current time, prints it, waits one second, and prints it again. This entire while loop is inside a try-except block. If a KeyboardInterrupt error is seen, it prints “Clock stopped.” We have a variable set to an input to see if the user is going to use the timer or the live clock. If they choose the timer, we ask them for the direction (up or down) and if they will be using minutes. The following code then calls for those parameters.
I finally turned it into a web app. It’s extremely basic, just a live clock and a timer. I honestly didn’t know any JavaScript, so I had some help on that part from Claude. I looked at my old timer.py code, converted it to HTML, and handled the CSS myself for basic styling. It still doesn’t have a live demo yet, but the latest changes are on GitHub.
Some code cleanup. I got little bit of this time internalizing the logic to build on top once the dust settles. Im working on a few other projects rn so cya when I come back.
Hey everyone, I’m back with a massive update for Timed. ! After focusing on other projects for a bit, I decided to return and give this project the thorough cleanup, visual redesign, and feature set it deserves. It has been transformed from an extremely basic prototype into a premium, focused, and hyper-minimalist time hub. Here is what is new in the latest version:### 1. Aesthetic Clean-up & Hyper-Minimalism- Clean Slate Background : Removed the distracting background gradient glow for a clean, uniform deep slate environment.- Logo Refinement : Removed the bullet dot next to the logo for a cleaner top-left header.- Hidden Footer : Removed the copyright text and footer entirely, leaving zero visual clutter.- Tabular Digit Spacing : Styled the clock displays to use tabular monospaced digits, preventing annoying layout shifting when the seconds change. 2. Live Clock & Mode Segregation- ** Hidden Minute Ring on Clock**: The spinning progress ring is now hidden on the Live Clock mode page (to avoid confusion), but it still displays smoothly in Timer and Stopwatch modes.- Interactive Toggles : Tapping the clock display now toggles millisecond view on/off, and there are custom buttons to swap between 12-hour and 24-hour display modes. 3. All-New Stopwatch Mode- Added a full Stopwatch Mode to the web application, featuring millisecond accuracy, controls to pause and resume, and a scrolling lap recording panel. 4. Upgrade Countdown Timer & Presets- Added preset buttons for quick intervals (5m Break, 15m Break, 25m Pomodoro, 50m Focus).- Added an input picker for custom hours, minutes, and seconds. 5. Synthesized Acoustic Bell Chimes- Got rid of the basic, harsh beep sounds.- Coded a custom Web Audio API synthesizer that dynamically triggers a warm, premium E-flat Major arpeggio chime ( Eb4 -> Bb4 -> D5 -> F5 ) using physical acoustic decay curves when the timer completes. 6. Polished Terminal Application ( timerr.py )- Upgraded the CLI python app to refresh in-place ( \r ) so it doesn’t flood the console output.- Added input validation to prevent user typos from crashing the script.- Built a terminal-based stopwatch with lap tracking.- Upgraded the CLI buzzer to play a beautiful arpeggiated chime using Windows system hardware chimes.### 7. Deployment & GitHub- Deployed the entire static application to Vercel at a clean production URL: timed-focused.vercel.app - Staged, committed, and pushed the updated codebase to the remote GitHub repository at SameRainbows/Timed .
Cleaned up the repo a
Updated README and added a few more features ;)
Did some final cleanups on the code.
Ships:
It started as a basic Python script and has now evolved into a premium, focused, and hyper-minimalist single-page web app. Check out the live clock (with toggleable milliseconds), stopwatch with laps, and countdown timer complete with customized E-flat Major arpeggio bell chimes synthesized on the fly via Web Audio API. Also cleaned up the Python CLI tool to refresh inline and support hardware chimes.
I made Timed, a productivity website that you can use to keep timers and get access to the real-life clock. It has a minimalist and satisfying UI that you can keep running in the background for when you need to complete temporal tasks....
|
1792990446.434928
|
1793076846.434928
|
|
18846
|
Spaceflight Simulator by @Astronaut_ag | Stardance
|
Astronaut_ag
|
2
|
6.0
|
33
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-08T21:05:11Z", "hours": 3.0, "multiplier": 5.54, "payout": 14, "blessing": "neutral", "text": "I made Spaceflight Simulator which is a game where people can simulate their own rocket launch! Check out devlogs for specifics :)", "repo": "https://github.com/AstronautAG/spaceflight-simulator", "demo": "https://astronautag.github.io/spaceflight-simulator/"}, {"ship_num": 2, "ts": "2026-06-24T18:17:31Z", "hours": 3.0, "multiplier": 5.75, "payout": 19, "blessing": "neutral", "text": "A website where people can simulate their own launch to the ISS. A challenging part of this project was the risk calculation behind the scenes. I am proud of the great user interface! Also, make sure that you have a fuel input before you click Launch or the launch will be scrubbed. Thanks!", "repo": "https://github.com/AstronautAG/spaceflight-simulator", "demo": "https://astronautag.github.io/spaceflight-simulator/"}]...
|
[{"post_id": 24181, "ts": "202 [{"post_id": 24181, "ts": "2026-07-07T16:10:54Z", "hours": 3.1819, "text": "Devlog #2 Overview: Hi everyone! Thanks for following my project :) This is only Devlog 2 because this was my first project and didn’t know about devlogs before. As you may already know, I shipped my project after Devlog 1. I made some major changes, thanks to everyone who reviewed my project and gave me the valuable feedback! I added instructions at the top, continued telemetry (realistically - doesn’t stop halfway, continues until it is zero), made amount of rocket fuel needed more realistic, and more. Challenges: Sorting out where to put the telemetry communication: I consistently was putting it in the wrong place until I found out that I was changing up the function which was calling it, not what defined it. Also I kept having issues with STATES.IDLE and STATES.SPACE, which I kept messing around with for like half an hour before I decided I needed an if/then statement, not a while loop. Lessons Learned I should keep commenting in my code because I made this a WHILE ago, so I was kinda blanking on parts of my code Keep persevering! I spent about an hour trying to figure out this issue Future I am trying to incorporate a reset button so people don’t have to reload their browser every time to start a new rocket launch! Keep following, stay tuned, and see you in the next devlog! Thanks!"}, {"post_id": 10228, "ts": "2026-06-16T21:11:01Z", "hours": 3.3833, "text": "Devlog #1 I worked on the behind-the-scenes risk calculation for my rocket launch simulator website. This update focuses on displaying the final results and removing bugs. I removed the score system as that was getting messy and ended up being unnecessary, and I upgraded the rocket launch a little bit as well. I added another factor to it, launch failure reason, so that the user would know if their launch failed and why. The problems that I ran into were when I was trying to remove some of the unnecesary variables from before to clean up my code - my rocket launch was not displaying as a success in any situation. I figured out the problem by going into the console of my project on the web. The error showed up that a variable was not defined because I had taken out so much code. To fix this, I removed all of the unnecessary variables entirely and kept a clean flow in my JavaScript. After this, I learned that I should keep my JavaScript clean and remove unnecessary details as those could get in the way and mess up my code. I am getting close to my project submission. By next time, I hope to have a clean, mess-free user interface."}]...
|
Title: Spaceflight Simulator by @Astronaut_ag | St Title: Spaceflight Simulator by @Astronaut_ag | Stardance
Devlogs:
Devlog #1 I worked on the behind-the-scenes risk calculation for my rocket launch simulator website. This update focuses on displaying the final results and removing bugs. I removed the score system as that was getting messy and ended up being unnecessary, and I upgraded the rocket launch a little bit as well. I added another factor to it, launch failure reason, so that the user would know if their launch failed and why. The problems that I ran into were when I was trying to remove some of the unnecesary variables from before to clean up my code - my rocket launch was not displaying as a success in any situation. I figured out the problem by going into the console of my project on the web. The error showed up that a variable was not defined because I had taken out so much code. To fix this, I removed all of the unnecessary variables entirely and kept a clean flow in my JavaScript. After this, I learned that I should keep my JavaScript clean and remove unnecessary details as those could get in the way and mess up my code. I am getting close to my project submission. By next time, I hope to have a clean, mess-free user interface.
Devlog #2 Overview: Hi everyone! Thanks for following my project :) This is only Devlog 2 because this was my first project and didn’t know about devlogs before. As you may already know, I shipped my project after Devlog 1. I made some major changes, thanks to everyone who reviewed my project and gave me the valuable feedback! I added instructions at the top, continued telemetry (realistically - doesn’t stop halfway, continues until it is zero), made amount of rocket fuel needed more realistic, and more. Challenges: Sorting out where to put the telemetry communication: I consistently was putting it in the wrong place until I found out that I was changing up the function which was calling it, not what defined it. Also I kept having issues with STATES.IDLE and STATES.SPACE, which I kept messing around with for like half an hour before I decided I needed an if/then statement, not a while loop. Lessons Learned I should keep commenting in my code because I made this a WHILE ago, so I was kinda blanking on parts of my code Keep persevering! I spent about an hour trying to figure out this issue Future I am trying to incorporate a reset button so people don’t have to reload their browser every time to start a new rocket launch! Keep following, stay tuned, and see you in the next devlog! Thanks!
Ships:
A website where people can simulate their own launch to the ISS. A challenging part of this project was the risk calculation behind the scenes. I am proud of the great user interface! Also, make sure that you have a fuel input before you click Launch or the launch will be scrubbed. Thanks!
I made Spaceflight Simulator which is a game where people can simulate their own rocket launch! Check out devlogs for specifics :)...
|
1793000935.3187149
|
1793087335.3187149
|
|
19050
|
PennyWise by @DinoLife | Stardance
|
DinoLife
|
2
|
34.0
|
466
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-29T02:44:32Z", "hours": 0.0, "multiplier": 14.54, "payout": 7, "blessing": "neutral", "text": "I fixed some more of my screen size bug. Like on mobile the baseboard was kinda weird so I fixed it. I also added a like better thing to the dashboard when there was no budgets.", "repo": "https://github.com/karwals/PennyWise", "demo": "https://penny-wise-pu256a31d-karwals-projects.vercel.app/"}, {"ship_num": 2, "ts": "2026-09-23T09:57:21Z", "hours": 34.0, "multiplier": 13.52, "payout": 459, "blessing": "neutral", "text": "I made a Money Management website. That is targeted at 15-19 year old. I made this to solve the problem of people spending money on things they can’t afford and ending up in debt without realizing. So, I wanted to create a product that helped them view and visualize their money in one place. I would love for you to try out signing up and try to create budget and expenses.", "repo": "https://github.com/karwals/PennyWise", "demo": "https://penny-wise-pu256a31d-karwals-projects.vercel.app/"}]...
|
[{"post_id": 73910, "ts": "202 [{"post_id": 73910, "ts": "2026-09-26T09:40:16Z", "hours": 0.4942, "text": "Fixed some different device size display bugs."}, {"post_id": 72595, "ts": "2026-09-23T09:41:20Z", "hours": 3.6022, "text": "I did some testing to make sure everything was nice and worked well on different screen sizes. I also hosted it on vercel. I also made some over all improvement to the layout of the code. I also made my own logo in illustrator"}, {"post_id": 70414, "ts": "2026-09-19T04:30:28Z", "hours": 1.2528, "text": "I found out that if you changed the number and the end of the link when you were in one of the budget’s expenses tab you can access other peoples’ data and edit it. This is a big privacy breach and makes my website not very secure so I fixed it."}, {"post_id": 70029, "ts": "2026-09-18T10:06:05Z", "hours": 0.8919, "text": "I also came across the bug that if you had no budgets created the skeleton loader would still show. This happen because the code was just checking if there was more then 0 budget or not. I changed it to stop after the website had connected with the data base."}, {"post_id": 70019, "ts": "2026-09-18T09:04:59Z", "hours": 2.8569, "text": "Finished the dashboard page on the website. I decided to make it display the Total Budgets, Total Spent, No. of Budgets, Activity, Budgets, and Expenses. If you have any suggestions I would love to hear them."}, {"post_id": 69029, "ts": "2026-09-16T07:48:28Z", "hours": 4.3497, "text": "Did more of the budget tab and learn more. In the budgets tab I made the animation for the graph and looks of the graph a lot better. I also did some Boundary testing for the graph. I also went through and made sure that everything was smaller screen compatible/ easily usable. Love to hear your thoughts."}, {"post_id": 67073, "ts": "2026-09-13T03:47:50Z", "hours": 1.9522, "text": "I started to do the learn more section. and make some improvements to the landing page and other part of the website."}, {"post_id": 64647, "ts": "2026-09-09T06:42:35Z", "hours": 2.2644, "text": "Bid some testing. Started to make the dashboard page."}, {"post_id": 64072, "ts": "2026-09-08T06:56:52Z", "hours": 3.2106, "text": "I added edit and delete buttons to delete or edit budgets. I also made it so you can press enter in the input sections to make it so that if every thing is right it will add the budget or expense. I also make it so that you can only add numbers and not letter and the number has to be above 0."}, {"post_id": 61416, "ts": "2026-09-04T09:57:26Z", "hours": 5.6731, "text": "Testing and improvement. I did some test on the budget and expense creation and found out that I had not really made it that full from like you were able to enter negative number and stuff. I also did some testing on how i was going host the website."}, {"post_id": 21364, "ts": "2026-07-03T08:07:00Z", "hours": 0.3925, "text": "Made the logo"}, {"post_id": 14961, "ts": "2026-06-24T09:21:58Z", "hours": 3.0328, "text": "I made the create expense thing work. I also made them diplay in a table at the bottom. I found that after creating an expense, the text remained in the input boxes. To fix this, I cleared the input field state values after the expense was successfully added to the database. By add setName(“”); setAmount(“”); when with the toast. The date part is nto working right now but that is want i am going to do next."}, {"post_id": 12800, "ts": "2026-06-20T22:40:19Z", "hours": 1.4611, "text": "Started to make the create expenses thing does not work right now. making it work is the next step."}, {"post_id": 11177, "ts": "2026-06-18T08:45:46Z", "hours": 1.4839, "text": "Started on the expenses tab. Made it so that when you click on one of the budgets you get set to the expenses tab for that budget."}, {"post_id": 9821, "ts": "2026-06-16T08:33:43Z", "hours": 1.0094, "text": "I made the text in the background liek more to my liking and i would love to have soem feedback on what you guys think about it. The images also have my current budgets tab and the create budgets popup. I also made it so that when the budgets are still loading there is like a loading animation the gray boxes also like pulse."}, {"post_id": 9566, "ts": "2026-06-15T22:50:55Z", "hours": 0.5014, "text": "Making the login look better."}]...
|
Title: PennyWise by @DinoLife | Stardance
Devlogs Title: PennyWise by @DinoLife | Stardance
Devlogs:
Making the login look better.
I made the text in the background liek more to my liking and i would love to have soem feedback on what you guys think about it. The images also have my current budgets tab and the create budgets popup. I also made it so that when the budgets are still loading there is like a loading animation the gray boxes also like pulse.
Started on the expenses tab. Made it so that when you click on one of the budgets you get set to the expenses tab for that budget.
Started to make the create expenses thing does not work right now. making it work is the next step.
I made the create expense thing work. I also made them diplay in a table at the bottom. I found that after creating an expense, the text remained in the input boxes. To fix this, I cleared the input field state values after the expense was successfully added to the database. By add setName(“”); setAmount(“”); when with the toast. The date part is nto working right now but that is want i am going to do next.
Made the logo
Testing and improvement. I did some test on the budget and expense creation and found out that I had not really made it that full from like you were able to enter negative number and stuff. I also did some testing on how i was going host the website.
I added edit and delete buttons to delete or edit budgets. I also made it so you can press enter in the input sections to make it so that if every thing is right it will add the budget or expense. I also make it so that you can only add numbers and not letter and the number has to be above 0.
Bid some testing. Started to make the dashboard page.
I started to do the learn more section. and make some improvements to the landing page and other part of the website.
Did more of the budget tab and learn more. In the budgets tab I made the animation for the graph and looks of the graph a lot better. I also did some Boundary testing for the graph. I also went through and made sure that everything was smaller screen compatible/ easily usable. Love to hear your thoughts.
Finished the dashboard page on the website. I decided to make it display the Total Budgets, Total Spent, No. of Budgets, Activity, Budgets, and Expenses. If you have any suggestions I would love to hear them.
I also came across the bug that if you had no budgets created the skeleton loader would still show. This happen because the code was just checking if there was more then 0 budget or not. I changed it to stop after the website had connected with the data base.
I found out that if you changed the number and the end of the link when you were in one of the budget’s expenses tab you can access other peoples’ data and edit it. This is a big privacy breach and makes my website not very secure so I fixed it.
I did some testing to make sure everything was nice and worked well on different screen sizes. I also hosted it on vercel. I also made some over all improvement to the layout of the code. I also made my own logo in illustrator
Fixed some different device size display bugs.
Ships:
I made a Money Management website. That is targeted at 15-19 year old. I made this to solve the problem of people spending money on things they can’t afford and ending up in debt without realizing. So, I wanted to create a product that helped them view and visualize their money in one place. I would love for you to try out signing up and try to create budget and expenses.
I fixed some more of my screen size bug. Like on mobile the baseboard was kinda weird so I fixed it. I also added a like better thing to the dashboard when there was no budgets....
|
1793004807.3862
|
1793091207.3862
|
|
19055
|
My first slack bot! by @DinoLife | Stardance
|
DinoLife
|
2
|
2.0
|
2
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T22:44:08Z", "hours": 1.0, "multiplier": 1.16, "payout": 1, "blessing": "neutral", "text": "i made a bot for slack.Tip sometimes the commands don’t work so just give it a sec and the try again.", "repo": "https://github.com/karwals/StarDance", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?_gl=1*1uealel*_gcl_au*MTgxMjk2MzIwMC4xNzgxNTExMzc0"}, {"ship_num": 2, "ts": "2026-06-17T08:05:05Z", "hours": 1.0, "multiplier": 1.49, "payout": 1, "blessing": "neutral", "text": "I made my first Slack bot using Node.js. It has commands like ping, cat fact, joke, coin flip, dice roll, quote, and help. The hardest part was setting it up on Nest so it can run 24/7. I am proud that the bot works in Slack and replies to my commands. I am also happ that i learn how to make commands like work: /really-cool-bot-ping /really-cool-bot-catfact /really-cool-bot-joke /coinflip /DiceRole /really-cool-bot-quote", "repo": "https://github.com/karwals/StarDance", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?_gl=1*1uealel*_gcl_au*MTgxMjk2MzIwMC4xNzgxNTExMzc0"}]...
|
[{"post_id": 27532, "ts": "202 [{"post_id": 27532, "ts": "2026-07-13T05:20:48Z", "hours": 0.2631, "text": "Forgot to add the commands in the Slack API Slash Commands list did that now it should be working now."}, {"post_id": 21352, "ts": "2026-07-03T07:40:19Z", "hours": 0.2636, "text": "Made some improvements. like adding some new commands and fixxing some spelling mistakes."}, {"post_id": 10502, "ts": "2026-06-17T07:52:43Z", "hours": 0.3203, "text": "Added new comands. I woulld love to get some ideas on more commands i could add."}, {"post_id": 10488, "ts": "2026-06-17T07:22:17Z", "hours": 0.2833, "text": "I have made the basic slack bot. and now going to start making it better by adding more comands. Would love to have some idean about what else i could add."}]...
|
Title: My first slack bot! by @DinoLife | Stardanc Title: My first slack bot! by @DinoLife | Stardance
Devlogs:
I have made the basic slack bot. and now going to start making it better by adding more comands. Would love to have some idean about what else i could add.
Added new comands. I woulld love to get some ideas on more commands i could add.
Made some improvements. like adding some new commands and fixxing some spelling mistakes.
Forgot to add the commands in the Slack API Slash Commands list did that now it should be working now.
Ships:
I made my first Slack bot using Node.js. It has commands like ping, cat fact, joke, coin flip, dice roll, quote, and help. The hardest part was setting it up on Nest so it can run 24/7. I am proud that the bot works in Slack and replies to my commands. I am also happ that i learn how to make commands like work: /really-cool-bot-ping /really-cool-bot-catfact /really-cool-bot-joke /coinflip /DiceRole /really-cool-bot-quote
i made a bot for slack.Tip sometimes the commands don’t work so just give it a sec and the try again....
|
1793098407.6648223
|
1793184807.6648223
|
|
19107
|
Navegation system by @otzpt | Stardance
|
otzpt
|
2
|
17.0
|
147
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-28T15:27:19Z", "hours": 8.0, "multiplier": 11.28, "payout": 86, "blessing": "neutral", "text": "What is it? Navegation System is an automatic robot navigation program in C. Given a maze, it uses BFS pathfinding to find the shortest route from the start to the destination, then animates the robot moving through it step by step. Challenges: The biggest challenge in this update was moving from a fixed 10×10 maze to a fully dynamic one, chosen and typed in by the user at runtime. That meant switching every data structure (map, visited, parent, queue) from fixed-size arrays to dynamically allocated memory with malloc, and handling edge cases like blocked start/destination points and mazes with no valid path. I also fixed a cross-platform bug where the program failed on Windows due to Unix-only functions (clear, usleep). What am I proud of: Getting the malloc-based 2D map working correctly, especially the parent matrix, which needed three levels of pointers to trace back the path. Also proud of adding proper validation instead of assuming the user always types a perfect map. How to test: Run the program, enter the number of rows and columns, then type the maze row by row using . for open paths and # for obstacles. The start is always the top-left corner and the destination is the bottom-right corner. Watch the robot find and animate its way through.", "repo": "https://github.com/otzpt/Navigation-system", "demo": "https://github.com/otzpt/Navigation-system/releases/tag/v3.0.1"}, {"ship_num": 2, "ts": "2026-06-24T20:37:48Z", "hours": 9.0, "multiplier": 6.43, "payout": 61, "blessing": "neutral", "text": "I built a C program that simulates a robot automatically finding its path through a 10x10 maze using BFS (Breadth-First Search), with a step-by-step terminal animation. The hardest part was learning BFS from scratch — I had never implemented a graph traversal algorithm before. The path reconstruction was also tricky since BFS gives you the path backwards, so I had to reverse it before animating. Download the binary for your OS from the Releases page and run it in your terminal! (Notice: Might have problems clearing the screen on windows)", "repo": "https://github.com/otzpt/Navigation-system", "demo": "https://github.com/otzpt/Navigation-system/releases/tag/v3.0.1"}]...
|
[{"post_id": 36425, "ts": "202 [{"post_id": 36425, "ts": "2026-07-28T15:24:50Z", "hours": 0.7711, "text": "C Navigation System — Devlog #4: Dynamic Map The feedback from the certification reviewer included a clear suggestion for the next step: make the map dynamic, and possibly allow variable dimensions instead of keeping it fixed at 10×10. That’s what I focused on in this stage. The first challenge was realizing that a normal C array, such as char lab[10][10] , isn’t suitable for this. The size of a regular array has to be known at compile time, but in this case the dimensions are only known after the user enters them at runtime. The solution was to use dynamic memory allocation with malloc . For a dynamic 2D map, this is done in two steps: first, allocate an array of pointers (one for each row), then allocate each row individually. char ** lab = malloc ( rows * sizeof ( char * )); for ( int i = 0 ; i < rows ; i ++ ) { lab [ i ] = malloc ( columns * sizeof ( char )); } The eh_obstaculo function, which previously had the entire maze hardcoded inside it, became much simpler. It now just receives the map as a parameter ( char **lab ) and checks the requested position. int eh_obstaculo ( int x , int y , char ** lab ) { return lab [ x ][ y ] == '#' ; } To populate the map, I use fgets to read each row entered by the user, rather than asking for one position at a time, which would have been much more tedious to use. The part that took the most work wasn’t the map itself, but realizing that every other data structure used by the BFS ( visited , parent , and queue ) also depended on the old fixed TAM value. They all had to be converted to dynamically allocated structures based on the number of rows and columns. The parent array, for example, became an int *** because each cell stores a pair of coordinates (x, y) representing its parent, which adds another level of indirection. In the end, the program asks the user for the number of rows and columns, reads the map line by line, runs the BFS using these dynamic structures, and finally frees all allocated memory with free , including the parent array, which has to be released from the innermost allocations outward because of its three levels of allocation. The biggest lesson from this stage was realizing that making the map “dynamic” isn’t just about changing one variable. It means redesigning the entire chain of data structures that depended on the original fixed-size implementation."}, {"post_id": 22369, "ts": "2026-07-04T20:11:27Z", "hours": 6.8119, "text": "C Navigation System — Devlog #3: Windows Compatibility After submitting the project for certification I ran into a problem that hadn’t even crossed my mind: the program simply didn’t run on Windows. I got feedback from a reviewer with a video of the error, and the message was clear, “clear is not recognized as an internal or external command.” The explanation is simple once you get it. I had written and tested the code only on my Linux environment, and used system(\"clear\") to clear the screen between each frame of the animation. Turns out clear is a command that exists on Linux and Mac, but on Windows the console uses cls . I’d never thought about this because I’d never tested outside my own system. The fix was to use a preprocessor directive, #ifdef _WIN32 , which lets the compiler choose which code to include depending on the operating system the program is being compiled on. This way the clear() function decides on its own whether to call system(\"cls\") or system(\"clear\") , without me having to maintain two separate versions of the file. void clear () { #ifdef _WIN32 system ( \"cls\" ); #else system ( \"clear\" ); #endif } While reviewing the code I realized there was a second problem waiting to happen. I was using usleep() to control the timing between animation frames, and that function is also exclusive to Unix-like systems, it doesn’t exist on Windows. It probably wouldn’t have thrown an error right there in the video, but it would have further down the line as soon as the robot started moving. I solved it the same way, creating my own esperar_ms() function that uses Sleep() on Windows (which works in milliseconds) and usleep() on Linux (which works in microseconds), and swapped out all the old calls for this new function. void esperar_ms ( int ms ) { #ifdef _WIN32 Sleep ( ms ); #else usleep ( ms * 1000 ); #endif } The annoying part wasn’t so much writing the fix, it was realizing I had to test both versions before requesting re-certification again. I compiled it again on Linux to make sure I hadn’t broken anything, and the program still worked fine, I just got some unused variable warnings that were already there before and have no impact on execution. The lesson I’m taking from this is that testing only on your own operating system gives a false sense that the program “is ready.” Only an external test or review catches these things, because in my own environment I would never have seen this error myself."}, {"post_id": 14250, "ts": "2026-06-23T08:32:29Z", "hours": 6.8072, "text": "C Navigation System — Devlog #2 BFS Pathfinding & Automatic Navigation So after the first version I wasn’t really satisfied. The robot moving manually was cool to build but it felt incomplete — a robot that needs a human to tell it where to go isn’t really a robot. I wanted it to find the path on its own. The problem was I had no idea how BFS worked. I spent a good chunk of the 7 hours on this just trying to understand the algorithm before touching any code. Watched some explanations, drew it out on paper, tried to wrap my head around queues and how you actually backtrack to reconstruct a path. It took a while. The moment it clicked was when I stopped thinking about it as “visiting nodes” and started thinking about it as water spreading through a maze — it fills every reachable cell layer by layer until it hits the destination. Once that made sense, I rebuilt the project. The grid went from 5x5 to 10x10 with a more complex obstacle layout. I separated the map logic into its own function (eh_obstaculo) so the maze can be edited without touching anything else. The BFS itself uses a queue array, a visited matrix, and a parent matrix — the parent matrix is what lets you trace back the full path once you reach (9,9). The animation was actually the fun part. After the path is reconstructed, the board redraws at each step with clear() and usleep(), showing the robot moving tile by tile. It even replays at the end at a faster speed. Seeing it run for the first time was genuinely satisfying. The hardest part was getting the path reconstruction right — BFS gives you the path backwards, so you have to reverse it before animating. Took me a few tries to get that sorted."}, {"post_id": 9158, "ts": "2026-06-15T10:39:32Z", "hours": 2.615, "text": "C navigation system, a robot in a 5x5 maze Built a C program that simulates a robot navigating a 5x5 grid with obstacles. What’s done so far: A dynamically drawn 5x5 board, with . (free path), # (obstacles), D (destination), and X (robot) Obstacle layout stored in a separate map (lab, using l=free and p=wall), so the map can be edited easily without touching the rest of the logic Movement controlled by directions (North/South/East/West), one tile at a time Bounds checking (can’t leave the grid) and collision checking (can’t move through obstacles) Board redraws after every move Win message when reaching the destination at (4,4)"}]...
|
Title: Navegation system by @otzpt | Stardance
De Title: Navegation system by @otzpt | Stardance
Devlogs:
C navigation system, a robot in a 5x5 maze Built a C program that simulates a robot navigating a 5x5 grid with obstacles. What’s done so far: A dynamically drawn 5x5 board, with . (free path), # (obstacles), D (destination), and X (robot) Obstacle layout stored in a separate map (lab, using l=free and p=wall), so the map can be edited easily without touching the rest of the logic Movement controlled by directions (North/South/East/West), one tile at a time Bounds checking (can’t leave the grid) and collision checking (can’t move through obstacles) Board redraws after every move Win message when reaching the destination at (4,4)
C Navigation System — Devlog #2 BFS Pathfinding & Automatic Navigation So after the first version I wasn’t really satisfied. The robot moving manually was cool to build but it felt incomplete — a robot that needs a human to tell it where to go isn’t really a robot. I wanted it to find the path on its own. The problem was I had no idea how BFS worked. I spent a good chunk of the 7 hours on this just trying to understand the algorithm before touching any code. Watched some explanations, drew it out on paper, tried to wrap my head around queues and how you actually backtrack to reconstruct a path. It took a while. The moment it clicked was when I stopped thinking about it as “visiting nodes” and started thinking about it as water spreading through a maze — it fills every reachable cell layer by layer until it hits the destination. Once that made sense, I rebuilt the project. The grid went from 5x5 to 10x10 with a more complex obstacle layout. I separated the map logic into its own function (eh_obstaculo) so the maze can be edited without touching anything else. The BFS itself uses a queue array, a visited matrix, and a parent matrix — the parent matrix is what lets you trace back the full path once you reach (9,9). The animation was actually the fun part. After the path is reconstructed, the board redraws at each step with clear() and usleep(), showing the robot moving tile by tile. It even replays at the end at a faster speed. Seeing it run for the first time was genuinely satisfying. The hardest part was getting the path reconstruction right — BFS gives you the path backwards, so you have to reverse it before animating. Took me a few tries to get that sorted.
C Navigation System — Devlog #3: Windows Compatibility After submitting the project for certification I ran into a problem that hadn’t even crossed my mind: the program simply didn’t run on Windows. I got feedback from a reviewer with a video of the error, and the message was clear, “clear is not recognized as an internal or external command.” The explanation is simple once you get it. I had written and tested the code only on my Linux environment, and used system("clear") to clear the screen between each frame of the animation. Turns out clear is a command that exists on Linux and Mac, but on Windows the console uses cls . I’d never thought about this because I’d never tested outside my own system. The fix was to use a preprocessor directive, #ifdef _WIN32 , which lets the compiler choose which code to include depending on the operating system the program is being compiled on. This way the clear() function decides on its own whether to call system("cls") or system("clear") , without me having to maintain two separate versions of the file. void clear () { #ifdef _WIN32 system ( "cls" ); #else system ( "clear" ); #endif } While reviewing the code I realized there was a second problem waiting to happen. I was using usleep() to control the timing between animation frames, and that function is also exclusive to Unix-like systems, it doesn’t exist on Windows. It probably wouldn’t have thrown an error right there in the video, but it would have further down the line as soon as the robot started moving. I solved it the same way, creating my own esperar_ms() function that uses Sleep() on Windows (which works in milliseconds) and usleep() on Linux (which works in microseconds), and swapped out all the old calls for this new function. void esperar_ms ( int ms ) { #ifdef _WIN32 Sleep ( ms ); #else usleep ( ms * 1000 ); #endif } The annoying part wasn’t so much writing the fix, it was realizing I had to test both versions before requesting re-certification again. I compiled it again on Linux to make sure I hadn’t broken anything, and the program still worked fine, I just got some unused variable warnings that were already there before and have no impact on execution. The lesson I’m taking from this is that testing only on your own operating system gives a false sense that the program “is ready.” Only an external test or review catches these things, because in my own environment I would never have seen this error myself.
C Navigation System — Devlog #4: Dynamic Map The feedback from the certification reviewer included a clear suggestion for the next step: make the map dynamic, and possibly allow variable dimensions instead of keeping it fixed at 10×10. That’s what I focused on in this stage. The first challenge was realizing that a normal C array, such as char lab[10][10] , isn’t suitable for this. The size of a regular array has to be known at compile time, but in this case the dimensions are only known after the user enters them at runtime. The solution was to use dynamic memory allocation with malloc . For a dynamic 2D map, this is done in two steps: first, allocate an array of pointers (one for each row), then allocate each row individually. char ** lab = malloc ( rows * sizeof ( char * )); for ( int i = 0 ; i < rows ; i ++ ) { lab [ i ] = malloc ( columns * sizeof ( char )); } The eh_obstaculo function, which previously had the entire maze hardcoded inside it, became much simpler. It now just receives the map as a parameter ( char **lab ) and checks the requested position. int eh_obstaculo ( int x , int y , char ** lab ) { return lab [ x ][ y ] == '#' ; } To populate the map, I use fgets to read each row entered by the user, rather than asking for one position at a time, which would have been much more tedious to use. The part that took the most work wasn’t the map itself, but realizing that every other data structure used by the BFS ( visited , parent , and queue ) also depended on the old fixed TAM value. They all had to be converted to dynamically allocated structures based on the number of rows and columns. The parent array, for example, became an int *** because each cell stores a pair of coordinates (x, y) representing its parent, which adds another level of indirection. In the end, the program asks the user for the number of rows and columns, reads the map line by line, runs the BFS using these dynamic structures, and finally frees all allocated memory with free , including the parent array, which has to be released from the innermost allocations outward because of its three levels of allocation. The biggest lesson from this stage was realizing that making the map “dynamic” isn’t just about changing one variable. It means redesigning the entire chain of data structures that depended on the original fixed-size implementation.
Ships:
I built a C program that simulates a robot automatically finding its path through a 10x10 maze using BFS (Breadth-First Search), with a step-by-step terminal animation. The hardest part was learning BFS from scratch — I had never implemented a graph traversal algorithm before. The path reconstruction was also tricky since BFS gives you the path backwards, so I had to reverse it before animating. Download the binary for your OS from the Releases page and run it in your terminal! (Notice: Might have problems clearing the screen on windows)
What is it? Navegation System is an automatic robot navigation program in C. Given a maze, it uses BFS pathfinding to find the shortest route from the start to the destination, then animates the robot moving through it step by step. Challenges: The biggest challenge in this update was moving from a fixed 10×10 maze to a fully dynamic one, chosen and typed in by the user at runtime. That meant switching every data structure (map, visited, parent, queue) from fixed-size arrays to dynamically allocated memory with malloc, and handling edge cases like blocked start/destination points and mazes with no valid path. I also fixed a cross-platform bug where the program failed on Windows due to Unix-only functions (clear, usleep). What am I proud of: Getting the malloc-based 2D map working correctly, especially the parent matrix, which needed three levels of pointers to trace back the path. Also proud of adding proper validation instead of assuming the user always types a perfect map. How to test: Run the program, enter the number of rows and columns, then type the maze row by row using . for open paths and # for obstacles. The start is always the top-left corner and the destination is the bottom-right corner. Watch the robot find and animate its way through....
|
1793112558.019902
|
1793198958.019902
|