|
186
|
zach latta latte cafe by @h | Stardance
|
h
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: zach latta latte cafe by @h | Stardance
|
1792900341.6673632
|
1793764341.6673632
|
|
185
|
Tormentown by @Slugarius | Stardance
|
Slugarius
|
0
|
92.11
|
0
|
[]
|
[{"post_id": 26019, "ts": "202 [{"post_id": 26019, "ts": "2026-07-10T16:24:06Z", "hours": 9.5511, "text": "I modeled a building in Blender using the buildify addon. I also worked on the fracturing more and made every mesh in a model its own static mesh and the fracture now makes a sphere cast and targets every mesh found in a certain radius."}, {"post_id": 21417, "ts": "2026-07-03T10:58:11Z", "hours": 10.1756, "text": "I mostly made editor improvements and modeling roads and buildings."}, {"post_id": 13064, "ts": "2026-06-21T11:26:04Z", "hours": 8.5297, "text": "I added voronoi fracturing to the game. I added CGAL and boost to the dependencies to help with the math. Shooting the gun will shoot a ray cast in front of the camera and whatever object is hit is dismantled (fractured)."}, {"post_id": 9468, "ts": "2026-06-15T20:29:23Z", "hours": 2.5758, "text": "Grass culling! All grass objects are now divided into chunks and sub chunks and sub chunks of those sub chunks. If a chunk is not in the view frustum, then it is culled. This greatly saves on performance. The grass is also a different color now. So is the ground."}, {"post_id": 9147, "ts": "2026-06-15T09:58:19Z", "hours": 3.0117, "text": "Grass! I added a grass renderer component, and every entity with it is looped and their transform is added to a vector of grass matrices which are fed to the grass shader and drawn using instancing. You can also add grass through the map editor which is pretty cool. The grass vertex shader generates a random vector using simplex noise and uses that as the sway direction for the blade of grass. The grass fragment shader uses a gradient with three colors applied from bottom to top."}, {"post_id": 8713, "ts": "2026-06-14T14:01:11Z", "hours": 10.2147, "text": "Map editor! I added an editor bool to the global engine state and that controls whether the editor GUI is drawn and whether the player system runs or not. I also added some stuff like moving objects by clicking on them and adding stuff to the scene like grass blades. The way that the mouse to world space conversion works is that the cursor position is multiplied with the inverse of the projection matrix and this gives a direction in world space which is used as a raycast and if it hits anything, the object will be spawned at the hit position."}, {"post_id": 5925, "ts": "2026-06-09T22:03:49Z", "hours": 3.085, "text": "I added fog and a sky texture. Most of the time in this devlog was spent on modelling an enemy but I felt like it wasn’t inspired enough and was too generic so I’ll come up with a better design tomorrow."}, {"post_id": 5206, "ts": "2026-06-08T22:09:13Z", "hours": 3.8958, "text": "Inventory! The inventory system procedurally generates item slots and checks if the slots are hovered and if they are and there’s an item inside them, then clicking them will make the item follow the cursor and on release, they will check if the hovered slot can fit the item and adds it to that slot."}, {"post_id": 4495, "ts": "2026-06-07T20:32:25Z", "hours": 1.6181, "text": "I fixed the texture importing from the FBX file. I was using a custom shader in blender for the skin and it wasn’t exporting the texture because of that. I also needed to adjust the export settings and changed the gamma settings on the texture importer."}, {"post_id": 4291, "ts": "2026-06-07T15:29:34Z", "hours": 3.5358, "text": "I added a gun to the game! It uses the same inverse kinematics structure for the right hand as before but also supplies an aim direction to ApplyArmIK which controls where the hands will point to. The gun transform is directly controlled by the hand and points in the direction of the palm to the tip of the fingers. I also copied my OpenAL implementation from my previous engine and added a shooting sound whenever you shoot the gun."}, {"post_id": 3841, "ts": "2026-06-06T22:03:31Z", "hours": 7.5292, "text": "I added inverse kinematics to the hands! This was pretty difficult to set up as I don’t have a visual viewport to see the bones of my rig in so I had to go in Blender and see all the names of the arm bones and propogate the IK solver points across all of them. There’s also an IK solver class now which takes a base and a target. I also added slerping to the hand target to make it blend smoothly. There are two variables, leftGuard and rightGuard which control whether a hand is affected by IK or not. And there’s also an IK weight factor which controls the transition between animation and IK to make it go between the two smoothly. The left or right guard are disabled whenever you punch to make the arm actually go forward and use the regular animation. I also added a stamina and health bar. They use a shader which fills up the texture with a color based on a number which is the health or stamina. The health does nothing right now but stamina is drained by punching and regenerates on a rate that depends on what state you are in."}, {"post_id": 2785, "ts": "2026-06-05T16:24:27Z", "hours": 2.1981, "text": "I added attacks to the game! You can now raise your guard by pressing G and jab on either side by pressing left or right click. There was a big issue with the animations before in that if you played an animation while an animation was already mid blend, the model would suddenly jerk to the new frame because the lerped position of the bones became different between the two animations. To fix this, I updated it so whenever you play an animation, the current bone matrices are stored in a vector and are used as the starting position of the blend to the new animation."}, {"post_id": 2291, "ts": "2026-06-04T18:12:01Z", "hours": 5.6408, "text": "I added skeletal animation blending! This wasn’t needed before as there was only one animation (running) but I have added an idle and a flying animation. There’s a state machine for the animations that calls PlayBlend on the first frame of the state change. The way the blending works is that there’s a blend factor which goes from 0 to 1. It lerps from 0 to 1 on a set duration which you can specify for how fast or slow you want the animation to blend. It then lerps from all the positions, rotations and scales of the different bones of the two animations according to the blend factor. By the way, the flying animation is one frame pretty much so the blending is doing all the work in transitioning from and to it. The player also smoothly slerps to the direction you’re moving in, except if you’re moving backwards because that looks weird."}, {"post_id": 1552, "ts": "2026-06-03T17:20:20Z", "hours": 7.6022, "text": "There were lots of issues with the model loading before and I managed to import an FBX file that I exported from a blender project and got it animating in the engine. But besides that I made a character controller, there’s a capsule rigidbody attached to the player and two components, a movement component and a camera controller component. The camera controller sets the camera on the player’s head and also a little bit in front of it so you don’t clip in the player’s head and the movement component allows you to move with WASD. The movement is utter garbage however as I only made it with forces, I will improve it and add drag later. Also the thought behind the player being visible is: 1. Because of immersion and 2. I want the game to be multiplayer and adding player models beforehand will be very useful."}, {"post_id": 425, "ts": "2026-06-01T20:33:46Z", "hours": 3.0278, "text": "Physics! I integrated the Jolt physics engine into the project. I’ve used Jolt for my other projects so it was pretty quick to get up and running. I made a debug renderer system which makes and draws a wireframe depending on the collider type. There are four types of colliders currently, box, capsule, sphere and mesh. The mesh collider is unfinished, I will implement that when I actually need to implement terrain meshes and colliders."}, {"post_id": 256, "ts": "2026-06-01T13:15:52Z", "hours": 2.6044, "text": "Skeletal animations! I reused an implementation of skeletal animations from one of my old projects. In the shadow mapping vertex shader, I have also added the transformation of vertices by bone matrices to capture the shadow of animated objects."}, {"post_id": 216, "ts": "2026-06-01T09:34:47Z", "hours": 0.9539, "text": "I’ve finished implementing PBR rendering with the Cook-Torrance BRDF. I’ve also added normal and roughness map support. Other maps are unnecessary for the renderer."}, {"post_id": 134, "ts": "2026-05-31T22:08:03Z", "hours": 6.3622, "text": "I’ve started work on the 3d engine for the game I’ll be making. For the first day, I’ve implemented cascaded shadow maps where there are multiple shadow maps taken at different distances to create a hierarchy of resolution. And I’ve also implemented blinn phong shading. I plan to change this to a PBR pipeline later down the road."}]...
|
Title: Tormentown by @Slugarius | Stardance
Devlo Title: Tormentown by @Slugarius | Stardance
Devlogs:
I’ve started work on the 3d engine for the game I’ll be making. For the first day, I’ve implemented cascaded shadow maps where there are multiple shadow maps taken at different distances to create a hierarchy of resolution. And I’ve also implemented blinn phong shading. I plan to change this to a PBR pipeline later down the road.
I’ve finished implementing PBR rendering with the Cook-Torrance BRDF. I’ve also added normal and roughness map support. Other maps are unnecessary for the renderer.
Skeletal animations! I reused an implementation of skeletal animations from one of my old projects. In the shadow mapping vertex shader, I have also added the transformation of vertices by bone matrices to capture the shadow of animated objects.
Physics! I integrated the Jolt physics engine into the project. I’ve used Jolt for my other projects so it was pretty quick to get up and running. I made a debug renderer system which makes and draws a wireframe depending on the collider type. There are four types of colliders currently, box, capsule, sphere and mesh. The mesh collider is unfinished, I will implement that when I actually need to implement terrain meshes and colliders.
There were lots of issues with the model loading before and I managed to import an FBX file that I exported from a blender project and got it animating in the engine. But besides that I made a character controller, there’s a capsule rigidbody attached to the player and two components, a movement component and a camera controller component. The camera controller sets the camera on the player’s head and also a little bit in front of it so you don’t clip in the player’s head and the movement component allows you to move with WASD. The movement is utter garbage however as I only made it with forces, I will improve it and add drag later. Also the thought behind the player being visible is: 1. Because of immersion and 2. I want the game to be multiplayer and adding player models beforehand will be very useful.
I added skeletal animation blending! This wasn’t needed before as there was only one animation (running) but I have added an idle and a flying animation. There’s a state machine for the animations that calls PlayBlend on the first frame of the state change. The way the blending works is that there’s a blend factor which goes from 0 to 1. It lerps from 0 to 1 on a set duration which you can specify for how fast or slow you want the animation to blend. It then lerps from all the positions, rotations and scales of the different bones of the two animations according to the blend factor. By the way, the flying animation is one frame pretty much so the blending is doing all the work in transitioning from and to it. The player also smoothly slerps to the direction you’re moving in, except if you’re moving backwards because that looks weird.
I added attacks to the game! You can now raise your guard by pressing G and jab on either side by pressing left or right click. There was a big issue with the animations before in that if you played an animation while an animation was already mid blend, the model would suddenly jerk to the new frame because the lerped position of the bones became different between the two animations. To fix this, I updated it so whenever you play an animation, the current bone matrices are stored in a vector and are used as the starting position of the blend to the new animation.
I added inverse kinematics to the hands! This was pretty difficult to set up as I don’t have a visual viewport to see the bones of my rig in so I had to go in Blender and see all the names of the arm bones and propogate the IK solver points across all of them. There’s also an IK solver class now which takes a base and a target. I also added slerping to the hand target to make it blend smoothly. There are two variables, leftGuard and rightGuard which control whether a hand is affected by IK or not. And there’s also an IK weight factor which controls the transition between animation and IK to make it go between the two smoothly. The left or right guard are disabled whenever you punch to make the arm actually go forward and use the regular animation. I also added a stamina and health bar. They use a shader which fills up the texture with a color based on a number which is the health or stamina. The health does nothing right now but stamina is drained by punching and regenerates on a rate that depends on what state you are in.
I added a gun to the game! It uses the same inverse kinematics structure for the right hand as before but also supplies an aim direction to ApplyArmIK which controls where the hands will point to. The gun transform is directly controlled by the hand and points in the direction of the palm to the tip of the fingers. I also copied my OpenAL implementation from my previous engine and added a shooting sound whenever you shoot the gun.
I fixed the texture importing from the FBX file. I was using a custom shader in blender for the skin and it wasn’t exporting the texture because of that. I also needed to adjust the export settings and changed the gamma settings on the texture importer.
Inventory! The inventory system procedurally generates item slots and checks if the slots are hovered and if they are and there’s an item inside them, then clicking them will make the item follow the cursor and on release, they will check if the hovered slot can fit the item and adds it to that slot.
I added fog and a sky texture. Most of the time in this devlog was spent on modelling an enemy but I felt like it wasn’t inspired enough and was too generic so I’ll come up with a better design tomorrow.
Map editor! I added an editor bool to the global engine state and that controls whether the editor GUI is drawn and whether the player system runs or not. I also added some stuff like moving objects by clicking on them and adding stuff to the scene like grass blades. The way that the mouse to world space conversion works is that the cursor position is multiplied with the inverse of the projection matrix and this gives a direction in world space which is used as a raycast and if it hits anything, the object will be spawned at the hit position.
Grass! I added a grass renderer component, and every entity with it is looped and their transform is added to a vector of grass matrices which are fed to the grass shader and drawn using instancing. You can also add grass through the map editor which is pretty cool. The grass vertex shader generates a random vector using simplex noise and uses that as the sway direction for the blade of grass. The grass fragment shader uses a gradient with three colors applied from bottom to top.
Grass culling! All grass objects are now divided into chunks and sub chunks and sub chunks of those sub chunks. If a chunk is not in the view frustum, then it is culled. This greatly saves on performance. The grass is also a different color now. So is the ground.
I added voronoi fracturing to the game. I added CGAL and boost to the dependencies to help with the math. Shooting the gun will shoot a ray cast in front of the camera and whatever object is hit is dismantled (fractured).
I mostly made editor improvements and modeling roads and buildings.
I modeled a building in Blender using the buildify addon. I also worked on the fracturing more and made every mesh in a model its own static mesh and the fracture now makes a sphere cast and targets every mesh found in a certain radius....
|
1792479184.3520005
|
1793083984.3520005
|
|
184
|
Untitled project by @neha | Stardance
|
neha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @neha | Stardance
|
1792550950.381057
|
1793155750.381057
|
|
183
|
vejas.zip by @vejas | Stardance
|
vejas
|
0
|
10.65
|
0
|
[]
|
[{"post_id": 7349, "ts": "2026 [{"post_id": 7349, "ts": "2026-06-12T08:02:58Z", "hours": 3.4861, "text": "Loads of changes and a new contact form!! Contact Page So, on my previous site, I had a contact form that would send me a message on Slack when somebody filled it out. This time, I was thinking that it would be much easier to just have the messages come as emails straight into my inbox! I used Resend to easily send POST requests that would then send an email to me with the filled out form. I honestly wasn’t able to decide, or think of a cool design so i kinda went for my previous design, and made it more modern looking by using elements like shadcn/ui buttons with lucide icons. I added a link section with links to my socials and where people can find me on the right side of the page, (i’m pretty sure some of the links are still empty lol) and used had a huge headache with the icons. Since I have started using CloudFlare CDN, I wanted to host all the assets over there for caching stuff. This is a good idea, but it kinda didn’t work for svg icons. I would always use lucide icons since they look great, but they don’t have brand icons like discord or slack, which is why I had to find svg icons of those brands. I currently have the icons hardcoded into the page, but I will probably transfer them to the CDN at some point. The rest included a bunch of small UI tweaks and things like that. I have yet to make the About page, the Guestbook and the blog, but I think progress is good! Changelog added simple headings for pages that didn’t have them, added a contact form, that sends emails to me ( a8ccf63 ) fix maybe? ( 9331357 ) more tiny changes ( 861709b ) clumsy me ( 3ee4c63 ) couple quick fixes ( 53c74c6 )"}, {"post_id": 6271, "ts": "2026-06-10T15:17:14Z", "hours": 3.1886, "text": "I build the projects page I used markdown files to keep records of the projects and display them on the page, so each card can look similar but have diff content. I’m making the cards open a popup with a longer description about each project which is located in each respective md file. It was pretty hard to set everything up correctly, but I got it working in the end. I am trying to add a ‘blueprint’ (as in the YSWS) variant to the button element im using from shadcn/ui and lowk failing bcs ive forgotten how to use tailwind custom colour classes. Bugs The description text in the popout card, is stuck in dark mode so the text is still white in light mode as well."}, {"post_id": 5498, "ts": "2026-06-09T09:37:51Z", "hours": 1.2078, "text": "I started work on the website!! So, the first thing I did, was create the navbar, to make life easier in the future. Having already made the entire desing in Figma, is making the process of coding SOOO much easier! I have a clear plan of what I want to implement and how I want things to look, which really helps me. I imported the hero section from the figma and stuck that dead center on the page, which looks pretty good I’d say, the sides are a little plain but I will have stickers that people will be able to drag around. Plan create the section under the hero section design about page design contact page brainstorm and think about projects page host on cloudflare I’d say that was a pretty good hour of work."}, {"post_id": 4520, "ts": "2026-06-07T21:12:36Z", "hours": 2.7708, "text": "Design in Figma Link to figma page I layed the whole thing out (not yet done) on my figma, so that I would have a clear plan for this version. I also learned how to use autolayout and I hope that that will make it easier to layout in the future, when I start coding the site. My design process So this time around, I wanted to polish my site, and give it a nice modern look. This time, I will be using big headings and a nice font, for a nice modern, clean aesthetic, for all my stuff to live on. I am planning to keep the fun aspect with the guestbook, and i will be adding things like stickers on the homepage to make it fun. This is also so that the site looks good to formal ppl and that i can get a job someday. The guestbook I was browsing the interwebs one day, when I came across Ky Decker’s Guestbook which really caught my eye. I have a guestbook in place on my old page but now that I’m redesigning, I thought that making a super nice guestbook would be the way. I’m opting to make a postcard design that I got inspired from Ky.fyi since I feel like the postcards that I have made will really let people express themselves. I also got started by setting up the astro site with installing shadcn/ui so that I could benefit from the rrly nice UI components they provide."}]...
|
Title: vejas.zip by @vejas | Stardance
Devlogs:
D Title: vejas.zip by @vejas | Stardance
Devlogs:
Design in Figma Link to figma page I layed the whole thing out (not yet done) on my figma, so that I would have a clear plan for this version. I also learned how to use autolayout and I hope that that will make it easier to layout in the future, when I start coding the site. My design process So this time around, I wanted to polish my site, and give it a nice modern look. This time, I will be using big headings and a nice font, for a nice modern, clean aesthetic, for all my stuff to live on. I am planning to keep the fun aspect with the guestbook, and i will be adding things like stickers on the homepage to make it fun. This is also so that the site looks good to formal ppl and that i can get a job someday. The guestbook I was browsing the interwebs one day, when I came across Ky Decker’s Guestbook which really caught my eye. I have a guestbook in place on my old page but now that I’m redesigning, I thought that making a super nice guestbook would be the way. I’m opting to make a postcard design that I got inspired from Ky.fyi since I feel like the postcards that I have made will really let people express themselves. I also got started by setting up the astro site with installing shadcn/ui so that I could benefit from the rrly nice UI components they provide.
I started work on the website!! So, the first thing I did, was create the navbar, to make life easier in the future. Having already made the entire desing in Figma, is making the process of coding SOOO much easier! I have a clear plan of what I want to implement and how I want things to look, which really helps me. I imported the hero section from the figma and stuck that dead center on the page, which looks pretty good I’d say, the sides are a little plain but I will have stickers that people will be able to drag around. Plan create the section under the hero section design about page design contact page brainstorm and think about projects page host on cloudflare I’d say that was a pretty good hour of work.
I build the projects page I used markdown files to keep records of the projects and display them on the page, so each card can look similar but have diff content. I’m making the cards open a popup with a longer description about each project which is located in each respective md file. It was pretty hard to set everything up correctly, but I got it working in the end. I am trying to add a ‘blueprint’ (as in the YSWS) variant to the button element im using from shadcn/ui and lowk failing bcs ive forgotten how to use tailwind custom colour classes. Bugs The description text in the popout card, is stuck in dark mode so the text is still white in light mode as well.
Loads of changes and a new contact form!! Contact Page So, on my previous site, I had a contact form that would send me a message on Slack when somebody filled it out. This time, I was thinking that it would be much easier to just have the messages come as emails straight into my inbox! I used Resend to easily send POST requests that would then send an email to me with the filled out form. I honestly wasn’t able to decide, or think of a cool design so i kinda went for my previous design, and made it more modern looking by using elements like shadcn/ui buttons with lucide icons. I added a link section with links to my socials and where people can find me on the right side of the page, (i’m pretty sure some of the links are still empty lol) and used had a huge headache with the icons. Since I have started using CloudFlare CDN, I wanted to host all the assets over there for caching stuff. This is a good idea, but it kinda didn’t work for svg icons. I would always use lucide icons since they look great, but they don’t have brand icons like discord or slack, which is why I had to find svg icons of those brands. I currently have the icons hardcoded into the page, but I will probably transfer them to the CDN at some point. The rest included a bunch of small UI tweaks and things like that. I have yet to make the About page, the Guestbook and the blog, but I think progress is good! Changelog added simple headings for pages that didn’t have them, added a contact form, that sends emails to me ( a8ccf63 ) fix maybe? ( 9331357 ) more tiny changes ( 861709b ) clumsy me ( 3ee4c63 ) couple quick fixes ( 53c74c6 )...
|
1792727707.9573631
|
1793332507.9573631
|
|
182
|
rayjam by @logabe | Stardance
|
logabe
|
0
|
0.55
|
0
|
[]
|
[{"post_id": 17, "ts": "2026-0 [{"post_id": 17, "ts": "2026-05-31T07:58:22Z", "hours": 0.5472, "text": "Hello Stardance! Here’s a very quick devlog so I can test this out before I go to bed haha. I threw together a music player program in C w/ Raylib. You drag in the file you want to play and it will loop it until you close the program or drag in another one. Happy hacking!!"}]...
|
Title: rayjam by @logabe | Stardance
Devlogs:
Hel Title: rayjam by @logabe | Stardance
Devlogs:
Hello Stardance! Here’s a very quick devlog so I can test this out before I go to bed haha. I threw together a music player program in C w/ Raylib. You drag in the file you want to play and it will loop it until you close the program or drag in another one. Happy hacking!!...
|
1792795725.6119006
|
1793400525.6119006
|
|
181
|
Trulles Minion by @trulle123 | Stardance
|
trulle123
|
2
|
4.0
|
9
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-02T03:16:30Z", "hours": 2.0, "multiplier": 4.61, "payout": 5, "blessing": "neutral", "text": "I made a simple slack bot that sends my daily updates (to replace slackbot reminders). It has a simple comand to check my local weather using an API, it also has a welcome message for people joining my channel, a command to get the join link to my priv channel. And last but not least if you ping it responds with some random garbage (as a kinda mock ai this intentionally really stupid)", "repo": "https://github.com/Trulle1234/Trulles-Minion-Slack-bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0945H3P2GN"}, {"ship_num": 2, "ts": "2026-06-20T21:35:28Z", "hours": 2.0, "multiplier": 2.15, "payout": 4, "blessing": "neutral", "text": "I made a simple slack bot that sends my daily updates (to replace slackbot reminders). It also has a simple comand to check my local weather using an API.", "repo": "https://github.com/Trulle1234/Trulles-Minion-Slack-bot", "demo": "https://hackclub.enterprise.slack.com/archives/C0945H3P2GN"}]...
|
[{"post_id": 14316, "ts": "202 [{"post_id": 14316, "ts": "2026-06-23T12:26:36Z", "hours": 0.7997, "text": "Added integration with HC AI to rearrange the words in a more logical order / change the grammar of words This to introduce some logic while still keep the randomness It uses ai.hackclub.com with Gemini 2.5 Flash Lite Preview 09-2025 as its really fast. Unfortunetly HC AI is currently down so I’ll have to wait with subbmitting untill its up again"}, {"post_id": 13077, "ts": "2026-06-21T12:06:42Z", "hours": 0.9778, "text": "Added a random reply when bot is pinged and a command to get the workflow to join my priv channel The random reply checks for the app_mention event and then uses a random word API to give random words (1-5). The /enter-trulles-basement commad just sends an “Only vissable to you” message with the link to the workflow."}, {"post_id": 13032, "ts": "2026-06-21T09:48:50Z", "hours": 0.405, "text": "Added a welcome messege for people joining #trulleathon This replaces an old winterflows workflow I was using. It uses the event member_joined_channel and then checks is the channel is the target one. Finaly it sends a messge using app.client.chat.postMessage() ( event.user is used to know who joined)."}, {"post_id": 12753, "ts": "2026-06-20T21:05:47Z", "hours": 0.5233, "text": "Hosted the bot on Nest and added a daily and weekly update prompt. My nest application got aproved so now the bot is there. I have long been using a Slackbot reminder for this so i thought now that im making a bot is an amazing opportunity to replace that. The reminders are sent on a regular schedule to my channel using a cron job."}, {"post_id": 11806, "ts": "2026-06-19T06:48:33Z", "hours": 1.3019, "text": "Added the help and ping commands from the tutorial + a command to check my local weather. /trulles-minion-ping checks latency. /trulles-minion-help shows all comands and what they do. /trulles-weather shows my local temperature. It uses the SMHI weather API from apiverket.se ."}]...
|
Title: Trulles Minion by @trulle123 | Stardance
D Title: Trulles Minion by @trulle123 | Stardance
Devlogs:
Added the help and ping commands from the tutorial + a command to check my local weather. /trulles-minion-ping checks latency. /trulles-minion-help shows all comands and what they do. /trulles-weather shows my local temperature. It uses the SMHI weather API from apiverket.se .
Hosted the bot on Nest and added a daily and weekly update prompt. My nest application got aproved so now the bot is there. I have long been using a Slackbot reminder for this so i thought now that im making a bot is an amazing opportunity to replace that. The reminders are sent on a regular schedule to my channel using a cron job.
Added a welcome messege for people joining #trulleathon This replaces an old winterflows workflow I was using. It uses the event member_joined_channel and then checks is the channel is the target one. Finaly it sends a messge using app.client.chat.postMessage() ( event.user is used to know who joined).
Added a random reply when bot is pinged and a command to get the workflow to join my priv channel The random reply checks for the app_mention event and then uses a random word API to give random words (1-5). The /enter-trulles-basement commad just sends an “Only vissable to you” message with the link to the workflow.
Added integration with HC AI to rearrange the words in a more logical order / change the grammar of words This to introduce some logic while still keep the randomness It uses ai.hackclub.com with Gemini 2.5 Flash Lite Preview 09-2025 as its really fast. Unfortunetly HC AI is currently down so I’ll have to wait with subbmitting untill its up again
Ships:
I made a simple slack bot that sends my daily updates (to replace slackbot reminders). It also has a simple comand to check my local weather using an API.
I made a simple slack bot that sends my daily updates (to replace slackbot reminders). It has a simple comand to check my local weather using an API, it also has a welcome message for people joining my channel, a command to get the join link to my priv channel. And last but not least if you ping it responds with some random garbage (as a kinda mock ai this intentionally really stupid)...
|
1792994087.7846866
|
1793080487.7846866
|
|
180
|
BEE by @elite_punith | Stardance
|
elite_punith
|
0
|
0.27
|
0
|
[]
|
[{"post_id": 101, "ts": "2026- [{"post_id": 101, "ts": "2026-05-31T18:41:23Z", "hours": 0.2706, "text": "This is my first project in stardance , i am working on a 3D website using Three.js. this is my first – Commit !"}]...
|
Title: BEE by @elite_punith | Stardance
Devlogs:
Title: BEE by @elite_punith | Stardance
Devlogs:
This is my first project in stardance , i am working on a 3D website using Three.js. this is my first – Commit !...
|
1792518831.1680408
|
1793123631.1680408
|
|
179
|
SnappyStrike by @Swapnil | Stardance
|
Swapnil
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: SnappyStrike by @Swapnil | Stardance
|
1792781422.136735
|
1793386222.136735
|
|
178
|
A roguelike game by @A41K | Stardance
|
A41K
|
0
|
0.6
|
0
|
[]
|
[{"post_id": 4148, "ts": "2026 [{"post_id": 4148, "ts": "2026-06-07T11:08:34Z", "hours": 0.6036, "text": "I made the isometric layers and started working on the character movement, the fall off logic and how to stack the layers"}]...
|
Title: A roguelike game by @A41K | Stardance
Devl Title: A roguelike game by @A41K | Stardance
Devlogs:
I made the isometric layers and started working on the character movement, the fall off logic and how to stack the layers...
|
1792770810.9941957
|
1793375610.9941957
|
|
177
|
WarioWare Game by @MostLime | Stardance
|
MostLime
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @MostLime | Stardance
|
1792504257.9213805
|
1793109057.9213805
|
|
176
|
My first slack bot! by @starr | Stardance
|
starr
|
0
|
0.69
|
0
|
[]
|
[{"post_id": 4738, "ts": "2026 [{"post_id": 4738, "ts": "2026-06-08T05:41:31Z", "hours": 0.6867, "text": "Setting up commands"}]...
|
Title: My first slack bot! by @starr | Stardance
Title: My first slack bot! by @starr | Stardance
Devlogs:
Setting up commands...
|
1792756334.8842132
|
1793361134.8842132
|
|
175
|
Test project by @frog | Stardance
|
frog
|
0
|
0.34
|
0
|
[]
|
[{"post_id": 56851, "ts": "202 [{"post_id": 56851, "ts": "2026-08-28T20:08:52Z", "hours": 0.3408, "text": "Dont read this i just wanna buy stuff from shop"}]...
|
Title: Test project by @frog | Stardance
Devlogs: Title: Test project by @frog | Stardance
Devlogs:
Dont read this i just wanna buy stuff from shop...
|
1792651945.9287548
|
1793256745.9287548
|
|
174
|
Untitled project by @anirudh | Stardance
|
anirudh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @anirudh | Stardance
|
1792939702.8666494
|
1793803702.8666494
|
|
173
|
Untitled project by @youssef | Stardance
|
youssef
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @youssef | Stardance
|
1792648438.9183664
|
1793253238.9183664
|
|
172
|
Frictionless by @Flux3tor | Stardance
|
Flux3tor
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @Flux3tor | Stardance
|
1792489706.1912186
|
1793353706.1912186
|
|
171
|
My first slack bot! by @Gopinath | Stardance
|
Gopinath
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Gopinath | Stardanc Title: My first slack bot! by @Gopinath | Stardance...
|
1792695205.7363846
|
1793300005.7363846
|
|
170
|
Neurobits by @Hridya | Stardance
|
Hridya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Neurobits by @Hridya | Stardance
|
1792504146.4174116
|
1793108946.4174116
|
|
169
|
HTML in canvas experiments by @Hridya | Stardance
|
Hridya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: HTML in canvas experiments by @Hridya | Sta Title: HTML in canvas experiments by @Hridya | Stardance...
|
1792810201.865271
|
1793415001.865271
|
|
168
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792914529.6451895
|
1793778529.6451895
|
|
167
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792900455.9683235
|
1793764455.9683235
|
|
166
|
Hexhand by @Hridya | Stardance
|
Hridya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hexhand by @Hridya | Stardance
|
1792785161.3772266
|
1793389961.3772266
|
|
165
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792893069.6563153
|
1793757069.6563153
|
|
164
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792911277.3456204
|
1793775277.3456204
|
|
163
|
Untitled project by @danielzanthosh | Stardance
|
danielzanthosh
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @danielzanthosh | Stard Title: Untitled project by @danielzanthosh | Stardance...
|
1792622875.3525996
|
1793227675.3525996
|
|
162
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792882400.4073832
|
1793746400.4073832
|
|
161
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792882151.5759895
|
1793746151.5759895
|
|
160
|
Personal site by @keyaan | Stardance
|
keyaan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Personal site by @keyaan | Stardance
|
1792784850.010117
|
1793389650.010117
|
|
159
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792936131.6244848
|
1793800131.6244848
|
|
158
|
My Portfolio by @imu | Stardance
|
imu
|
0
|
2.46
|
0
|
[]
|
[{"post_id": 271, "ts": "2026- [{"post_id": 271, "ts": "2026-06-01T14:25:20Z", "hours": 1.8289, "text": "updated but under devlopmnt"}, {"post_id": 163, "ts": "2026-06-01T01:14:07Z", "hours": 0.6294, "text": "Project: My portfolio Current Phase: Prototype Imu — Portfolio Website Personal portfolio website presenting My skills and projects Overview This repository contains the source code for my portfolio website. The site includes: This project is built with HTML and CSS This project is my personal portfolio website Made meme style dedicated pages containner Responsive design Tech stack HTML5 CSS3 Vanilla JavaScript (I love vanilla ice cream :)) Repository structure index.html | Main projects page style.css | Stylesheet Thankyou for reading :)"}]...
|
Title: My Portfolio by @imu | Stardance
Devlogs:
Title: My Portfolio by @imu | Stardance
Devlogs:
Project: My portfolio Current Phase: Prototype Imu — Portfolio Website Personal portfolio website presenting My skills and projects Overview This repository contains the source code for my portfolio website. The site includes: This project is built with HTML and CSS This project is my personal portfolio website Made meme style dedicated pages containner Responsive design Tech stack HTML5 CSS3 Vanilla JavaScript (I love vanilla ice cream :)) Repository structure index.html | Main projects page style.css | Stylesheet Thankyou for reading :)
updated but under devlopmnt...
|
1792903882.313452
|
1793767882.313452
|
|
157
|
Portfolio CLI by @ghastly | Stardance
|
ghastly
|
1
|
2.0
|
8
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-04T06:59:47Z", "hours": 2.0, "multiplier": 4.97, "payout": 8, "blessing": "neutral", "text": "I made my own portfolio in the cli style. Usage: Put this command in your terminal and replace `yourname with your actual name ssh yourname@2a01:4f9:3081:399c::307 -p 2222 Hosted on Nest!", "repo": "https://github.com/bhatrichit10-ux/ssh-folio", "demo": "https://github.com/bhatrichit10-ux/ssh-folio#usage"}]...
|
[{"post_id": 1967, "ts": "2026 [{"post_id": 1967, "ts": "2026-06-04T06:55:13Z", "hours": 0.3744, "text": "So i finally deployed it, IT had alot of errors, but i finally managed to deploy it on nest server, It was pretty much easy but some port stuff gave me headache, Also i had to change the code from the standard 0.0.0.0 to :: because nest only has IPv6 and not IPv4. Also i added the demo instructions in the README"}, {"post_id": 1939, "ts": "2026-06-04T05:51:38Z", "hours": 0.9311, "text": "Added some cool commands! Well it is for sure that no one wants to read some boring stuff, so i decided to make sure that my content is kinda interesting, although my projects might not be. So I have added some cool stuff like a little bit of coloring , a banner image and a username kinda handler which will let me fetch your username so that when you do ssh yourname@ip-of-my-portfolio -p 2222 i can fetch the yourname part which will make it very cool! I believe"}, {"post_id": 181, "ts": "2026-06-01T06:19:16Z", "hours": 0.3747, "text": "The jumpstart So i planned that i will be making a kind of portfolio where you could ssh into. I got this idea from zrl’s sshtron game which is very fun and is a ssh based snake game. So i just started learning about how ssh2 works and how to make a server using it. The documentation was kind of very complex for me, so i saw the examples. I created a module called ‘ready.js’ , which would handle everything after the client was authenticated. I had some PTY errors, so i figured out if i accept everything, there will be no errors. So i just added pty.accept() for all cases no matter what. I did the same for authentication which allowed me to login without any password or username. To test it finally worked, i tried to send a raw ’Welcome!” stream. So far looks good"}]...
|
Title: Portfolio CLI by @ghastly | Stardance
Devl Title: Portfolio CLI by @ghastly | Stardance
Devlogs:
The jumpstart So i planned that i will be making a kind of portfolio where you could ssh into. I got this idea from zrl’s sshtron game which is very fun and is a ssh based snake game. So i just started learning about how ssh2 works and how to make a server using it. The documentation was kind of very complex for me, so i saw the examples. I created a module called ‘ready.js’ , which would handle everything after the client was authenticated. I had some PTY errors, so i figured out if i accept everything, there will be no errors. So i just added pty.accept() for all cases no matter what. I did the same for authentication which allowed me to login without any password or username. To test it finally worked, i tried to send a raw ’Welcome!” stream. So far looks good
Added some cool commands! Well it is for sure that no one wants to read some boring stuff, so i decided to make sure that my content is kinda interesting, although my projects might not be. So I have added some cool stuff like a little bit of coloring , a banner image and a username kinda handler which will let me fetch your username so that when you do ssh yourname@ip-of-my-portfolio -p 2222 i can fetch the yourname part which will make it very cool! I believe
So i finally deployed it, IT had alot of errors, but i finally managed to deploy it on nest server, It was pretty much easy but some port stuff gave me headache, Also i had to change the code from the standard 0.0.0.0 to :: because nest only has IPv6 and not IPv4. Also i added the demo instructions in the README
Ships:
I made my own portfolio in the cli style. Usage: Put this command in your terminal and replace `yourname with your actual name ssh yourname@2a01:4f9:3081:399c::307 -p 2222 Hosted on Nest!...
|
1792990531.0339653
|
1793076931.0339653
|
|
156
|
Untitled by @imu | Stardance
|
imu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @imu | Stardance
|
1792896741.6564639
|
1793760741.6564639
|
|
155
|
1 by @joshi | Stardance
|
joshi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: 1 by @joshi | Stardance
|
1792784985.3477209
|
1793389785.3477209
|
|
154
|
Test by @obay | Stardance
|
obay
|
1
|
1.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-09T12:34:36Z", "hours": 1.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "nothing :)", "repo": "https://github.com/hackclub/stardance/", "demo": "https://review.hackclub.com/"}]...
|
[{"post_id": 17955, "ts": "202 [{"post_id": 17955, "ts": "2026-06-28T22:20:56Z", "hours": 0.6539, "text": "hi"}]...
|
Title: Test by @obay | Stardance
Devlogs:
hi
Shi Title: Test by @obay | Stardance
Devlogs:
hi
Ships:
nothing :)...
|
1792976039.6410294
|
1793062439.6410294
|
|
153
|
SCP - Secure Channel Protocol by @kingvon | Starda SCP - Secure Channel Protocol by @kingvon | Stardance...
|
kingvon
|
1
|
25.0
|
392
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-23T16:42:26Z", "hours": 25.0, "multiplier": 15.56, "payout": 392, "blessing": "neutral", "text": "Secure Channel Protocol (SCP) is a TLS-inspired protocol with its own ciphersuite and handshake sequence made in Go. It comes in a go package so anyone can use this protocol to build their projects upon. i made this project as a challenge to myself because i wanted to make “my own protocol” so i decided to go for a security protcol, this was a really fun experience it taught me applied cryptography more deeply and i learnt about various things in TLS. this project right now is just a handshake implementation with minimal crypto wrappers i wrote around already made functions, this is just the first version, i will be implementing my own crypto primitives like key exchange and stuff in future versions. you can try this project in THREE different ways!: watching a live handshake simulation @ scp.pratiksingh.xyz trying the small encrypted cli chat app i made on top of the protocol (check out github readme) creating your own app on top of my protocol! i have made simple wrapper functions to make it easier for curious devs to try it. there are documentation too! check out the specs page on demo site and readme for details :3", "repo": "https://github.com/pratiksingh94/scp/", "demo": "https://scp.pratiksingh.xyz/"}]...
|
[{"post_id": 32551, "ts": "202 [{"post_id": 32551, "ts": "2026-07-21T20:09:05Z", "hours": 1.3506, "text": "Wrote docs yeah, wrote docs, thats it bye lol golang docs system is nice at first i was writing everything in another docs readme but it was so damn boring and i started looking around for automated docs like its in fastapi of python, then i found out i can write comments and stuff and people can use go doc command and there are also crawlers by pkg.go.dev which can show my go docs on the website so yeah that dont focus on screenshot, i am waiting for it to detect the license so it can show docs"}, {"post_id": 32244, "ts": "2026-07-21T09:04:10Z", "hours": 0.4667, "text": "Readme update one more step closer towards shipping didnt mention the SPEC.md in it, i wont use that since i have made /spec page in visualizer site"}, {"post_id": 32228, "ts": "2026-07-21T08:16:32Z", "hours": 0.4619, "text": "Fixed go modules gonna push it as package soon so had to fix some go module problems or go get command wont work and did some over the internet testing"}, {"post_id": 31937, "ts": "2026-07-20T19:03:39Z", "hours": 3.0483, "text": "Added Spec page yes, added a page for ALL details you made need about it, PLEASE READ IT i have put so much efforts into that so you better read it includes this table of contents: 1.Overview 2.Packet Format 3.Message Types 4.Handshake Protocol 5.Key Derivation 6.Data Phase 7.Cryptographic Primitives 8.Wire Format Reference"}, {"post_id": 30288, "ts": "2026-07-17T18:53:22Z", "hours": 5.8408, "text": "Handshake Simulation Visualizer completed the entire bomboclat visualizer so its a website with go backend which is running a totally real handshake sequence, which is a simulation ofc but the crypto stuff is real, no packets are being sent tho after asking multiple people in #stardance i decided to go with monotone default colors of tailwind, and someone suggested CRT line effect so i added that too which made it hella cool. it features a 26 step sequence showing everything from keypair generation to data phase, shows from both client and server sides with cool cards, i love this so much yes i did it all in one devlog, its a just a small dev log server and not the main thing of this project, the main is still the protocol and the package so i will do on that with some documentations and specs page. will be hosted soon on my nest container"}, {"post_id": 28520, "ts": "2026-07-14T20:40:26Z", "hours": 3.8081, "text": "Visualizer WebSocket Server so not just that, i also changed the folder structure a bit, and some other very small things which i couldnt dev log cuz they were too small but yes the main thing i did was making a visualize backend, it uses websockets and simulates an entire handshake and data transfer, all the crypto work is real in the server but no packet is being sent, so its just steps one by one explaining the work that is being done. been a bit busy for a while so couldnt code properly :("}, {"post_id": 24989, "ts": "2026-07-08T21:39:58Z", "hours": 0.9981, "text": "First app: Encrypted Chat i am so happy, i have wrote the FIRST thingy on top of secure channel protocol!!! my own damn lil TLS. this is a very basic client server chat, server listens on a port and client connects, they it reads input from stdin the server connects using command: ./scp listen --port 2008 --psk test the client connects using command: ./scp connect --host localhost:2008 --psk test the PSK is pre-shared (well, duh) using the --psk flag well this is a very basic terminal chat app, i can ship the project as it is rn as its a nice MVP but i want to make a visualizer cuz i know damn well NO one gonna run it like this lol, and i want to make a cool visualizer that shows every step of handshake the first screenshot shows the chat, top one is the server and bottom is client the second screenshot shows the wireshark capture of this beautiful exchange, ofc its encrypted hehe i love this"}, {"post_id": 24881, "ts": "2026-07-08T18:48:10Z", "hours": 0.6858, "text": "Session Functions wow this made it complete on a function definition level, like i just have to make some wrappers around it so, i made 3 functions for the Session struct Send() -> takes plaintext, encrypts it with the session key and nonce from session, sends it Receive() -> decodes MsgData packet, decrypts using session key and nonce received FROM the packet (so nonces dont go out of sync) and returns plaintext Close() -> what do you think lmao in the screenshot you can see the plaintext and ciphertext being logged, thats an exchange between client and server!"}, {"post_id": 24587, "ts": "2026-07-08T09:11:33Z", "hours": 3.4375, "text": "Handshake 🤝 so i made the handshake sequence its the same one from SPEC.md where i decided first, didnt change anything for some reason cant paste here pls check SPEC.md on github lmao but in short it goes like this: client and server exchange hello messages with their PSK Proof, Public Key, Nonce (16 bytes) and then key exchange and some session key derivation happens, then Done messages are exchanged which is encrypted with the session key, so it proves both party derived same session key at the end the handshake functions returns the session (which i have to work on) there are some things left to do like cleaning up the code, its a bit messy right now i will make it a bit more modular and easy to read later for testing i used net.Pipe , it gives nice two mock connections type shit, i thought of using real tcp connection first but found this better thing while going through GoLang net library docs not much to see in image tbh, it just shows the debug print statements i added, those are exchanges between client and server"}, {"post_id": 23028, "ts": "2026-07-05T19:16:11Z", "hours": 2.9708, "text": "Crypto Functions so i wrote all the crypto functions or helpers whatever you want to call it. i did that because see for me TLS or even this project is just a group of cipher suites and we are using them to perform a handshake, so the cipher suite is the most important part, and ofc my project will only have one cipher suite, so i first implemented those functions Functions implemented: GenerateKeypair() -> generates an X25519 public and private key pair SharedSecret() -> takes private key and peer public key and performs ECDH using those keys ComputePSKProof() -> outputs the HMAC result of a psk and the given data DeriveSessionKey() -> the final function which uses HKDF and outputs a session key, which will be used to encrypt/decrypt Encrypt() -> encrypts using the given session key, it uses ChaCha20-Poly1305 to encrypt plaintext Decrypt() -> decrypts the ciphertext from given key and i also wrote tests for them, writing tests for me is an uncommon thing i wont lie lol but this time i am testing these functions from tests is because this is a protocol library, if another project wants to use my protocol to build on they can easily import and thats why i dont wanna test in random cmd and build things like it is intended for my planned project only, so i am treating it as a proper library and writing function and their tests, and so far things are doing really good. had some problems in ECDH because i was messing up the output parameters order but i fixed it after a while. ignore the weird ahhh numbers output, thats the nonce counter helper function i made i forgot to remove the debug prints lol"}, {"post_id": 22165, "ts": "2026-07-04T14:18:15Z", "hours": 2.1317, "text": "Packet Envelop and Payload Encoders/Decoders hiii SPEC.md so at first i made SPEC.md where i have decided on everything that it will have, all structures, handshake sequence, etc (please read it :3) Packet structure then i made a basic packet envelop struct [1 byte: msg type] [4 bytes: payload length] [N bytes: payload] that will be the structure, and i wrote WritePacket() and ReadPacket() functions for it, and also some tests Payload structures and i decided on payload structures for each message type and wrote encoder and decoder for all those types, except Done message type because its just one thing in payload you can check in SPEC.md the payload structures since i dont have anything ready to show, i will show the test output"}]...
|
Title: SCP - Secure Channel Protocol by @kingvon | Title: SCP - Secure Channel Protocol by @kingvon | Stardance
Devlogs:
Packet Envelop and Payload Encoders/Decoders hiii SPEC.md so at first i made SPEC.md where i have decided on everything that it will have, all structures, handshake sequence, etc (please read it :3) Packet structure then i made a basic packet envelop struct [1 byte: msg type] [4 bytes: payload length] [N bytes: payload] that will be the structure, and i wrote WritePacket() and ReadPacket() functions for it, and also some tests Payload structures and i decided on payload structures for each message type and wrote encoder and decoder for all those types, except Done message type because its just one thing in payload you can check in SPEC.md the payload structures since i dont have anything ready to show, i will show the test output
Crypto Functions so i wrote all the crypto functions or helpers whatever you want to call it. i did that because see for me TLS or even this project is just a group of cipher suites and we are using them to perform a handshake, so the cipher suite is the most important part, and ofc my project will only have one cipher suite, so i first implemented those functions Functions implemented: GenerateKeypair() -> generates an X25519 public and private key pair SharedSecret() -> takes private key and peer public key and performs ECDH using those keys ComputePSKProof() -> outputs the HMAC result of a psk and the given data DeriveSessionKey() -> the final function which uses HKDF and outputs a session key, which will be used to encrypt/decrypt Encrypt() -> encrypts using the given session key, it uses ChaCha20-Poly1305 to encrypt plaintext Decrypt() -> decrypts the ciphertext from given key and i also wrote tests for them, writing tests for me is an uncommon thing i wont lie lol but this time i am testing these functions from tests is because this is a protocol library, if another project wants to use my protocol to build on they can easily import and thats why i dont wanna test in random cmd and build things like it is intended for my planned project only, so i am treating it as a proper library and writing function and their tests, and so far things are doing really good. had some problems in ECDH because i was messing up the output parameters order but i fixed it after a while. ignore the weird ahhh numbers output, thats the nonce counter helper function i made i forgot to remove the debug prints lol
Handshake 🤝 so i made the handshake sequence its the same one from SPEC.md where i decided first, didnt change anything for some reason cant paste here pls check SPEC.md on github lmao but in short it goes like this: client and server exchange hello messages with their PSK Proof, Public Key, Nonce (16 bytes) and then key exchange and some session key derivation happens, then Done messages are exchanged which is encrypted with the session key, so it proves both party derived same session key at the end the handshake functions returns the session (which i have to work on) there are some things left to do like cleaning up the code, its a bit messy right now i will make it a bit more modular and easy to read later for testing i used net.Pipe , it gives nice two mock connections type shit, i thought of using real tcp connection first but found this better thing while going through GoLang net library docs not much to see in image tbh, it just shows the debug print statements i added, those are exchanges between client and server
Session Functions wow this made it complete on a function definition level, like i just have to make some wrappers around it so, i made 3 functions for the Session struct Send() -> takes plaintext, encrypts it with the session key and nonce from session, sends it Receive() -> decodes MsgData packet, decrypts using session key and nonce received FROM the packet (so nonces dont go out of sync) and returns plaintext Close() -> what do you think lmao in the screenshot you can see the plaintext and ciphertext being logged, thats an exchange between client and server!
First app: Encrypted Chat i am so happy, i have wrote the FIRST thingy on top of secure channel protocol!!! my own damn lil TLS. this is a very basic client server chat, server listens on a port and client connects, they it reads input from stdin the server connects using command: ./scp listen --port 2008 --psk test the client connects using command: ./scp connect --host localhost:2008 --psk test the PSK is pre-shared (well, duh) using the --psk flag well this is a very basic terminal chat app, i can ship the project as it is rn as its a nice MVP but i want to make a visualizer cuz i know damn well NO one gonna run it like this lol, and i want to make a cool visualizer that shows every step of handshake the first screenshot shows the chat, top one is the server and bottom is client the second screenshot shows the wireshark capture of this beautiful exchange, ofc its encrypted hehe i love this
Visualizer WebSocket Server so not just that, i also changed the folder structure a bit, and some other very small things which i couldnt dev log cuz they were too small but yes the main thing i did was making a visualize backend, it uses websockets and simulates an entire handshake and data transfer, all the crypto work is real in the server but no packet is being sent, so its just steps one by one explaining the work that is being done. been a bit busy for a while so couldnt code properly :(
Handshake Simulation Visualizer completed the entire bomboclat visualizer so its a website with go backend which is running a totally real handshake sequence, which is a simulation ofc but the crypto stuff is real, no packets are being sent tho after asking multiple people in #stardance i decided to go with monotone default colors of tailwind, and someone suggested CRT line effect so i added that too which made it hella cool. it features a 26 step sequence showing everything from keypair generation to data phase, shows from both client and server sides with cool cards, i love this so much yes i did it all in one devlog, its a just a small dev log server and not the main thing of this project, the main is still the protocol and the package so i will do on that with some documentations and specs page. will be hosted soon on my nest container
Added Spec page yes, added a page for ALL details you made need about it, PLEASE READ IT i have put so much efforts into that so you better read it includes this table of contents: 1.Overview 2.Packet Format 3.Message Types 4.Handshake Protocol 5.Key Derivation 6.Data Phase 7.Cryptographic Primitives 8.Wire Format Reference
Fixed go modules gonna push it as package soon so had to fix some go module problems or go get command wont work and did some over the internet testing
Readme update one more step closer towards shipping didnt mention the SPEC.md in it, i wont use that since i have made /spec page in visualizer site
Wrote docs yeah, wrote docs, thats it bye lol golang docs system is nice at first i was writing everything in another docs readme but it was so damn boring and i started looking around for automated docs like its in fastapi of python, then i found out i can write comments and stuff and people can use go doc command and there are also crawlers by pkg.go.dev which can show my go docs on the website so yeah that dont focus on screenshot, i am waiting for it to detect the license so it can show docs
Ships:
Secure Channel Protocol (SCP) is a TLS-inspired protocol with its own ciphersuite and handshake sequence made in Go. It comes in a go package so anyone can use this protocol to build their projects upon. i made this project as a challenge to myself because i wanted to make “my own protocol” so i decided to go for a security protcol, this was a really fun experience it taught me applied cryptography more deeply and i learnt about various things in TLS. this project right now is just a handshake implementation with minimal crypto wrappers i wrote around already made functions, this is just the first version, i will be implementing my own crypto primitives like key exchange and stuff in future versions. you can try this project in THREE different ways!: watching a live handshake simulation @ scp.pratiksingh.xyz trying the small encrypted cli chat app i made on top of the protocol (check out github readme) creating your own app on top of my protocol! i have made simple wrapper functions to make it easier for curious devs to try it. there are documentation too! check out the specs page on demo site and readme for details :3...
|
1792975826.130917
|
1793062226.130917
|
|
152
|
Untitled project by @sinismylastname | Stardance
|
sinismylastname
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @sinismylastname | Star Title: Untitled project by @sinismylastname | Stardance...
|
1792752602.576735
|
1793616602.576735
|
|
151
|
Untitled by @Vimthusiast | Stardance
|
Vimthusiast
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Vimthusiast | Stardance
|
1792716889.2220933
|
1793321689.2220933
|
|
150
|
Untitled by @Vimthusiast | Stardance
|
Vimthusiast
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Vimthusiast | Stardance
|
1792760074.942968
|
1793364874.942968
|
|
149
|
Untitled by @Vimthusiast | Stardance
|
Vimthusiast
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @Vimthusiast | Stardance
|
1792810074.7056103
|
1793414874.7056103
|
|
148
|
WarioWare Game by @Willz | Stardance
|
Willz
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @Willz | Stardance
|
1792774442.4294558
|
1793379242.4294558
|
|
147
|
DELETED by @Vimthusiast | Stardance
|
Vimthusiast
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: DELETED by @Vimthusiast | Stardance
|
1792630326.5279934
|
1793235126.5279934
|
|
146
|
Untitled project by @sabhya_aggarwal | Stardance
|
sabhya_aggarwal
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @sabhya_aggarwal | Star Title: Untitled project by @sabhya_aggarwal | Stardance...
|
1792680812.502513
|
1793285612.502513
|
|
145
|
Melon Labs by @melon | Stardance
|
melon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Melon Labs by @melon | Stardance
|
1792637322.3022501
|
1793242122.3022501
|
|
144
|
DragonIDE by @imu | Stardance
|
imu
|
1
|
2.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-01T10:58:42Z", "hours": 2.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "this is using hack club ai. This is devlopemnt stage :). thankyou", "repo": "https://github.com/cyberworrier8088/DragonFoxIDE/tree/af2b748bcaaacc1336f39480260bcf37a5f098e2", "demo": "https://github.com/cyberworrier8088/DragonFoxIDE/releases/download/demo/DragonFoxIDE.exe"}]...
|
[{"post_id": 25, "ts": "2026-0 [{"post_id": 25, "ts": "2026-05-31T08:48:04Z", "hours": 1.5361, "text": "introduction a simple version of IDE made in rust. this using hack club ai api improve runtime security, and optimize compilation. By removing unneeded dependency bloat (like dotenv ), implementing secure masked inputs for API keys ( rpassword ), and adding aggressive release-profile optimizations in Cargo.toml , we’ve built a faster, safer, and more lightweight terminal assistant with clean Rust code."}]...
|
Title: DragonIDE by @imu | Stardance
Devlogs:
int Title: DragonIDE by @imu | Stardance
Devlogs:
introduction a simple version of IDE made in rust. this using hack club ai api improve runtime security, and optimize compilation. By removing unneeded dependency bloat (like dotenv ), implementing secure masked inputs for API keys ( rpassword ), and adding aggressive release-profile optimizations in Cargo.toml , we’ve built a faster, safer, and more lightweight terminal assistant with clean Rust code.
Ships:
this is using hack club ai. This is devlopemnt stage :). thankyou...
|
1792878497.8449728
|
1793742497.8449728
|
|
143
|
Big Brother by @kingvon | Stardance
|
kingvon
|
0
|
36.51
|
0
|
[]
|
[{"post_id": 13765, "ts": "202 [{"post_id": 13765, "ts": "2026-06-22T15:49:11Z", "hours": 1.0486, "text": "Status Update in Detection so i have added other statuses in detections, which are: resolved , investigating , fase positive and i made a dropdown button component to update the status, making it was lowk creative lmao i didnt think i would be pull that off"}, {"post_id": 13717, "ts": "2026-06-22T14:14:06Z", "hours": 1.2025, "text": "Noise Filtering in Process Collector so i already had this but it was a bit stupid so i improved it, its still stupid but less stupid lol __ so right now it has bigger and more lists of stuff to ignore and it also checks for parent-child relation like kitty -> zsh and other terminals opening a shell cuz thats common, and it also ignores the processes fired by kernel for small things, and many other stuff, you check a list of stuff it ignores in lilbro/internal/collectors/processes/filter.go __ umm i dont have anyting to show as its a filtering a function i implement and wtf i am supposed to show, so have a look at this snapperd process lol"}, {"post_id": 13180, "ts": "2026-06-21T15:57:20Z", "hours": 1.1108, "text": "Containerization buzz word lmao basically i updated the docker compose files and made everything easily spin up with docker compose and that was like 20m of work, the rest was a fight between me vs pnpm security features and pyscopg2 building lmao"}, {"post_id": 13138, "ts": "2026-06-21T14:18:43Z", "hours": 0.7856, "text": "Standardized Context Fields and Timestamps so the way these two things were really messy lol in process info i had the go struct PascalCase context fields and in auth info i had snake_case context fields so i made snake_case the standard way __ and all the timestamps were timezone-naive which was really bad and there were conflicts in places, so i made all the columns timezone aware and migrated the existing tables to timestampz columns and now in frontend i am converting it to local timezone in the screenshot you can see two timestamp, one is UTC and the other is IST because i am converting it to local timezone on frontend instead of handling that stuff on backend, cuz well the agents could be hosted on any system across the globe note: the second timestamp is old, dont assume its same time just different timezones"}, {"post_id": 13052, "ts": "2026-06-21T10:42:27Z", "hours": 4.8544, "text": "Entire Rule Engine and Detection Pipeline lol big update, lemme go in chronological order what i did Bug fixes so i fixed a bug in SSH Pipeline where it was trying to send an event for EVERY journal ingestion which is not what i want because not every sshd journal log is important, so i added a check where if the log isnt about password failed or accepted then it wont ignore it. __ i also added Rule Name column in detection table which i forgot to add. Rule Engine setup so in this “setup” i made the database table and seeded it with 2 rules manually so i can make the detection functions first. ofc the two rules were the Sus Process match type rule and SSH Bruteforce threshold type rule. __ the detection engine is just the previous hardcoded one but now works with database variables, it still has the same the group by checking for threshold based rules, and for match rules i made the input be command seperated for example the values to be matched with can be nc, netcat, ncat, nmap Rule CRUD Endpoints created 5 endpoints on backend GET /rules/ - lists all rules POST /rules/ - creates rule PATCH - /rules/id - update a rule DELETE - /rules/id - delete a rule PATCH - /rules/id/toggle - toggle on a rule, small thing so made a seperate endpoint Dashboard created pages: /rules - shows rules table /rules/new - creates new rules Pending things: /rules/id page on dashboard, will do that later with rule updating feature Next: probably more types of events or config improvement, not decided."}, {"post_id": 11414, "ts": "2026-06-18T17:54:58Z", "hours": 1.8, "text": "SSH Auth Log Pipeline damn it was easier than i thought so i made the complete SSH authentication failure and success events pipeline __ what happens is the lil bro (agent) reads the systemd journal logs (yes it only supports this for now T__T) by executing the command journalctl -f -u sshd -o json --since now which basically makes it run the journalctl like tail command so it streams out the logs only when they are ingested. __ the logs are in JSON format which then gets is handled by Auth Collector in agent, which has parser functions for password failure and success then its just the normal event pipeline (create event -> send to queue -> worker sends the event to backend) after that it is displayed on dashboard next threshold based rules (first hardcoded, then proper rule table and stuff)"}, {"post_id": 10753, "ts": "2026-06-17T17:24:07Z", "hours": 3.4436, "text": "Detections lol this was fun too the entire detection pipeline so basically i started Detections work to complete the SOC pipeline (agent -> events -> detections) and since i have no rule engine setup yet so i hardcoded a Sus Process rule in detection function it bascially checks events within a time window of 30 seconds and checks their name for sus process names (which is just an array for now) and the detection function runs on a Background Scheduler every 30 seconds in backend (not agent, i dont want) and after that it stores the detection in the Detections table which stores things like: Rule Name, Triggered Events, Context, Status, etc and the end it is displayed beautifully (i love this so much T___T) on the dashboard thingys made Backend: Detection model, schemas, etc /detections/ - gives list of all detections /detections/{id} - gives the specific detection Dashboard: /detections - shows the all the detections in a table, needs more stuff like filter /detections/[id] - shows detection detail (looks REALLY good) Next see the obvious next step is a rule system to store detection rules but i wont do that, see i am planning to add 2 types of rules just like all the SOC, they are: directing matching rules and threshold based rules and i will build both at once but there is nothing yet which can be used with threshold based rules, and i dont want to edit the rule system again and again so i am planning to make authentication based events first and then work on rules, then process events can be tested with direct matching rules and authentication events can be tested with threshold based rules like SSH Brute force attack"}, {"post_id": 9987, "ts": "2026-06-16T14:57:39Z", "hours": 1.0742, "text": "Per-event info so i added a Sheet component from shadcn, which shows all the info of event like context and all the stuff not much just this, and uhhh it was a pain yeah every frontend thing is a pain."}, {"post_id": 8890, "ts": "2026-06-14T20:06:31Z", "hours": 0.8458, "text": "More Details in Process Event yeah just the title, not much tonight as i have to study so before this it was just PID and Name of process, which is useless, so i made it store this instead: type ProcessInfo struct { PID int PPID int Name string CmdLine string User string Cwd string CreateTime string } and i made the event table in dashboard show only first 2 fields in context and just say “+x more” at the end. next will be a sheet component to show the events in detail"}, {"post_id": 8343, "ts": "2026-06-13T21:25:40Z", "hours": 2.2133, "text": "Process Collector and Event Feed I’ve been waiting for this lol this is was so fun cuz i was locked the hell in okay so hear me out so in agent i made a very basic process collector which has 2 maps and every 10 seconds it updates the currProcesses map and compares it with prevProcesses the resulting differences are the process created/terminated. basic stuff. and then after that it creates an event struct and uses the event.Emit() function which just adds the event to a queue (go channel), and another function RunEventWorker() just has a loop which runs till events queue have events in them, and calls the api.SendEvent() function with the event, and that api function is very dynamic cuz the structure of event payload itself is very dynamic so all types of events can be sent from that small function and the coolest part about this whole pipeline is that it follows best practice of code, each function does only one thing, the collector just collects and emits the event, the event function only adds event to queue, then event worker runs api function with those events, everything is so organised!!! and the feed is semi-live, it just polls every 10 seconds. i REALLY had fun coding this lmao i love go :3 next: probably more processes related events or logs"}, {"post_id": 7373, "ts": "2026-06-12T09:10:49Z", "hours": 5.0419, "text": "Events endpoints and display problem i faced wow this was a pain T___T so basically when i started working on the backend to receive events from lilbro i planned something like this lil bro -> gets logs -> normalizes and understands it -> sends to backend -> dashboard displays it and i created the neccessary endpoints and database tables schemas what not bruh and halfway through i realized: “damn what about logs??” and it snapped. i realized i wasted like 2 hours on this cuz this system was absolutely trash and not afforadable on resources wise cuz we cant shove a whole detection engine in agent, and we gotta think about it from analyst side too cuz they gonna see logs for investigations and cant just depends on pre-build event types better system so then i decided to go with this kinda system: agent will see logs -> normalizes them -> sends to backend with logs and events in this kinda structure: { \"id\" : 1 , \"host\" : { \"id\" : \"\" , \"hostname\" : \"\" }, \"log\" : { \"source\" : \"\" , \"raw\" : \"\" , \"ingested_at\" : \"\" }, \"event_type\" : \"\" , \"context\" :{}, \"created_at\" : \"\" } , this would allow the backend to store the events and also the logs related, it also allows saving events with logs cuz not every event is made from a log and i think this is a nice system, cuz now we can show logs, events, and have a detection engine in backend to create alerts based on rules so to build this i created: Logs table, stores logs Events table, stores events with log ids /events/ - global event feed POST /agents/id/event - endpoint for agents to send events and on the dashboard side i have made /events which displays all events from all hosts in a table, it also has a filter for selecting hosts and/or event types, and also a limit. next next i will be working on sending events from lil bro"}, {"post_id": 5085, "ts": "2026-06-08T19:29:37Z", "hours": 1.5992, "text": "Agents details page so added /agents/[id] in dashboard, which required the same in backend too so i created the /{id} route in backend annd did the SQL magic to get the data, and also moved the schemas into their own folder cuz it was looking hella messy. i am using basic cards in displaying agents data, the top cards are mock data for now but soon i will addd real data in them, currently it looks like this."}, {"post_id": 4846, "ts": "2026-06-08T11:39:46Z", "hours": 1.3797, "text": "Agents Table so i made /agents and it displays the online agents in a nice table! i used the shadcn table component to make that, it fetches /agents/ on backend every 10 seconds and gets the data ofc handling with the goat tanstack query. one stupid thing i encountered was the fact that i was not handling the agent status in backend properly, once it turned online it forever stays online so i went to work on that first and found out that its lowk not a good idea to update and store the online/offline status on database, better way would be to just use last_seen and check if the agent’s last heartbeat was more than 2 minutes ago, if thats true just make the json data display “offline” in /agents endpoint, ez. i will ofc add more status types so i will handle it in a better way, but thats in future. and one more stupid thing i came across, and boy call me an idiot cuz i was PULLING my hair trying to figure out why the table wont update even after the backend endpoint is giving correct status, i thought so many things like cache and shit 😭️ and after like 20 minutes i saw that instead of refetch_interval: 10000 which is 10 seconds, i accidently made a typo and set it to 100000 which is 100 seconds 😭️ well it works now, and works good. next: event storage setup probably?"}, {"post_id": 4395, "ts": "2026-06-07T18:31:31Z", "hours": 1.0978, "text": "Counting Agents so time to show real data on dashboard first i installed tanstack cuz i am not going to fetch everywhere the same data, tanstack query will fetch, cache, store, refetch and handle all that, its a server state management lib. so using tanstack i created the neccessary functions for it to query the server and created the dashboard card component which will display the number of agent. i am also using shadcn skeleton to show the loading part. here’s how the cards look next: agent table"}, {"post_id": 4217, "ts": "2026-06-07T13:31:38Z", "hours": 3.1961, "text": "Woah hella changes Dashboard shell: first version so i made this as first version, took a lot of time cuz i am super trash in frontend, like SUPER trash and i didnt wanted to use AI on it. so after more than a whole hour i completed the first version. it was so hard to make the collapsing thingy work because the style will always mess up and wont go properly inside when clicked on collapsed button. after a shit ton of effort it looked okay and was done. the first image is how the first version looked Dashboard shell: final version after showing my friend and he gave it 2/10, and it trigged my seeking perfection self 💔️ and friend suggested tweakcn for shadcn colors and told me to use sidebar 8 of shadcn sidebar (i didnt even know sidebars existed in shadcn lmao) so i used that and hella time on that too cuz it was still complicated a bit, shadcn gave so many files i was lowk confused which type of nav to use for what things, but at the end it worked and looks beautiful and better! second image is the current one! Other minor changes added cors and stuff in backend so it allows request from dashboard, its just localhost for now but will have to find a permanent solution to that next thing i will do is display the lil bros info"}, {"post_id": 1391, "ts": "2026-06-03T12:16:57Z", "hours": 1.1761, "text": "heartbeats 💓 now the lil bro (agent) can send heartbeats! wow so i am new to go and just discovering the beautiful package based folder structure, makes a lot of sense! so i made a function to send api request to, a function to construct heartbeat by getting system info and UUID is passed from GetConfig() function, and a function to get sys info which includes hostname, os name, and kernel version at first i thought of adding os version instead but getting os version was kinda a pain so i just switched it to kernel version, might add os version later image 1: heartbeats being sent image 2: data from postgres, you can see the registered_at vs last_seen (which gets updated from heartbeats)"}, {"post_id": 952, "ts": "2026-06-02T18:35:42Z", "hours": 1.0694, "text": "GO GO LIL BRO making the lil bro (agent) with go! so i setup the go environment, i am actually a beginner in go lol i am using this project as an excuse to learn go :3 so i wrote some basic code in main.go to get started, and made internals/config.go which has 3 functions EnsureConfig() , CreateConfig() , and GetConfig() , when the code runs it checks with ensure function and creates new config if not found in ~/.config/lilbro/config.json . and Get config is just get config lol, using simple json marshalling with go the screenshot shows the config file that got saved"}, {"post_id": 771, "ts": "2026-06-02T13:09:57Z", "hours": 1.1258, "text": "Heartbeats on backend! so the lilbros (agents) will send heartbeats every few minutes and to handle that i first made a /register endpoint where the agents will first register and then start sending hearbeats but then thought that agents will also restart and i will have to treat their registration attempt as heartbeat, so there a thin line between /register and /heartbeat so i just merged them into /heartbeat lol so now agent generates a UUID locally and sends it along side other metadata about the system to backend, and backend checks if the agent exists then it just updates the last_seen in database and other metadata and if it doesnt then it creates a new agent, simple as hell again, dont have much to show right now as no UI lol"}, {"post_id": 438, "ts": "2026-06-01T20:54:14Z", "hours": 0.7908, "text": "Switched to SQLAlchemy from psycopg hi i am back did it because i started working on /agents/registration endpoint but the psycopg.connect(…) bla bla looked hella weird everywhere so i just ragequit and installed SQLAlchemy, then made the models (only agent table for now) and setup a simple function get_db() to get a quick db session, fixed my problem ezzz not using alembic rn tho, will do in future i dont have anything to show so i will just show this ig?"}, {"post_id": 398, "ts": "2026-06-01T19:41:40Z", "hours": 1.6497, "text": "HIIIIII, first dev log! so i started working on the docker setup first so i can spin up a postgres container, so i wrote a docker compose file, also had some problems cuz postgres-18 wouldnt take the /var/lib/bla/bla path, that was a small issue tho fixed that quick. then i started working on the connection part so i used psycopg on python backend to connect to my pgsql container after that i had to make tables, which took the most time lmao cuz it was hard to decide how should i do it, first i thought i should use SQLAlchemy and the whole database migration setup but that felt too much for now, so i went the usual way using psycopg and decided to create tables using CREATE TABLE IF NOT EXISTS , even with that my dumb ahh spent time making sure if i wrote the init_db() function the best way lmao, but at the end it worked nice and created the table after that i just setup fastapi and created / endpoint which just returns “hello fellas :3”"}]...
|
Title: Big Brother by @kingvon | Stardance
Devlog Title: Big Brother by @kingvon | Stardance
Devlogs:
HIIIIII, first dev log! so i started working on the docker setup first so i can spin up a postgres container, so i wrote a docker compose file, also had some problems cuz postgres-18 wouldnt take the /var/lib/bla/bla path, that was a small issue tho fixed that quick. then i started working on the connection part so i used psycopg on python backend to connect to my pgsql container after that i had to make tables, which took the most time lmao cuz it was hard to decide how should i do it, first i thought i should use SQLAlchemy and the whole database migration setup but that felt too much for now, so i went the usual way using psycopg and decided to create tables using CREATE TABLE IF NOT EXISTS , even with that my dumb ahh spent time making sure if i wrote the init_db() function the best way lmao, but at the end it worked nice and created the table after that i just setup fastapi and created / endpoint which just returns “hello fellas :3”
Switched to SQLAlchemy from psycopg hi i am back did it because i started working on /agents/registration endpoint but the psycopg.connect(…) bla bla looked hella weird everywhere so i just ragequit and installed SQLAlchemy, then made the models (only agent table for now) and setup a simple function get_db() to get a quick db session, fixed my problem ezzz not using alembic rn tho, will do in future i dont have anything to show so i will just show this ig?
Heartbeats on backend! so the lilbros (agents) will send heartbeats every few minutes and to handle that i first made a /register endpoint where the agents will first register and then start sending hearbeats but then thought that agents will also restart and i will have to treat their registration attempt as heartbeat, so there a thin line between /register and /heartbeat so i just merged them into /heartbeat lol so now agent generates a UUID locally and sends it along side other metadata about the system to backend, and backend checks if the agent exists then it just updates the last_seen in database and other metadata and if it doesnt then it creates a new agent, simple as hell again, dont have much to show right now as no UI lol
GO GO LIL BRO making the lil bro (agent) with go! so i setup the go environment, i am actually a beginner in go lol i am using this project as an excuse to learn go :3 so i wrote some basic code in main.go to get started, and made internals/config.go which has 3 functions EnsureConfig() , CreateConfig() , and GetConfig() , when the code runs it checks with ensure function and creates new config if not found in ~/.config/lilbro/config.json . and Get config is just get config lol, using simple json marshalling with go the screenshot shows the config file that got saved
heartbeats 💓 now the lil bro (agent) can send heartbeats! wow so i am new to go and just discovering the beautiful package based folder structure, makes a lot of sense! so i made a function to send api request to, a function to construct heartbeat by getting system info and UUID is passed from GetConfig() function, and a function to get sys info which includes hostname, os name, and kernel version at first i thought of adding os version instead but getting os version was kinda a pain so i just switched it to kernel version, might add os version later image 1: heartbeats being sent image 2: data from postgres, you can see the registered_at vs last_seen (which gets updated from heartbeats)
Woah hella changes Dashboard shell: first version so i made this as first version, took a lot of time cuz i am super trash in frontend, like SUPER trash and i didnt wanted to use AI on it. so after more than a whole hour i completed the first version. it was so hard to make the collapsing thingy work because the style will always mess up and wont go properly inside when clicked on collapsed button. after a shit ton of effort it looked okay and was done. the first image is how the first version looked Dashboard shell: final version after showing my friend and he gave it 2/10, and it trigged my seeking perfection self 💔️ and friend suggested tweakcn for shadcn colors and told me to use sidebar 8 of shadcn sidebar (i didnt even know sidebars existed in shadcn lmao) so i used that and hella time on that too cuz it was still complicated a bit, shadcn gave so many files i was lowk confused which type of nav to use for what things, but at the end it worked and looks beautiful and better! second image is the current one! Other minor changes added cors and stuff in backend so it allows request from dashboard, its just localhost for now but will have to find a permanent solution to that next thing i will do is display the lil bros info
Counting Agents so time to show real data on dashboard first i installed tanstack cuz i am not going to fetch everywhere the same data, tanstack query will fetch, cache, store, refetch and handle all that, its a server state management lib. so using tanstack i created the neccessary functions for it to query the server and created the dashboard card component which will display the number of agent. i am also using shadcn skeleton to show the loading part. here’s how the cards look next: agent table
Agents Table so i made /agents and it displays the online agents in a nice table! i used the shadcn table component to make that, it fetches /agents/ on backend every 10 seconds and gets the data ofc handling with the goat tanstack query. one stupid thing i encountered was the fact that i was not handling the agent status in backend properly, once it turned online it forever stays online so i went to work on that first and found out that its lowk not a good idea to update and store the online/offline status on database, better way would be to just use last_seen and check if the agent’s last heartbeat was more than 2 minutes ago, if thats true just make the json data display “offline” in /agents endpoint, ez. i will ofc add more status types so i will handle it in a better way, but thats in future. and one more stupid thing i came across, and boy call me an idiot cuz i was PULLING my hair trying to figure out why the table wont update even after the backend endpoint is giving correct status, i thought so many things like cache and shit 😭️ and after like 20 minutes i saw that instead of refetch_interval: 10000 which is 10 seconds, i accidently made a typo and set it to 100000 which is 100 seconds 😭️ well it works now, and works good. next: event storage setup probably?
Agents details page so added /agents/[id] in dashboard, which required the same in backend too so i created the /{id} route in backend annd did the SQL magic to get the data, and also moved the schemas into their own folder cuz it was looking hella messy. i am using basic cards in displaying agents data, the top cards are mock data for now but soon i will addd real data in them, currently it looks like this.
Events endpoints and display problem i faced wow this was a pain T___T so basically when i started working on the backend to receive events from lilbro i planned something like this lil bro -> gets logs -> normalizes and understands it -> sends to backend -> dashboard displays it and i created the neccessary endpoints and database tables schemas what not bruh and halfway through i realized: “damn what about logs??” and it snapped. i realized i wasted like 2 hours on this cuz this system was absolutely trash and not afforadable on resources wise cuz we cant shove a whole detection engine in agent, and we gotta think about it from analyst side too cuz they gonna see logs for investigations and cant just depends on pre-build event types better system so then i decided to go with this kinda system: agent will see logs -> normalizes them -> sends to backend with logs and events in this kinda structure: { "id" : 1 , "host" : { "id" : "" , "hostname" : "" }, "log" : { "source" : "" , "raw" : "" , "ingested_at" : "" }, "event_type" : "" , "context" :{}, "created_at" : "" } , this would allow the backend to store the events and also the logs related, it also allows saving events with logs cuz not every event is made from a log and i think this is a nice system, cuz now we can show logs, events, and have a detection engine in backend to create alerts based on rules so to build this i created: Logs table, stores logs Events table, stores events with log ids /events/ - global event feed POST /agents/id/event - endpoint for agents to send events and on the dashboard side i have made /events which displays all events from all hosts in a table, it also has a filter for selecting hosts and/or event types, and also a limit. next next i will be working on sending events from lil bro
Process Collector and Event Feed I’ve been waiting for this lol this is was so fun cuz i was locked the hell in okay so hear me out so in agent i made a very basic process collector which has 2 maps and every 10 seconds it updates the currProcesses map and compares it with prevProcesses the resulting differences are the process created/terminated. basic stuff. and then after that it creates an event struct and uses the event.Emit() function which just adds the event to a queue (go channel), and another function RunEventWorker() just has a loop which runs till events queue have events in them, and calls the api.SendEvent() function with the event, and that api function is very dynamic cuz the structure of event payload itself is very dynamic so all types of events can be sent from that small function and the coolest part about this whole pipeline is that it follows best practice of code, each function does only one thing, the collector just collects and emits the event, the event function only adds event to queue, then event worker runs api function with those events, everything is so organised!!! and the feed is semi-live, it just polls every 10 seconds. i REALLY had fun coding this lmao i love go :3 next: probably more processes related events or logs
More Details in Process Event yeah just the title, not much tonight as i have to study so before this it was just PID and Name of process, which is useless, so i made it store this instead: type ProcessInfo struct { PID int PPID int Name string CmdLine string User string Cwd string CreateTime string } and i made the event table in dashboard show only first 2 fields in context and just say “+x more” at the end. next will be a sheet component to show the events in detail
Per-event info so i added a Sheet component from shadcn, which shows all the info of event like context and all the stuff not much just this, and uhhh it was a pain yeah every frontend thing is a pain.
Detections lol this was fun too the entire detection pipeline so basically i started Detections work to complete the SOC pipeline (agent -> events -> detections) and since i have no rule engine setup yet so i hardcoded a Sus Process rule in detection function it bascially checks events within a time window of 30 seconds and checks their name for sus process names (which is just an array for now) and the detection function runs on a Background Scheduler every 30 seconds in backend (not agent, i dont want) and after that it stores the detection in the Detections table which stores things like: Rule Name, Triggered Events, Context, Status, etc and the end it is displayed beautifully (i love this so much T___T) on the dashboard thingys made Backend: Detection model, schemas, etc /detections/ - gives list of all detections /detections/{id} - gives the specific detection Dashboard: /detections - shows the all the detections in a table, needs more stuff like filter /detections/[id] - shows detection detail (looks REALLY good) Next see the obvious next step is a rule system to store detection rules but i wont do that, see i am planning to add 2 types of rules just like all the SOC, they are: directing matching rules and threshold based rules and i will build both at once but there is nothing yet which can be used with threshold based rules, and i dont want to edit the rule system again and again so i am planning to make authentication based events first and then work on rules, then process events can be tested with direct matching rules and authentication events can be tested with threshold based rules like SSH Brute force attack
SSH Auth Log Pipeline damn it was easier than i thought so i made the complete SSH authentication failure and success events pipeline __ what happens is the lil bro (agent) reads the systemd journal logs (yes it only supports this for now T__T) by executing the command journalctl -f -u sshd -o json --since now which basically makes it run the journalctl like tail command so it streams out the logs only when they are ingested. __ the logs are in JSON format which then gets is handled by Auth Collector in agent, which has parser functions for password failure and success then its just the normal event pipeline (create event -> send to queue -> worker sends the event to backend) after that it is displayed on dashboard next threshold based rules (first hardcoded, then proper rule table and stuff)
Entire Rule Engine and Detection Pipeline lol big update, lemme go in chronological order what i did Bug fixes so i fixed a bug in SSH Pipeline where it was trying to send an event for EVERY journal ingestion which is not what i want because not every sshd journal log is important, so i added a check where if the log isnt about password failed or accepted then it wont ignore it. __ i also added Rule Name column in detection table which i forgot to add. Rule Engine setup so in this “setup” i made the database table and seeded it with 2 rules manually so i can make the detection functions first. ofc the two rules were the Sus Process match type rule and SSH Bruteforce threshold type rule. __ the detection engine is just the previous hardcoded one but now works with database variables, it still has the same the group by checking for threshold based rules, and for match rules i made the input be command seperated for example the values to be matched with can be nc, netcat, ncat, nmap Rule CRUD Endpoints created 5 endpoints on backend GET /rules/ - lists all rules POST /rules/ - creates rule PATCH - /rules/id - update a rule DELETE - /rules/id - delete a rule PATCH - /rules/id/toggle - toggle on a rule, small thing so made a seperate endpoint Dashboard created pages: /rules - shows rules table /rules/new - creates new rules Pending things: /rules/id page on dashboard, will do that later with rule updating feature Next: probably more types of events or config improvement, not decided.
Standardized Context Fields and Timestamps so the way these two things were really messy lol in process info i had the go struct PascalCase context fields and in auth info i had snake_case context fields so i made snake_case the standard way __ and all the timestamps were timezone-naive which was really bad and there were conflicts in places, so i made all the columns timezone aware and migrated the existing tables to timestampz columns and now in frontend i am converting it to local timezone in the screenshot you can see two timestamp, one is UTC and the other is IST because i am converting it to local timezone on frontend instead of handling that stuff on backend, cuz well the agents could be hosted on any system across the globe note: the second timestamp is old, dont assume its same time just different timezones
Containerization buzz word lmao basically i updated the docker compose files and made everything easily spin up with docker compose and that was like 20m of work, the rest was a fight between me vs pnpm security features and pyscopg2 building lmao
Noise Filtering in Process Collector so i already had this but it was a bit stupid so i improved it, its still stupid but less stupid lol __ so right now it has bigger and more lists of stuff to ignore and it also checks for parent-child relation like kitty -> zsh and other terminals opening a shell cuz thats common, and it also ignores the processes fired by kernel for small things, and many other stuff, you check a list of stuff it ignores in lilbro/internal/collectors/processes/filter.go __ umm i dont have anyting to show as its a filtering a function i implement and wtf i am supposed to show, so have a look at this snapperd process lol
Status Update in Detection so i have added other statuses in detections, which are: resolved , investigating , fase positive and i made a dropdown button component to update the status, making it was lowk creative lmao i didnt think i would be pull that off...
|
1792641237.9594507
|
1793246037.9594507
|
|
142
|
testing by @clofour | Stardance
|
clofour
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: testing by @clofour | Stardance
|
1792590677.4653811
|
1793195477.4653811
|
|
141
|
Untitled project by @lino | Stardance
|
lino
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @lino | Stardance
|
1792709372.0567842
|
1793314172.0567842
|
|
140
|
TablissNG by @BookCatKid | Stardance
|
BookCatKid
|
0
|
3.35
|
0
|
[]
|
[{"post_id": 3239, "ts": "2026 [{"post_id": 3239, "ts": "2026-06-06T02:12:45Z", "hours": 1.1469, "text": "New release again :) The last release had some major issues (they weren’t that big but whatever) and I had to fix all of those and release a new version 1.7.1. Pretty much just some translation, backgrounds, and trello fixes to make sure that everyone has the best experience. PS: Rate my extension on the stores please! Changelog chore: remove useless translations key and perfect french translation ( 46d4c8f ) Update ko.json (#159) ( 4821b37 ) chore: version 1.7.1 ( 91488e1 ) feat(trello): Labels form and bug fixes (#158) ( 37a5dfa )"}, {"post_id": 1980, "ts": "2026-06-04T07:37:25Z", "hours": 1.5314, "text": "New Release! FINALLY released a new version, its been a really long time, and I feel really bad for it but live happens I guess. I do have to release a hotfix tomorrow though because there are two major bugs in this release 😭. Check out v1.7.0! Changelog: feat(trello): Labels form and bug fixes (#158) ( 37a5dfa ) fix: respect sortOrder during auto-rotation, not just manual navigation ( aeae311 ) chore: huge deps bump ( a027585 ) fix: correctly pass pnpm version to store publish workflow ( 70e9c69 ) chore: version 1.7.0! ( 206a6bf )"}, {"post_id": 93, "ts": "2026-05-31T18:01:53Z", "hours": 0.6767, "text": "First TablissNG Devlog of stardance! I’m super excited to getting back to working on TablissNG, its been a while, I’ve been super busy unfortunately. Since the last devlog in flavortown, I haven’t done much, but I just recently fixed a few tiny bugs and updated the CHANGELOG so the we are ready for release ASAP."}]...
|
Title: TablissNG by @BookCatKid | Stardance
Devlo Title: TablissNG by @BookCatKid | Stardance
Devlogs:
First TablissNG Devlog of stardance! I’m super excited to getting back to working on TablissNG, its been a while, I’ve been super busy unfortunately. Since the last devlog in flavortown, I haven’t done much, but I just recently fixed a few tiny bugs and updated the CHANGELOG so the we are ready for release ASAP.
New Release! FINALLY released a new version, its been a really long time, and I feel really bad for it but live happens I guess. I do have to release a hotfix tomorrow though because there are two major bugs in this release 😭. Check out v1.7.0! Changelog: feat(trello): Labels form and bug fixes (#158) ( 37a5dfa ) fix: respect sortOrder during auto-rotation, not just manual navigation ( aeae311 ) chore: huge deps bump ( a027585 ) fix: correctly pass pnpm version to store publish workflow ( 70e9c69 ) chore: version 1.7.0! ( 206a6bf )
New release again :) The last release had some major issues (they weren’t that big but whatever) and I had to fix all of those and release a new version 1.7.1. Pretty much just some translation, backgrounds, and trello fixes to make sure that everyone has the best experience. PS: Rate my extension on the stores please! Changelog chore: remove useless translations key and perfect french translation ( 46d4c8f ) Update ko.json (#159) ( 4821b37 ) chore: version 1.7.1 ( 91488e1 ) feat(trello): Labels form and bug fixes (#158) ( 37a5dfa )...
|
1792421407.045668
|
1793026207.045668
|
|
139
|
AI by @AK47 | Stardance
|
AK47
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AI by @AK47 | Stardance
|
1792655371.731503
|
1793260171.731503
|
|
138
|
Note taking by @shravs | Stardance
|
shravs
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Note taking by @shravs | Stardance
|
1792536830.956367
|
1793141630.956367
|
|
137
|
WinDurango by @CT5 | Stardance
|
CT5
|
1
|
23.0
|
447
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T01:41:27Z", "hours": 23.0, "multiplier": 19.52, "payout": 447, "blessing": "neutral", "text": "I helped make WinDurango with @Rodrigo_Todescatto2010 and @dexrn . Unfortunatly, Im not able to work on WinDurango anymore, because I switched to MacOS so Im going to have to ship it now. If I do get a windows computer later on, I will continue this project. I mainly did WinRT stuff and got a few games working in WD. Currently, the only version of Minecraft LCE that works is 1.2.0.0. You will need a dumped Xbox One game to test it out.", "repo": "https://github.com/WinDurango/WinDurango", "demo": "https://github.com/WinDurango/WinDurango/actions"}]...
|
[{"post_id": 9042, "ts": "2026 [{"post_id": 9042, "ts": "2026-06-15T02:53:47Z", "hours": 4.4653, "text": "I didn’t have much to do in WD currently, so I decided to create the watchdog process for WD, since it would be needed for the new WD Launcher to pass back errors to the user. Its a pretty simple debugger type of thing for now, but Im going to try and make it a bit better and more readable."}, {"post_id": 4748, "ts": "2026-06-08T06:12:37Z", "hours": 4.1106, "text": "I noticed that the Windows.Xbox.Speech.Recognition idl looked a bit odd and it used stuff from midl2 so I removed the idl and cpp files and pretty much started from scratch. It took me a while to create the idl and get guid and stuff, but setting up the cpp files and tidying it up into 5 files from 30 small file took a lot longer since I had to manually tidy the funcs and add a debugging line to each of them."}, {"post_id": 4218, "ts": "2026-06-07T13:31:47Z", "hours": 4.445, "text": "After a while of debugging Burnout Paradise I was finally able to realise that it was looking for D3D12Device. For some reason it was looking for d3d12 device in a d3d11 dll, so I was considering redirecting it to d3d12. But after a while I just gave up."}, {"post_id": 3347, "ts": "2026-06-06T07:18:39Z", "hours": 2.9467, "text": "We finally migrated to github, and I was able to get Github Actions to work. It also caches the cmake dir so that its faster for newer builds. To get Github Actions to build, I had to install windows sdk 28000 and remove the hardcoded dirs in all the CMakeLists as well as properly migrate to vcpkg."}, {"post_id": 1985, "ts": "2026-06-04T07:50:59Z", "hours": 3.5094, "text": "So I was able to get terraria working which was pretty easy since I just had to implement some DX11 stuff. I implemented config support so that you can change your gamertag and gamerscore as well as your controller binds and your keyboard binds via a json file."}, {"post_id": 45, "ts": "2026-05-31T12:12:19Z", "hours": 3.4203, "text": "I was able to create a stub of windows.kinect so that we could have kinect support and redirect it to Microsoft.Kinect. So far its been working well, but the point of this was to get mc 1.61 to not freeze when playing. It was a lot of repetitive work to get the idl and cpp stubs. The other issue is that mc seems to be giving me the trial version which I need to try and fix. Sonic Mania is completely playable as well which is good."}]...
|
Title: WinDurango by @CT5 | Stardance
Devlogs:
I Title: WinDurango by @CT5 | Stardance
Devlogs:
I was able to create a stub of windows.kinect so that we could have kinect support and redirect it to Microsoft.Kinect. So far its been working well, but the point of this was to get mc 1.61 to not freeze when playing. It was a lot of repetitive work to get the idl and cpp stubs. The other issue is that mc seems to be giving me the trial version which I need to try and fix. Sonic Mania is completely playable as well which is good.
So I was able to get terraria working which was pretty easy since I just had to implement some DX11 stuff. I implemented config support so that you can change your gamertag and gamerscore as well as your controller binds and your keyboard binds via a json file.
We finally migrated to github, and I was able to get Github Actions to work. It also caches the cmake dir so that its faster for newer builds. To get Github Actions to build, I had to install windows sdk 28000 and remove the hardcoded dirs in all the CMakeLists as well as properly migrate to vcpkg.
After a while of debugging Burnout Paradise I was finally able to realise that it was looking for D3D12Device. For some reason it was looking for d3d12 device in a d3d11 dll, so I was considering redirecting it to d3d12. But after a while I just gave up.
I noticed that the Windows.Xbox.Speech.Recognition idl looked a bit odd and it used stuff from midl2 so I removed the idl and cpp files and pretty much started from scratch. It took me a while to create the idl and get guid and stuff, but setting up the cpp files and tidying it up into 5 files from 30 small file took a lot longer since I had to manually tidy the funcs and add a debugging line to each of them.
I didn’t have much to do in WD currently, so I decided to create the watchdog process for WD, since it would be needed for the new WD Launcher to pass back errors to the user. Its a pretty simple debugger type of thing for now, but Im going to try and make it a bit better and more readable.
Ships:
I helped make WinDurango with @Rodrigo_Todescatto2010 and @dexrn . Unfortunatly, Im not able to work on WinDurango anymore, because I switched to MacOS so Im going to have to ship it now. If I do get a windows computer later on, I will continue this project. I mainly did WinRT stuff and got a few games working in WD. Currently, the only version of Minecraft LCE that works is 1.2.0.0. You will need a dumped Xbox One game to test it out....
|
1792972392.2804458
|
1793058792.2804458
|